NEWS
Empfangene Daten vom MQTT Server
-
Guten Abend an die Gemeinde! Ich hab mal eine Frage! In ioBroker habe ich im MQTT Adapter (Client) ein Topic von meinem MQTT Server aboniert. Nun ist es so, dass Tasmota mir jeder Sekunde (oder weniger) Daten (vom IR-Lesekopf) an den MQTT Server sendet, d.h. ioBroker empfängt im Sekundentakt die Daten vom MQTT-Server. Mit TelePeriod XX hats nicht geklappt das Intervall zu vergrößern. Die Daten werden dann in den Datenpunkten bei MQTT gespeichert. Frage ist, werden die Daten ständig auf der SSD gespeichert oder landen die erstmal im RAM? Ich frage deswegen weil ich nicht will dass ständig irgendwelche Daten geschrieben werden. Im SmartMeter Adapter kann man ja das Intervall einstellen..... Das geht bei Tasmota überhaupt nicht. Sobald der Daten Empfängt ballert er mir alles auf den MQTT Server. Da kommen pro Tag dann 2x 86400 Schreibzugriffe mit mehreren Datenpunkten.... Die SSD muss ja nicht unnötig belastet werden.
Der Server ist zu weit weg vom Stromkasten. Ich hab massive Problem mit der Kabellänge so dass ich jetzt das ganze von Matthias Kleine gezeigtem Video alles mit einem ESP mache und dann an den MQTT Server sende. Aber wie gesagt, Pro Sekunde werden Daten gesendet und das nervt mich tierisch!
Aber die Frage ist nun, speichert ioBroker die empfangenen Daten sofort auf der Festplatte oder landen die erstmal im Arbeitsspeicher?
Gäbe es eine möglichkeit das so zu implementieren, dass man bei den Datenpunkten auswählen kann wo er die Daten speichern soll? Das wäre genial wenn man zb Sensordaten, die eh verarbeitet werden, nur in den Ram reinschriebt und dann die verarbeiteten Daten dann auf die SSD speichert. Da wäre ne Option bei den Datenpunkten genial wo man dann einstellen kann (Ram oder SSD). Das müsste für jeden Datenpunkt möglich sein außer für DP die "kritisch" fürs System sind, das muss ja dann auf der Platte.
Wäre das irgendwie möglich in ioBroker zu implementieren oder ist das schon so implementiert?
Ich danke euch für eure Antwort und ich wünsch euch noch einen schönen Abend!
VG Steve
-
@fiso sagte: speichert ioBroker die empfangenen Daten sofort auf der Festplatte oder landen die erstmal im Arbeitsspeicher?
Die Zustände landen erst im RAM. Wo werden deine Zustände gespeichert? In der Datei "states.jsonl" oder in der Redis-DB?
-
Ich nutze dafür redis (Datenbank im RAM). Wieso aber spammen die Tasmota Geräte deinen Speicher? Was hast du da am Laufen?
-
@meister-mopper sagte: redis (Datenbank im RAM)
Die sichert die Daten auch alle 5 Minuten (Voreinstellung) in einer Datei.
-
@meister-mopper IR-Lesekopf
-
Ich hab an einem Wemos D1Mini (8266) einen Lesekopf montiert. Warum? Ich vermute dass mein Proxmox Server ständig abschmiert weil irgendwas mit den USB - Anschlüssen (Weiterleitung LXC?) nicht verträgt. Mein Server hängt sich einfach so auf, seit Monaten und das nervt mich tierisch. Ständig muss ich den Server neu starten, da lief mein Raspi 4 wie ein Schweizer Uhrwerk wobei ich immer wieder probleme mit dem 2 Lesekopf hatte, der ist mir mit der Zeit immer wieder mal ausgestiegen. Da musste ich dann den Raspi komplett neu booten (Also alle paaw Wochen). Ich hab bis heute nicht herausgefunden woran es lag oder liegt. Hab mir einen dritten Lesekopf gekauft gehabt (Weidemann) aber der zeigte dasselbe Problem. Also kann es nicht am Lesekopf gelegen haben. Schlauer bin ich auch nicht daraus geworden. Also inspiriert vom Video von Matthias Kleine hab ich mir den IR Lesekopf mit Rx/Tx Kabeln bestellt funktioniert wie gesagt wunderbar am ESP, braucht auch kaum strom
Aber Tasmota empfängt vom Zähler extrem Schnell die Daten und wenn ich die Daten dann an meinen MQTT Server übertrage geschieht das im Sekundentakt. Ich hab keine Möglichkeit das zu verlangsamen in Tasmotag. Ich vermisse die Option in ioBroker wo ich einstellen kann, nach wieviel Sekunden die Daten geschrieben werden.
Das ganze ist Ultra-nervig weil wie gesagt im Sekundentakt Daten an den MQTT Server geschrieben werden und demzufolge durch das abonieren des Topics in ioBroker auch die Daten so schnell empfangen werden.
Das ist das dämlichste was mir über den weg gelaufen ist. Ich mein wenn ich irgendwas mit nen Victron WR damit steuern will ist das in Ordnung, aber ich brauche keine 172800 Schreibzugriffe (wobei sind mehr) pro Tag durch das schnelle Intervall...... Echt zum heulen!
Daher die Frage wie ioBroker die Daten speichert. Sofort in auf die SSD oder erst in den RAM.....
Nichtsdesto trotz wäre es cool (auch für andere sachen) wenn man zb die Option hätte das ganze (DP) erst in den Speicher zu schieben und dann später auf die SSD..... So könnte man mit Sensordaten experimentieren, also im Sekundentakt die Daten empfangen und dann diese weiterverarbeiten..... Sensordaten die im Sekundentakt kommen müssen ja nicht immer gespeichert werden....
-
@fiso sagte: das ganze (DP) erst in den Speicher zu schieben und dann später auf die SSD....
So macht es ioBroker. Du hat noch nicht beantwortet, ob Redis (schreibt voreingestellt alle 5 Minuten) oder states.jsonl (Schreib-Intervall ist konfigurierbar). Das sagt dir z.B.
iob status
-
@paul53 sagte in Empfangene Daten vom MQTT Server:
iob status
iobroker is running on this host.
Objects type: jsonl
States type: jsonlHab jetzt eine Dirty Lösung gefunden mit der ich mit umwegen das ganze entschärfen kann.
Ich greif einfach per Web-Api auf den ESP zu und speicher mir dann die Daten. Schön ist was anderes.....
-
@fiso sagte in Empfangene Daten vom MQTT Server:
Daher die Frage wie ioBroker die Daten speichert. Sofort in auf die SSD oder erst in den RAM.....
Nichtsdesto trotz wäre es cool (auch für andere sachen) wenn man zb die Option hätte das ganze (DP) erst in den Speicher zu schieben und dann später auf die SSD..... So könnte man mit Sensordaten experimentieren, also im Sekundentakt die Daten empfangen und dann diese weiterverarbeiten..... Sensordaten die im Sekundentakt kommen müssen ja nicht immer gespeichert werden....da du ja kein Plan hast von Datenverarbeitung sei es dir gesagt .. kein Betriebsystem scheibt die Daten von einm Externen Gerät DIREKT auf die Platte(SSD)
das MQTT Protokoll ist genau für solche Transfers konzipiert worden..
was machst du mit den Daten ... liegt da ein Trigger drauf der diese weiter verarbeitet ?? Grafana??
-
bei Tasmota gibt es ein Befehl
TelePeriode
damit kannst du das Sendeintervall einstellen.bin leider nur am Handy und kann dir nicht den passenden Link zeigen.
-
@fiso sagte in Empfangene Daten vom MQTT Server:
Aber Tasmota empfängt vom Zähler extrem Schnell die Daten und wenn ich die Daten dann an meinen MQTT Server übertrage geschieht das im Sekundentakt. Ich hab keine Möglichkeit das zu verlangsamen in Tasmotag. Ich vermisse die Option in ioBroker wo ich einstellen kann, nach wieviel Sekunden die Daten geschrieben werden.
Zeig mal das Skript auf deinem Tasmota-Gerät - sollte unter vermutlich unter "Tools" - "Consoles" - "Edit Script" zu finden sein.
Vermutlich sind da am Ende eine oder mehrere Zeilen zu finden wie
=>Publish Soyosource/SOYO_1ce2fb/L1L2L3 %sml[8]%
Also mit anderen Pfad (nämlich den du im MQQT wiederfindest), aber mit
=>Publish
Die zeile wird dafür sorgen das bei jeder Wertänderung (also etwa 1x die Sekunde) der Wert auch gesendet wird.Kommentierst du die Zeile aus (per
;
voranstellen), wird nicht mehr gesendet.
Dann erhältst du die Werte nur noch gemäß der eingestelltenTeleperiod
, also minimal alle 10 Sekunden, Default sind meine ich 600 Sekunden, also alle 10 Minuten.
Die Werte landen auch nicht direkt in einem Datenpunkt sondern es wird per JSON in den Pfadmqtt.0.tele.NameDeinesTasmotaDevives.SENSOR
landen wo du dir den dann selbst auseinander bauen muss (eventuell kann der Sonoff-Adapter das).
Da werden dann alle 3 Werte drin landen.Ich nutze z.B. beides, den Tele nutze ich für das Aufzeichnen und dann mit eCharts, den Datenpunkt mit Publish im Sekundentakt brauche ich für das Laden meiner Solarakkus und bei der Einspeisung.
Also du kannst parallel beides nutzen! Über
tele
wird der Wert auch jetzt schon kommen gemäß der eingestellten Teleperiod. -
@fiso sagte: die Option in ioBroker wo ich einstellen kann, nach wieviel Sekunden die Daten geschrieben werden.
Auszug aus Datei "/opt/iobroker/iobroker-data/iobroker.json":
"states" : { "type": "jsonl", "// type": "Possible values: 'file' - [port 9000], 'redis' - [port 6379].", "host": "127.0.0.1", "port": 9000, "connectTimeout": 5000, "writeFileInterval": 30000, "dataDir": "", "options": { "auth_pass": "", "retry_max_delay": 5000, "retry_max_count": 19, "db": 0, "family": 0 }, "backup": { "disabled": false, "files": 24, "// files": "Minimal number of backup files, after the deletion will be executed according to backupTime settings", "hours": 48, "// hours": "All backups older than 48 hours will be deleted. But only if the number of files is greater than of backupNumber", "period": 120, "// period": "by default backup every 2 hours. Time is in minutes. To disable backup set the value to 0", "path": "", "// path": "Absolute path to backup directory or empty to backup in data directory" }, "jsonlOptions": { "// autoCompress (1)": "The JSONL DB is append-only and will contain unnecessary entries after a while.", "// autoCompress (2)": "It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize", "// autoCompress (3)": "Note that too low values here will cause the DB to be rewritten often.", "autoCompress": { "sizeFactor": 10, "sizeFactorMinimumSize": 50000 }, "// ignoreReadErrors": "If single lines in the DB are corrupted, they can be ignored without losing the whole DB.", "ignoreReadErrors": true, "// throttleFS (1)": "By default, the database immediately writes to the database file. Write accesses can be reduced using the throttleFS option.", "// throttleFS (2)": "Be aware that buffered changes will be lost in case the process crashes.", "throttleFS": { "// intervalMs": "Write to the database file no more than every intervalMs milliseconds.", "intervalMs": 60000, "// maxBufferedCommands": "Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash.", "maxBufferedCommands": 2000 } } }
Per Voreinstellung wird maximal alle 60 s geschrieben: "intervalMs".
-
wie @bananajoe schon schrieb, prüfe bzw. zeige mal das Script.
hier nochmal die Beschreibung von der Tasmota-Seite
TelePeriod See current value and force publish STATE and SENSOR message 0 = disable telemetry messages 1 = reset telemetry period to firmware default (TELE_PERIOD) 10..3600 = set telemetry period in seconds (default = 300)
-
D
B
->sensor53 r
M 1
+1,3,s,16,9600,MT175
1,77070100010800ff@1000,E_in,kWh,E_in,1
1,77070100020800ff@1000,E_out,kWh,E_out,1
1,77070100100700ff@1,P,W,P,18 -
@fiso sagte in Empfangene Daten vom MQTT Server:
D
B
->sensor53 r
M 1
+1,3,s,16,9600,MT175
1,77070100010800ff@1000,E_in,kWh,E_in,1
1,77070100020800ff@1000,E_out,kWh,E_out,1
1,77070100100700ff@1,P,W,P,18Also wenn das wirklich alles ist, verstehe ich nicht warum der 1x die Sekunde senden sollte.
Du hast den Leser selbst gebaut - könnte noch an der Firmware, einen der Parameter beim Kompilieren oder ein anderes Kommando sein (auch wenn ich gerade nicht wüsste welches. -
ich würde vorschlagen in der Konsole von Tasmota mal folgendes eingeben, ob sich etwas ändert
TelePeriod 30
sollten dann 30 sec sein