NEWS
Node Red und Blockly Scripte
-
https://forum.iobroker.net/assets/uploads/files/1642116367492-screen.png
Ich bin echt kein Script Experte und nehme gerne Verbesserungsvorschläge an. Ich habe leider nicht verstanden wie du dies im Script ändern würdest.
Bei dem Timer gehe ich mal davon aus, dass das nur ein Schutz ist, dass innerhalb der 5 Sekunden, in den sich die Lamellen ausrichten, nicht erneut getriggert wird. Genau so ist das gemeint. Jedoch schalte ich hier ja nichts mehr aus.
-
@labamba Also grundsätzlich ist das alles was ich sage, nicht als Kritik gemeint und wenn ich vermeintliche Verbesserungsvorschläge oder Alternativen vorschlage, habe ich vielleicht all Deinen Erfahrungsschatz nicht berücksichtigt.
Deine ursprüngliche Frage was ja wie Du NodeRed mit den Blocklies verbinden kannst und das habe ich ja am Anfang beantwortet und damit können wir es ja bewenden lassen.
Vielleicht habe ich halt nur ein Verständnisproblem oder keine Erklärung?
Also wenn ich sowas schrieb, wie:
Im Prinzip ist ja für ein Gerät die URL gleich und nur der Prozentwert ist halt anders. Deswegen verstehe ich auch nicht, warum man da zig Buttons macht, anstelle einfach eine Prozentzahl in einen Datenpunkt zu schreiben bzw. auch bei Sprachbefehl halt - stelle auf x %
Dann verstehe ich es halt nicht.
Wie gesagt, Du musst da nichts ändern oder gar als Angriff auf Deine Lösung sehen. Wenn Du zu Deiner Handsteuerung schreibst:
Handsteuerung:
Jedoch habe ich auch ein Tablet oder ein Handy. Hier habe ich mir zur Steuerung Buttons angelegt. Hinter diesen Buttons liegt ein Skript das ausgelöst wird.Funktioniert top seit 1 Jahr!
Die Rückantwort habe ich auch wieder über mqtt als Anzeige zwischen 0-100%.
dann meinte ich ja - ist doch gut, wenn Du aus Gründen der Bedienung hier Button nimmst, aber hätte man hinter diese Buttons nicht einfach Prozentzahlen in einen Datenpunkt schreiben können und das dann auswerten, anstelle für jeden Button in Deiner VIS einen eigenen Datenpunkt zu machen? Gibt ja vielleicht Gründe, die ich nicht verstehe.
Nun was ich auch nicht verstanden habe, wenn Du schreibst:
Allgemein: Für das Skript war es für mich sehr einfach den http Befehl für die Position, auf und ab zu verwenden. Läuft auch sehr zuverlässig!
Jedoch verwende ich grundsätzlich mqtt für die Shellys.
Liegt das generell daran, dass Du keine Kommandos über mqtt an Deine Shellies verschickst. Wie gesagt ist kein Problem wenn Du das über HTTP zu machen.
Über mqtt wäre es halt:
mit stop,close,open über das Topic:
shellies/shellyswitch25-<deviceid>/roller/0/command
bzw.
shellies/shellyswitch25-<deviceid>/roller/0/command/pos
gegangen - aber wie gesagt, es gibt mehrere Wege nach Rom und man kann das auch über http machen, dafür gibt es ja diese API.
So grundsätzlich gibt es für das Problem des Drehwinkels keine fertige Lösung, sondern ist ja gut, wie Du das mit Deinem Skript gelöst hast und ich habe ja Dein Skript nur in Node Red abgebildet (weil es Dich ja interessiert hat - ansonsten kannst Du ja wie gesagt über die Buttons einfach Deine Blocklies triggern, wie ursprünglich geplant).
Im Prinzip ist es - und das kann ich dann zum 2. Teil sagen - völlig egal, ob Du per Hand oder Sprachsteuerung Dein Raffstore steuerst, denn das Script wird ja durch den stop Status getriggert, um dann die Lamellen durch ein zeitliches Fahren in die Gegenrichtung die Lamellen auszurichten. Das habe ich schon verstanden und soweit auch mit dem Flow 1:1 umgesetzt - bis auf die Abprüfung eines Buttons. Das lässt sich, denke ich, auch nicht anders lösen. -
@labamba sagte in Node Red und Blockly Scripte:
https://forum.iobroker.net/assets/uploads/files/1642116367492-screen.png
Ich bin echt kein Script Experte und nehme gerne Verbesserungsvorschläge an. Ich habe leider nicht verstanden wie du dies im Script ändern würdest.
Bei dem Timer gehe ich mal davon aus, dass das nur ein Schutz ist, dass innerhalb der 5 Sekunden, in den sich die Lamellen ausrichten, nicht erneut getriggert wird. Genau so ist das gemeint. Jedoch schalte ich hier ja nichts mehr aus.
Nun die erste Bemerkung zielte nur darauf, dass man das im NodeRed mit dem vorigen Wert über eine Flow-Variable lösen muss, weil die iobroker-IN Nodes hier nicht die gleichen Informationen zu einem Objekt rausrücken, wie der Trigger in einem Blockly.
Die zweite Bemerkung - insbesondere nachdem Du bestätigt hast, dass es nur zum Schutz dienen soll, dass während der Ausrichtung der Lamellen durch deren Bewegung keine neuen Trigger entstehen sollen, warum Du hier einen Button noch abfrägst. Im Prinzip wäre es doch ausreichend, wenn man einfach in der Zeit alle Trigger in der Zeit der Lamellenausrichtung jedes weitere Triggern unterbinden würde - da spielt doch der Button keine Rolle mehr?
So habe ich es nun zumindest in dem NR Flow umgesetzt.Sprich ich verstehe einfach nicht, warum man den Button in dem Skript überhaupt braucht. Langt es nicht, dass das Skript einfach nicht ausgeführt wird, solange der Timer timeout aktiv ist (also die 5 sek.)?
In allen Fällen - egal ob mit Hand oder Sprachsteuerung - ist es doch so, dass mit dem stop im Status des Stores die Ausrichtung - sprich das kurze Anfahren in die Gegenrichtung eingeleitet wird.
-
@labamba sagte in Node Red und Blockly Scripte:
Sprachsteuerung:
Hieran arbeite ich ja gerade. Die Lösung über Skripte finde ich auch nicht so toll. Problem wird sein. Das für jedes Skript ein Sprachbefehl notwendig ist. Bei ähnlichen Sprachbefehlen nervt Alexa schon rum.
Eine Lösung über einen Sprachbefehl, einer Prozentangabe (höhe des Raffstore) und einer Zeiten Angabe (für den Drehwinkel) wäre schon wirklich nice.
Jedoch habe ich keinen Plan wie das in NODE RED gehen könnteNun verstehe ich auch nicht so ganz. Über die Prozentzahl kannst Du doch genauso wie bei den Rollläden die Öffnung bestimmen. Das Ausrichten erfolgt doch immer dann automatisch, wenn der state auf stop triggert?
OK wenn Du verschiedene Drehwinkel bei geschlossenem Raffstore erreichen willst, dann wird es natürlich schwierig und Du brauchst verschiedene Kommandos.
Aber egal wie, das mit der zeitlichen Steuerung lässt sich in NodeRed nahezu 1:1 wie in den Blocklies umsetzen. -
Leider hat es so nicht funktioniert. Das Skript wird nicht ausgelöst.
-
@labamba Ich gehe mal von der 1. Version aus, in dem Du mit true Deinen Taster auslöst. Auf dem Screenshot ist ja noch nicht deployed. Hast Du die Change Node auch wie unten konfiguriert. Sonst musst halt mit Debug Nodes kontrollieren. Kommt aus der Alexa Node überhaupt was raus?
-
@mickym said in Node Red und Blockly Scripte:
@labamba Ich gehe mal von der 1. Version aus, in dem Du mit true Deinen Taster auslöst. Auf dem Screenshot ist ja noch nicht deployed. Hast Du die Change Node auch wie unten konfiguriert. Sonst musst halt mit Debug Nodes kontrollieren. Kommt aus der Alexa Node überhaupt was raus?
Ja, Version 1!
Ich habe jetzt mal den Degub eingebaut. Dieser funktioniert grundsätzlich.
Bekomme nur Büroverschattung reagiert gerade nicht! -
@labamba Na dann musst Du auf der Blockly-Seite suchen - zumindest zeigt die iobroker out Node ja auch, dass was geschrieben wurde. Sollte auch am Zeitstempel Deines Button Datenpunktes sehen.
Für Buttons solltest Du auch generell auf aktualisiert und nicht auf geändert triggern.
-
@labamba sagte in Node Red und Blockly Scripte:
@mickym said in Node Red und Blockly Scripte:
@labamba Ich gehe mal von der 1. Version aus, in dem Du mit true Deinen Taster auslöst. Auf dem Screenshot ist ja noch nicht deployed. Hast Du die Change Node auch wie unten konfiguriert. Sonst musst halt mit Debug Nodes kontrollieren. Kommt aus der Alexa Node überhaupt was raus?
Ja, Version 1!
Ich habe jetzt mal den Degub eingebaut. Dieser funktioniert grundsätzlich.
Bekomme nur Büroverschattung reagiert gerade nicht!Eventuell auch mal das komplette Nachrichtenobjekt aus der Alexa Node analysieren, um zu sehen, warum die Alexa Node - 2 mal triggert.
-
@mickym said in Node Red und Blockly Scripte:
@labamba Na dann musst Du auf der Blockly-Seite suchen - zumindest zeigt die iobroker out Node ja auch, dass was geschrieben wurde. Sollte auch am Zeitstempel Deines Button Datenpunktes sehen.
Für Buttons solltest Du auch generell auf aktualisiert und nicht auf geändert triggern.
Ich habe es jetzt so wie du vorgeschlagen hast angepasst und mir schnell einen Schalter zum testen gebaut. Jetzt spinnt der Raffstore beim Test rum.
-
@labamba Nun falls das Blockly nun spinnt (was auch immer das bedeutet), weil 2 mal true kommt und es doppelt getriggert wird, dann kannst Du das zwar wieder zurück ändern, aber dann hatte quasi Dein Datenpunkt einen falschen Initialwert, weil wurde geändert ja nur dann triggert wenn false auf true geschaltet wird.
Grundsätzlich triggert Dein Flow ja nun.
Wie gesagt untersuche noch warum die Alexa Node 2 mal triggert, wenn es keinen Unterschied zwischen den beiden Nachrichten gibt , dann muss man halt wieder zeitlich entprellen. Aber letztlich musst Du untersuchen, warum er spinnt. Kannst ja manuell den DP - sprich den Button 2 mal betätigen, ob Du damit das gleiche Verhalten hast und ob es mit einmal drücken besser ist. -
@mickym said in Node Red und Blockly Scripte:
@labamba Nun falls das Blockly nun spinnt (was auch immer das bedeutet)
Das heisst er fährt etwas runter, dreht sich, wieder ein stück hoch und wiederholt das mehrfach.
-
@labamba Nun ich war ja der Meinung, dass das mit Deinem Timer abgefangen wird. Nun wie gesagt - wenn Du es wie ursprünglich auf geändert lässt, dann war entweder der Initialwert nicht in Ordnung, aber man kann den Flow natürlich auch so basteln, dass nur eine Nachricht kommt und grundsätzlich einmal das Gegenteil von dem gesetzt wird, als im Moment gesetzt ist.
Wie gesagt, dann ändern das Blockly halt wieder auf geändert und dann muss halt im Moment der Datenpunkt auf false stehen, bevor Du mit NodeRed auf true setzt.
Wie gesagt kann man alles machen - nur im Moment sieht es für mich so aus, dass sich anfangs nichts getan hat, weil sich der Datenpunkt nicht geändert hat, aber auch nicht mit mehrfachen Triggern umgehen kann, weil sonst das Raffrolo spinnt.
Jedenfalls triggert der NodeRed Flow richtig - nur wenn sich nichts tut und Du das Blockly wie am Anfang umstellst, dann muss sich halt auch der Inhalt des Datenpunktes ändert.
Ich kann Dir zwar einen Flow basteln, der immer das Gegenteil in den Datenpunkt setzt und das zeitlich entkoppelt aber sauber ist das halt alles nicht.
Ich weiß auch nicht, wie die Alexa Node den aktuellen Status ermittelt, vielleicht hast Du dadurch auch eine Endlosschleife.
Wie gesagt im Prinzip funktioniert das Deines Blocklies so, aber das Gesamtkonstrukt oder die Gesamtlogik passt nicht.
-
@mickym said in Node Red und Blockly Scripte:
@labamba Also grundsätzlich ist das alles was ich sage, nicht als Kritik gemeint und wenn ich vermeintliche Verbesserungsvorschläge oder Alternativen vorschlage, habe ich vielleicht all Deinen Erfahrungsschatz nicht berücksichtigt.
Deine ursprüngliche Frage was ja wie Du NodeRed mit den Blocklies verbinden kannst und das habe ich ja am Anfang beantwortet und damit können wir es ja bewenden lassen.
Vielleicht habe ich halt nur ein Verständnisproblem oder keine Erklärung?
Also wenn ich sowas schrieb, wie:
Im Prinzip ist ja für ein Gerät die URL gleich und nur der Prozentwert ist halt anders. Deswegen verstehe ich auch nicht, warum man da zig Buttons macht, anstelle einfach eine Prozentzahl in einen Datenpunkt zu schreiben bzw. auch bei Sprachbefehl halt - stelle auf x %
Dann verstehe ich es halt nicht.
Wie gesagt, Du musst da nichts ändern oder gar als Angriff auf Deine Lösung sehen. Wenn Du zu Deiner Handsteuerung schreibst:
Handsteuerung:
Jedoch habe ich auch ein Tablet oder ein Handy. Hier habe ich mir zur Steuerung Buttons angelegt. Hinter diesen Buttons liegt ein Skript das ausgelöst wird.Funktioniert top seit 1 Jahr!
Die Rückantwort habe ich auch wieder über mqtt als Anzeige zwischen 0-100%.
dann meinte ich ja - ist doch gut, wenn Du aus Gründen der Bedienung hier Button nimmst, aber hätte man hinter diese Buttons nicht einfach Prozentzahlen in einen Datenpunkt schreiben können und das dann auswerten, anstelle für jeden Button in Deiner VIS einen eigenen Datenpunkt zu machen? Gibt ja vielleicht Gründe, die ich nicht verstehe.
Nun was ich auch nicht verstanden habe, wenn Du schreibst:
Allgemein: Für das Skript war es für mich sehr einfach den http Befehl für die Position, auf und ab zu verwenden. Läuft auch sehr zuverlässig!
Jedoch verwende ich grundsätzlich mqtt für die Shellys.
Liegt das generell daran, dass Du keine Kommandos über mqtt an Deine Shellies verschickst. Wie gesagt ist kein Problem wenn Du das über HTTP zu machen.
Über mqtt wäre es halt:
mit stop,close,open über das Topic:
shellies/shellyswitch25-<deviceid>/roller/0/command
bzw.
shellies/shellyswitch25-<deviceid>/roller/0/command/pos
gegangen - aber wie gesagt, es gibt mehrere Wege nach Rom und man kann das auch über http machen, dafür gibt es ja diese API.
So grundsätzlich gibt es für das Problem des Drehwinkels keine fertige Lösung, sondern ist ja gut, wie Du das mit Deinem Skript gelöst hast und ich habe ja Dein Skript nur in Node Red abgebildet (weil es Dich ja interessiert hat - ansonsten kannst Du ja wie gesagt über die Buttons einfach Deine Blocklies triggern, wie ursprünglich geplant).
Im Prinzip ist es - und das kann ich dann zum 2. Teil sagen - völlig egal, ob Du per Hand oder Sprachsteuerung Dein Raffstore steuerst, denn das Script wird ja durch den stop Status getriggert, um dann die Lamellen durch ein zeitliches Fahren in die Gegenrichtung die Lamellen auszurichten. Das habe ich schon verstanden und soweit auch mit dem Flow 1:1 umgesetzt - bis auf die Abprüfung eines Buttons. Das lässt sich, denke ich, auch nicht anders lösen.Ich sehe es ja nicht als Angriff! Finde es sogar toll das du mir helfen willst.
Ich werde mich mal in deine Vorschläge bzgl. Node-RED weiter einarbeiten.
Ich glaube meine Lösung mit dem Auslösen des Scriptes ist nicht gerade perfekt. -
@labamba
Das mit dem Blockly war auch verkehrt - ändere das mal wieder auf geändert zurück. Das war schon richtig. Das ist ja der 2. Teil mit dem state des Shellies der hier triggert und nicht der Button. - Sorry mein Fehler.Wenn das beim ersten Mal nicht funktioniert hat, dann hat das andere Ursachen - und ich glaube auch nicht, dass das was mit NodeRed zu tun hat.
Mach in Dein Blockly ein Debug Baustein um zu sehen, ob das Blockly getriggert wurde:
So wenn das Triggert - dann funktioniert das Zusammenspiel von NodeRed und Blockly. Wenn sich dann nichts tut - ist es aber ein reines Problem Deines Blocklies.
Was stand denn bei Dir da ursprünglich drin, wahr oder geändert? Beim Triggern des Buttons.
-
@mickym said in Node Red und Blockly Scripte:
So ich habe mal dein Node Red Skript eingefügt. Das mit dem Sub-Flow ist richtig gut.
-
@mickym said in Node Red und Blockly Scripte:
@labamba
Das mit dem Blockly war auch verkehrt - ändere das mal wieder auf geändert zurück. Das war schon richtig. Das ist ja der 2. Teil mit dem state des Shellies der hier triggert und nicht der Button. - Sorry mein Fehler.Wenn das beim ersten Mal nicht funktioniert hat, dann hat das andere Ursachen - und ich glaube auch nicht, dass das was mit NodeRed zu tun hat.
Mach in Dein Blockly ein Debug Baustein um zu sehen, ob das Blockly getriggert wurde:
So wenn das Triggert - dann funktioniert das Zusammenspiel von NodeRed und Blockly. Wenn sich dann nichts tut - ist es aber ein reines Problem Deines Blocklies.
Was stand denn bei Dir da ursprünglich drin, wahr oder geändert? Beim Triggern des Buttons.
Wahr ist richtig!
-
@labamba OK, wenn das wahr war - dann war das was ich zu den Blocklies gesagt hatte am Anfang des heutigen Abends gesagt hatte natürlich Käse- Sorry nochmal.
Wie gesagt dann machst einfach noch ein Debug Baustein in das Blockly und siehst ja ob der NodeRed Flow triggert. Wenn sich dann nichts bewegt, dann hast Du halt mit Deinen Blockly Skripts noch irgendein Problem, weil dann wurde das Blockly ja getriggert.
-
Wahrscheinlich ist es besser die Trigger Node in den subflow und nur in den stop Ast aufzunehmen
Aber ohne halt Hardware zur Verfügung zu haben, ist das immer etwas schwierig - sich vorzustellen.
-
@mickym Falls Du übrigens das Ganze wie in Deinem Blockly machen willst, dass das nur ausgeführt wird, wenn ein Button gefdrückt wird - der sich nach 5 s immer selbst auf false stellt, dann machst das halt auch mit einer trigger Node und entweder eine Flow Variablen oder Datenpunkt.