NEWS
Verfügbarkeit von Sensoren über Node Red überwachen
-
@mickym said in Verfügbarkeit von Sensoren über Node Red überwachen:
@schmetterfliege Doch die Flowvariablen brauchst du immer - da die Daten nicht jederzeit zur Verfügung stehen.
Dann verstehe ich in der Tat nicht so ganz was genau du meinst
Ich werde relativ spät heute Nacht frühestens wieder Zuhause sein dann nochmal versuchen nachzuvollziehen wie dein Weg genau funktioniertDie Function Node definiert die Tabelle, ui_control bastelt sie (setzt einfach nur das Topic auf das was in der Function Node geliefert wurde, das muss so damit die Tabelle funktioniert soweit ich weiß - selbst ausgedacht hab ich sie mir auf jeden Fall nicht.
Die Funktion Node macht nicht die Tabelle - zumindest in dem ursprünglichen Flow - der ui-control Node - für mich ist es nicht ersichtlich was die machen sollen. Das Objekte-Array ist eigentlich nach der JOIN Node fertig - ich kann mir höchstens vorstellen, dass in der function Node noch Formatierungsanweisungen für die Tabelle enthalten sind. - aber dann interessiert die uns in dem Kontext. nicht. OK - aber mit den Infos kann man schon arbeiten. Und die ui_control ist ja eine Change Node musst halt mal posten - was da drin steht.
Mit "bastelt" die Tabelle meine ich dass die Funktion Node definiert wie die Tabelle aussieht^^ Wie breit die einzelnen Spalten sind, wie die Überschriften sind, wie deren Inhalt auszusehen hat, usw.
Die ui_control ChangeNode setzt einfach nur msg.ui_control auf msg.topic.
Als ich gerade kurz heim gekommen bin und draufgeschaut habe, sah die Tabelle aber plötzlich so aus:
Nachdem die in Change Node kurz wieder an die Stelle gepackt habe, sag die Tabelle wieder so aus wie sie aussehen sollte.
Wie die das macht - da müsste ich mich mit der table node außeinandersetzen um das vielleicht mal zu verstehen haha.Wenn das im Moment die Objekte sind, dann ist trotzdem wichtig, dass Du noch in einer Flow-variablen sowohl die timestamps sammelst - im Einzelnen Objekt sind die unwichtig - falls Du es anzeigen willst ok - aber Du willst ja Differenz haben.
weil fromNow() nicht mit Unix timestamps klappt
Na ja das stimmt halt nicht - aber Du hast Dir wahrscheinlich weder meinen Thread zur Datums und Zeitverarbeitung durchgelesen - noch die Anleitung von der moments library.
Wenn ich also Deinen timestamp aus Deinem Bild nehme
dann funktioniert die Differenzberechnung zum jetzigen Zeitpunkt sehr wohl.
Doch, hatte ich. Die Nodes sind inzwischen auch raus, aber ich hatte wirklich Probleme damit mit den Timestamps zu arbeiten.
Ich vermute weil ich irgendwie im Laufe des Flows die Timestamps zu Strings gemacht habe, weil in dem Fall kann ich das Problem reproduzieren. Mir wäre aber nicht bewusst dass ich das irgendwo mache, denn in den Flowvariablen stehen die als timestamps und nicht als strings. Naja, sie sind weg und es funktioniert. Also alles gut -
Ich mach mal den Teil mit der Zeitberechnung einzeln, da es ja hauptsächlich darum geht
Wenn das im Moment die Objekte sind, dann ist trotzdem wichtig, dass Du noch in einer Flow-variablen sowohl die timestamps sammelst - im Einzelnen Objekt sind die unwichtig - falls Du es anzeigen willst ok - aber Du willst ja Differenz haben.
Ich bin wahrscheinlich echt einfach zu doof das zu verstehen, aber... die timestamps SIND in den Flowvariablen.
Genau so wie die Differenz.
Das hier ist das was aus der Join-Node rauskommt:
Die Zeitdiff ist aber aktuell nur vom Initialisieren der Tabelle und wird nicht aktualisiert.
Soll die Berechnung nicht in die FlowVariablen sondern nach der Join Node stattfinden? Meinst du das? -
Ehrlich gesagt - verstehe ich im Moment nicht mehr wo Du stehst - aber in der Tabelle schaut es ja so aus, als ob Du nun alles beieinander hast. Das mit der msg.ui_control dient der Tabellenformatierung - habe ich soweit nachvollzogen. Im Prinzip ist mir wie gesagt weder klar, wo Du die Timestamp setzt bzw. in die Objekte aufnimmst, noch wo Du die Zeitdifferenz berechnest.
-
Ich versuche hier mal den Flow der die ganzen Daten sammelt zu erklären.
Am Ende kommt jeweils ein der Payload mit sämtlichen Flowvariablen, mit denen ich dann die Tabelle bastel.
Ich habe hier vergessen zu erwähnen dass nach 500ms die Flowvariablen in den Payload geladen und rausgegeben werden, um die Tabelle dann auch darzustellen.EDIT: ich hab das auf einem kleinen Fernseher den ich als Monitor benutze gemacht, auf dem richtigen Monitor ist das alles leider furchtbar klein... sorry
EDIT2:
Das sieht zwar alles furchtbar aus, funktioniert so aber erstmal.
Was ich halt nicht hinbekomme ist da irgendwo einzubauen dass beim Aktualisieren eines Sensors die Zeitdifferenzen für ALLE Sensoren neu berechnet werden. -
@schmetterfliege sagte in Verfügbarkeit von Sensoren über Node Red überwachen:
Was ich halt nicht hinbekomme ist da irgendwo einzubauen dass beim Aktualisieren eines Sensors die Zeitdifferenzen für ALLE Sensoren neu berechnet werden.
Nun wie gesagt - ich kenne den Flow ja in Grundzügen, den hab ich ja mit entwickelt. Dein Schaubild unten fand ich auch etwas übersichtlicher. Wie gesagt wenn Du es nur um das aktualisieren der anderen Zeitstempel geht und Du alles aktuell hast, wenn ein Gerät triggert - dann zeig einfach die Flow variable wie die Zeitstempel gespeichert sind.
-
@mickym
Last update ist die Differenz aus der Initialisierung, timestamp ist der UNIX timestamp den ich bei jedem Update aktualisiere.
Also genau so abgespeichert wie ich es dann auch für die Berechnung bei der Initialisierung benutze. -
@schmetterfliege Nein nicht die Objekte für die Tabelle - ich sagte doch Du sollst die Zeitstempel in einer eigenen Variable ausserhalb der Tabelle speichern.
-
@mickym said in Verfügbarkeit von Sensoren über Node Red überwachen:
@schmetterfliege Nein nicht die Objekte für die Tabelle - ich sagte doch Du sollst die Zeitstempel in einer eigenen Variable ausserhalb der Tabelle speichern.
Also die Objekte für die Tabelle speichere ich unter "Zigbee" ab.
Meinst du damit ich soll die Timestamps nicht unter "Zigbee" abspeichern, sondern unter zb. "Timestamps"? -
@schmetterfliege Ja das sage ich doch die ganze Zeit. In einer eigenen Variable aber auch mit der ID - als Schlüssel. Du kannst diese an der gleichen Stelle aktualisieren bzw. initialisieren, aber werden zu diesem Zeitpunkt noch nicht in die zigbee Objekte aufgenommen.
-
Erledigt. -
@schmetterfliege Ok - dann sollten die Zigbee Objekte jetzt wieder ohne Zeitangaben sein? Und möchtest Du die ts denn in der Tabelle als UNIX ts haben oder formatiert?
-
@mickym said in Verfügbarkeit von Sensoren über Node Red überwachen:
@schmetterfliege Ok - dann sollten die Zigbee Objekte jetzt wieder ohne Zeitangaben sein?
Genau, die Timestamps sind da nicht mehr drin.
Nur die berechnete Zeitdifferenz. -
@schmetterfliege Na die brauchst auch nicht da drin - das machen wir jetzt - Du willst die doch über alle Objekte haben - dachte ich.
-
@mickym said in Verfügbarkeit von Sensoren über Node Red überwachen:
@schmetterfliege Na die brauchst auch nicht da drin - das machen wir jetzt - Du willst die doch über alle Objekte haben - dachte ich.
Okay, die hab ich jetzt auch rübergeschoben:
ich bin ehrlich: ich verstehe nicht so ganz wieso ich die in einem eigenen Objekt speichern soll.
Was für einen Unterschied macht das ob die in Zigbee gespeichert sind oder unter einem eigenen Objekt? -
@schmetterfliege Du musst die Zeitdifferenz da nicht rüberschieben - das machen wir erst jetzt. Wir brauchen nur eine Flow Variable ausserhalb der Tabelle die die aktuellen Zeitstempel enthält.
Mach bitte einfach vor der letzten function Node eine split und eine join Node. Die join Node kann auf automatisch bleiben. Hinter die Split Node nur noch mal schauen, ob da quasi jedes Zigbee Objekt als eigene payload auftaucht. Als Debug Fenster posten.
Also da wo debug 11 ist nochmal ein split und eine join node und die debug 11 an die split node.
-
@mickym
Nevermind, bin schon dabei -
@schmetterfliege Ja wo die debug 11 in Deinem bild ist:
-
So richtig? Die einzelnen Zigbee Objekte sind ein eigener Payload und enthalten keine Timestamps, aber die Zeitdifferenzen
-
Aber wieso nochmal die Split und die Join Node?
Da kommt exakt das gleiche Ergebnis raus wie bei Split und Join davor:
-
@schmetterfliege Passt. - Bei einer ist zwar schon wieder lastupdate drin - aber das wird eh jetzt überschrieben - aber machs halt weg, wo Du es reingeschrieben hast.
Im Prinzip kommt dazwischen nun die Change Node rein, die ich unten gepostet habe. Ich passe das gerade an.