NEWS
CCU REGA Variablen schreiben
-
Hallo zusammen,
ich habe eine kleine Frage. Ich habe eine Wetterstation gebaut welche zu einem Arduino via NRF24 Daten sendet. Bisher hat der dann ein Script auf der CCU aufgerufen und die Daten in eine Systemvariable geschrieben.
Da das nicht so performant und Fehleranfällig ist, habe ich das nun geändert und schreibe direkt auf die CCU Variable im IOBroker über das SimpleAPI. Die Variable wird mittels History und SQL Adapter geloggt.
Nun habe ich das Problem, das der veränderte Datenwert mehrfach geloggt wird und zwar mit Bestätigt Falsch und Wahr, manchmal sogar mehrfach. Ich nehme an der Grund ist der folgende: SimpleAPI verändert den Wert im IOBroker welcher vom REGA Adapter dann in die CCU synchronisiert wird und dort wieder gegengelesen wird. Das führt zu einem weiteren (oder mehreren) Update der gleichen Variable weshalb sie erneut geloggt wird.
Gibt es einen Weg das zu verhindern? Nun habe ich plötzlich 2-3x mehr Datenpunkte pro Variable mit diesem Ping-Pong.
Besten Dank!
-
schreibe direkt auf die CCU Variable im IOBroker über das SimpleAPI. `
Weshalb über SimpleAPI und nicht über ioBroker.hm-rega ? -
Ähm wie meinst du über HM.REGA? Der Arduino schickt das von aussen über LAN. Hat HM.REGA eine API welche von aussen Ansprechbar ist? Der Adapter synchronisiert doch "nur" CCU und IOBroker, oder?
Hier ein Bild wie das aktuell aussieht:
-
Der Adapter synchronisiert doch "nur" CCU und IOBroker, oder? `
Ja, und Systemvariablen kann man in ioBroker nicht nur lesen sondern auch schreiben: setState(id, Wert).Wie bekommst Du die Daten vom Arduino in ioBroker ?
-
Ja, und Systemvariablen kann man in ioBroker nicht nur lesen sondern auch schreiben: setState(id, Wert).
Wie bekommst Du die Daten vom Arduino in ioBroker ? `
Ja genau das ist ja mein Problem hier SimpleAPI aktualisiert die Variable, REGA synct das zur CCU und dann kommt es wieder zurück was dann zu mehrfachen Einträgen in SQL & History führt. Ich habe einen Arduino mit Ethernet Hat. Damit mache ich einen HTTP Get auf das SimpleAPI.
Gibt es ein öffentliches API von REGA für Calls von ausserhalb des IOBrokers?
-
Nun habe ich das Problem, das der veränderte Datenwert mehrfach geloggt wird und zwar mit Bestätigt Falsch und Wahr, `
@tops4u:Hier ein Bild wie das aktuell aussieht: `
Das ist kein Log, sondern die Ereignisliste. Es muss so sein, dass zwei Einträge erzeugt werden: Erst mit ack = false, damit an die CCU gesendet wird und dann mit ack = true, wenn die Bestätigung durch die CCU erfolgt ist. Genau das ist die Funktion von "Bestätigt" (ack).
@tops4u:was dann zu mehrfachen Einträgen in SQL & History führt. `
Das kann man mit den Einstellungen in SQL und History verhindern (Haken bei "Änderungen aufzeichnen"). -
Das ist kein Log, sondern die Ereignisliste. Es muss so sein, dass zwei Einträge erzeugt werden: Erst mit ack = false, damit an die CCU gesendet wird und dann mit ack = true, wenn die Bestätigung durch die CCU erfolgt ist. Genau das ist die Funktion von "Bestätigt" (ack). `
Das ist aber das was ich in der DB erhalte, wenn ich das mit dem SQL Adapter Logge und in die Tabellen Ansicht gehe. Dann sehe ich auch 2-3x den gleichen Wert mit unterschiedlichen Timestamps und Bestätigungsflags. Selbst wenn ich Änderungen Aufzeichnen aktiviere scheint eine Veränderung des Bestätigungsflags eben auch eine Veränderung zu sein welche in die DB geschrieben wird. Mir geht es nur darum, dass ich nicht plötzlich für jeden solchen Datenpunkt ein x-faches an Daten in der DB habe.
-
Selbst wenn ich Änderungen Aufzeichnen aktiviere scheint eine Veränderung des Bestätigungsflags eben auch eine Veränderung zu sein welche in die DB geschrieben wird.
Nein, durch Aktivierung von "Änderungen aufzeichnen" müssen Wertänderungen erfolgen, damit ein neuer Eintrag erzeugt wird.
-
Stimmt ich habe gerade nachgesehen. Auf den Werten habe ich das nicht aktiviert aus dem einfachen Grund, weil ich dort z.b. Wind aufzeichne und auch für längere Windstille Momente eine 0 in der DB benötige für jeden Messinterval, mache ich das nicht, dann zeichnet mit FLOT im Diagramm dann eine Gerade zwischen dem letzten Datenpunkt und der ersten Windböe die da kommt, auch wenn es dazwischen mal n-Stunden windstill war. Bisher war das für mich der einzige Weg das zu verhindern. Bisher kommen die Daten halt immer von Seite CCU und somit über den REGA Adapter.
Es gibt also folgende Anforderung:
- Wenn es Windstill ist, soll der FLOT Graph auch Windstill anzeigen und keine Gerade zwischen dem Beginn der Windstille und dem ersten Datenpunkt > 0 ziehen.
Das geht von mir aus gesehen über 2 Möglichkeiten:
1. Flot kann man so konfigurieren - hätte das bisher nicht gesehen und glaube das macht auch keinen Sinn
2. Man kann die Datenerfassung so machen, dass bei keinem Wind in festem Zeitintervall auch 0 aufgezeichnet wird.
2.1 Indem REGA nicht Hin- und Her-Synct
2.2 Die Variable direkt in REGA gesetzt wird (geht das??). Oder via einem Webservice sonst wie übertragen kann?
2.3 SQL Adapter auf Datenquellen filtern kann z.b. nur Daten von SimpleAPI berücksichtigt und REGA aussen vor lässt?
2.4 andere Vorschläge
PS: ich benötige die Daten in der CCU für Programme wie auch in IOBroker für NodeRed wie auch FLOT. Vielleicht gibt es ja aber auch einfachere / geeignetere Möglichkeiten solche Daten zu verteilen.
-
Wind aufzeichne und auch für längere Windstille Momente eine 0 in der DB benötige für jeden Messinterval,
Dafür gibt es die Option "Nach Intervall aufzeichnen(s)". Ein Wert von 3600 erzeugt nach jeweils einer Stunde einen zusätzlichen Eintrag, wenn sich der Wert in dieser Zeit nicht geändert hat.
-
Versuche mal damit zu "spielen" vielleicht bekomme ich damit was gutes hin. Melde mich wieder, danke.