NEWS
Wasserregulierung Aquarium
-
@aphofis sagte in Wasserregulierung Aquarium:
Also ist das Object so zu sagen die Baumstruktur und ein Array ein Teilabschnitt.
Ein Objekt kann Daten enthalten die festgelegt sind oder bezogen werden können und ein Array genau so. Doch umfasst alle Arrays immer das Object.Nein Arrays und Objekte sind völlig unabhängig von eineinander komplexe Datentypen.
Es gibt einfache, skalare Datentypen, wie
- Zeichenkette (string)
- Zahl (number)
- Logikwert (boolean)
und eben komplexe Datentypen, wie
- Arrays
- Objekte.
Ein Array ist einfach eine Sammlung von anderen Datentypen. Der Hauptunterschied zu einem Objekt ist, dass die Datentypen auch gemischt und einfach eine Liste sind. Auf den Inhalt eines Arrays greift man immer über den Index zu.
Arrays werden meistens einfach verwendet, wenn man einfach eine Anzahl von Werten hat (der Bedeutung man entweder nicht kennt oder die die gleiche Bedeutung haben.
Dabei hat das erste Element immer den Indexwert 0, das zweite den Indexwert 1 usw.
Im JSON wird ein Array einfach durch eckige Klammern und dann die einzelnen Werte durch Komma getrennt.[1,2,3,4,5]
Ein Objekt
{"_msgid":"7b6801a822df7071","daten":["durchfluss","tag","jahr","gesamt"]}
Bei einem Objekt kannst Du direkt auf eine Eigenschaft zugreifen, da jede Eigenschaft einen Namen hat.
Wie kann ich jetzt den Inhalt aus dem Array (Object) raus filtern um die dann in die Datenpunkte zu schreiben.
Kann man die Datenpunkte via topic reinholen oder wie macht man das !?Du greifst auf ein Objekt zu, in dem Du den Pfad kopierst, der Dir die Hierarchie ausgibt.
So und ich will Dir nicht einfach den Flow machen, sonst lernst Du nichts. Ich habe Dir den Flow mit jedem einzelnen Microschritt durchgegangen. Wieso bist Du nicht in der Lage, die fehlen Datenpunkte in Dein Objekt zu lesen?
Einmal hast Du einen Flow - und 3 hängen in der Luft, anstelle sie in den Flow zu integrieren???
Hast Du wirklich jeden einzelnen Schritt verstanden, den ich Dir minutiös aufgelistet habe. Wenn Du das einfach nur durchliest dann lernst Du nichts. Ich habe Dir 3 Fehler aufgelistet und worin die bestehen. Was fehlt Dir, um diese Fehler zu beheben.
Wir können gerne Fehler für Fehler im Detail durchgehen, wenn Du es nicht verstehst.Hast Du alle Flows zum Verständnis importiert und Dir angeschaut.
-
@aphofis sagte in Wasserregulierung Aquarium:
Ach ja na klar bastel ich zwischendurch an dem Script rum. Es wurmte mich halt, das ich das nicht verstanden hatte.
Warum lässt Du das nicht?
Du kannst auch keine Integralrechnung, wenn Du die Grundrechenarten nicht beherrschst. Ich versuche Dir doch das Handwerkszeug beizubringen. Deinen Flow habe ich schon im Hinterkopf.
Ich bleibe ja bei Deinem Flow, indem ich minutiös auseinander nehme. Dann ist doch ungerichtetes Rumprobieren einfach Zeitverschwendung.
-
Also wenn Du soweit bist und alles verstanden hast, dann sag wenn Du entweder die 3 Fehler in Deinem Flow behoben hast bzw. wenn Du bei einem Fehler noch Hilfe brauchst.
-
@mickym
Nein hab es noch nicht verstanden, welche node die Daten rein holt bzw mit iobroker get aber wie bekomme ich den wert vom get dann in den array!? -
@aphofis Du BRAUCHST KEIN Array - lösch das wieder. Hol Dir die Werte genauso rein, wie Du dir den durchfluss in das Nachrichtenobjekt geholt hast.
Der 1. Fehler war aber die doppelte 5.1 Multiplikation in Deiner Change Node.Ausserdem wenn Du Dir ALLES durchgelesen hättest, dann hab ich glaube geschrieben, dass Du alle Eigenschaften aus Deiner Inject Node löschen sollst. Warum machst Du das nicht und hantierst mit Arrays rum?
-
@mickym sagte in Wasserregulierung Aquarium:
ult
das doppelte berechnen habe ich raus genommen
jetzt weiß ich ja das dass aufeinander aufbaut.
Sprich das die ertse rechnung den wert 312 ausgibt auch wenn nur intern wenn man den dann per namen anspricht durchfluss dann durch 1000 + jahr rechnet dann den wert ausgibt 1,5 Liter.
habe ich verstanden. -
@aphofis Gut dann sollte Deine Change Node ja nun so aussehen:
nächstes Mal bitte posten.
Hast Du alle Eigenschaften aus der Inject Node gelöscht?
So und dann hol die Eigenschaften jahr, gesamt und tag auch noch in das Nachrichtenobjekt.
Sprich das die ertse rechnung den wert 312 ausgibt
Nein. Im Durchfluss Datenpunkt stand 67 und die Berechnung ergab 341,7.
Ich habe ECHT keine Lust wenn das was ich alles was ich bereits geschrieben habe, wieder umgeschmissen wird.
-
@mickym
Ja hab alles raus.
Ich weiß nur nicht wie ich die Datenpunkte rein bekomme kann muss ich in der inject node den topic rein holen oder wie macht man das!? -
@aphofis Na Du hast doch den durchfluss auch rein bekommen. Warum machst Du es dann nicht mit den anderen genauso?
Du holst EINEN Wert NACH dem ANDEREN in das Nachrichtenobjekt
-
@mickym Hallo, das war nur weil ich in den virtuellen datenpunkt nicht 341.7 eingetragen hatte hatte halt den falschen wert 67 eingetragen das war keine absicht!
-
Hab ich ja aber das ist 100 prozentig falsch und dann bekomme ich gleich auf den deckel
[ { "id": "cdee856ecf99ad2c", "type": "ioBroker get", "z": "e96d40e5c03c8e73", "name": "tag", "topic": "0_userdata.0.Kaffeemaschine.Wasser_Tag", "attrname": "payload", "payloadType": "value", "errOnInvalidState": "nothing", "x": 380, "y": 420, "wires": [ [ "1a1876d6fd414b64" ] ] }, { "id": "8fbb9f181c70628a", "type": "ioBroker get", "z": "e96d40e5c03c8e73", "name": "jahr", "topic": "0_userdata.0.Kaffeemaschine.Wasser_Jahr", "attrname": "payload", "payloadType": "value", "errOnInvalidState": "nothing", "x": 390, "y": 480, "wires": [ [ "1a1876d6fd414b64" ] ] }, { "id": "fea33a2388b19fea", "type": "ioBroker get", "z": "e96d40e5c03c8e73", "name": "gesamt", "topic": "0_userdata.0.Kaffeemaschine.Wasser_Gesamt", "attrname": "payload", "payloadType": "value", "errOnInvalidState": "nothing", "x": 380, "y": 550, "wires": [ [ "1a1876d6fd414b64" ] ] }, { "id": "66eeec1e6f2be7b4", "type": "inject", "z": "e96d40e5c03c8e73", "name": "", "props": [ { "p": "durchl", "v": "", "vt": "str" } ], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "x": 170, "y": 360, "wires": [ [ "0fdf123af6451d89", "cdee856ecf99ad2c", "8fbb9f181c70628a", "fea33a2388b19fea" ] ] }, { "id": "071f99aa6aae94c4", "type": "debug", "z": "e96d40e5c03c8e73", "name": "Teste Berechnung", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "true", "targetType": "full", "statusVal": "", "statusType": "auto", "x": 830, "y": 360, "wires": [] }, { "id": "1a1876d6fd414b64", "type": "change", "z": "e96d40e5c03c8e73", "name": "", "rules": [ { "t": "set", "p": "durchfluss", "pt": "msg", "to": "durchfluss * 5.1", "tot": "jsonata" }, { "t": "set", "p": "jahr", "pt": "msg", "to": "durchfluss / 1000 + jahr", "tot": "jsonata" }, { "t": "set", "p": "gesamt", "pt": "msg", "to": "durchfluss / 1000 + gesamt", "tot": "jsonata" }, { "t": "set", "p": "tag", "pt": "msg", "to": "durchfluss + tag", "tot": "jsonata" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 600, "y": 360, "wires": [ [ "071f99aa6aae94c4" ] ] }, { "id": "0fdf123af6451d89", "type": "ioBroker get", "z": "e96d40e5c03c8e73", "name": "durchfluss", "topic": "0_userdata.0.Kaffeemaschine.Counter_Kallibriert", "attrname": "durchfluss", "payloadType": "value", "errOnInvalidState": "nothing", "x": 380, "y": 360, "wires": [ [ "1a1876d6fd414b64" ] ] } ]
Array und Object habe ich ja verstanden aber ich denke mir fehlt das nötige programmier wissen.
Wie man per json zb einen datenpunkt dann abgreift -
@mickym sagte in Wasserregulierung Aquarium:
@aphofis Na Du hast doch den durchfluss auch rein bekommen. Warum machst Du es dann nicht mit den anderen genauso?
Du holst EINEN Wert NACH dem ANDEREN in das Nachrichtenobjekt
-
@mickym
ist es so korrekt !?
-
Nein wenn Du das mit den Nachrichtenobjekten verstanden hättest, dann kann das nicht funktionieren.
Du multiplizierst das Nachrichtenobjekt 4 mal und holst unterschiedliche Werte da rein und leitest sie dann alle wieder in die ChangeNode.
-
Das erste Nachrichtenobjekt holt den Durchfluss. Jahr und Tag, Gesamt sind NICHT definiert.
-
Das zweite Nachrichtenobjekt holt den Tag. Durchfluss, Jahr und Gesamt sind NICHT definiert.
Hier kommt gar nichts raus -
usw.
Die Nachrichten warten nicht aufeinander.
-
-
@aphofis sagte in Wasserregulierung Aquarium:
@mickym
ist es so korrekt !?
Super!!!!!
Der Kandidat hat 1000 Punkte. Solltest Du ja nun selbst erkennen!
Nur woher kommt das KOMISCHE ARRAY in der payload???
-
@mickym Naja ich bin in vielen dingen schnell nur Node-Red muss ich erst kennenlernen.
und da ich Blockly einfach zu kompliziert finde und es mega finde, das ich blockly auch gleich die werte an den nodes angezeigt werden. Ich muss nur erstmal die Struktur verstehen und da man so viele variablen möglichkeiten hat ist node-red ein gigantisches werkzeug. -
@aphofis
Ach ja payload array hab ich raus geschmissen -
@aphofis sagte in Wasserregulierung Aquarium:
Naja ich bin in vielen dingen schnell nur Node-Red muss ich erst kennenlernen.
Ja dann musst Du Dich aber ein bisschen leiten lassen und erst mal die Schritte tun, die ich vorgebe und nicht selbst los probieren. Wenn Du dann sicher bist, kannst alleine loslegen.
So wir sind nun soweit, dass Du in Deinem Nachrichtenobjekt alle korrekten Zahlen hast. Woher kam dieses Array in der payload?
-
Ist es kompliziert einen wert zu runden innerhalt der rechnung fpr durchfluss !? hatte da was gefunden aber ob das richtig ist und ob ich das nehmen kann ka.
$round(number [, precision])
Auf 2 nachkomma stellen wäre mir zwar lieber aber vemurlich komplex
-
@aphofis sagte in Wasserregulierung Aquarium:
Ist es kompliziert einen wert zu runden innerhalt der rechnung fpr durchfluss !? hatte da was gefunden aber ob das richtig ist und ob ich das nehmen kann ka.
$round(number [, precision])
Nein das ist korrekt und ja mit Precision gibst Du ja die Anzahl der Nachkommastellen an. Du kannst also die ganze Berechnungen auf 2 Kommastellen runden indem Du die $round Funktion aussenrum machst.
Du bekommst doch im JSONATA Editor immer ein Beschreibung der Funktion
da steht doch, dass man mit Precision die Anzahl der Nachkommstellen bestimmt.
somit ist dann alles auf 2 Nachkommastellen gerundet:
Auf 2 nachkomma stellen wäre mir zwar lieber aber vemurlich komplex
Ist doch nicht komplex, oder?