userreading erkennen von Watt oder kiloWatt

Begonnen von TiPpFeHlEr, 10 September 2023, 08:52:02

Vorheriges Thema - Nächstes Thema

TiPpFeHlEr

Hi,

ich habe folgendes Problem.

Meine PV gibt die Werte unter 1kW in Watt aus z.B.(548.3 W)
Über 1kW z.B.(2.547 kW)

nun will ich die in ein neues Reading umwandeln, immer in kW.
Wie kann ich erkennen ob es sich um einen Wert <1.000 kW handelt ?

Beispiel
setstate MQTT2_myMQTT2 2023-09-10 08:49:12 current_PV 2.5
setstate MQTT2_myMQTT2 2023-09-10 08:49:12 current_battery 2.81 <---------- in kW
setstate MQTT2_myMQTT2 2023-09-10 08:49:12 current_battery_SOC 57
setstate MQTT2_myMQTT2 2023-09-10 08:49:12 current_grid 781.0 <---------- in W
setstate MQTT2_myMQTT2 2023-09-10 08:49:12 current_load 478.0

Danke für Eure Hilfe

rabehd

Wie wäre es, wenn Du das pro Reading machst. Vermutlich kann niemand was mit Deinem Beispiel anfangen.
Mehr Informationen, verschiedene Werte eines Readings....

Denkbar das ein Hinweis auf die Anlage Dir Tipps bringt.

Passt auch nicht ins Thema.
Auch funktionierende Lösungen kann man hinterfragen.

CoolTux

Du hast Dein Beispiel für 2 unterschiedliche Readings gemacht. Die Frage die sich mir stellt ist ob beim Reading current_battery nur kW Werte kommen oder so wie ich Dich verstanden habe bei < 1000 W und bei >= 1000 kW
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

betateilchen

#3
Könnt Ihr nicht mal damit aufhören, den Fragesteller durch sinnlose Rückfragen und schlechte Tipps zu frustrieren?
Die Fragestellung ist doch klar formuliert und leicht verständlich.



@TiPpFeHlEr: Du musst im perl Teil des userReadings eine Abfrage einbauen, ob der Wert des jeweiligen readings kleiner als 1000 ist (dann musst Du ihn durch 1000 teilen) oder nicht.

attr <device> userReadings c_current_grid:current_grid.* {(ReadingsNum(<device>,'current_grid',0)<=1000) ? ReadingsNum(<device>,'current_grid',0)/1000 : ReadingsNum(<device>,'current_grid',0)}

Das musst Du für alle readings einbauen, für die Du diese Konvertierung haben möchtest.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TiPpFeHlEr

Zitat von: betateilchen am 10 September 2023, 09:46:56Könnt Ihr nicht mal damit aufhören, den Fragesteller durch sinnlose Rückfragen und schlechte Tipps zu frustrieren?
Die Fragestellung ist doch klar formuliert und leicht verständlich.



@TiPpFeHlEr: Du musst im perl Teil des userReadings eine Abfrage einbauen, ob der Wert des jeweiligen readings kleiner als 1000 ist (dann musst Du ihn durch 1000 teilen) oder nicht.

attr <device> userReadings c_current_grid:current_grid.* {(ReadingsNum(<device>,'current_grid',0)<=1000) ? ReadingsNum(<device>,'current_grid',0)/1000 : ReadingsNum(<device>,'current_grid',0)}

Das musst Du für alle readings einbauen, für die Du diese Konvertierung haben möchtest.

Hi,

also der wert ist von 0-999W in Watt (758.0) angegeben.
über 999W wird er in kW angegeben (1.25).

bedeutet wenn wert < 1000 ist es Watt und kiloWatt!

1.54 kW  ist < 1000
758.5 W  ist < 1000

so gehts also nicht, einzig die Nachkommastellen ändern sich.
Kann man prüfen ob es mehr als 1 Nachkommastelle hat und dann umzurechnen?

Gruß

TiPpFeHlEr

Zitat von: CoolTux am 10 September 2023, 09:35:10Du hast Dein Beispiel für 2 unterschiedliche Readings gemacht. Die Frage die sich mir stellt ist ob beim Reading current_battery nur kW Werte kommen oder so wie ich Dich verstanden habe bei < 1000 W und bei >= 1000 kW

genau

setstate MQTT2_myMQTT2 2023-09-10 08:49:12 current_grid 781.0 <----------W
setstate MQTT2_myMQTT2 2023-09-10 10:06:03 current_grid 1.25  <----------kW

betateilchen

achso - vorhin hatte ich noch keinen Kaffee, sorry.

Zitat von: TiPpFeHlEr am 10 September 2023, 10:02:34so gehts also nicht, einzig die Nachkommastellen ändern sich.
Kann man prüfen ob es mehr als 1 Nachkommastelle hat und dann umzurechnen?

Ist denn sichergestellt, dass die Anzahl der Nachkommastellen immer 1 (bei Watt) und 2 (bei kW) sind?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#7
Teste mal bitte so:

attr <device> userReadings c_current_grid:current_grid.* { return (ReadingsNum(<device>,'current_grid',0)=~ m/\.\d\d/)?ReadingsNum(<device>,'current_grid',0):ReadingsNum(<device>,'current_grid',0)/1000 },\
c_current_battery:current_battery.* { return (ReadingsNum(<device>,'current_battery',0)=~ m/\.\d\d/)?ReadingsNum(<device>,'current_battery',0):ReadingsNum(<device>,'current_battery',0)/1000 }

Bei mir kamen da nun die richtigen Werte raus.

setstate test 2023-09-10 10:58:59 c_current_battery 2.81
setstate test 2023-09-10 10:50:56 c_current_grid 0.9
setstate test 2023-09-10 10:58:59 current_battery 2.81
setstate test 2023-09-10 10:50:56 current_grid 900
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TiPpFeHlEr

Hi,

scheint zu klappen.

Bis jetzt sind die Nachkommastellen bei kW immer *.**
Auf jedenfall sind sie bei Watt immer ***.*

Gruß und Danke ;)