smarthome-tricks.de

ioBroker – Aufzählungen für das Zählen von offenen Fenstern oder Türen verwenden

In diesem Artikel zeige ich Dir, wie Du eigene Aufzählungen in ioBroker für das Zählen von offenen Fenstern oder Türen nutzen kannst. 

Nach der Installation und Einrichtung von ioBroker verfügt die Installation bereits über eigene Aufzählungen. Diese können über den Bereich links im Menü geöffnet werden. Mit weiteren Adaptern wie z.B. Homematic werden die Aufzählungen erweitert und die Geräte bereits zugeordnet. In meiner Produktivumgebung nutze ich Homematic, eigene Sensoren über MQTT und Xiaomi über den zigbee Adapter. Aus diesem Grund habe ich mich dazu entschieden eine eigenen Aufzählung anzulegen, mit der ich den Status von offenen Fenstern und Türen besser steuern kann.

Verwendete Sensoren:

Im ersten Schritt wechseln wir nun in den Bereich Aufzählungen und legen dort über die Plus-Schaltfläche eine neue Aufzählung an.

Nach dem Klick auf die Plus-Schaltfläche wählen wir hier den Menüpunkt „Benutzerdefinierte Gruppe“ aus.

Im neuen Fenster können wir hier den Name der Aufzählung, oder hier Kategorie genannt, vergeben. Ich lege in diesem Schritt eine Aufzählung mit dem Namen „windowStatus“ an. Nach dem die Aufzählung gespeichert wurde, können wir direkt eine weitere mit dem Namen „doorStatus“ anlegen. Damit können wir nun den Status von Türen und Fenstern getrennt auswerten.

In der Übersicht der Aufzählungen sind nun zwei neue Aufzählungen (Enums…) zu finden.

Im nächsten Schritt müssen wir den JavaScript-Adapter neu starten, sodass die Aufzählungen neu initialisiert werden. Bei mehreren Adaptern, bitte alle JavaScript-Adapter neustarten.

Nach dem wir nun die Aufzählungen angelegt haben, können wir im nächsten Schritt den Datenpunkt der jeweiligen Sensoren von Türen und Fenstern der Funktion „doorStatus“ oder „windowStatus“ zuordnen. Dazu klicken wir bei dem Datenpunkt, der den aktuellen Zustand des Fensters (true=offen, false=geschlossen) speichert, in die Spalte Funktion und wählen dort unsere neue Aufzählung „doorStatus“ oder „windowStatus“ an.



Nach dem wir diese Zuordnung vorgenommen haben, sollten wir den jeweiligen Sensor unterhalb der Aufzählung finden. In meiner Umgebung habe ich die HomeMatic Sensoren den Datenpunkt „STATE“ verwendet. Die Zigbee Sensoren von Xiaomi laufen über den Datenpunkt „is open“.

Nun wechseln wir in den Bereich Skripte. Im Berech Skripte erstellen wir uns ein neues leeres JavaSkript.

Mit dem folgenden Skript-Code können wir nun die zugeordneten Sensoren aus der Auflistung auslesen. In der Schleife werden alle zugeordneten Datenpunkt ausgegeben. Somit können wir per getState() Funktion den aktuellen Zustand ermitteln.

function listEnumDevices() {
  log("Liste der Fenster und Status:");
  var windows = getObject("enum.functions.windowstatus").common.members;
  for(let i = 0; i < windows.length; i++) {
    var Status = getState(windows[i]).val;
    log(windows[i] + " " + Status);
  }

  log("Liste der Türen und Status:");
  var doors = getObject("enum.functions.doorstatus").common.members;
  for(let i = 0; i < doors.length; i++) {
    var Status = getState(doors[i]).val;
    log(doors[i] + " " + Status);
  }
}

listEnumDevices();

Die Ausführung der Funktion bringt nun folgendes Ergebnis:

Im folgenden Skript-Code gehe ich noch einen Schritt weiter. Zum einen zähle ich die offenen Fenster und Türen und schreibe dann das Ergebnis in eigene Datenpunkte. Diese Datenpunkte nutze ich in meiner Visualisierung um damit den Zustand von geöffneten Fenstern und Türen zu visualisieren. Folgende Datenpunkte müssen in den Objekten angelegt werden:

Datenpunkte.0.StatusWindowOpenText (Zeichenfolge, Schreibzugriff)
Datenpunkte.0.StatusDoorOpenText (Zeichenfolge, Schreibzugriff)
Datenpunkte.0.StatusWindowOpen (Zahl, Schreibzugriff)
Datenpunkte.0.StatusDoorOpen (Zahl, Schreibzugriff)

function countOpenWindowsDoors()
{
    var openWindows = 0;
    var openDoors = 0;
      
    // Fenster
    var windows = getObject("enum.functions.windowstatus").common.members;
    for(let i = 0; i < windows.length; i++) {
        var Status = getState(windows[i]).val;
        if ( Status ) { 
            openWindows = openWindows + 1;
        }
    }
    
    // Türen
    var doors = getObject("enum.functions.doorstatus").common.members;
    for(let i = 0; i < doors.length; i++) {
        var Status = getState(doors[i]).val;
        if ( Status ) { 
            openDoors = openDoors + 1;
        }
    } 
    
    var openWindowsText = "Kein Fenster geöffnet";
    var openDoorText = "Keine Tür geöffnet";
    
    if ( openWindows > 0 ) {
        openWindowsText = openWindows + " Fenster geöffnet"; 
    }
    
   
    if ( openDoors > 0 ) {
        openDoorText = openDoors + " Türe(n) geöffnet"; 
    }    

    setState('Datenpunkte.0.Visualisierung.Uebersicht.StatusWindowOpenText', openWindowsText );
    setState('Datenpunkte.0.Visualisierung.Uebersicht.StatusDoorOpenText', openDoorText );        
    setState('Datenpunkte.0.Visualisierung.Uebersicht.StatusWindowOpen', openWindows );
    setState('Datenpunkte.0.Visualisierung.Uebersicht.StatusDoorOpen', openDoors );    
}

$('state(functions=windowstatus)').on(function(obj) {
    countOpenWindowsDoors();
});

$('state(functions=doorstatus)').on(function(obj) {
    countOpenWindowsDoors();
});

countOpenWindowsDoors();

Bei einer Änderung eines Fenster- oder Türstatus kann über den jQuery Selektor eine on-Subscription auf die Aufzählung „windowStatus“ und „doorStatus“ eingerichtet werden um damit automatisch die aktuelle geöffneten Fenster oder Türen zu ermitteln.



In meiner Visualisierung kann ich so den Status der geöffneten Fenster und Türen darstellen. Mehr Informationen zur Visualisierung bekommst Du in meiner Artikel-Serie über die Planung und die Implementierung meiner ioBroker Visualisierung.

Mittels dieser Vorgehensweise ist es auch deutlich leichter neue Sensoren in das Smart-Home einzubinden. Ich werde in Zukunft mehr über Aufzählungen lösen, auch Beleuchtungsszenarien sind damit noch einfach und flexibler handhabbar.

Ich hoffe Dir gefällt der Artikel. Schreibe mir bei Fragen oder Problemen einfach einen Kommentar unter den Artikel oder eine E-Mail ?

Die mobile Version verlassen