Hallo
Ich lese das Webinterface meiner Solaranlager per HTTPMOD aus und fülle drei Readings (SNR, Watt, kwh) per Regex.
Bei den anfänglichen Problemen wurde mir auch wunderbar geholfen.
https://forum.fhem.de/index.php/topic,92460.0.html (https://forum.fhem.de/index.php/topic,92460.0.html)
Da das enstandene Folgeproblem nichts mehr mit dem eigentlichen zu tun hat starte ich einen neuen Thread.
Da der Wert kwh immer Tageswert ist und täglich auf Null gestellt wird habe ich noch folgene userReadings definiert.
Preis_pro_kwh ***hier habe ich einmalig einen Wert eingetragen.
kwh_Monat ***soll kwh trotz Nullstelllung weiterzählen und monatlich auf Null gestellt werden
kwh_Jahr ***soll kwh trotz Nullstelllung weiterzählen und jährlich auf Null gestellt werden
kwh_gesamt ***soll kwh trotz Nullstelllung weiterzählen
Gesamtertrag ***soll das Ergebnis aus kwh_gesamt * Preis_pro_kwh sein
zunächst einmal das List des HTTPMOD Device:
[code]Internals:
BUSY 0
CFGFN /var/fhem/FHEM/OG2_Dachboden.cfg
DEF http://192.168.6.101/home.cgi 900
Interval 900
LASTSEND 1540910069.11135
MainURL http://192.168.6.101/home.cgi
ModuleVersion 3.5.1 - 5.7.2018
NAME Solaranlage
NR 1067
STATE ???
TRIGGERTIME 1540910969.11069
TRIGGERTIME_FMT 2018-10-30 15:49:29
TYPE HTTPMOD
addr http://192.168.6.101:80
auth 0
buf
code 200
compress 1
conn
data
displayurl http://192.168.6.101/home.cgi
header
host 192.168.6.101
httpbody 1
1
EAB961723105
QN6PAX3SS4VHW8AX
M11
17A31-727R+17829-719R
15:34 30/10/2018
0
1
BS15006011720112
28
0.72
OK
Error
httpheader HTTP/1.1 200 OK
Server: MXCHIP
Connection: close
Cache-Control: max-age=36000
Expires: Wed, 31 Dec 2070 23:00:00 GMT
Last-Modified: Fri, 17 Feb 2017 06:10:54 GMT
Content-Type: text/html
Content-Length: 116
httpversion 1.1
hu_blocking 0
hu_filecount 7
hu_port 80
hu_portSfx
ignoreredirects 0
loglevel 4
path /home.cgi
protocol http
redirects 0
timeout 2
url http://192.168.6.101/home.cgi
value 0
Helper:
DBLOG:
Preis_pro_kwh:
mylogdb:
TIME 1540908203.67375
VALUE 0.28
SNR:
mylogdb:
TIME 1540910069.14053
VALUE BS15006011720112
Watt:
mylogdb:
TIME 1540910069.14053
VALUE 28
kwh:
mylogdb:
TIME 1540910107.99533
VALUE 0.72
kwh_Jahr:
mylogdb:
TIME 1540905793.0181
VALUE 0
kwh_Monat:
mylogdb:
TIME 1540907207.30829
VALUE 95.08
kwh_gesamt:
mylogdb:
TIME 1540906228.33862
VALUE 2416
state:
mylogdb:
TIME 1540906627.24925
VALUE kwh 1
QUEUE:
READINGS:
2018-10-30 15:03:23 Preis_pro_kwh 0.28
2018-10-30 15:34:29 SNR BS15006011720112
2018-10-30 15:34:29 Watt 28
2018-10-30 15:35:07 kwh 0.72
2018-10-30 14:23:13 kwh_Jahr 0
2018-10-30 14:46:47 kwh_Monat 95.08
2018-10-30 14:30:28 kwh_gesamt 2416
REQUEST:
data
header
ignoreredirects 0
retryCount 0
type update
url http://192.168.6.101/home.cgi
value 0
defptr:
readingBase:
SNR reading
Watt reading
kwh reading
readingNum:
SNR 01
Watt 02
kwh 03
readingOutdated:
requestReadings:
update:
SNR reading 01
Watt reading 02
kwh reading 03
sslargs:
Attributes:
enableControlSet 1
enableCookies 1
httpVersion 1.1
reading01Name SNR
reading01Regex (?:[^\r\n]*(?:\r|\rn|\n)){27}([^\r\n]*)(?:\r|\rn|\n).*
reading02Name Watt
reading02Regex (?:[^\r\n]*(?:\r|\rn|\n)){28}([^\r\n]*)(?:\r|\rn|\n).*
reading03Name kwh
reading03Regex (?:[^\r\n]*(?:\r|\rn|\n)){29}([^\r\n]*)(?:\r|\rn|\n).*
room OG2_Dachboden
showBody 1
timeout 2
userReadings Preis_pro_kwh, kwh_Monat monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_Jahr monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_gesamt monotonic {ReadingsVal("Solaranlage","kwh",0)}, Gesamtertrag {ReadingsVal("Solaranlage","kwh_gesamt",0) * ReadingsVal("Solaranlage","Preis_pro_kwh",0)}
userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex
[/code]
Zuletzt habe ich versucht einen expliziten Trigger zu verwenden aber das veränderte leider auch nichts.
userReadings Preis_pro_kwh, kwh_Monat:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_Jahr:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_gesamt:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, Gesamtertrag:kwh.* {ReadingsVal("Solaranlage","kwh_gesamt",0) * ReadingsVal("Solaranlage","Preis_pro_kwh",0)}
Zusätzlich habe ich mir eine Testnotify gemacht um zu überpüfen ob ein Event ausgelöst wird und ob der Inhalt von kwh eine Zahl ist.
Und ja es wird ein Event ausgelöst und der übergebene Wert ist eine Zahl.
define not.Solaranlage_test notify Solaranlage:kwh.* {\
if (ReadingsVal("Solaranlage","kwh",0) >= 0) {\
Log 3, "Solartest = 1";;\
}\
}
Auszuga aus dem Eventlog:
2018-11-01 11:38:15 HTTPMOD Solaranlage reread
2018-11-01 11:38:15 HTTPMOD Solaranlage SNR: BS15006011720112
2018-11-01 11:38:15 HTTPMOD Solaranlage Watt: 107
2018-11-01 11:38:15 HTTPMOD Solaranlage kwh: 0.35
Auszug aus dem Log:
2018.11.01 11:38:15 3: Solartest = 1
Hier sieht man das die Readings aktualisiert werden aber die Userreadings nicht:
Preis_pro_kwh 0.28 2018-10-30 15:03:23
SNR BS15006011720112 2018-11-01 11:38:15
Watt 107 2018-11-01 11:38:15
kwh 0.35 2018-11-01 11:38:15
kwh_Jahr 0 2018-10-30 14:23:13
kwh_Monat 95.08 2018-10-30 14:46:47
kwh_gesamt 2416 2018-10-30 14:30:28
Die aktuellen Werte in den Userreadings habe ich manuall per setreading eingetragen.
Ich verstehe ehrlich gesagt nicht warum die Userreadings nicht aktualisiert werden und hoffe auf Hilfe.
Gruß
Daniel
was soll das erste userreading sein?
Preis_pro_kwh,
vielleicht solltest du erst einmal mit nur einem userreading beginnen, bis dieses funktioniert. danach ein zweites dranhängen.
wow das war schnell! ;D
Ich habe zwischenzeitlich meinen Beitrag noch bearbeitet. Sorry!
Preis_pro_kwh ***hier habe ich einmalig einen Wert eingetragen.
Der Wahnsinn!
Das genau war das Problem!
Ich habe nun das erste userReading entfernt und die restlichen werden nun aktualisiert.
userReadings kwh_Monat:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_Jahr:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, kwh_gesamt:kwh.* monotonic {ReadingsVal("Solaranlage","kwh",0)}, Gesamtertrag:kwh.* {ReadingsVal("Solaranlage","kwh_gesamt",0) * ReadingsVal("Solaranlage","Preis_pro_kwh",0)}
2018-11-01 12:28:07 HTTPMOD Solaranlage reread
2018-11-01 12:28:07 HTTPMOD Solaranlage SNR: BS15006011720112
2018-11-01 12:28:07 HTTPMOD Solaranlage Watt: 95
2018-11-01 12:28:07 HTTPMOD Solaranlage kwh: 0.44
2018-11-01 12:28:07 HTTPMOD Solaranlage kwh_Monat: 95.08
2018-11-01 12:28:07 HTTPMOD Solaranlage kwh_Jahr: 0
2018-11-01 12:28:07 HTTPMOD Solaranlage kwh_gesamt: 2416
2018-11-01 12:28:07 HTTPMOD Solaranlage Gesamtertrag: 676.48
Kann mir das bitte jemand erklären?
weil das eben kein userreading ist.
bei eingabe über das frontend gibt es keine fehlermeldung?
Zitat von: frank am 01 November 2018, 13:17:03
weil das eben kein userreading ist.
bei eingabe über das frontend gibt es keine fehlermeldung?
Nein, es gab kein Fehlermeldlung.
Das heisst also ein userReading muß etwas tun und kann kein statisches Reading sein?
Ein statisches Reading sollte ich dann einmalig per setreading setzen?
Habe ich das so richtig verstenden?
ein userreading ist wie ein notify, das aber nur auf events von seinem "herrchen" lauscht. wird es getriggert, legt es das entsprechende reading an und füllt es über die anweisung, die in den geschweiften klammern steht.
bei dir fehlen die geschweiften klammern, was wohl zum abbruch aller userreadings führt.
für einen konstanten wert wäre ein userreading die falsche wahl, da es unnötigerweise ständig ausgefürt wird.
wenn du einen festen wert zum rechnen brauchst, würde ich ein userattribut nehmem und mit AttrVal() darauf zugreifen.
Okay das ist jetzt soweit klar. Danke!
Zitat von: frank am 01 November 2018, 14:32:13
wenn du einen festen wert zum rechnen brauchst, würde ich ein userattribut nehmem und mit AttrVal() darauf zugreifen.
Ich habe bisher immer mit einem
setreading gearbeitet um einem Device ein zusätzliches Reading zu geben. Und dann eben per
ReadingsVal darauf zugegriffen.
Würdest Du mir sagen worin der Unterschied / Vorteil in Deiner Variante liegt?