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
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
userReadings? In etwa so
attr DEVICE userReadings neuesReading:Reading_1.* { return ReadingsNum($name,"Reading_1",0) < 0 ? abs(ReadingsNum($name,"Reading_1",0)) : 0;;}
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
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?
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}
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.
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 2345
eingebe wird das Reading mit ,,2345" erstellt. Es wird aber nicht mehr aktualisiert
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
Zitat von: Depechem am 23 März 2023, 19:52:24Wenn ich
setstate S10X 2023-03-23 19:17:07 Einspeisung 2345
eingebe 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.
Zitat von: betateilchen am 23 März 2023, 19:54:50Zitat von: Depechem am 23 März 2023, 19:52:24Wenn ich
setstate S10X 2023-03-23 19:17:07 Einspeisung 2345
eingebe 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
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.
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
Wenn das userReading bei einem manuellen Setzen des readings Netzleistung korrekt angelegt wird, kann der Code dazu nicht falsch sein...
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