Wenn es um Resourcenverbrauch geht fällt mir auf, daß die derzeitige Lösung für jeden einzelnen MQTT publish (also alle 10 Sekunden zwischen 5 und allen topics - je nachdem wieviel Werte sich geändert haben) die Command-Line von "mosquitto_pub" aufruft.hominidae hat geschrieben:Ich fände das auch praktischer und hatte das Kevin schon gefragt.
Es verbraucht aber wohl etwas mehr Ressourcen auf dem kleinen RPI und deshalb hat er es flach aufgebaut.
Dadurch wird jedes mal eine neue TCP-Verbindung zum Broker aufgebaut!
Das vergeudet zwar keine Resourcen im User-Space aber der TCP/IP Stack des RPI dürfte damit schon beschäftig sein. Selbst wenn es über das Loopback-Interface geht läuft da jedes Mal der komplette TCP handshake beim Aufbau und beim Abbau ein reset mit potentiellem Linger (siehe z.B. hier) des TCP-Sockets.
Weil ich denke, daß das nicht sein muß, hab ich dazu bereits einen Pull-Request als Verbesserungsvorschlag gestellt, der das Publish aller Topics via Python innerhalb einer einzigen Client-Connection macht.
In dem Python-Script zum Publish könnte man auch recht problemlos JSON-'Formatierung einbauen und einen Timestamp hinzufügen wie in dem oben schon zitierten Feature-Request angregt.
Auf der Client-Seite (Web, etc.) wäre der Aufwand die Auswertung von JSON einzubauen natürlich deutlich höher.
Aber MQTT steckt in OpenWB ja noch in den "Anfängen". Wäre es da nicht besser das vielleicht gleich noch aufzugreifen bevor dann später inkompatible Interface-Änderung in offiziellen Releases dagegen sprechen?
Versteht das bitte als konstruktive Punkte bei denen es nach meiner Erfahrung Probleme geben kann oder wo ich denke man könnte OpenWB noch besser machen als sie eh schon ist. Und wo immer ich mit meinen Kenntnissen (bin eher in C#, C++ und ein wenig Bash "zu Hause", aber leider nicht in Javascript und PHP) weiter komme, mache ich das gerne auch in Form von Pull-Requests bei denen die "Arbeit" schon gemacht ist.
Falls also doch noch JSON-Formatierung mit Timestamp kommen kann/darf, würde ich die Server-Seite (publish) dazu übernehmen.
Wenn man dabei etwas wie
Code: Alles auswählen
{
"Timestamp": "2019-11-17T17:02:00+01:00",
"Value": "1234.5"
}
Dennoch hätte man volle Flexibilität zukünftig auch noch weitere Daten die direkt mit einem Wert verknüpft sind hinzuzufügen (denkbar wären hier z.B. erlaubte Bereiche/Min/Max-Werte für GUI Elemente).