NEWS
Hm-rega Aktualisierung nur bei echter Änderung
-
Hallo,
der hm-rega-Adapter verursacht eine ziemliche Grundlast, da alle Variablen im konfigurierten Intervall aus der CCU gelesen und immer überschrieben werden. Die Last entsteht leider nicht nur in der CCU und js-Controller sondern auch in node-red und vis.
Hier wäre es besser, wenn vor dem Überschreiben des Werts erst einmal überprüft wird, ob der in der states-DB gespeicherte Wert vom neuen Wert abweicht oder ack noch nicht gesetzt ist und nur dann, wenn eine Wertänderung erforderlich ist, der Wert wirklich überschrieben wird.
Hierfür wäre eine neue Methode (z.B. setStateIfChanged) im js-Controller sinnvoll, die die Wertprüfung direkt vor dem Speichern macht. Dann wäre keine zusätzliche Kommunkikation zwischen hm-rega-Adapter und js-controller erforderlich und die Latenz würde nicht wesentlich steigen.
Gruß
Markus
-
Hallo,
der hm-rega-Adapter verursacht eine ziemliche Grundlast, da alle Variablen im konfigurierten Intervall aus der CCU gelesen und immer überschrieben werden. Die Last entsteht leider nicht nur in der CCU und js-Controller sondern auch in node-red und vis.
Hier wäre es besser, wenn vor dem Überschreiben des Werts erst einmal überprüft wird, ob der in der states-DB gespeicherte Wert vom neuen Wert abweicht oder ack noch nicht gesetzt ist und nur dann, wenn eine Wertänderung erforderlich ist, der Wert wirklich überschrieben wird.
Hierfür wäre eine neue Methode (z.B. setStateIfChanged) im js-Controller sinnvoll, die die Wertprüfung direkt vor dem Speichern macht. Dann wäre keine zusätzliche Kommunkikation zwischen hm-rega-Adapter und js-controller erforderlich und die Latenz würde nicht wesentlich steigen.
Gruß
Markus `
Interessanter Vorschlag. -
Ich hab mal in die statesInRedis.js und statesInMemServer.js rein geschaut.
Eigentlich ist da ja schon alles da. Der alte Wert wird ausgelesen und das Timestamp für die Änderung nur dann geändert, wenn eine Wertänderung stattgefunden hat. Man müsste nur per optionalem Parameter festlegen können, ob der Wert geschrieben werden soll, wenn sich nur der ts-Wert geändert hat.
-
der hm-rega-Adapter verursacht eine ziemliche Grundlast, da alle Variablen im konfigurierten Intervall aus der CCU gelesen und immer überschrieben werden. Die Last entsteht leider nicht nur in der CCU und js-Controller sondern auch in node-red und vis.
Hier wäre es besser, wenn vor dem Überschreiben des Werts erst einmal überprüft wird, ob der in der states-DB gespeicherte Wert vom neuen Wert abweicht oder ack noch nicht gesetzt ist und nur dann, wenn eine Wertänderung erforderlich ist, der Wert wirklich überschrieben wird. `
Da der hm-rega-Adapter die Werte ohnehin puffert, wäre eine einfache Abfrage innerhalb des Adapters sinnvoll (Beispiel: pollVariables, Zeile 463)if(regaStates[id] !== val) { regaStates[id] = val; adapter.setState(adapter.namespace + '.' + id, val, true); }
-
Da der hm-rega-Adapter die Werte ohnehin puffert, wäre eine einfache Abfrage innerhalb des Adapters sinnvoll (Beispiel: pollVariables, Zeile 463) `
Danke für den Tipp. Die Stelle sieht vielversprechend aus. Ich ändere das mal bei mir lokal und schaue, ob noch alles korrekt läuft.
-
ich hab die Änderung nun in die beiden Poll-Funktionen für Variablen und Programm-Status eingebaut.
Funktioniert soweit. Änderungen werden weiterhin übertragen, aber ansonsten werden keine Ereignisse ausgelöst.
Falls jemand testen möchte:
https://github.com/nobodyMO/ioBroker.hm-rega.git
Wenn keine Probleme auftauchen werde ich morgen dafür einen pull request einstellen.
-
ich hab die Änderung nun in die beiden Poll-Funktionen für Variablen und Programm-Status eingebaut. `
Schau Dir mal noch zwei Stellen in der von Dir geänderten Version an:-
Zeilen 649-651
-
Zeilen 1223- 1240
Diese sollten wohl auch noch durch eine entsprechende Abfrage ergänzt werden ?
EDIT: Die Funktionen mit den angegebenen Zeilen werden anscheinend nur bei Adapter-Start aufgerufen. Damit erübrigt sich die zusätzliche Abfrage.
-
-
ok.
Ich hab noch eine Kleinigkeit ergänzt:
Wenn ein State in der CCU gesetzt wird, der State nun anschließend direkt mit ack=true überschrieben, weil dies nur noch durch den Poll erfolgt, wenn sich der Wert unterscheidet.
-
Habe erst jetzt die Diskussion entdeckt, bevor aber auch die Datei geändert. :?
Ist noch nicht getestet, aber bei mir sind mehr Verbesserungen drin.
48_hm-rega.js -
Danke bluefox.
Ich hab die neue Version bei mir installiert. Bis jetzt läuft sie ohne Probleme und wie ich es mir vorgestellt hatte.
-
Man kann jetzt vom git updaten und ausprobieren. Ich hoffe es wird was für Performance sorgen.
Du (nobody) hast schon gut die Stelle gefunden. Wenn die Leute update alle 5-10 Sekunden haben und dazu noch 100-150 Alarme/Variable/Programme, dann ist es ordentlich last gewesen.
-
Auch installiert, alles ok bisher.
Ich beobachte mal die Lastdaten der CCU die nächsten Tage
-
Seit 23.8. installiert. Tablet reagiert viel besser. Beobachte weiter, aber sieht sehr gut aus!
Pix
-
Die Lastgraphen der CCU zeigen keine echte Veränderung. Vom CubieTruck hab ich keider keine
-
Hallo apollon77,
hätte mich auch sehr gewundert, wenn sich für die ccu irgendwas geändert hätte. Es werden ja weiterhin alle Werte abgerufen und erst im Adapter gefiltert.
Gesendet von meinem SM-G900F mit Tapatalk