Hauptmenü

userReadings und Einheiten

Begonnen von Tompkin, 11 Mai 2023, 10:25:58

Vorheriges Thema - Nächstes Thema

Tompkin

Hallo.

Ich frage mich, wie man bei userReadings Wert und Einheiten getrennt angeben kann.
Ziel ist es einen DbLog richtig befüllt zu haben mit VALUE und UNIT. Wenn ich ein sprintf("%.2f °C", ...) benutze, würde alles in VALUE landen.
Lt. commandref gibt es keine Möglichkeit eine UNIT bei userReadings mitzugeben, oder übersehe ich etwas?

Danke euch für euren Input :)

Gruß

DS_Starter

#1
ZitatWenn ich ein sprintf("%.2f °C", ...) benutze, würde alles in VALUE landen.

Sicher? Hast du es probiert?
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

Zitat von: DS_Starter am 11 Mai 2023, 10:51:28Sicher? Hast du es probiert?

Hast Du es denn mal probiert?  8)

2023-05-11 11:01:17|global|GLOBAL|temperature: 2.7 °C|temperature|2.7 °C|
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Nein, deswegen hab ich ja gefragt.  ;)

Dieses Splitting macht einen noch fertig ...
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

@Tompkin,

jetzt habe ich das Standardsplitting umgebaut und es deckt diesen Fall und hoffentlich auch alle bisherigen Splittings ab.

Die Version 5.8.8 habe ich zunächst zum Test in mein contib geladen.

Zum Download in der FHEMWEB Kommandozeile inklusive der Anführungszeichen angeben und danach FHEM restarten:

"wget -qO ./FHEM/93_DbLog.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/DS_Starter/93_DbLog.pm"

Bitte teste diese Version in deinem System.
Jeder andere Mitleser ist natürlich ebenfalls eingeladen das Splitting zu testen. Je mehr User sich beteiligen desto besser und hilfreicher ist es für mich vor dem CheckIn.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Tompkin

@DS_Starter

Sorry, dass ich erst jetzt Zeit finde das zu prüfen. Läuft so wie erwartet, ich danke dir vielmals :)

Werden die Daten aus den anderen Quellen auch mit split Leerzeichen aufgebröselt? Ich hätte eher erwartet, dass userReadings erweitert wird um Unit.

Gruß

DS_Starter

#6
Schön dass es funktioniert.  :)
Ich hoffe auch alle deine anderen zu loggenden Events werden ordnungsgemäß wie bisher gesplittet ?

ZitatWerden die Daten aus den anderen Quellen auch mit split Leerzeichen aufgebröselt? Ich hätte eher erwartet, dass userReadings erweitert wird um Unit.
userReadings erweitert sich nicht von allein. Im userReading wird der Inhalt erstellt, den du mit deinem Code im Attribut vorgibst, in dem Fall eben "x.xx °C". Was so völlig ok ist.
Daraus resultiert ein entsprechender Event, den DbLog verarbeitet und für die Datenbankfelder splitten muß.

Für das Splitting gibt es verschiedene implementierte Varianten. Für Module freue ich mich, wenn die Entwickler eine spezifische Splittingfunktion implementieren, was häufig leider etwas vernachlässigt wird. Dann hat DbLog das nicht zu tun.
Es gibt eine Reihe eingebauter Splittings für bestimmte Modultypen.
Der Rest wird durch das Default-SPlitting vorgenommen, so auch die Events die sich aus userReadings ergeben.

LG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Tompkin

Zitat von: DS_Starter am 12 Mai 2023, 08:49:25Ich hoffe auch alle deine anderen zu loggenden Events werden ordnungsgemäß wie bisher gesplittet ?

Ich habe bis jetzt nix negatives im Log gesehen. Da SQL, ist etwas schwerer alle Werte mal eben so schnell zu überfliegen. Aber scheint zu passen  :)

ZitatuserReadings erweitert sich nicht von allein. Im userReading wird der Inhalt erstellt, den du mit deinem Code im Attribut vorgibst, in dem Fall eben "x.xx °C". Was so völlig ok ist.
Daraus resultiert ein entsprechender Event, den DbLog verarbeitet und für die Datenbankfelder splitten muß.

Ok, dachte das wird etwas anders gehandhabt, aber wenn man davon ausgehen darf, dass es keine Werte mit Leerzeichen gibt, dann passt es ja.
Jedenfalls nochmal vielen Dank fürs schnelle fixen. Nun funktioniert es wie erwartet.

Gruß

DS_Starter

Der DbLog Splitter geht davon aus, dass wenn exakt zwei durch Leerzeichen getrennte Terms nach dem Reading empfangen werden, ist es ein Wert mit Einheitsangabe.
Bei weniger oder mehr Terms ist es nicht so.
"state" erfährt eine Sonderbehandlung.

Vermutlich wird es auch jetzt eine kleine Anzahl von Fällen geben wo der default Splitter versagt.
Der default Splitter ist einfach nicht perfekt.
In diesen Fällen ist es einfach der beste Weg die Modulautoren bauen eine Splittingfunktion ein um das Thema für ihre Module sauber zu handhaben.

LG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

#9
Zitat von: DS_Starter am 12 Mai 2023, 11:29:52Der DbLog Splitter geht davon aus, dass wenn exakt zwei durch Leerzeichen getrennte Terms nach dem Reading empfangen werden, ist es ein Wert mit Einheitsangabe.

Das macht die Sache nicht besser, sondern in vielen devices noch schlimmer als wenn die Einheit mit im Wert steht. Zumindest bei allen devices, die nicht nur einen numerischen Inhalt haben, dürfte der Ansatz schwierig sein.

Zitat von: DS_Starter am 12 Mai 2023, 11:29:52Vermutlich wird es auch jetzt eine kleine Anzahl von Fällen geben wo der default Splitter versagt.

Vermutlich unterschätzt Du die Anzahl der devices, die alphanumerische Readinginhalte haben.

Einfaches Beispiel: Calendar-devices


setstate abfall_Jork 2022-01-05 00:04:05 calname Abfall Jork
setstate abfall_Jork 2023-05-12 12:04:03 lastUpdate 2023-05-12 12:04:00
setstate abfall_Jork 2023-05-12 12:04:03 nextUpdate 2023-05-12 13:04:00
setstate abfall_Jork 2023-05-12 12:04:03 nextWakeup 2023-05-12 13:04:00


Hier ist immer der gesamte Inhalt der korrekte Inhalt, eine Einheit gibt es hier nicht.
Von den ganzen Multimedia-devices mit Titelanzeigen etc. wollen wir gar nicht reden.

Du solltest eventuell noch $value darauf prüfen, ob looks_like_number($value) erfüllt ist. Das hilft zwar auch nicht zu 100%, aber es dürfte die Anzahl der "falschen" Splittings erheblich reduzieren.

Zitat von: DS_Starter am 12 Mai 2023, 11:29:52In diesen Fällen ist es einfach der beste Weg die Modulautoren bauen eine Splittingfunktion ein um das Thema für ihre Module sauber zu handhaben.

Das ist für mich der einzige sinnvolle Weg, um das Problem wirklich richtig zu lösen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

ZitatDu solltest eventuell noch $value darauf prüfen, ob looks_like_number($value) erfüllt ist
Das ist ein gute Idee... danke.
Baue ich ein und gebe euch eine Info.

Das sollte die Fails reduzieren.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Ich habe die Prüfung wie von betateilchen vorgeschlagen eingebaut und bei mir erfolgreich getestet.
Die Version liegt wieder in meinem contrib zum Gegencheck.

Sieht gut aus denke ich.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Tompkin

#12
Kann bei mir keine Probleme feststellen mit der aktuellen überarbeiteten Version. Allerdings habe ich auch ausschließlich numerische Readings.

Gruß.

DS_Starter

Danke für die Rückmeldung.
Auch ich konnte bisher nichts Negatives feststellen. Ich setze die V jetzt auf meinem produktiven System ein.
Wenn alles passt, werde ich die V dann zeitnah einchecken.

LG
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter