NEWS
String aufteilen
-
@hafo Viel Spaß bei Radeln.
Im Übrigen das unter 2. setzen der Flow Variablen ist wieder mal einer der wenigen Fälle die mit einer Function Node einfacher sind:
Inhalt der function-Node:
fTopic='days.' + msg.topic; flow.set(fTopic,msg.payload); return null;
-
@hafo Ich hab jetzt mal die Datenpunkte so angepasst, wie Du das hast - da die Reihenfolge für Deinen Timer wichtig ist.
Man braucht dann am eigentlichen Flow so gut wie nichts ändern:
Da der JSON String - die Objekte durch die Nummern in der richtigen Reihenfolge enthält - kannst Du für Deinen Timer folgendes machen:
Wenn Du Punkte brauchst - halt das Zeichen in der JOIN Node ändern:
-
@mickym So, nach 5 x durchlesen habe ich es halbwegs kapiert.
Zu Punkt 1:
Diese Nodes hast du leider nicht geteilt. Beim "json" muss ich "konvertierung zu json Zeichenfolge" einstellen nehme ich an. Beim Split und Change Nod komme ich nicht weiter.Punkt 2:
Das verstehe ich so halbwegs. Sobald Punkt 1 läuft werde ich einmal die Variante mit dem Functions Node testen.Punkt 3:
Sollte alles klar sein.Ich kann dir gar nicht genug für deine Mühe danken.
-
Diese Nodes hast du leider nicht geteilt. Beim "json" muss ich "konvertierung zu json Zeichenfolge" einstellen nehme ich an. Beim Split und Change Nod komme ich nicht weiter.
Nein in der JSON Node musst Du nichts einstellen, sondern den Standard belassen. In dem Datenpunkt befindet sich ein String. Die Node wandelt einen JSON String in ein JAVA Objekt um und umgekehrt. Das erkennt die Node automatisch:
Die Split Node erkennt automatisch dass es sich um ein Objekt handelt und teilt es in seine Bestandteile auf und kopiert die Eigenschaft des Objektes in msg.topic:
Deshalb hat jede Nachricht dann ein msg.topic wie 1Mo, 2Di usw.
Die letzte Change Node hängt dieses topic dann einfach an den Pfad an:
deshalb brauchst Du nur eine iobroker-out Node - da nun über das msg.topic in die verschiedenen Datenpunkte geschrieben wird.
Zur Initialisierung kannst ja in deine Datenpunkte mal diesen JSON String kopieren:
{"1Mo":false,"2Di":false,"3Mi":false,"4Do":false,"5Fr":false,"6Sa":false,"7So":false}
Das Tage im Pfad hattest Du glau ich klein geschrieben, musst halt noch ändern.
-
@mickym Leider funktioniert es gerade gar nicht. Den String habe ich zwar angepasst mit "vis.tage." aber die Objekte werden nicht beschrieben. Ich habe zum testen deinen String durchs Injekt Node eingespiesen.
Es ist mir auch nicht möglich den String in den Objekten zu speichern. Lieber wäre mir eh wenn es im Format ist welches der Timer frisst.
-
@hafo sagte in String aufteilen:
Lieber wäre mir eh wenn es im Format ist welches der Timer frisst.
Nun dann nimm noch mal den ursprünglichen Flow für den 1. Schritt:
EDIT - die debug Nodes im Flow noch getauscht!
Schritt 2 - also füllen der Flow Variablen kann so bleiben, wie es ist.
Schritt 3 angepasst:
Damit kannst Du nun noch statt der Inject Node Speichern nur den Datenpunkt, den Deine Vis Taste Speichern triggert vorne dran machen!
-
@mickym Ich hatte den alten Flow noch griffbereit. Das ganze sieht ohne die Tage so aus
gross aber übersichtlich.
Nun muss ich noch bei den Debug Platzhalter deinen Flow einpflanzen dann sollte es laufen. -
@hafo Ich würde nur das Speichern entkoppeln und die vis_auswahl alleine triggern lassen. Sobald Du in der DropBox was in der Vis was auswählst wird dieser Datenpunkt dann getriggert und die Wochentage gefüllt und die Flow Variable ebenfalls.
Das Speichern ist dann völlig entkoppelt und hängt dann nur an einem VIS Button.
-
@mickym ich bin eigentlich davon ausgegangen dass es bereits wie von dir beschrieben läuft. Damit wird die Vis Anzeige und die Flow Variable gefüllt.
Und mit diesem Flow gespeichert und in den Timer geworfen.
Leider funktioniert das mit den Tagen noch überhaupt nicht, der Rest läuft.
Edit:
Schande über mich, dieser Flow wirft es in den Timer
-
@hafo Also dann muss man halt Schritt für Schritt vorgehen.
Wenn Du die vis_Auswahl Variable mit 7 triggerst, dann sollte ja der Datenpunkt Tomaten_Tage gelesen werden:
- Frage - werden die Datenpunkte gefüllt?
- Frage - wird die Flow Variable gefüllt`?
Also mach mal einen Screenshot von den Flow Variablen
-
@hafo Na das ist ja ne andere Geschichte mit Deinem Timer - es ist ja nur wichtig, dass der Flow über den wir geredet haben, den Datenpunkt Tomaten_Tage mit dem String füllt. Das müsstest Du ja dann auch am Timestamp sehen.
-
@mickym Ich habe alles mal durchgeschaut und noch einige falsche Datenpunkte gefunden. Aber leider komme ich noch nicht weiter.
Die Tage werden beim auswählen korrekt gefüllt,
wenn ich sie im vis ändere werden die Objekte korrekt verändert,
beim speichern geschieht gar nichts.
Er erkennt anscheinend auch nur false und schaut nicht die weiteren Datenpunkte an.Edit
Mit dem Debug direkt hinter dem "Iobroker In" sehe ich dass er keinen String abruft, sondern nur die letzte Änderung. Wenn ich irgendwo einen Haken setze kommt ein true, wenn ich ihn wegnehme ein false. -
@hafo Ändert sich den der Flow Kontext hast Du denn den 2. Part auch richtig implementiert?
Schau doch mal ob sich beim VIS drücken die FLOW Variable geändert wird? Musst Du danach immer aktualisieren.
Also hast Du diesen Part implementiert?
und die vorherige Version mit dem switch Node.
Auch hier wieder Tage klein machen bei Dir wahrscheinlich.
-
@mickym sehe ich die Flow Variable irgendwo, oder ist die nur mit einem Debug Node hinter dem functions Node sichtbar?
-
@hafo Das passt doch schau halt mal ob die Flow Variablen entsprechende Deinen Datenpunkten gesetzt sind.
-
@hafo sagte in String aufteilen:
@mickym sehe ich die Flow Variable irgendwo, oder ist die nur mit einem Debug Node hinter dem functions Node sichtbar?
-
@mickym sehr gut, das habe ich gesucht.
Ja, die Flow Variable wird angepasst. -
@hafo sagte in String aufteilen:
@mickym sehr gut, das habe ich gesucht.
Ja, die Flow Variable wird angepasst.Nun wenn die Flow Variable passt - dann geh halt weiter:
- Nachdem Du Speichern drückst - sollte doch Dein
Change Node - die Payload auf die flow Variable setzen (ggf. Prüfen)
- Die Auswahl wird über getNode gelesen und in msg.auswahl gespeichert:
dann wird die vis_Auswahl abgerufen und in msg.auswahl gespeichert und die muss dann im Verteiler stehen:
Prüfe doch bitte, ob nach Deinem Verteiler beim Speichern drücken mittels Debug Node eine Nachricht kommt.
-
@mickym Dann wird dort das Problem sein, ich habe da etwas improvisiert.
-
@hafo Nun improvisieren - kann Auswirkungen haben, das die Puzzlestückchen nicht mehr zusammenpassen.
Kommst Du denn mit meiner Anleitung nun zurecht?Wichtig ist, dass aus Deinem Verteiler das Objekt der Flow Variablen rauskommt.
Dann muss der Topic richtig gesetzt werden
Dann wird wieder das Objekt auseinandergenommen um alle trues und falses in 0 und 1 zu übersetzen und dann wird das wieder als String zusammengesetzt.Wenn Du anderweitig vorher schon in Deinem Verteiler verteilst, dann brauchst doch nur die Change Node, die die Flow-Variable in die payload kopiert vorne hinhängen.