Neue Version von HTTPMOD (mit get Kommando) zum Testen

Begonnen von StefanStrobel, 13 Februar 2015, 22:33:49

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo Andies,

attr Speedport CheckAllReadings 1


ist kein von HTTPMOD unterstütztes gültiges Attribut.
Das hast Du Dir wieder selbst mit userattr definiert.
Bitte lösche doch das ganze userattr und leg es nie wieder manuell an, dann sparst Du Dir viel Arbeit / Ärger.

Aus der Doku:
Zitat
get[0-9]*CheckAllReadings
this attribute modifies the behavior of HTTPMOD when the HTTP Response of a get command is parsed.
If this attribute is set to 1, then additionally to the matching of get specific regexes (get[0-9]*Regex), XPath or JSON also all the reading names and parse definitions defined in Reading[0-9]+Name and Reading[0-9]+Regex, XPath or JSON attributes are checked and if they match, the coresponding Readings are assigned as well.
This is automatically done if a get or set command is defined without its own parse attributes.

wenn also get1CheckAllReadings auf 1 steht, wird NICHT get2Regex ausgewertet sondern reading1Name, reading1Regex, reading2Name, reading2Regex, ...

Gruss
   Stefan

andies

#61
Danke, jetzt hat alles geklappt. Ich habe endlich die Lösung.

Ich würde das jetzt mal im Wiki beschreiben, oder gibt es da besondere Schreibrechte (wie in der Einleitung)? Ich habe natürlich die commandref gelesen, aber - wie man an diesem Thread sieht - nur Teile davon verstanden. Ich vermute mal, wenn man das Beispiel ausführlich erläutert, verstehen andere auch mehr und trauen sich an diese eierlegende Wollmilchsau heran. Denn das Modul ist wirklich super. Aber es ist aufwendig und komplex, es einzurichten.

PS Das hier funktioniert jetzt:

defmod Speedport HTTPMOD none 0
attr Speedport userattr get1Header1 get1Header2 get1Name get1URL reading1AutoNumLen reading1Name reading1RegOpt reading1Regex reading1RecombineExpr reading2AutoNumLen reading2Name reading2RegOpt reading2RecombineExpr reading2Regex sid1Header sid1IdRegex sid1URL sid2Data sid2Header1 sid2Header2 sid2URL
attr Speedport enableCookies 1
attr Speedport extractAllJSON 0
attr Speedport get1Header1 Content-Type: application/json
attr Speedport get1Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport get1Name Telefonanrufe
attr Speedport get1URL http://speedport.ip/data/PhoneCalls.json?_lang=de&_tn=$sid
attr Speedport reAuthRegex Melden Sie sich an, um Ihren Speedport zu konfigurieren
attr Speedport reading1AutoNumLen 2
attr Speedport reading1Name Telefonliste
attr Speedport reading1RecombineExpr join " ", @matchlist
attr Speedport reading1RegOpt g
attr Speedport reading1Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"([a-z]*)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"(\d*)"}
attr Speedport reading2AutoNumLen 2
attr Speedport reading2Name Anrufeverpasst
attr Speedport reading2RegOpt g
attr Speedport reading2RecombineExpr join " ", @matchlist
attr Speedport reading2Regex \[{"vartype":"value","varid":"id","varvalue":"[0-5]"},{"vartype":"value","varid":"(missedcalls)_date","varvalue":"([\d\.]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([\d:]*)"},{"vartype":"value","varid":"[a-z_]*","varvalue":"([a-zA-Z0-9]*)"}
attr Speedport removeBuf 1
attr Speedport sid1Header Content-Type: text/html
attr Speedport sid1IdRegex _httoken = (\d*)
attr Speedport sid1URL http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid2Data password=XXXXXXXXXXXXXXXXXXXX&showpw=0&httoken=$sid
attr Speedport sid2Header1 Content-Type: application/json
attr Speedport sid2Header2 Referer: http://speedport.ip/html/login/index.html?lang=de
attr Speedport sid2URL http://speedport.ip/data/Login.json

und die Ausgaben sehen dann so aus:

setstate Speedport 2017-06-03 21:54:54 Anrufeverpasst missedcalls 02.06.2017 17:36:45 Unbekannt
...
setstate Speedport 2017-06-03 21:54:54 Telefonliste dialedcalls 03.06.2017 19:44:48 0163XXXXX 50 ...  takencalls 02.06.2017 13:41:46 0163XXXXX 38 ...
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

clumsy

Hallo, kurze Frage an Stefan: macht das Sinn, dass das HTTPMOD Modul Readings mit Leerzeichen drin generiert, z.b.wenn ebi einem extractAllJSON JSON Objekte kommen, welche Leerzeichen im Namen haben...

Diese Readings sind dann kaum mehr zu verarbeiten, da ja (meistens) Leerzeichen als trenner verwednet werden...

vielen Dank schonmal für eine kurze erklärung ;)

STefan

StefanStrobel

Hallo clumsy,

das macht keinen Sinn. Die Funktion, in der die Readings aus den JSON-Objekten erzeugt wird, sollte vor dem readingsBulkUpdate ein makeReadingName aufrufen.
Ich habe jetzt nur das Problem, dass eine Korrektur eventuell bei einigen Leuten dazu führt dass es nicht mehr so wie vorher funktioniert...

Gruss
   Stefan

clumsy

Hallo
Klar, verstehe ich... Wobei die meisten welche im json Namen mit Leerzeichen verwenden sowieso Probleme haben dürften...

Vielleicht in einer zukünftgeni Version mal...

Danke trotzdem für die prompte Antwort!

STefan

Evtl kannst ja auch für die die es brauchen hier ein patch veröffentlichen...

StefanStrobel

Hallo clumsy,

ich habe eine neue Version gepostet: https://forum.fhem.de/index.php/topic,45176.0.html.
Dieser Thread hier ist eigentlich alt und ich schließe ihn mit Verweis auf den neueren :-)

Gruss
   Stefan