NEWS
Verständnisfrage: Lineares Abarbeiten von Funktionen
-
Hallo, mit meinem Node-Red-Dashboard, welches die Infos von (jetzt noch) einer JS-Funktion erhält, bin ich erstmal zufrieden:
Die Daten werden in einer JS-Funktion aufbereitet:
// Datenpunkt-ID // Solar-Daten var idGetSolarprod = 'fritzdect.0.DECT_116570452148.power'; var idSetSolarprodGZ = '0_userdata.0.Zuhause.SolarproduktionGZ'; var idGetEinspeisung = 'shelly.0.SHPLG-S#7C87CEBA4615#1.Relay0.Power'; var idSetEinspeisungGZ = '0_userdata.0.Zuhause.EinspeisungGZ'; var idGetStromsaldo = 'sonoff.0.Hichi-SGM-1._Verbrauch_Aktuell'; var idSetStromverbrauchGZ = '0_userdata.0.Zuhause.StromverbrauchGZ'; // CPU-Daten var idGetCPUTakt = 'rpi2.0.cpu.cpu_frequency'; var idSetCPUTaktString = '0_userdata.0.Zuhause.CPUTaktString'; var idGetCPULast = 'rpi2.0.cpu.load1'; var idSetCPULastProz = '0_userdata.0.Zuhause.CPULastProz'; var idGetCPUTemp = 'rpi2.0.temperature.soc_temp'; var idSetCPUTempGZ = '0_userdata.0.Zuhause.CPUTempGZ'; // Berechnung aller Infodaten des Node-Red-Dashboards function NRDB() { var nSolProd = getState(idGetSolarprod).val; var nSolProdGZ = Math.trunc(nSolProd) * -1; setState(idSetSolarprodGZ, nSolProdGZ, true); var nEin = getState(idGetEinspeisung).val; var nEinGZ = Math.trunc(nEin) * -1; setState(idSetEinspeisungGZ, nEinGZ, true); var nStrSal = getState(idGetStromsaldo).val; var nSolProd = getState(idSetSolarprodGZ).val; var nEinspeis = getState(idSetEinspeisungGZ).val; var nStrVer = nStrSal - nSolProd - nEinspeis; var nStrVer = Math.trunc(nStrVer); setState(idSetStromverbrauchGZ, nStrVer, true); var nCPUT = getState(idGetCPUTakt).val; if (nCPUT < 1000) { var nCPUTS = nCPUT + ' MHz'; } else { var nCPUTS = (nCPUT / 1000) + ' GHz'; var nCPUTS = nCPUTS.replace(".",","); } setState(idSetCPUTaktString, nCPUTS, true); var nCPUL = getState(idGetCPULast).val; var nCPULP = Math.trunc(nCPUL * 100); setState(idSetCPULastProz, nCPULP, true); var nCPUT = getState(idGetCPUTemp).val; var nCPUTGZ = Math.trunc(nCPUT); setState(idSetCPUTempGZ, nCPUTGZ, true); } // Aufruf der Funktion alle 0,5 Sekunden setInterval(NRDB, 500);
Zuvor hatte ich für jede Info eine Funktion erstellt:
Hier ist mir aber immer noch nicht ganz klar, ob diese einzelnen JS-Scripte auch nacheinander abgearbeitet wurden (jedes Script wurde mit setInterval(Info, 500) aufgerufen, was bei mehreren setInterval innerhalb eines Scripts ja definitiv der Fall wäre.
Zumindest fällt mir beim Aktualisieren des Node-Red-Dashboards jetzt keine schnellere Aktualisierung auf (also vorher 6 Scripte, die jeweils alle 500ms aufgerufen wurden; jetzt 1 Script alle 500ms).
Oder wird das durch andere Parameter im iobroker beeinflusst?
-
@shai0hulud
Ich verstehe dein Problem und oder deine Frage nicht wirklich? Wenn du nicht extreme Berechnungen in deinem Skript hast sollten die alle in wenigen ms (wenn überhaupt) abgeschlossen sein und es ist schnuppe ob 1 oder 6 Skripte. Ich nehme an das die Übertragung der Daten und die Aufbereitung einen längeren Delay hat.Wenn es dir darum geht das Node-red nicht schnell genug aktualisiert, kann ich dir leider nichts zu sagen. Nutze es nicht.
-
Ich habe das mit ein bißchen Rumspielen und Checken der Objects im ioBroker nun bestätigen können, was Du schon vermutet hast: Es liegt an der Übertragung der "Rohdaten" bzw. deren Aktualisierungsrate.
Der Hichi-Lesekopf zum Beispiel loggt nur alle 10 Sekunden, klar dass ich dann soviele Updates meines Scripts in der Zeit laufen lassen kann wie ich will, die Summe der Werte wird nur max. alle 10 Sekunden stimmen.
-
@shai0hulud sagte in Verständnisfrage: Lineares Abarbeiten von Funktionen:
Hichi-Lesekopf
Das hab ich ehrlich gesagt aufgegeben. Ich mache das mit Grafana und Influx, die Anzeigen die etwas berechnen sind immer mindestens auf 1 Minute zusammengefasst. Bei Echtzeit werden nur Werte angezeigt und zwar nicht genug um nachrechnen zu können. Solarstrom - Einspeisung + Bezug - gemessener Verbrauch = sonstiger Verbrauch (- 2kw) wtf. Wer hat da ein ein paar Balkonkraftwerke auf gestellt
Meine Aktualisisierungraten sind:
SMA 1sec
shelly 5 sec
tasmota 10 sec (oder powerdelta)
fritzboxDect(ne minute?)