NEWS
JSON Array auslesen: Blockly, JavaScript, NodeRed
-
@mickym vielen Dank!
NodeRed hab ich zum Glück schon im Einsatz, weil da meine virtuellen Alexa Smart Home Geräte sind.Auf das Video bin ich sehr gespannt!
-
@domi920 sagte in JSON Array mit Hilfe von Blockly pharsen, Daten auslesen:
@mickym vielen Dank!
NodeRed hab ich zum Glück schon im Einsatz, weil da meine virtuellen Alexa Smart Home Geräte sind.Auf das Video bin ich sehr gespannt!
So ich hoffe, Du nimmst es etwas mit Humor und verzeihst meine nicht ganz perfekten Versuche im Video die beiden Fenster parallel darzustellen. Ich wußte ja nicht, dass Du dieses hervorragende Tool mit den roten Knoten schon im Einsatz hast, weil ihr halt immer Blockly in Euren Threads schreibt.
Im Prinzip brauchst Du Video 2 ja dann nicht mehr.
Hier mal die Videos:
1. BlocklyFan schreibt JSON-string.mp4
2. BlocklyFan probiert mal was Neues.mp4
3. BlocklyFan importiert 1. Node Red Flow und ist begeistert.mp4
4. BlocklyFan ändert JSON String und Datenpunkte werden aktualisiert.mp4Ach und weil Du den NodeRed Adapter schon im Einsatz hast, der Flow funktioniert nur, wenn Du in der Adapterkonfiguration (wie im Video 2 dargestellt), das Erstellen von Fremdobjekten zu lässt (anhakst).
-
@mickym Natürlich nehme ich deine Nachricht mit Humor
Dein Humor & vor allem deine Hilfe ist exzellent!
Ich glaube, dass viele Leute hier lieber Blockly haben, weil sie NodeRed nicht kennen. Ich selbst habe es auch nur wegen AlexaWenn wir noch den Feinschliff machen könnten, wär ich nur noch glücklich:
Wie bzw. wo kann man den Pfad von0_userdata.0.saugroboter.
ändern?
Muss der JSON im gleichen Ordner sein, oder ist es auch in Ordnung, wenn dieser im Ordner vom Saugroboter ist?
Wenn ich das richtig sehe, kann man in NodeRed im "Eingangs-Datenpunkt" einstellen, ob dieser nur auf bestätigte oder egal reagiert, oder?
-
@domi920 Also eigene Daten schreiben sollte man immer unter 0_userdata.0 - deswegen habe ich das auch so fest codiert.
So nun zu Deinen Fragen:
- Nein den JSON kannst Du herausholen woher Du willst (ist in der iobroker IN Node festgelegt) - der Flow läuft immer von links nach rechts wie beim Lesen. Also Eingang (iobroker-IN) - Subflow ist Bearbeitung - Ausgang ist iobrokerOut:
Einfach bei Topic den richtigen Pfad reinkopieren in die iobroker-IN Node
-
Das ACK - Flag entspricht dem Blockly egal=Send all events, bestätigt = Only updates, unbestätigt = only commands
-
Den Ausgang muss wie gesagt direkt unter 0_userdata.0 liegen - da dies der vorgesehene Punkt ist, um eigene Datenpunkte zu erstellen:
Wie der oberste Punkte heißen soll, kannst Du in meiner Subflow Node festlegen:
Du kannst da auch tiefer liegende Punkte nehmen, wie wohnung.saugroboter.
-
@mickym Habs gerade durch etwas rumprobieren selbst rausgefunden. Aber da bin ich noch am Screenshots machen, bekomme ich von dir schon die Meisterlösung!
Respekt!Nur noch kurz am Rande, weißt Du zufälligerweise, wie man die Zeitpläne zählen kann? Also sprich wie viele Ordner erstellt wurden?
Wobei es dann auch wichtig wäre, dass die Ordner gelöscht werden, wenn eine Reinigungsaufgabe gelöscht wird und das JSON dementsprechend aktualisiert wird.
Was meinst Du? Ist das möglich, oder überhaupt sinnvoll? -
Muss jetzt leider los zur Arbeit...
Werde die Beiträge Nachmittags sehen, bin aber schon sehr gespannt!Nochmals vielen Dank!
-
@domi920 Also löschen geht meines Erachten im iobroker generell schlecht (unabhängig von Blockly oder NodeRed) - da musst Du dann wirklich Javascript bemühen - da muss man in der Objektdatenbank rumpfuschen - Das ist generell nicht vorgesehen.
Die aktiven Pläne musst Du dann wie gesagt über die Anzahl der Array-Elemente ermitteln oder über den Datenpunkt enabled=true in den jeweiligen Programmen.Entweder nimmst Du die Lösung von @paul53 und schreibst die Anzahl in einen eigenen Datenpunkt oder natürlich kannst Du das auch mit NodeRed machen und das ebenfalls wegschreiben.
Also 3 aktive Pläne - 0,1,2
Ansonsten frohes Schaffen.
-
@domi920 sagte in JSON Array mit Hilfe von Blockly pharsen, Daten auslesen:
@mickym Habs gerade durch etwas rumprobieren selbst rausgefunden. Aber da bin ich noch am Screenshots machen, bekomme ich von dir schon die Meisterlösung!
Respekt!Nur noch kurz am Rande, weißt Du zufälligerweise, wie man die Zeitpläne zählen kann? Also sprich wie viele Ordner erstellt wurden?
Wobei es dann auch wichtig wäre, dass die Ordner gelöscht werden, wenn eine Reinigungsaufgabe gelöscht wird und das JSON dementsprechend aktualisiert wird.
Was meinst Du? Ist das möglich, oder überhaupt sinnvoll?Na in dem Fall ist Blockly - bzw. der Javascript Adapter dem NodeRed Adapter überlegen.
- Aber wir haben ja den iobroker, der aus beiden Welten das Zusammenspiel perfekt macht.
hier mal die Javascript-Funktion aus Blockly heraus, die zum Beispiel den Folder 2 löscht.
Wie gesagt - ich weiß aber nicht, ob das sinnvoll ist. In meinen Augen sind das ja nur die Reinigungsprogramme und das sagt meines Erachtens nichts über den Vollzug aus. Du kannst nur - wie beschrieben die Elemente zählen und die überzähligen dann ggf. Löschen - um das 1:1 mit dem Gerät zu halten.
-
OK - ich glaub ich hab es Dir nun rund gemacht - mit der Visualisierung musst Dich aber nun selbst kümmern.
Ich muss aber wieder mal zugeben, dass mir die letzte Stunde, das Blockly den letzten Nerv gekostet hat:
Diese blöde Schleife hat auch gezählt wenn der neue Wert GRÖSSER als der vorherige Wert war, obwohl die Schrittweite positiv war.
Wenn ich also meine Zähler i von 4 nach 3 in Schritten von +1 - bin ich davon ausgegangen, dass die Schleife gar nicht ausgeführt wird. Anstelle dessen wir im Javascript Code eine Prüfung gemacht und diese immer ausgeführt also rückwärts und vorwärts. Sowas finde ich echt ätzend.
Na wenn mans weiß, macht man halt so ein Bedingung vorne dran.
So der ganze Zyklus sieht nun so aus. Wo immer Dein Array mit den Staubsauger-Programmen herkommt, triggert dies den NodeRed Flow. Dieser Schreibt nun die Datenpunkte und zählt gleichzeitig die aktiven Programme und schreibt diese in einen Datenpunkt active:
Hier der Flow:
Nur wenn sich diese Anzahl in saugroboter.active ÄNDERT wird dann das Blockly getriggert und dann auch nur was gemacht, wenn dieser Wert kleiner dem vorherigen war.
Ist dies der Fall, werden die überschüssigen Instanzen (Folder) aus dem Objektbaum gelöscht.
Einerseits zwar schade, dass man nicht ohne Blockly auskommt, andererseits ist es perfektes Beispiel wie die beiden Tools aus 2 Welten im iobroker zusammen arbeiten können.
EDIT: Und die aktuelles JS Doku zufinden - ist auch ein Kampf - wenn man das nicht jeden Tag braucht - sollte irgendwie in der aktuellen Doku irgendwo verlinkt sein:
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#deleteobjectund Achtung - ich habe die "very dangerous" Variante in dem Blockly verwendet.
Es wurden also verwendet bei dieser Logik:
- NodeRed
- Blockly
- JavaScript
Ach und vielleicht solltest Du die Überschrift des Threadtitels anpassen.
-
@mickym ich bin sprachlos begeistert!
Da hast du wirklich das Non-Plus-Ultra vorgelegt!
Und vor allem einfach, nachvollziehbar & detailliert beschriebenWerde Deine Vorlage noch ausgiebig testen und mich dann nochmal melden, falls noch was sein sollte.
Nachdem ich bei mir alles zufriedenstellend integriert habe, werde ich den Entwickler vom Ecovacs Adapter kontaktieren und dies verlinken.
Denke es könnte für viele eine große Hilfe sein.Vielen vielen Dank nochmal für Deine Kompetenz!
Ich hoffe der Titel bzw. die Überschrift ist passend. Falls nich nehme ich gerne Vorschläge an
Gruß Dominik