HTTPMOD zum Auslesen einer einzelnen CSV-Zeile

Begonnen von mschwaig, 03 Februar 2016, 03:14:44

Vorheriges Thema - Nächstes Thema

mschwaig

Hallo,

ich spiele mich seit Stunden mit HTTPMOD um eine eigentlich ganz simple Abfrage hinzukriegen:

Der Aufruf: http://xyz:8888/temperatures liefert eine plain-text Wertereihe:

41.2,23.2,23.5,32.1,6.0,22.4,98692.0,101463.3,0.0,1365.9,743.1,1859.1,3197.1

Die hätte ich gerne mit HTTPMOD in 13 Attribute eingelesen. Nur, praktisch alle Beispiele gehen von regexs oder JSON aus, so was simples wie CSV finde ich nirgends. Mein letztes Experiment (mal nur für die ersten zwei Werte):

define xyz HTTPMOD http://xyz:8888/temperatures 60
attr xyz userattr reading1Name reading2Name readingsRegex.*
attr xyz reading1Name temp1
attr xyz reading2Name temp2
attr xyz readingsRegex.* [0-9]+;;[0-9]+

fragt zwar wie alle zuvor richtig die URL ab und ich finde in buf auch das korrekte Ergebnis:
   
HTTP/1.1 200 OK Content-Length: 76 Connection: close text 41.2,23.1,23.5,32.5,6.1,22.4,98695.0,101464.3,0.0,1368.9,715.7,1699.3,3197.1

Hat jemand einen Tipp für mich? Danke!

Markus

frank

hast du im wiki und commandref geschaut?
du musst für jedes reading ein regex-attr definieren oder du lässt alle readings automatisch anlegen. regex musst du wohl auch noch üben. zb hier https://regex101.com/

automatisch zb so. dazu brauchst du aber die neue version aus diesem thread http://forum.fhem.de/index.php/topic,45176.0.html:

attr xyz reading01Name value
attr xyz reading01Regex (?:^|,)(\d+\.\d)
attr xyz reading01RegOpt g
attr xyz reading01AutoNumLen 2
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

mschwaig

Suuuper, danke - schaut schon mal deutlich besser aus! :-)

Zwei Probleme gibt es jetzt allerdings noch:

a. ich kriege ja 13 Werte, in FHEM werden aber mit Deinem Code nur 12 Readings angezeigt - das erste fehlt:

buf: 41.2,22.3,22.6,34.7,6.2,21.5,99244.0,102030.8,98.3,1418.3,724.1,1849.7,3197.3
Readings
value-01 22.2 2016-02-04 01:56:40
value-02 22.5 2016-02-04 01:56:40
...
value-12 3197.4 2016-02-04 01:56:40

b. ich habe versucht die readings auch noch vernünftig zu benennen, aber keiner der beiden Einträge (mal nur für die ersten beiden Werte gedacht) hat was geändert:

attr xyz reading01-01Name CPUTemp
attr xyz reading01-2Name CasingTemp

Wenn Du für diese beiden Probleme auch noch eine Idee hättest... :-)

DANKE!

Markus

frank

lass doch mal den ersten klammerausdruck in der regex weg.
wenn jedes reading einen eigenen namen haben soll, musst du sie alle komplett definieren, siehe wiki.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

mschwaig

Das war's fast, aber damit hast Du mich auf die richtige Spur gebracht. Mein Denkfehler: die regex wird auf den kompletten Buffer:

HTTP/1.1 200 OK
Content-Length: 77
Connection: close
text
41.2,22.5,22.8,34.6,6.4,21.7,99235.0,102016.4,18.3,1387.7,598.7,1883.1,3200.3

(samt seinen div. CR/LF!) angewandt - und nicht nur auf das Ergebnis:

41.2,22.5,22.8,34.6,6.4,21.7,99235.0,102016.4,18.3,1387.7,598.7,1883.1,3200.3

Dadurch habe ich dann mit Deinem Setting plötzlich auch das 1.1 aus "HTTP/1.1 200 OK" als Wert bekommen. Spricht, die korrekte Einstellung (falls es mal jemand braucht) ist:

reading01Regex (?:\n|,)(\d+\.\d)

ad eigener Name: nein, wie im von Dir erwähnten Link http://forum.fhem.de/index.php/topic,45176.0.html ausgeführt kann man das auch automatisieren, so funktioniert es jetzt bei mir:

attr xyz reading01Name myvalues
attr xyz reading01-1Name CPU
attr xyz reading01-2Name Housing
attr xyz reading01-3Name Room1
attr xyz reading01-4Name Humidity
attr xyz reading01-5Name Dewpoint
attr xyz reading01-6Name Room2
attr xyz reading01-7Name Pressure
attr xyz reading01-8Name PressureZero
attr xyz reading01-9Name ambientLight
attr xyz reading01-10Name airquality
attr xyz reading01-11Name noise
attr xyz reading01-12Name movement
attr xyz reading01-13Name voltage

Jetzt muss ich nur noch herausfinden wie ich das erste der 13 Attribut zusätzlich als STATE hinkriege, damit dort nicht immer ??? steht. :-)

Jedenfalls danke für Deine Hilfe!

frank

Zitatdie regex wird auf den kompletten Buffer:
genau. je genauer deine infos, desto besser die antworten.  ;)

Zitatad eigener Name: nein, wie im von Dir erwähnten Link http://forum.fhem.de/index.php/topic,45176.0.html ausgeführt kann man das auch automatisieren, so funktioniert es jetzt bei mir:
prima, habe ich erfolgreich überlesen.

ZitatJetzt muss ich nur noch herausfinden wie ich das erste der 13 Attribut zusätzlich als STATE hinkriege, damit dort nicht immer ??? steht. :-)
attr xyz stateFormat spannung: voltage V
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html