[ Beispiel ] Zählen von Fenstern und Türen

Beschreibung:
Heute habe ich ein Beispiel wo es ums Zählen geht, ob Fenster Türen oder andere Sachen.

 

Vorraussetzung:

Paket/APP Version
*

 

Schwirigkeitsgrad:
  :eight_spoked_asterisk: :eight_spoked_asterisk: :eight_spoked_asterisk: :asterisk: :asterisk:
 
 

image

if($msg['payload'] == true){
$msg['payload'] = getFlowData('WindowCount')-1;
return $msg; 
}

In den Funktions Nodes befindet sich lediglich eine Abfrage auf True sowie einmal Addieren einmal Subtrahieren oder alles auf 0 setzen. Im Template könnt Ihr dann eure Nachrricht eintragen die gesendet wird wenn alle Fenster geschlossen sind.

 
Namen der Fenster Ausgeben:
Da die frage wahrscheinlich sowieso kommt, hier noch wie ihr herausbekommt welche Fenster offen sind. Da Ihr wieder zu Faul seit um eure Füsse zu bewegen und nachschauen :crazy_face:. Deshalb habe ich bzw. in diesem fall @pstebbe mal was vorbereitet :).

image

$category = 5;
$devices = $hg->getDevicesInCategory($category);

foreach ($devices as $peerID) {
    try {
        if ($hg->getValue($peerID, 1, 'ONOFF')) {
            $openWindows[] = "- " . $hg->getName($peerID) . "\n";
        }
        continue;
    } catch(Exception $e) {
        //
    }
    
    try {
        if ($hg->getValue($peerID, 1, 'STATE')) {
            $openWindows[] = "- " . $hg->getName($peerID) . "\n";
        }
        continue;
    } catch(Exception $e) {
        //
    }
}


$msg['date'] = $date = date('d.m.Y', time());
$msg['payload'] = ($openWindows ? implode('', $openWindows) : false);
$msg['count'] = count($openWindows);
$msg['devices'] = $openWindows;
return $msg;

Als erstes müsste Ihr alle Fensterkontakte die überprüft werden sollen, einer Gruppe zuordnen. Und die GruppenID in der Funktion’s Node, in die $category variable eintragen. Anschliessend werden euch alle Offenen Fenster ausgegeben die Ihr euch dann zb. Per Push senden könnt.

$category = 5; 

 
ALL IN ONE
image

$category = 3;
$devices = $hg->getDevicesInCategory($category);
$count =0;
foreach ($devices as $peerID) {
    try {
        
        if ($hg->getValue($peerID, 1, 'STATE')) {
                $openWindows[] =$hg->getName($peerID);
        }
        continue;
    } catch(Exception $e) {
        //
    }
}
$msgOpenWindows['date'] = $date = date('d.m.Y', time());
$msgOpenWindows['payload'] = count($openWindows);
$msgOpenWindows['devices'] = $openWindows;
$msg['date'] = $date = date('d.m.Y', time());
$msg['payload'] = json_encode ($openWindows);
$msg['devices'] = $openWindows;
output(1, $msgOpenWindows);
output(0, $msg);

Hier ist noch eine ALL IN ONE Lösung wo in Ausgang 0, alle Fensterbezeichnungen als Json Array Ausgegben werden. Und in Ausgang 1 die Zahl der Offenen Fenster.

 
 

Hier noch der Flow als Json:
OpenWindows.json (20,9 KB)
Allinone.json (2,5 KB)

 

Wie immer Viel Spaß
Gruß
Michael
 


Weitere Beispiele Link
Und hier findest Ihr Video Tutorials für die Smartha Home Zentrale Link
Und hier findest Ihr Video Tutorials für die Smartha APP Link

3 „Gefällt mir“

Hallo!
Danke für das funktionierende Beispiel. Ich weiß nicht, ob die TFK von Homematic schon mal prellen, aber bei mir stimmt der Zähler hin und wieder nicht. Alternativ kann man es auch so lösen, zumindest läuft es bei mir so stabil.

Fenster_zaehlen

1 „Gefällt mir“

Hi,
schön das auch jemand mal was bei den Beispielen schreibt ;), ich habe das ganze ja angefangen das ein Ideenaustausch möglich ist bzw. das jeder selbst einen Ansatz für eigene Ideen hat. Ich habe mich schon gefragt ob überhaupt Interesse an den Beispielen besteht.
Ja Homematic ist was Status angeht immer etwas eigen, das stimmt.

Gruß
Michael

Hallo Michael,
ich finde die Beispiele sehr informativ und man hat damit schon mal einen Ansatz wie man beginnen kann.
Eventuell kann du ja mal Beispiel zum Thema „if wenn schleife“ machen und zwar wenn ich verschieden Kriterien abfragen möchte und nicht viele passthrough node verwenden möchte.
Als per function node damit der flow im Aufbau kleiner wird.
So ein Beispiel wie,
IF Fensterstatus „geschlossen“ oder „offen“ bei offen stop,
If „Jahreszeit (Winter, Sommer usw.) ,
If Raumtemperatur zwischen 16 … 24 dann mache x
If Raumtemperatur zwischen 25 … 30 dann mache x

Volker.

Hi,
Das dazwischen ist ganz einfach das ist sogar schon in der Switch Node.
image
dann bekommst du ein True raus und kannst damit machen was du willst ;).

und das mit dem Fenster offen oder Geschlossen ist genauso einfach mit switch
image
dann hast du bei Ausgang 0 die Aktion für True und bei Ausgang 1 Für False.

Das mit dem Sommer Winter ist nicht so einfach :wink: da könnte ich wirklich ein grösseres Beispiel machen das Passt sogar in eine Idee die ich schon habe da Packe ich das mit dazu das dauert aber noch ein etwas ;).

Die Switch Node ist dein IF THEN ELSE Node um genau zu sein ;).

Gruß
Michael
PS: Für Ideen für Beispiele bin ich aber Trodstem dankbar ich kann nicht versprechen das ich alles umsetze. Aber um so mehr vorhanden ist um so länger kann ich das machen ;).

Ja so nutze ich das auch. Aber viel Switch Node und passthrough node in einem flow und man verliert schnell den Überblick.
Ich versuche es in einer oder zwei function node zu bringen.
War aber nur nee Idee.

Zu der Sommer Winter Problematik, ich habe ein Skript das auf einer CCU rennt und dies in eine variable von Type „Werteliste“ schreibt.
Nur leider liest der Knoten “ hm-sysvars-in“ das nicht korrekt. Der knoten liest die Werte aus aber nicht den Wert der gesetzt wurde.
z.B.
in der CCU
grafik

ausgelesen per „hm-sysvars-in knoten“ :

grafik

es sollte aber 3 : Winter sein.

Eine Idee ?

Danke
Volker

Guten Morgen,
das ist eine Idee für ein Beispiel mal schauen ob man das umsetzen kann, ich schreib das mal in meine Liste.

Gruß
Michael