Reading mit negativen Wert (Minus) in neues Reading als positiven Wert

Begonnen von Depechem, 23 März 2023, 15:34:52

Vorheriges Thema - Nächstes Thema

Depechem

Hallo,
wie könnte ich einen negativen Wert eines Readings in ein neues Reading als positiven Wert schreiben?

Also:
Reading 1 = -1112
Neues Reading = 1112

In das neue Reading sollte dann nur ein positiver (ehemals negativer) Wert geschrieben werden. Negative Werte (ehemals positve) sollten mit 0 angegeben werden.

Vielen Dank im Voraus
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Aurel_B

Sollte mit einem Userreading gehen?

defmod d dummy
attr d userReadings foo { my $foo = ReadingsVal($name, 'bar', 0);; if ($foo < 0) {return -$foo;;}  else  {return 0;;} }

setreading d bar 10 -> foo  ist 0

setreading d bar -10 -> foo  ist 10

yersinia

userReadings? In etwa so
attr DEVICE userReadings neuesReading:Reading_1.* { return ReadingsNum($name,"Reading_1",0) < 0 ? abs(ReadingsNum($name,"Reading_1",0)) : 0;;}
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Depechem

Zitat von: ansgru am 23 März 2023, 16:07:00Sollte mit einem Userreading gehen?

defmod d dummy
attr d userReadings foo { my $foo = ReadingsVal($name, 'bar', 0);; if ($foo < 0) {return -$foo;;}  else  {return 0;;} }

setreading d bar 10 -> foo  ist 0

setreading d bar -10 -> foo  ist 10


Zitat von: yersinia am 23 März 2023, 16:09:24userReadings? In etwa so
attr DEVICE userReadings neuesReading:Reading_1.* { return ReadingsNum($name,"Reading_1",0) < 0 ? abs(ReadingsNum($name,"Reading_1",0)) : 0;;}

Vielen Dank für euere Hilfen,
leider komme ich da noch nicht so recht weiter.

mein Device heißt "S10X"
das besagte Reading welches die Daten bringt heißt "Netzleistung"
das neue Userreading soll "Einspeisung" heißen.

weder:
Einspeisung:Netzleistung.* { return ReadingsNum($name,"Netzleistung",0) < 0 ? abs(ReadingsNum($name,"Netzleistung",0)) : 0;;}noch
Einspeisung { my $Einspeisung = ReadingsVal($name, 'Netzleistung', 0);; if ($Einspeisung < 0) {return -$Einspeisung;;}  else  {return 0;;} }
funktioniert. Also es wird kein neues Reading namens ,,Einspeisung" erzeugt
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

betateilchen

#4
defmod S10X dummy
attr S10X userReadings Einspeisung:Netzleistung.* {ReadingsNum($name,'Netzleistung',0) < 0 ? abs(ReadingsNum($name,'Netzleistung',0)) : 0}

setstate S10X 2023-03-23 19:17:07 Einspeisung 2345
setstate S10X 2023-03-23 19:17:07 Netzleistung -2345

funktioniert einwandfrei, ein "setreading S10X Einspeisung -2345" "setreading S10X Netzleistung -2345" erzeugt wie gewünscht das neue reading.

Mach doch mal ein list Deines devices. Kann es sein, dass Du mit irgendwelchen sinnlosen event-on-irgendwas Attributen das Erzeugen von events unterdrückt hast?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Depechem

Zitat von: betateilchen am 23 März 2023, 19:19:05defmod S10X dummy
attr S10X userReadings Einspeisung:Netzleistung.* {ReadingsNum($name,'Netzleistung',0) < 0 ? abs(ReadingsNum($name,'Netzleistung',0)) : 0}

setstate S10X 2023-03-23 19:17:07 Einspeisung 2345
setstate S10X 2023-03-23 19:17:07 Netzleistung -2345

funktioniert einwandfrei, ein "setreading S10X Einspeisung -2345" erzeugt wie gewünscht das neue reading.

Mach doch mal ein list Deines devices. Kann es sein, dass Du mit irgendwelchen sinnlosen event-on-irgendwas Attributen das Erzeugen von events unterdrückt hast?

Internals:
   DEF        1 20 192.1.2.1:502 TCP
   DeviceName 192.1.2.1:502
   EXPECT     idle
   FD         110
   FUUID      641c4319-f33f-b0b0-ce12-f517e0799b257c0d
   IODev      S10X
   Interval   20
   LASTOPEN   1679591557.27745
   MODBUSID   1
   MODE       master
   MODULEVERSION Modbus 4.4.13 - 4.12.2022
   NAME       S10X
   NOTIFYDEV  global
   NR         1889
   NTFY_ORDER 50-S10X
   PARTIAL   
   PROTOCOL   TCP
   STATE      opened
   TCPConn    1
   TYPE       ModbusAttr
   devioLoglevel 3
   eventCount 1915
   nextOpenDelay 60
   QUEUE:
   READ:
     BUFFER     
   READINGS:
     2023-03-23 19:31:27   Batterieladezustand 38
     2023-03-23 19:31:26   Batterieleistung -1206
     2023-03-23 19:31:27   EMS-Status      4
     2023-03-23 19:31:28   Eigenverbrauch  94
     2023-03-23 16:23:59   Firmware        H20_2022_04
     2023-03-23 19:31:27   Hausleistung    645
     2023-03-23 19:31:26   Hersteller      HagerEnergy GmbH
     2023-03-23 16:23:57   Modell          S10 X Compact
     2023-03-23 19:31:27   Netzleistung    -485
     2023-03-23 19:31:27   Netzstatus      24158
     2023-03-23 19:31:27   Notstrom        inaktiv
     2023-03-23 16:23:58   Seriennummer    H20
     2023-03-23 19:31:26   Solarleistung   0
     2023-03-23 19:31:28   String1Leistung 0
     2023-03-23 19:31:28   String1Spannung 28
     2023-03-23 19:31:28   String1Strom    0.04
     2023-03-23 19:31:28   String2Leistung 0
     2023-03-23 19:31:28   String2Spannung 33
     2023-03-23 19:31:28   String2Strom    0
     2023-03-23 19:31:27   WallboxSolarleistung 0
     2023-03-23 19:31:27   Wallboxleistung 0
     2023-03-23 19:31:28   Wallboxstatus   0
     2023-03-23 18:12:37   state           opened
   REMEMBER:
     lid        1
     lname      S10X
     lrecv      1679596288.70943
     lsend      1679596288.70359
   defptr:
     S10X       1
   gotReadings:
     String2Leistung 0
   hmccu:
   lastRead:
     h40003     1679596286.7279
     h40019     1679585037.74443
     h40035     1679585038.54971
     h40051     1679585039.12438
     h40067     1679596286.83936
     h40069     1679596286.95053
     h40071     1679596287.06291
     h40073     1679596287.17413
     h40077     1679596287.28653
     h40079     1679596287.47443
     h40081     1679596287.58542
     h40082     1679596287.7016
     h40083     1679596287.81428
     h40084     1679596287.92545
     h40087     1679596288.03664
     h40095     1679596288.14904
     h40096     1679596288.26059
     h40098     1679596288.37518
     h40099     1679596288.48964
     h40101     1679596288.6
     h40102     1679596288.71321
Attributes:
   alias      E3/DC S10X
   devStateIcon opened:rc_WEB@32CD32  disconnected:rc_WEB@red
   event-min-interval .*:3600
   icon       measure_photovoltaic_inst@yellow
   obj-h40003-len 16
   obj-h40003-poll 1
   obj-h40003-reading Hersteller
   obj-h40003-unpack a16
   obj-h40019-len 16
   obj-h40019-poll once
   obj-h40019-reading Modell
   obj-h40019-unpack a16
   obj-h40035-len 16
   obj-h40035-poll once
   obj-h40035-reading Seriennummer
   obj-h40035-unpack a16
   obj-h40051-len 16
   obj-h40051-poll once
   obj-h40051-reading Firmware
   obj-h40051-unpack a16
   obj-h40067-poll 1
   obj-h40067-reading Solarleistung
   obj-h40069-poll 1
   obj-h40069-reading Batterieleistung
   obj-h40069-unpack s>
   obj-h40071-poll 1
   obj-h40071-reading Hausleistung
   obj-h40073-poll 1
   obj-h40073-reading Netzleistung
   obj-h40073-unpack s>
   obj-h40077-poll 1
   obj-h40077-reading Wallboxleistung
   obj-h40079-poll 1
   obj-h40079-reading WallboxSolarleistung
   obj-h40081-poll 1
   obj-h40081-reading Netzstatus
   obj-h40082-poll 1
   obj-h40082-reading Batterieladezustand
   obj-h40083-map 0:nicht unterstützt, 1:aktiv, 2:inaktiv, 3:nicht verfügbar, 4:MSS aus oder falsche Pos.
   obj-h40083-poll 1
   obj-h40083-reading Notstrom
   obj-h40084-poll 1
   obj-h40084-reading EMS-Status
   obj-h40087-poll 1
   obj-h40087-reading Wallboxstatus
   obj-h40095-poll 1
   obj-h40095-reading String1Spannung
   obj-h40096-poll 1
   obj-h40096-reading String2Spannung
   obj-h40098-expr $val / 100
   obj-h40098-poll 1
   obj-h40098-reading String1Strom
   obj-h40099-expr $val / 100
   obj-h40099-poll 1
   obj-h40099-reading String2Strom
   obj-h40101-poll 1
   obj-h40101-reading String1Leistung
   obj-h40102-poll 1
   obj-h40102-reading String2Leistung
   room       E3/DC
   userReadings Eigenverbrauch { ReadingsVal("S10X","Netzstatus",0) & 0xFF;; },\
Autarkie { (ReadingsVal("S10X","Netzstatus",0) & 0xFF00) >> 8;; },\
Abregelung { ( ReadingsVal("S10X","EMS-Status","") & 0x10 ) == 16 ? return "aktiv" : return "inaktiv";; },\
Einspeisung:Netzleistung.* {ReadingsNum($name,'Netzleistung',0) < 0 ? abs(ReadingsNum($name,'Netzleistung',0)) : 0}
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

betateilchen

Was passiert denn, wenn Du das von mir genannte setreading manuell ausführst?

Du solltest für Deine userReadings generell sinnvolle regexp verwenden, um die Erzeugung ein bisschen konkreter durchzuführen.

Außerdem weiß ich nicht, in wie weit das event-min-interval in die Suppe spuckt - zum Testen kannst Du das Attribut einfach mal löschen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Depechem

Zitat von: betateilchen am 23 März 2023, 19:42:33Was passiert denn, wenn Du das von mir genannte setreading manuell ausführst?


Wenn ich
setstate S10X 2023-03-23 19:17:07 Einspeisung 2345eingebe wird das Reading mit ,,2345" erstellt. Es wird aber nicht mehr aktualisiert
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

Depechem

Zitat von: betateilchen am 23 März 2023, 19:42:33Außerdem weiß ich nicht, in wie weit das event-min-interval in die Suppe spuckt - zum Testen kannst Du das Attribut einfach mal löschen.

Hatte ich schon, bringt keine Änderung
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

betateilchen

Zitat von: Depechem am 23 März 2023, 19:52:24Wenn ich
setstate S10X 2023-03-23 19:17:07 Einspeisung 2345eingebe wird das Reading mit ,,2345" erstellt. Es wird aber nicht mehr aktualisiert

Du sollst nicht setstate eingeben.

Mach mal "setreading S10X Netzleistung -2345" - Du willst doch rausfinden, ob das userReading an sich funktioniert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Depechem

Zitat von: betateilchen am 23 März 2023, 19:54:50
Zitat von: Depechem am 23 März 2023, 19:52:24Wenn ich
setstate S10X 2023-03-23 19:17:07 Einspeisung 2345eingebe wird das Reading mit ,,2345" erstellt. Es wird aber nicht mehr aktualisiert

Du sollst nicht setstate eingeben.

Mach mal "setreading S10X Netzleistung -2345" - Du willst doch rausfinden, ob das userReading an sich funktioniert.


Ups ja natürlich, habe ich natürlich gemacht.
Beide funktionieren.
Im Reading ,,Netzleistung" wird richtigerweise gleich wieder mit aktuellen Werten überschrieben.
Das Reading ,,Einspeisung" bleibt aber im Wert ,,2345" stehen und wird nicht aktualisiert
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

betateilchen

Dann solltest Du mal im EventMonitor verfolgen, was da genau passiert.
Oder das device vorübergehend mit verbose=5 loggen und dort nachschauen, warum das userReading nicht erzeugt wird.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Depechem

Zitat von: betateilchen am 23 März 2023, 20:02:23Dann solltest Du mal im EventMonitor verfolgen, was da genau passiert.
Oder das device vorübergehend mit verbose=5 loggen und dort nachschauen, warum das userReading nicht erzeugt wird.

Habe ich auch schon versucht, in dem Modul kommt aber sekündlich so viel 🙈
Die anderen userreadings funktionieren ja auch ohne Fehler. Glaub das es nur am Code des userreadings liegen kann.

Muss ich morgen nochmal in Ruhe schauen ob ich raus bekomme wie ich den Code anpassen könnte
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...

betateilchen

Wenn das userReading bei einem manuellen Setzen des readings Netzleistung korrekt angelegt wird, kann der Code dazu nicht falsch sein...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Depechem

Ich habe es gefunden, mein Fehler.
Ich hatte zwischen jedem userreading warum auch immer ein ,,/,, gesetzt das ist natürlich Quark und somit konnte das Reading nicht ausgeführt werden.

Vielen Dank an euch
RaspberryPi2 / FHEM / 3 Wand-Tablets mit Tablet UI / HM USB / verschiedene HM-Aktoren / JeeLink USB für WS1600 und mehrere LaCrosse Sensoren / HEOS ...