Einführung in Flow "Programmierung"

Für einen Anfänger wie mich ist die Flow Programmierung ohne eine Einführung/Primer sehr mühsam.
Die Dokumentation für NodeRED ist zwar gut, aber für NodeBLUE konnte ich nicht viel finden.

Vorschlag: einen Primer oder ein Wiki, dann können alle mitarbeiten.

Hallo,

sowas ist in der Planung. Vorerst können wir z.B. dieses Thema dafür nutzen, um z.B. Flows zu veröffentlichen.

Gruß Eddy

Hi,

inwiefern unterscheiden sich NodeRED zu NodeBLUE ?
Anleitungen zu Node Red gibt es ja einige z.B.
https://haus-automatisierung.com/nodered-tutorial-reihe/

Hi Thomas,

das Grundprinzip, also der Flow-basierte Ablauf, ist bei beiden gleich. Node-BLUE ist im Prinzip Node-RED in C++ … somit also auch multi-Threaded (es koennen mehrere Flows parallel abgearbeitet werden und ein “haengender” Flow blockiert nicht gleich alles). Weiterhin gibt es in Node-BLUE auch noch fertige Logik-Knoten die mit Node-RED so nicht realisierbar sind, in Funktions-Knoten kann mit PHP programmiert werden anstatt JavaScript, und es gibt vorgefertigte Knoten fuer spezielle SmartHome-Anwendungen (z.B. Lichtsteuerung).

Node-BLUE laesst sich allerdings nicht zur “Programmierung” von Dashboards verwenden (so wie es in den Node-RED Beispielen z.T. der Fall ist).

– Micha

1 „Gefällt mir“

Nachtrag: in Node-BLUE kann man keine fertigen Node-RED Nodes / Flows verwenden …

– Micha

Hallo zusammen,

ich kann euch gerne ein paar Beispiele hier posten, was waere denn grundlegend von Interesse?

– Micha

Hallo Micha.

Mit folgenden Themen beschäftige ich mich im Moment:

a) https Befehl senden - z. B. an IFTTT. Http funktioniert, aber https leider nicht. Brauche ich aber, wegen des keys.

b) Anzahl der offenen Fenster (dh Summe aller offene Fensterkontakte)

c) Alle Hue Lights ausschalten

d) Lesen und schreiben einer Array Systemvariablen

e) Nutzung der Push Node (an Smartphone) in Verbindung mit Cloudmatic

f) Erzeugen eines Timers, der von morgens 6:00 bis abend 23:00 immer zu den Minuten 05 25 35 55 ein signal setzt.

Gruß, Henning

Hallo @Henning,
ich bin zwar nicht Micha aber ich darf mich bei dem Namen auch angesprochen fühlen ;).

Eine frage wie steht es bei dir mit PHP Programmierung ?

Folgende dinge sind in meinem Tutorial verwendet und einfach einzusehen. Ich gebe bei den dingen die dort erklärt sind nur den auszug aus den Funktions nodes die relevant sind. In meinem Tutorial hast du ja den kompletten flow mit Beispiel.

d) Lesen und schreiben einer Array Systemvariablen

Setzen:

$hg->setValue(0, -1, "Presence_Data", $array); // Letzte Aktivität mit allen Daten

Dementsprechend Get:

$array=$hg->getValue(0, -1,"Presence_Data");

e) Nutzung der Push Node (an Smartphone) in Verbindung mit Cloudmatic

Auch dies ist bei mir verwendet:

    $message['event'] ="Zone ".$array[7]." betreten";
    $message['payload']="Sie haben die Zone ".$array[7]." um ".$array[1]." betreten.";
    ......
    return $message;

Durch das return wird es dann an das cloudmatic Push weitergegeben und der event text und payload text ersetzt den API key musst du allerdings noch eintragen dieser wird dir bei der Push Einrichtung per email zugesendet. ( Also das geht nur mit der Beta version von der Cloudmatic APP ). Alternativ kannst du auch alles direkt in die Push node eingeben das geht ohne Probleme ist aber weniger Dynamisch.

b) Anzahl der offenen Fenster (dh Summe aller offene Fensterkontakte)

zu dieser frage einfach die variablen auslesen über eine funktions node und zählen dann die zahl ausgeben ;).


$offene_fenster=0;
$fenster1=$hg->getValue(0, -1,"fenster1");
if($fenster1 =="true"){
  $offene_fenster++;
}

$message['payload']=$offene_fenster;
return $message;

Und das dann in einer schleife oder für jedes Fenster, und am ende bekommst du die Zahl zurück.

f) Erzeugen eines Timers, der von morgens 6:00 bis abend 23:00 immer zu den Minuten 05 25 35 55 ein signal setzt.

Dies geht mit einer clock node die du mit einer Funktons node verbindest und da dann die zeit ausliest und verwendest und einfach zu den entsprechenden minuten ein fach ein True ausgibst und sonst ein False.

Zu A und C kann ich dir leider keine Antwort geben für A bin ich zu faul ;).
und C sollte eigentlich doch eine group 0 vorhanden sein und verwendet werden können über das HUE Module. Ansonsten kannst du auch einfach die gruppen der Räume auswählen und setzen.

Wenn dir meine antworten nicht reichen sag einfach bescheid, ich wollte nur nicht gleich mit screenshots und komplett Erklärung anfangen ;).

Gruß
Michael

1 „Gefällt mir“

Vielen Dank! Langsam verstehe ich das Prinzip. Hier ist mein “lernflow” für Test auf Feiertag. Karfreitag ist getestet und funktioniert - ich hoffe, die anderen auch. Array und liste habe ich zu Lernzwecken beide verwendet. Jeden Tag um 00:05 wird geprüft, ob ein Feiertag ist und dann die Systemvariable gesetzt. Die Feiertage sind für Bayern (München).

image

holidays.json (4,2 KB)

Hallo zusammen,

a) muss ich testen, kann ich aus’m Stand grad nix zu sagen (evtl. ein Bug).
Zu b) gibt es sogar einen einfacheren Weg: man packt sich alle TFKs in eine eigene Gruppe. Dann kann man per Function-Node alle Devices innerhalb der Gruppe ganz einfach abfragen und muss nicht alle manuell einfuegen. So mache ich es z.B. fuer meinen LOWBAT-Check:

$category = 2;
$devices = $hg->getDevicesInCategory($category);
foreach ($devices as $key => $device) {
    $paramset = $hg->getParamset($device,0,"VALUES");
    // get paramset to check if it's HM or HmIP
    if (array_key_exists("LOWBAT",$paramset)) {
        if ($hg->getValue($device,0,"LOWBAT")) {
            $lowbat[] = $hg->getName($device);
        }
    } elseif (array_key_exists("LOW_BAT",$paramset)){
        if ($hg->getValue($device,0,"LOW_BAT")) {
            $lowbat[] = $hg->getName($device);
        }
    }
}
$message['date'] = $date = date('d.m.Y', time());
$message['payload'] = ($lowbat ? implode(', ',$lowbat) : false);
return $message;

Sollte ohne Probleme fuer STATE uebertragbar sein :wink: Aber Achtung wenn man einen Mix aus HM/HmIP-TFKs hat … die HM senden ein Bool, die HmIP IIRC ein Integer.

c) sollte sich auch ueber eine Gruppe analog realisieren lassen.

– Micha