HomematicioBrokerioBroker Tutorials

ioBroker Homematic Empfangsstärke

In diesem Artikel zeige ich, wie die Empfangsstärke der Homematic Aktoren und Sensoren via Script und XML-API aus Homematic ausgelesen und in ioBroker importiert und visualisiert werden kann.

 

1. XML-API Addon auf der CCU2/RaspMatic installieren

Im ersten Schritt muss auf der CCU2 oder RaspMatic das Addon XML-API installiert werden. Dass Addon kann auf der Homematic-inside Website heruntergeladen werden:
https://www.homematic-inside.de/software/xml-api

Nach der Installation sollte unter der Zusatzsoftware folgendes Addon angezeigt werden:

Im nächsten Schritt habe ich den Aufruf der HTTP Schnittstelle mit dem entsprechenden CGI-Script getestet, um die Werte und den Aufbau der Schnittstelle darzustellen. Dazu wird folgende URL im Browser aufgerufen:

http://<IP-Adresse Homematic/RaspMatic>/config/xmlapi/rssilist.cgi

<?xml version="1.0" encoding="ISO-8859-1" ?><rssiList><rssi device='NEQ1779153' rx='-65' tx='-60'/><rssi device='NEQ1835804' rx='65536' tx='-59'/><rssi device='OEQ0167091' rx='65536' tx='-72'/><rssi device='OEQ0304129' rx='-60' tx='-65'/><rssi device='OEQ0333442' rx='-69' tx='-197'/><rssi device='OEQ0477647' rx='-66' tx='-197'/><rssi device='OEQ0816147' rx='-65' tx='-193'/><rssi device='OEQ0816748' rx='-75' tx='-195'/><rssi device='OEQ1398567' rx='-64' tx='-197'/></rssiList>

In dem XML-Response des CGI-Scripts sind jetzt die einzelnen Device-IDs sowie die Empfangs- und Sendestärke (rx und tx) zu erkennen.

 

2. JavaScript Adapter installieren / NPM-Module anpassen

Im nächsten Schritt müssen wir den JavaScript Adapter über die Konfigurationsschaltfläche bearbeiten und bei den zusätzlichen NPM-Modulen das Modul „xml2js“ einfügen. Falls der Adapter noch nicht installiert wurde, muss dieser natürlich zunächst über die Adapter installiert werden. Sollte hier bereits ein NPM-Modul eingetragen sein, kann das Modul mittels einem Komma angehängt werden (mehrere Module mit Komma getrennt).

 

3. Script implementieren

Im nächsten Schritt implementieren wir das Script, welches die Empfangsdaten aus der HTTP-Schnittstelle in den ioBroker übernimmt. Dazu wechseln wir auf die Tab-Lasche Scripte und erzeugen ein neues Script mit folgendem Inhalt:

var link = 'http://192.168.2.104/config/xmlapi/rssilist.cgi';
var request = require('request');
var parseString = require('xml2js').parseString;

function ImportRSSI() 
{
    request(link, function (error, response, body) 
    {
        var xml, result;
    
        parseString(body, function (err, result) 
        {
            for (var i = 0; i < result.rssiList.rssi.length; i++) 
            {
                var Device = result.rssiList.rssi[i].$;

                var DeviceId = Device.device;
                var DeviceTx = Device.tx;
                var DeviceRx = Device.rx;
                
                createState('HMSignalStrength.'+DeviceId+'.tx', DeviceTx, true);
                createState('HMSignalStrength.'+DeviceId+'.rx', DeviceRx, true);
            }
        });
             
    });
}    

ImportRSSI();

Bitte im Script die IP-Adresse der CCU/RaspMatic anpassen, sodass der Aufruf der Schnittstelle funktioniert.

 

Update 03.03.2018:
Wer anstatt der Device-Id den Device-Namen in den Objekten sehen möchte, der kann folgendes Script verwenden:

var link = 'http://192.168.2.104/config/xmlapi/rssilist.cgi';
var request = require('request');
var parseString = require('xml2js').parseString;

function ImportRSSI() 
{
    request(link, function (error, response, body) 
    {
        var xml, result;
    
        parseString(body, function (err, result) 
        {
            var WriteDeviceId = true;
            
            for (var i = 0; i < result.rssiList.rssi.length; i++) 
            {
                var Device = result.rssiList.rssi[i].$;

                var DeviceId = Device.device;
                var DeviceTx = Device.tx;
                var DeviceRx = Device.rx;
                var DeviceName = DeviceId;
                
                var DeviceObject = getObject('hm-rpc.0.'+DeviceId); 
                
                if (DeviceObject != null) 
                {
                    DeviceName = DeviceObject.common.name;
                    DeviceName = DeviceName.replace(/ /g, '_');
                }
                
                createState("HMSignalStrength."+DeviceName+".tx", DeviceTx, true);
                createState("HMSignalStrength."+DeviceName+".rx", DeviceRx, true);
            }
        });
             
    });
}    

ImportRSSI();

 

 

Als Intervall zur Aktualisierung habe ich mal testweise jede Minute definiert, so kann ich das besser testen. Später in der Produktivumgebung würde ich diesen Wert höher setzen, da wir hier nicht jede Minute die Daten auslesen und importieren müssen.

 

4. Daten im Objekt-Browser ansehen

Auf der Tab-Lasche Objekte sehen wir nun im javascript.0 Ordner unter unserem angelegten Ordner „HMSignalStrength“ die einzelnen Geräte sowie die Einträge rx und tx, für die Empfangs- und Sendestärke.

Diese Werte können jetzt beliebig visualisiert werden

 

5. Interpretation der Werte

Die hier angegebenen Werte der rx und tx sind die Empfangs- bzw Sendestärke in dBm (Dezibel Milliwatt).
Die Interpretation der Werte ist denkbar einfach, je niedriger der Wert, desto besser.
Durch die Wahl des Standortes der CCU/RaspMatic lassen sich Werte optimieren, sodass alle Komponenten optimal angebunden sind.

 

6. Fazit

Ich hätte zwar auch schon mit den direkten Werten aus der XML-API feststellen können, ob hier Probleme bei der Sende- oder Empfangsstärke vorliegen, trotzdem war es eine interessante Aufgabe die Werte Plattform-übergreifend in das ioBroker System zu integrieren. Somit habe ich mir das Know-How für weitere XML- oder JSON-Schnittstellen angeeignet, welches ich bestimmt für das ein oder andere Gerät noch gebrauchen kann. Ich hoffe ich konnte mit diesem Artikel dem ein oder anderen Leser weiterhelfen 🙂

 

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

4 Gedanken zu „ioBroker Homematic Empfangsstärke

  • Werner Kania

    Hallo Matthias,
    bei mir läuft der Script nur ein mal. Wenn ich aktualisierte Werte in den Objekten haben möchte, muss
    ich den Script neu starten. Der Grund wird sein, dass ich es nicht verstehe, wie ich „CRON“ genau einbinden muss.

    Antwort
    • Matthias Korte

      Hallo Werner,

      Du kannst im Script oben rechts über die „CRON“ Schaltfläche einen Zeitplan hinterlegen, nach dem das Script aufgerufen werden soll.

      Antwort
  • Michael

    Ich habe zwei Homematic Zentralen.

    Daten aus der ersten werden erfolgreich importiert. Habe auch die zweite Instanz rein bekommen durch die Abänderung bei „hm-rpc.0“ in „hm-rpc.1“.

    Wenn ich nun das Skript kopiere und die IP Adresse anpasse und zusätzlich auch die Zeile mit „hm-rpc.0“ durch „hm-rpc.2“ anpasse, kommt beim starten ein Fehler:

    javascript.0 (19043) script.js.common.-JAVA.Empfangsstärke_HM_Zentrale_EG compile failed:
    at script.js.common.-JAVA.Empfangsstärke_HM_Zentrale_EG:1

    Antwort
  • Stefan

    Hallo Matthias,
    das Skript funktioniert bei mir nun schon längere Zeit einwandfrei.
    Nun möchte ich in VIS bei Überschreiten bestimmter Werte einen ‚Signalbild‘ setzen (‚größer als‘).
    Leider funktioniert das nicht, da die Werte in den Datenpunkten offenbar als String eingetragen werden. Die Datenpunkte bekommen immer den Typ ‚mixed‘.
    Gibt es die Möglichkeit das Skript so zu ändern, dass die Werte als ’number‘ weggeschrieben werden?
    Leider reichen meine JAVA-Kenntnisse dazu nicht aus.

    VG
    Stefan

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert