[gelöst] HTTPMOD Regex mit Loop 1-31 Tage

Begonnen von ch.eick, 09 Oktober 2020, 11:48:57

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo zusammen,
ich habe da ein Problem mit folgenden Daten.
Hier steht jede Zahl für einen tag, der natürlich von 28 bis 31 schwanken kann und in durchnummerierte readings landen soll.

{"command":"water monthly","data":" 133 112 189 150 329 116 191 248 114 346 108 304 54 79 236 177 144 99 242 115 183 63 78 19 57 51 333 256 296 64 153","group":"consumption","month":8,"msgnumber":"1","status":"ok","token":"f3622044b020f4dc6de727a5e1a15738aad9e51c4aab8f59f42d03b1a11cba1b","year":2020,"wtuType":"i-soft plus","serial number":"96586","tftStarted":1600789504424}



attr JUDO_iSoft_test reading381Name consumption_WaterMonthlyDate
attr JUDO_iSoft_test reading381Regex "command":"water monthly.*"month":(\d+),"msg.*"year":(\d+),"wtu
attr JUDO_iSoft_test reading382AutoNumLen 2
attr JUDO_iSoft_test reading382Name consumption_WaterMonthlyByDay
attr JUDO_iSoft_test reading382Regex "command":"water monthly","data":" (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+) (-?\d+)

Mit der obigen Regex kommen bereits 30 Tage :-) , wenn jedoch die Anzahl tage größer oder kleiner ist, kommt halt nichts :-(
Nun geht es darum, die letzten tage variabel zu parsen, oder im Optimum halt mit einer schönen Regex dynamisch von 1-31 Tage zu lesen.

Wer kennt sich damit so gut aus, dass er helfen könnte. Auf regex101 teste ich natürlich schon fleißig, sodass eine liste der Versuche hier zu lang wäre.

Gruß
    Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Beta-User

Versuch's mal damit:
"command":"water monthly","data":" (-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)([ "]?)((-?[0-9.]+)[ "])?((-?[0-9.]+)[ "])?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

ch.eick

#2
Zitat von: Beta-User am 09 Oktober 2020, 12:05:48
Versuch's mal damit:
"command":"water monthly","data":" (-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)([ "]?)((-?[0-9.]+)[ "])?((-?[0-9.]+)[ "])?

Okay, ich probiere es mal aus.
Warum verwendest Du [0-9.]+ anstelle von \d+    ?

EDIT:
läuft prima, kann man das auch noch mehr einkürzen?
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Beta-User

Weiß nicht so richtig, ob an dieser Stelle Wiederholungen gingen, also sowas:
"command":"water monthly","data":" ((-?[0-9.]+)[ "]?){28,31}

[0-9.]+ trifft halt nur auf arabische Ziffern (ggf. mit Dezimalstellen) zu, \d+ paßt weder auf Dezimalzahlen, noch ist garantiert, dass du nicht auch chinesische Zahlen (etc.) "erwischst" (Stichwort: Unicode)...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

ch.eick

Also es passt dann doch noch nicht so richtig.

Ich habe es nun etwas umgebaut und bekomme folgendes


2020.10.09 14:45:31.511 5: JUDO_iSoft_test: ExtractReading 38_water_monthly with regex /(?^:"command":"water monthly","data":" (-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "]|(?>(-?[0-9.]+)[ "]){29}|(?>(-?[0-9.]+)[ "]){30}|(?>(-?[0-9.]+)[ "]){31})/g ...
2020.10.09 14:45:31.514 5: JUDO_iSoft_test: 31 matches, matchlist = 133,112,189,150,329,116,191,248,114,346,108,304,54,79,236,177,144,99,242,115,183,63,78,19,57,51,333,256,,,
2020.10.09 14:45:31.514 5: JUDO_iSoft_test: ExtractReading for get38-1 sets 38_water_monthly-1 to 133
2020.10.09 14:45:31.515 5: JUDO_iSoft_test: ExtractReading for get38-2 sets 38_water_monthly-2 to 112
2020.10.09 14:45:31.516 5: JUDO_iSoft_test: ExtractReading for get38-3 sets 38_water_monthly-3 to 189
2020.10.09 14:45:31.516 5: JUDO_iSoft_test: ExtractReading for get38-4 sets 38_water_monthly-4 to 150
2020.10.09 14:45:31.517 5: JUDO_iSoft_test: ExtractReading for get38-5 sets 38_water_monthly-5 to 329
2020.10.09 14:45:31.518 5: JUDO_iSoft_test: ExtractReading for get38-6 sets 38_water_monthly-6 to 116
2020.10.09 14:45:31.519 5: JUDO_iSoft_test: ExtractReading for get38-7 sets 38_water_monthly-7 to 191
2020.10.09 14:45:31.519 5: JUDO_iSoft_test: ExtractReading for get38-8 sets 38_water_monthly-8 to 248
2020.10.09 14:45:31.520 5: JUDO_iSoft_test: ExtractReading for get38-9 sets 38_water_monthly-9 to 114
2020.10.09 14:45:31.521 5: JUDO_iSoft_test: ExtractReading for get38-10 sets 38_water_monthly-10 to 346
2020.10.09 14:45:31.521 5: JUDO_iSoft_test: ExtractReading for get38-11 sets 38_water_monthly-11 to 108
2020.10.09 14:45:31.522 5: JUDO_iSoft_test: ExtractReading for get38-12 sets 38_water_monthly-12 to 304
2020.10.09 14:45:31.522 5: JUDO_iSoft_test: ExtractReading for get38-13 sets 38_water_monthly-13 to 54
2020.10.09 14:45:31.523 5: JUDO_iSoft_test: ExtractReading for get38-14 sets 38_water_monthly-14 to 79
2020.10.09 14:45:31.524 5: JUDO_iSoft_test: ExtractReading for get38-15 sets 38_water_monthly-15 to 236
2020.10.09 14:45:31.524 5: JUDO_iSoft_test: ExtractReading for get38-16 sets 38_water_monthly-16 to 177
2020.10.09 14:45:31.525 5: JUDO_iSoft_test: ExtractReading for get38-17 sets 38_water_monthly-17 to 144
2020.10.09 14:45:31.526 5: JUDO_iSoft_test: ExtractReading for get38-18 sets 38_water_monthly-18 to 99
2020.10.09 14:45:31.526 5: JUDO_iSoft_test: ExtractReading for get38-19 sets 38_water_monthly-19 to 242
2020.10.09 14:45:31.527 5: JUDO_iSoft_test: ExtractReading for get38-20 sets 38_water_monthly-20 to 115
2020.10.09 14:45:31.528 5: JUDO_iSoft_test: ExtractReading for get38-21 sets 38_water_monthly-21 to 183
2020.10.09 14:45:31.528 5: JUDO_iSoft_test: ExtractReading for get38-22 sets 38_water_monthly-22 to 63
2020.10.09 14:45:31.529 5: JUDO_iSoft_test: ExtractReading for get38-23 sets 38_water_monthly-23 to 78
2020.10.09 14:45:31.529 5: JUDO_iSoft_test: ExtractReading for get38-24 sets 38_water_monthly-24 to 19
2020.10.09 14:45:31.530 5: JUDO_iSoft_test: ExtractReading for get38-25 sets 38_water_monthly-25 to 57
2020.10.09 14:45:31.531 5: JUDO_iSoft_test: ExtractReading for get38-26 sets 38_water_monthly-26 to 51
2020.10.09 14:45:31.531 5: JUDO_iSoft_test: ExtractReading for get38-27 sets 38_water_monthly-27 to 333
2020.10.09 14:45:31.532 5: JUDO_iSoft_test: ExtractReading for get38-28 sets 38_water_monthly-28 to 256
2020.10.09 14:45:31.533 5: JUDO_iSoft_test: ExtractReading for get38-29 sets 38_water_monthly-29 to
2020.10.09 14:45:31.533 5: JUDO_iSoft_test: ExtractReading for get38-30 sets 38_water_monthly-30 to
2020.10.09 14:45:31.534 5: JUDO_iSoft_test: ExtractReading for get38-31 sets 38_water_monthly-31 to


Somit passt 29-31 noch nicht :-(
Laut Regex101 sieht es aber gut aus

(?>(-?[0-9.]+)[ "]){29}

{"command":"water monthly","data":" 133 112 189 150 329 116 191 248 114 346 108 304 54 79 236 177 144 99 242 115 183 63 78 19 57 51 333 256 296 64 153","group":"consumption","month":8,"msgnumber":"1","status":"ok","token":"32eeebee21a61f0846f0a9c58d400098713ed9d794806a27b6a775f6aab74f6a","year":2020,"wtuType":"i-soft plus","serial number":"96586","tftStarted":1600789504424}

Match 1 Full match 36-144 133 112 189 150 329 116 191 248 114 346 108 304 54 79 236 177 144 99 242 115 183 63 78 19 57 51 333 ...
Group 1. 140-143 296

Über das weiterschalten der {nn} bekomme ich so jeden Wert




attr JUDO_iSoft_test get38Name 38_water_monthly
attr JUDO_iSoft_test get38Regex "command":"water monthly","data":" (-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "]|(?>(-?[0-9.]+)[ "]){29}|(?>(-?[0-9.]+)[ "]){30}|(?>(-?[0-9.]+)[ "]){31}
attr JUDO_iSoft_test get38RegOpt g
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Beta-User

Hmm, vermutlich kann hier eher ein wirklicher HTTPMOD-Experte helfen, sorry...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

ch.eick

Zitat von: Beta-User am 09 Oktober 2020, 15:02:12
Hmm, vermutlich kann hier eher ein wirklicher HTTPMOD-Experte helfen, sorry...
Danke, Du hast mir aber wie immer schon toll aus der Patsche geholfen.
Ich werde den Titel dann um httpmod erweitern :-)
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

In einem anderen HTTPMOD Regex habe ich bereits erfolgreich soetwas angewendet.

get01Name RunData
get01RegOpt g
get01Regex value=([+|-]{0,1}\d+.\d+)>|value=(\d+.\d+)%>|value=(\d)>|value=(.*-\d+\s+.*\d)>|selected="selected">(\d)<

Hierbei ist | die oder Verknüpfung und alle Werte werden auf der Selben http Seite in einem Rutsch gefunden.
Die Frage ist nun, warum funktioniert das | nicht bei der jetzigen Abfrage?

attr JUDO_iSoft_test get38AutoNumLen 2
attr JUDO_iSoft_test get38Regex "command":"water monthly","data":" (-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "]|(?>(-?[0-9.]+)[ "]){29}|(?>(-?[0-9.]+)[ "]){30}|(?>(-?[0-9.]+)[ "]){31}
attr JUDO_iSoft_test get38RegOpt g
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Beta-User

Kann ich nicht sagen, evtl. ist das eher im Sinne einer echten Alternativität gedacht, und hier haben wir ja immer die ersten 28...?

Folgendes hätte ich noch anzubieten:
(-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]*)[ "]?(-?[0-9.]*)[ "]?(-?[0-9.]*)["]?
Da bleiben halt ggf. 29 bis 31 leer, k.A., ob das hier schlimm wäre?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

ch.eick

Zitat von: Beta-User am 09 Oktober 2020, 16:36:41
Kann ich nicht sagen, evtl. ist das eher im Sinne einer echten Alternativität gedacht, und hier haben wir ja immer die ersten 28...?

Folgendes hätte ich noch anzubieten:
(-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]+)[ "](-?[0-9.]*)[ "]?(-?[0-9.]*)[ "]?(-?[0-9.]*)["]?
Da bleiben halt ggf. 29 bis 31 leer, k.A., ob das hier schlimm wäre?
Bei der anderen Abfrage werden immer alle gelesen, also in jeder "oder" Verknüpfung.
Man schauen, ob noch jemand eine Idee hat.
Ein leeres reading deutet ja darauf hin, das einfach nichts gelesen wurde. Eventuell liegt es ja dann an dem LOOK statement.
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

ch.eick

#10
Nach einigen Tests bin ich schon weiter, jedoch erfasst das auch Werte aus dem Header.
Die variable anzahl bei der tagen wird nun berücksichtigt. Leider müsste ich dann noch die überschüssigen Tage am Ende löschen, die optisch etwas stören würden.


attr JUDO_iSoft_test get38AutoNumLen 2
attr JUDO_iSoft_test get38Regex [ ](-?[0-9]{1,4})
attr JUDO_iSoft_test get38RegOpt g



# Die ersten 4 Werte sind aus dem Header
38_water_monthly-01 200
38_water_monthly-02 09
38_water_monthly-03 2020
38_water_monthly-04 16

# hier kommen die Werte aus dem httpbody
38_water_monthly-05 82
38_water_monthly-06 88
snip...
38_water_monthly-33 72
38_water_monthly-34 45

Gibt es eine Möglichkeit den Header zu überspringen?
Könnte man alternativ mit Regex zuerst zu einem Startpunkt springen? Danach müsste jedoch wieder mehrfach gescannt werden. Für einen einzelnen Wert würde das natürlich klappen.

Testdaten:

httpheader
HTTP/1.1 200 OK
content-type: application/json
access-control-allow-origin: *
date: Fri, 09 Oct 2020 16:36:34 GMT
connection: close

httpbody
{"command":"water monthly","data":" 82 88 123 184 98 60 177 363 57 145 64 292 525 117 83 113 101 201 124 24 118 86 100 320 170 180 83 61 72 45","group":"consumption","month":9,"msgnumber":"1","status":"ok","token":"32eeebee21a61f0846f0a9c58d400098713ed9d794806a27b6a775f6aab74f6a","year":2020,"wtuType":"i-soft plus","serial number":"96586","tftStarted":1600789504424}
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

amenomade

preProcessRegex greigt nicht auf die Headers => Wegen Headers kann man nichts machen.
Es sei denn Du nimmst als get38JSON die ganze "data" String und schickst die mit get38OExpr einer perl Routine, die dann selbst die Readings kreiert.

Überschüssige Tage: get|reading[0-9]*DeleteIfUnmatched
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

ch.eick

Okay, guten Morgen.
Vielen Dank für die Hilfe. Die Lösung sieht nun wie folgt aus.


setreading JUDO_iSoft_test _MONTH 08
setreading JUDO_iSoft_test _YEAR 2020

attr JUDO_iSoft_test get38URL https://%JUDO_ipaddress%:8124/?group=consumption&command=water%20monthly&msgnumber=1&token=%token%&year=%_YEAR%&month=%_MONTH%

attr JUDO_iSoft_test get38DeleteIfUnmatched 1
attr JUDO_iSoft_test get38Name 38_water_monthly
attr JUDO_iSoft_test get38RegOpt g
attr JUDO_iSoft_test get38Regex [ ](-?[0-9]{1,4})

attr JUDO_iSoft_test get38-5Name consumption_WaterMonthlyByDay-01
attr JUDO_iSoft_test get38-6Name consumption_WaterMonthlyByDay-02
snip...
attr JUDO_iSoft_test get38-35Name consumption_WaterMonthlyByDay-31

Und im userreading:
consumption_WaterMonthlyDate:consumption_WaterMonthlyByDay-01.* {my $date=sprintf("%4d-%02d",ReadingsVal("$NAME","_YEAR",0),ReadingsVal("$NAME","_MONTH",0) );;;; fhem("deletereading $NAME 38_water_monthly-.*");;;; $date }


Das Ergebnis ist schön aufgeräumt und dynamisch in der Anzahl Tage

     2020-10-10 10:37:17   _MONTH          08
     2020-06-11 18:10:54   _YEAR           2020

     2020-10-10 10:37:43   consumption_WaterMonthlyByDay-01 133
     2020-10-10 10:37:43   consumption_WaterMonthlyByDay-02 112
snip...
     2020-10-10 10:37:43   consumption_WaterMonthlyByDay-31 153
     2020-10-10 10:37:43   consumption_WaterMonthlyDate 2020-08
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick