NEWS
Node Red und Blockly Scripte
-
@mickym
Ich habe es jetzt auch grundsätzlich verstanden und werde es mal Testen.DATENPUNKTE sind ja bereits angelegt.
Und dann so in Node Red anlegen
Werde es morgen mal testen ob es geht!
Du schreibst es könnte auch direkt in Node Red umgesetzt werden.
-
@labamba Mach mal zwischen den iobroker out Nodes und den Alexa Nodes noch eine Change Node in dem Du ein Boolean = true setzt. Deine Datenpunkte sind alles Buttons, bei den Du ein Betätigung durch ein true auslöst.
Schau dass Du ein Boolean und keinen String in den Datenpunkt sendest:
Achte auch darauf, dass im Adapter keine Stringkonvertierung eingeschaltet ist.
-
@mickym
Danke schon einmal für die Hilfe!
Werde es morgen mal testen.Wäre natürlich noch viel eleganter wenn über einen Sprachbefehl, die Position http-Befehl angesteuert werden könnte.
Bzw. bei den normalen Rollläden habe ich es auch so:
hinbekommen.Würde mich interessieren ob das mit dem Drehwinkel der Raffstore nach Zeit in Node Red auch ohne Skript umsetzbar ist.
-
@labamba Kurzfristig wird das denke ich wahrscheinlich funktionieren, wobei ich die komplette Steuerung relativ umständlich finde.
Mit den Buttons etc.
Die Steuerung ist ja nur dieser Part des Blocklies:
Du scheinst Deine Shellies also weder über den Adapter noch über MQTT, sondern direkt über die HTTP API steuern.
Also sollte ja mit den Prozentzahlen, das wahrscheinlich so gehen:
http://192.168.178.35/roller/0?go=to_pos&roller_pos=25
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 %.
Die URL um den Shelly mit HTTP zu steuern ist ja easy und habe ich ja oben schon gepostet.
Wenn also Prozentzahlen über ALexa oder was auch immer ankommt, lässt sich doch die URL dynamsich anstelle von fix zusammenstellen.Was Du mit Drehwinkel meinst - weiss ich gerade nicht - ist das der 2. Teil Deines Blocklies?
-
@labamba Zu dem 2. Teil des Blocklies - aber ich bin kein Blockly Spezialist:
... finde ich es nicht gut - buttons auf false zu setzen. Buttons sind Taster und sind stateless, dass heißt sie haben keinen Status. Ein Button oder Taster (also Lichtschalter als Taster) - drückst Du - dann wird true ausgelöst und triggert. Nach dem Trigger passiert nichts, bis wieder gedrückt wird - also wieder ein True kommt. Das heißt der Status eines Taster ist immer true und nie false. Es wird auf Aktualisierung getriggert, sprich wann wurde das true erneuert bzw. der Taster erneut gedrückt.
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. Das kann man im NodeRed einfacher über einen Trigger lösen.
Die Umsetzung dieses Blocklies in NodeRed würde ich halt so umsetzen:
Die iobroker In Node muss man halt noch umstellen, dass die am Anfang initialisiert wird. Das machte nur bei mir keinen Sinn, da ich ja keinen Shelly Adapter habe. Und bei mehreren Raffstores muss man natürlich eine Flowvariable pro Raffstore anlegen, damit sich das nicht gegenseitig beeinflusst.
Falls das tatsächlich nacheinander mit dem Close/Open und der Pause stattfinden soll, dass muss man es halt serialisieren.
und wenn man so was ganz elegant machen will - dann verpackt man das in einen Subflow - da sind dann auch die Flowvariable je Instanz initialisiert.
Damit brauchst Du dann nicht für jedes Raffrollo einen neuen Flow erstellen, sondern nutzt einfach diese neue Node:
damit kannst dann einfach diese Node an die States Deiner Raffstores anhängen. Die Datenpunkte zum Schreiben werden dann automatisch aus dem Topic ermittelt.
Hier der Flow mit den neuen Nodes:
Wichtig ist das halt vorher eine Initialisierung mit open oder close stattgefunden hat.
Ach und hab mir gerade Dein Blockly angeschaut - falls der Button und nicht der state triggern soll, dann muss man den Anfang halt noch umstellen. Das blicke ich bei den Blocklies nicht so ganz. Für mich sind das erst mal 2 unabhängige Trigger - einmal der Button Datenpunkt und einmal der State Datenpunkt des Shelly Adapters.
Bei den iobroker-IN Nodes zu den Shelly Datenpunkten - diese ggf. umstellen, dass sie nur Nachrichten durchlassen, wenn sich ein Wert ändert. Shellies sind ja in der Regel geschwätzig und habe keine Ahnung wie der Shelly Adapter das handhabt.
-
@mickym
Ich glaube ich muss erstmal eine Verständnisfrage klären.- Rolladen (Fährt nur auf und ab)
Sprachsteuerung:
Das habe ich hinbekommen diesen über NODE RED mit einer Prozentangabe zu steuern. Also kein Skript notwendig. Funktioniert top seit 1 Jahr!Die Rückantwort habe ich hier über mqtt direkt auf iobroker-vis (Handy oder Tablettsanzeige). Also eine Anzeige zwischen 0-100% für den Öffnungsgrad des Rollo. Also nicht mal node-red notwendig. Funktioniert top!
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%.- Raffstore
Dieser Fährt nicht nur auf und ab (könnte über % in node red geregelt werden/ Teil 1 des Skript) sonder hat Lamellen die in der Position geändert werden können (-90° bis 90°). Dies ist aber nur über die genaue Fahrzeit möglich (Teil 2 meines Skriptes). EIne andere Möglichkeit habe ich nicht gefunden. Das Skript schaut da etwas exotisch aus, da ich immer erst zum gleichen Ausgangspunkt für den Drehwinkel fahre.
D.h. Fährt der Raffstore in Position von oben nach unten, ist der Winkel der Lammelen 90°.
Fährt der Raffstore von unten nach oben ist, ist der Winkel der Lammelen -90°C.
Folglich macht der Raffstore dann erst eine Drehung auf 90° und anschliesend wird der Winkel über die Fahrzeit eingestellt.
Habe schon ein paar Wochen rumgetüftelt bis es sehr zuverlässig lief.
Handsteuerung:
Genau wie bei den Rolläden liegt ein Skript hinter den Buttons das ausgelöst wird. Funktioniert top seit 1 Jahr!
Die Rückantwort habe ich auch wieder über mqtt als Anzeige zwischen 0-100%. Jedoch ist dies nur die Höhe des Raffstore. Denn Drehwinkel habe ich leider nicht geschafft mir ausgeben zu lassen. Wüsste gerade auch nicht wie.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önnte.
Ich schaue mir aber mal an, was du mir da alles geschickt hast. Schon mal danke dafür.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. -
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.