NEWS
String aufteilen
-
@hafo Na ja so kompliziert ist es ja nicht. Ich hab Dir doch den Flow nun so hin gebastelt, dass er mit der jetzigen Struktur auskommen würde.
Aber wenn Du schon fragst ja ich würde die Vis Datenpunkte - noch eine Ebene nach unten gehen, dann brauchst Du nicht, wie ich in dem Flow gemacht habe alles filtern und kannst einfach mit Bewässerung.days.* alle Änderungen überwachen. Für jeden Bewässerungsstrang würde ich es nicht machen, da Du ja alle Stränge über eine Oberfläche im vis behandeln möchtest.
Das mit der Vis Ausgabe brauchst Du dann auch nicht umbauen, ggf. kann man halt statt Zahlen über vis gleich das ausgeben, um was es sich handelt, dann kannst Du den msg.topic direkt bauen. Also statt 7 eben Tomaten etc.
Gut wenn Du das über einen Knopf mit Speichern triggerst, dann triggerst Du es aber nicht über iobroker In Nodes, sondern machst es Einzeln über get Nodes oder List Nodes (da brauchst die Struktur nicht).
Den Timer brauchst nicht ändern - ich dachte nur - wenn ich das richtig gesehen habe, dass der für das NOdeRed Dashboard gedacht war. Egal.
Was ich ehrlich gesagt nicht verstehe warum Du Dir das mit dem String 1,1,0,0,0,0,0 usw. so kompliziert machst und nicht einfach zu den einzelnen Stängen einfach das Objekt als JSON abspeicherst, dann würdest Du Dir das Leben viel einfacher machen. Ich zeig Dir das mal als JSON. In diesem Fall könntest Du einfach beim Ein- und Auslesen den ganzen Datenpunkt nehmen und machst das auch wieder wie gehabt über Flow-Variablen. Dann braucht man keine Reihenfolgen und keine Initialisierungen .
-
@mickym ok, dann lege ich die vis objekte unter vis ab. Das mit den Strings verstehe ich halt noch nicht so ganz. Ich würde es gerne als Json speichern, verstehe aber nicht wie ich es dann im vis angezeigt bekomme und verändern kann.
Auch die Aufteilung in Stunden und Minuten ist etwas kompliziert, funktioniert in meinem Flow jedoch. Mein Hauptproblem ist halt dass der Timer ziemlich wählerisch ist mit den Inputs. Grundsätzlich könnte ich auch alles über einen Timer laufen lassen, der hätte auch verschiedene Ausgänge. Allerdings wird das füttern dadurch ziemlich kompliziert. Ich müsste ja bei jeder Änderung sämtliche Timer neu laden.
Ich habe die Objekte nun so aufgeteilt
-
@hafo So ich zeig Dir mal im Groben, wie ich es machen würde. Es enthält zumindest nun für den ganzen Zyklus den Ablauf und habe auch teilweise Deinen Flow genommen.
Ich hab jetzt nicht die Zahlen genommen - gut dann ist die Reihenfolge nicht so schön, aber das kannst ja dann in meinem Flow entsprechend ändern.
Das Ganze arbeitet nun doch wieder schön mit einer Flow-Variablen ist aber ziemlich einfach:
1- Der vis-Auswahl Punkt wird getriggert - Dein Flow - aber bei den Tagen habe ich das nun geändert um von dem String wegzukommen:
Der Flow schreibt die Datenpunkte unter Tage! (also easy)
- Durch das Schreiben werden automatisch der folgende Flow getriggert und in eine Flow Variable geschrieben:
und gleichzeitig die Punkte für die Vis Visualisierung gesetzt bzw. aktualisiert.
Somit wird auch über jede vis Änderung in Echtzeit die Flow Variable aktualisiert.
- Sobald Du auf Speichern drückst hier mit einer Inject Node simuliert, wird die Flow Variable wieder ausgelesen, das kennst Du ja und dann die Auswahl Variable abgefragt und nun ein JSON String in den entsprechenden Datenpunkt geschrieben und kann dann wie unter 1 wieder ausgelesen werden:
-
Vielen vielen Dank. Ich bin gerade ein bisschen am vis am arbeiten. Auch das braucht seine Zeit wenn man noch keine Vorkentnisse hat
Nun muss ich mal raus aufs Bike. Ich melde mich wenn ich weiter bin (oder Hilfe benötige)Bei deinem Flow muss ich aber den String in 1.0.0.1.0.0.0 umwandeln um den Timer zu füttern. Das sollte ich mittlerweile aber hinbekommen.
-
@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?