Neue Version von HTTPMOD mit neuen Features zum Testen

Begonnen von StefanStrobel, 05 Dezember 2015, 08:31:32

Vorheriges Thema - Nächstes Thema

frank

ZitatDamit sollte es auch mit einem alten Perl wieder klappen
danke stefan, läuft weiterhin bestens.
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

nesges

Nochmals Danke, funktioniert nach erstem Test einwandfrei. Nur eine Kleinigkeit:

2015.12.08 10:08:03 1: PERL WARNING: Use of uninitialized value $matchlist[0] in join or string at ./FHEM/98_HTTPMOD.pm line 1045.
2015.12.08 10:08:03 1: PERL WARNING: Use of uninitialized value $val in concatenation (.) or string at ./FHEM/98_HTTPMOD.pm line 1105.


BKSolo

Hallo,
Zitat....ich habe eine neue Version im ersten Post angehängt.

Ich habe auf meinem "Raspberry 2 produktiv" das neuste HTTPMOD geladen und den von mir früher beschriebenen neuen Alpha 2 Code ins config geladen.

Startet jetzt ohne Nachfrage von fehlenden Modulen und läuft gut.

Besten Dank
Raspberry PI 2/3 - CUL-433(V3) - CUL-868 (V3) - Jeelink 868 - 433 S/E Eigenbau
TX29DTH-IT - FHT80B - FHT80TF - FS20KSE
FHEMobile 3.7r803 - Fhem2Fhem - Alpha2 - OZW672 - TelegramBot

eppi

Zitat von: StefanStrobel am 07 Dezember 2015, 20:54:29
@eppi: In Deiner Konfiguration fehlt die Parse-Anweisung. Entweder mit Regexes oder JSON
(z.B. attr Harasse1 ExtractAllJSON 1)
Hallo Stefan
Besten Dank für deinen Hinweis! Ich habe mittlerweile das power Reading und kann die Daten entsprechend auswerten. Ich habe dazu noch 2 Fragen:

Wie kann ich mein zweites Reading "relay" mit HTTPMOD als Reading haben?
Einfach das attr Harasse1 get02Name relay hinzufügen funktioniert nicht.

Wie kann ich die Set Befehle um das Relay zu schalten einbauen?

Sorry, aber ich blicke da noch nicht durch..
Viele Grüsse & Danke - Dani

StefanStrobel

Hallo Dani,

das relay ist bei extractAllJSON nicht erschienen, weil noch ein Bug im HTTPMOD war. Ich habe gerade eine neue Version im ersten Post angehängt. Jetzt sollte es klappen.
Zudem habe ich das Attribut von ExtractAllJSON auf extractAllJSON umbenannt, da alle anderen Attribute ebenfalls mit kleinen Buchstaben beginnen.

Für den Set Befehl musst Du herausfinden, was Dein Gerät für einen HTTP-Request zum Ändern eines Wertes erwartet und ob eine Authentisierung nötig ist. Ich würde das mit der Burp-Suite aufzeichnen und ansehen. Dann musst Du Header und ggf. Post-Daten mit set01... Attributen definieren. Am besten schaust Du Dir den Wiki-Artikel dazu an. Der beschreibt zwar noch nicht die neue Version, aber das mit Set sollte so wie bisher funktionieren.

Gruss
    Stefan

eppi

Hallo Stefan
Herzlichen Dank für den tollen Support. Könntest du noch die neue Version hochladen? Aktuelle ist keine mehr verfügbar.

Vielen Dank und Gruss Dani

StefanStrobel

Sorry - jetzt ist sie wieder da.

Gruss
    Stefan

eppi

Hi Stefan
Es kommt eine Fehlermeldung, dass das Modul nicht geladen werden kann. Ich glaube am Schluss der .pm Datei fehlen noch ein paar Zeichen/Zeilen.
Kannst du bitte mal schauen?

Danke vielmals und viele Grüsse Dani

StefanStrobel

Seltsam.
Wurde wohl beim upload abgeschnitten.
Jetzt hab ichs nochmal hochgeladen.

Gruss
    Stefan

eppi

Hallo Stefan
Besten Dank, das Module funktioniert nun, auch werden bei mir nun alle readings angezeigt!

Ich habe noch eine Verständnisfrage:
Ich schalte meinen Switch ein mit
http://192.168.2.123/relay?state=1&
und aus mit:
http://192.168.2.123/relay?state=0&

Ich habe versucht die Set Parameter wie folgt zu definieren:
attr Harasse1 set01Data state=1&
attr Harasse1 set01Name on
attr Harasse1 set01Data state=1&
attr Harasse1 set01URL http://192.168.2.123/relay?
attr Harasse1 set02Data state=0&
attr Harasse1 set02Name off


Da ich der Meinung bin, dass sich der set Befehl zusammensetzt aus der set01URL und set01Data. Dabei bekomme ich jedoch immer die Fehlermeldung "no value given to set on"

Hast du noch einen Tipp für mich?
Danke für deine Geduld und viele Grüsse Dani

StefanStrobel

Hallo,

HTTPMOD geht bei einem normalen Set davon aus, dass ein Parameter einen Wert bekommt.
In Deinem Beispiel also set Harasse1 power 0 oder set Harasse1 power 1.
Nach einem Parameter wird also zunächst ein numerischer Wert erwartet.
Mit einer Map kann man dann on auf 1 und off auf 0 Mappen

In Deinem Beispiel wäre das:

attr Harasse1 set01URL http://192.168.2.123/relay?
attr Harasse1 set01Name power
attr Harasse1 set01Data state=$val&
attr Harasse1 set01Map 0:off, 1:on


Wenn Du zwei separate sets für on und off definieren möchtest, die keine Werte bekommen geht das auch.
Dann müsstest Du aber zusätzlich das Attribut set01NoArg und set02NoArg setzen.

Gruss
    Stefan


eppi

Hallo Stefan
Besten Dank für deine Geduld und Tipps! Ich tue mich sehr schwer damit, die Attribute deines genialen Moduls zu verstehen.
Meine Definition sieht auktuell so aus:
define Harasse1 HTTPMOD http://192.168.2.123/report 600
attr Harasse1 userattr extractAllJSON get01Name getHeader1 getHeader2 getURL set01Data set01Map set01Name set01URL set02Data set02Name set02URL setHeader01 setHeader03 setHeader1 setHeader2 stateFormat verbose
attr Harasse1 extractAllJSON 1
attr Harasse1 getHeader1 Content-Type: application/json
attr Harasse1 getHeader2 Accept: */*
attr Harasse1 getURL http://192.168.2.123/report
attr Harasse1 room 1_Favoriten
attr Harasse1 set01Data state=$val&
attr Harasse1 set01Map 0:off, 1:on
attr Harasse1 set01Name relay
attr Harasse1 set01URL http://192.168.2.123/relay?
attr Harasse1 stateFormat {sprintf("%.1f",ReadingsVal("Harasse1","power",0))}
attr Harasse1 verbose 5


Im List des Device sehe ich auch, dass das set Komando richtig zusammengesetzt ankommt, jedoch antwortet HTTPMOD mit einem:
HTTP/1.1 405 Method Not Allowed Content-Type: text/html Connection: close Date: Sat, 12 Dec 2015 17:20:46 GMT Content-Length: 108 <HTML><HEAD> <TITLE>405 Method Not Allowed</TITLE> </HEAD><BODY> <H1>Method Not Allowed</H1> </BODY></HTML>
Ich habe schon erfolglos folgende Attribute versucht:
attr Harasse1 setHeader01 Content-Type: application/x-www-form-urlencoded
attr Harasse1 setHeader02 Accept: */*


Hast du mir nochmals einen Tipp?
Danke für deine Zeit und viele Grüsse Dani

StefanStrobel

Hallo,

wenn Du set01Data angibst, werden die angegebenen Daten in einem HTTP POST gesendet.
Dein Gerät scheint die Daten aber als Query-String in der URL zu erwarten.
Statt set01Data solltest Du die URL so ändern:


attr Harasse1 set01URL http://192.168.2.123/relay?state=$val&


Dann wird das ganze als HTTP GET geschickt.

Gruss
    Stefan

eppi

Danke vielmals Stefan! Alles funktioniert perfekt. Danke für den super Support!
Gruss Dani

highTower.su

Hi,

ich habe das Modul mit JSON ausprobiert, jedoch stürzt FHEM im längeren Betrieb mit folgender Meldung ab:

':' expected, at character offset 4 (before "}") at ./FHEM/98_HTTPMOD.pm line 948.

Meine Konfiguration:

#define flurlicht_unten HTTPMOD http://rpi-server2.w...u/mode.php?format=json 10
#attr flurlicht_unten userattr devStateIcon event-on-change-reading extractAllJSON set01Map set01Name set01URL stateFormat webCmd
#attr flurlicht_unten alias LED Streifen Flur
#attr flurlicht_unten event-on-change-reading .*
#attr flurlicht_unten extractAllJSON 1
#attr flurlicht_unten group Licht
#attr flurlicht_unten room hall
#attr flurlicht_unten set01Map 0:off, 1:regenbogenlauf, 2:regenbogen, 3:pixel, 4:codered, 5:blaulicht, 6:warmwhite, 7:white
#attr flurlicht_unten set01Name mode
#attr flurlicht_unten set01URL http://rpi-server2.w...u/mode.php?format=json&mode=$val
#attr flurlicht_unten stateFormat current-mode


Aber der Weg ist der richtige, es funktionierte sonst ganz gut...

Viele Grüße,

highTower