Hallo,
da es wenige Beispiele gibt, habe ich mir mal überlegt, Ich mach mal ein Flow VS FlowScripting ( Sorry mir ist kein besser name eingefallen ).
INFO: Hier geht es nicht als Priorität um das Fahren von Rollos sondern ein Beispiel Flow und FlowScripting. Ich hab nur versucht ein Reales Beispiel zu nutzen ;).
Da sich immer alle beschweren ( oder noch beschweren werden ), es gibt nicht so viel Nodes, wie Node-Red, habe ich mal gezeigt das selber denken helfen kann .
Aber mal ehrlich warum schreibt Ihr keine eigenen Nodes für Node-Blue , oder Portiert welche aus Node-Red. Oder muss ich wieder ein McDonalds Menü als Preis aussetzen .
Was ich vor habe ist ganz einfach, eine Komplexere Automations Flow einmal mit minimum an PHP Code ( nur für werte Konvertierung ). Und eine Version wo das gleiche macht nur mit mehr PHP Code. Um mal einen direkten vergleich zu haben.
Was ist übersichtlicher und was Einfacher.
Ehrlich ich weiss es auch nicht deswegen machen ich es ja .
Und es kann gemeinsam entschieden werden :).
Benötigt wird:
- Smartha das ist ja selbstverständlich.
- Rollos die gesteuert werden können ( in meinem fall WIR eWickler ).
- Grundlegende PHP Kenntnisse.
- Und die Motivation es zu machen, und der wille zu lernen .
Dies ist eine etwas Komplexere Node:
um was es geht eine Rollo Steuerung die über OpenWeatherMap, die Temperatur,Wolkenstand ausliest und ansteuert. Denn der Sommer wird wieder heiss, und unsere Hausstiere die alleine in der Wohnung sind sollen ja nicht Leiden, nur weil wir vergessen die Rollos runter zu fahren. Nicht jedes Hausstier kann Rollos runterlasen .
Bedenkt es geht nicht um das Perfekte Rollo script dazu müsste man Lichtsensoren usw. zusätzlich verwenden, leider habe ich keine, zu Teuer und ich Verschenke zu viele Fastfood Menüs für Wettbewerbe ;). Und im Vordergrund ist Flow vs FlowScripting ( langsam gefällt mir der name ).
Daher bitte last Kommentare was alles besser geht mit mehr Hardware, macht einfach einen eigenen Post auf mit den Verbesserungen dann haben alle was davon :).
Anmerkung:
Hiermit erkläre ich das FlowScripting der Offizielle Namen dafür wird !!!
Und wenn es schon einen gibt ist mir das egal .
Part 1
Dieser Teil erklärt sich von Selbst. Mir ist klar dies geht besser aber egal.
Diese Tutorial soll ja nicht alles vorkauen sondern euch auf Ideen bringen :).
Part 2
Hier wird als erstes Luftdruck, Temperatur und Wetter ( Wolkensituation ), auf jede Stunde auf einen bestimmten wert geprüft und danach nach einem Delay ( ist nicht nötig ), wird jeder Rollo in eine Spezielle Position gefahren.
Die PHP Codes sind nichts was interessant ist.
Eins hier als Beispiel, sie sehen alle mehr oder weniger gleich aus.
if($message['payload']< 50){
$message['payload'] = true;
}else{
$message['payload'] = false;
}
return $message;
Hier wird der Luftfeuchte gecheckt ob er über 50% ist und je nach dem ein True oder False ausgegeben. Beim nächsten ein check auf die Temperatur über 20° und es wird ein True ausgeben ansonsten einfach False usw.
Anschliessend überprüfe ich Stündlich das Wetter ( die aktuelle Wolkensituation ) wenn Klar dann True ansonsten False. Anschliessend wird das Ergebnis der Luftfeuchte/Temperatur und Wetterstatus verknüpft und gegebenenfalls in eine neue Position gefahren.
Und damit haben Flow gelöst das je nach Wetterlage unsere Rollos fährt.
Part 3
Hier Prüfen ich ob die Temperatur über 20° nach dem Sonne untergegangen ist, die Rollo Position zu bestimmen, da komplett geschlossene Rollos bekanntlich wenig kalte luft rein lasse. Mit auslösen der Rollos überprüfe ich noch schnell ob die Wohnzimmer Tür Offen ist, um gegebenenfalls das Ambientelicht einzuschalten. Jeder kennt das Rollos fahren runter und man Sitzt im Dunkeln nicht schön.
So das war die Flow Variante jetzt folgt die FlowScript Variante :).
Die FlowScript Variante
Und jetzt werde ich das gleiche noch einmal mit einer Script Variante darstellen. Leider musste ich feststellen das dort diverse Einschränkungen vorhanden sind. Aber das ist ja nicht so Tragisch, vielleicht wird sich das ja noch ändern :). Und bei einigen Problemen habe ich einen sehr schönen Workaround gefunden.
So Nachteile:
-
Leider habe ich es nicht hinbekommen in der Funktion-Node selbst noch einmal Funktionen unterzubringen, dadurch ist es leider nicht so schön einen Code zu schreiben.Allerdings zeige ich euch eine Möglichkeiten um dies einigermassen in den Griff zu bekommen.
-
Keine einfache Debug Möglichkeit der PHP Scripts aber hierfür habe ich auch eine garnicht so schlechte Lösung gefunden um doch ein paar Debug ausgaben zu realisieren.
Part 1
Als erstes habe ich hier eine Debug Möglichkeit gefunden die ich ziemlich cool finde und erkläre sie in einem extra Post damit sie leichter gefunden werden kann um darauf zu verweisen. =>Link
Part 2
Da wie schon beschrieben keine Möglichkeit existiert bzw. ich habe keine gefunden, Funktionen innerhalb eines Funktions-nodes zu erstellen. Habe ich mir mit einer weiteren Funktions-node abgeholfen. Ich verwende hier nur einen ausschnitt zur Erklärung.
$humidity = $hg->getValue(89,1,"HUMIDITY");
$temperature = $hg->getValue(89,1,"TEMPERATURE");
$wather = $hg->getValue(89,1,"WEATHER");
Hier werden die werte von dem zuvor eingerichteten OpenweatherMap plugin in Smartha ausgelesen.
Ein JSON wo die werte für die Rollo Positionen für die später ermittelten Status eingetragen sind.
$weatherState='{
"normal":[{
"sunrise":[{
"livingroom":0,
"labor":0,
"dinner":0,
"kitchen":0,
"bedroom":0
}],
"sunset":[{
"livingroom":100,
"labor":100,
"dinner":100,
"kitchen":100,
"bedroom":100
}]
}]
}’;
$weatherAction = json_decode($weatherState,true);
Und hier eine einfache Abfrage für die Tageszeit und Wetterstatus nach der ich die Positionen der Rollos setzen. In diesem fall wird geprüft ob die Luftfeuchtigkeit unter 45% , oder die Temperatur über 20° und die Wolkensituation auf Klarer Himmel steht. Dann nutze ich die Daten aus dem JSON und schick es an Ausgang Zwei der Node an die nächste Funktion.
if($humidity <45 || $temperature > 20 && $wather =="Clear"){
if($message['payload']==true){
setFlowData("Debug", "State: Sun and Sunrise\n");
foreach($weatherAction[sun][0][sunrise][0] as $key => $value){
$data["payload"][$key]= $value;
}
output(1, $data);
}elseif($message['payload']==false){
setFlowData("Debug", "State: Sun and Sunset\n");
foreach($weatherAction[sun][0][sunset][0] as $key => $value){
$message["payload"][$key]= $value;
output(1, $message);
}
}
sleep(1);
}
setFlowData("Debug", "Debug END:\n");
return $message;
In der zweiten funktions-node werden lediglich die aktuellen werte abgefragt und anschliessend bei nicht 0bereinstimmung, zum aktuellen Wert auf die neue Position gefahren.
$kitchenState = $hg->getValue(102,1,"LEVEL");// kitchen
$dinnerState = $hg->getValue(103,1,"LEVEL");// dinner
$bedroomState = $hg->getValue(101,1,"LEVEL");// bedroom
$livingroomState = $hg->getValue(99,1,"LEVEL");// livingroom
$laborState = $hg->getValue(100,1,"LEVEL");// labor
$value=$message["payload"];
// Check State
if($kitchenState != $value["kitchen"] && $value["kitchen"] !=""){
$hg->setValue(102, 1, "LEVEL", $value["kitchen"]);
setFlowData("Debug", "kitchen value:".$value["kitchen"]."\n");
}
Und das wars auch schon mehr ist nicht nötig und in diesem fall sogar ein wesentlich dynamischere und leichter anpassbare Version als die only flow Methode zumindest meiner Meinung nach.
Wer jetzt sagt das ist schlecht erklärt, ja es sollten PHP Kenntnisse vorhanden sein aber wenn Ihr was nicht verstanden habt oder näher beschrieben werden soll einfach fragen.
Anmerkung:
Leider musste im FlowScripting die Wohnzimmer Tür mit Licht wegfallen da ich es nicht testen konnte aufgrund eines defekten naja TOTEN Fenstersensors !!!
Ich hoffe das Ihr alle inspiriert wurdet auch selber mal Flow’s oder FlowScripting zu erstellen :).
Gruß
Michael
Flow Only:
FlowOnlyFlow.json (24,2 KB)
Update Fehler korrigiert !!
Flow für FlowScripting:
FlowScripting.json (13,6 KB)