Neue Version von HTTPMOD mit neuen Features zum Testen

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

Vorheriges Thema - Nächstes Thema

ch.eick

Hallo Thomas,

ich habe es gerade mal ausprobiert und es funktioniert.

folgendes ist ein reading bei mir "devices_01_deviceid", das ich einfach mit einem "$" eingefügt habe.
Dieses reading kommt jedoch aus dem selben device!

attr vallox_cloud get02CheckAllReadings 0
attr vallox_cloud get02Name KWL_Status
attr vallox_cloud get02URL https://cloud.vallox.com:443/api/devicestate/$devices_01_deviceid


Im Log sieht es dann wie folgt aus.

2019.04.10 11:51:04 4: vallox_cloud: https://cloud.vallox.com:443/api/devicestate/$devices_01_deviceid: Redirect (1) to https://cloud.vallox.com:443/account
2019.04.10 11:51:04 4: vallox_cloud: AddToQueue adds get02, initial queue len: 0, prio
2019.04.10 11:51:04 5: vallox_cloud: AddToQueue prepends type get02 to URL https://cloud.vallox.com:443/account, no data, header Referer: https://cloud.vallox.com/cloudui/index.html?deviceid=432C7775-3FDA-430A-920A-97B591B5F2C4


Viel Spaß beim weiteren experimentieren.

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

StefanStrobel

Hallo Thomas,

ja, das kannst Du über Replacements machen. Die musst Du allerdings definieren.
Siehe https://wiki.fhem.de/wiki/HTTPMOD#Further_replacements_of_URL.2C_header_or_post_data

Im Beispiel von Christian kommt ein Redirect vom Server. Das hat aber nichts mit der Ersetzung durch den Inhalt eines Readings zu tun. Ganz so einfach ist es dann leider doch nicht. ;-)

Gruss
   Stefan

ch.eick

Sorry für die fehlinformation,

das habe ich dann leider auch zu spät gemerkt.

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

ThomasMagnum

Vielen Dank für die Hinweise.
Ich werde mir das im Detail mal über Ostern ansehen.

Da ich als zweite Baustelle noch nach einer Möglichkeit suche mich per HTTPMOD in die FritzBox einzuloggen, um dort die Ereignisanzeige auszulesen, ist es ja eh unumgänglich sich tiefer in dieses Modul einzusteigen.  ;)

Gruß, Thomas

Honigmaul

Hallo zusammen,

Ich hab da auch eine Frage zu den Regex. Ich versuche von einer Textdatei, die online ist aktuelle Daten abzurufen:
https://wasser.bgld.gv.at/fileadmin/hydromap/pegelstationen/datenbereitstellung/W_s_rust_7.txt
Die Daten hier sehen zB so aus: 12.04.2019 11:45:00 115,53

Mein Regex dazu sieht momentan noch starr aus:
attr Wasserstand_Rust reading01Regex 10.04.2019 00:00:00 ([0-9\,]+[0-9]+)

Ich such mir die letzten Tage schon einen Wolf, wie kann ich anstatt des Datums eine Variable einbauen? So a la $year,$month, die es in Fhem standardmäßig gibt?
Wäre schön aktuelle Messwerte zu erhalten.

Vielen Dank schon mal im Voraus
lg Christof

andies

#545
Mein Problem habe ich blöderweise aber nicht lösen können. Geklärt. Ich wollte für Pikrellcam (http://billw2.github.io/pikrellcam/pikrellcam.html) eine Steuerung haben, die via HTTPMOD funktioniert. Das, was ich brauche, klappt inzwischen. Das ist auch leicht anpassbar; vielleicht kann man das auch nach intensivem Testen in die templates aufnehmen. Hier die Gerätedefinition.


defmod Pikrellcam HTTPMOD none 0
attr Pikrellcam userattr replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value set01Name set01TextArg:0,1 set01URL set02Name set02TextArg:0,1 set02URL set03Name set03TextArg:0,1 set03URL set04Name set04NoArg:0,1 set04URL set05Name set05NoArg:0,1 set05URL set06Name set06NoArg:0,1 set06URL
attr Pikrellcam comment Dieses HTTPMOD-Modul erlaubt die Steuerung von Pikrellcam über http-Befehle. Die enstprechende URL *muss* in dem replacement05-Feld unten einmal eingetragen werden, im define muss "none" als URL stehen. Derzeit implementiert\
1.) set <device> motion on/off\
2.) set <device> archive_day YYYY-MM-DD (nur für einzeln einzugebende Tage)\
3.) set <device> delete_day YYYY-MM-DD (nur für einzeln einzugebende Tage, die nicht archiviert wurden)\
4.) set <device> archive_yesterday (Fotos/Videos von gestern archiviert)\
5.) set <device> delete_last_month (loesche archivierte Fotos/Videos)\
6.) set <device> still (loest Foto aus)\
Das archivierte Medium wird im Attribut type festgelegt (stills oder videos).
attr Pikrellcam replacement01Mode reading
attr Pikrellcam replacement01Regex %%yesterday%%
attr Pikrellcam replacement01Value Sonne:yesterday
attr Pikrellcam replacement02Mode reading
attr Pikrellcam replacement02Regex %%year%%
attr Pikrellcam replacement02Value Sonne:year
attr Pikrellcam replacement03Mode reading
attr Pikrellcam replacement03Regex %%last_month%%
attr Pikrellcam replacement03Value Sonne:last_month
attr Pikrellcam replacement04Mode text
attr Pikrellcam replacement04Regex %%type%%
attr Pikrellcam replacement04Value stills
attr Pikrellcam replacement05Mode text
attr Pikrellcam replacement05Regex %%url%%
attr Pikrellcam replacement05Value hier-den-link-zur-kamera-eintragen
attr Pikrellcam room Kameras
attr Pikrellcam set01Name motion
attr Pikrellcam set01TextArg 1
attr Pikrellcam set01URL http://%%url%%/fifo_command.php?cmd=motion_enable%20$val
attr Pikrellcam set02Name archive_day
attr Pikrellcam set02TextArg 1
attr Pikrellcam set02URL http://%%url%%/media-archive.php?mode=media&type=%%type%%&dir=media&archive_date=$val
attr Pikrellcam set03Name delete_day
attr Pikrellcam set03TextArg 1
attr Pikrellcam set03URL http://%%url%%/media-archive.php?mode=media&type=%%type%%&dir=media&delete_day=$val
attr Pikrellcam set04Name archive_yesterday
attr Pikrellcam set04NoArg 1
attr Pikrellcam set04URL http://%%url%%/media-archive.php?mode=media&type=%%type%%&dir=media&archive_date=%%yesterday%%
attr Pikrellcam set05Name delete_last_month
attr Pikrellcam set05NoArg 1
attr Pikrellcam set05URL http://%%url%%/media-archive.php?mode=archive&type=%%type%%&year=%%year%%&m0=%%last_month%%&d0=1&m1=%%last_month%%&d1=31&delete_all
attr Pikrellcam set06Name still
attr Pikrellcam set06NoArg 1
attr Pikrellcam set06URL http://%%url%%/fifo_command.php?cmd=still
attr Pikrellcam stateFormat <a href="http://link-bitte-eintragen">Link</a>

Die im device angegebenen Daten (yesterday, month, year) werden über 99_myUtils.pm einem Astro-device Sonne zugeordnet:

sub DiverseDatenSetzen(){
#Variablen fuer Pikrellcam setzen
my $Pikrell_yesterday = POSIX::strftime("%Y-%m-%d", localtime(time-60*60*24));
my $Pikrell_year = ( localtime(time-31*60*60*24) )[5]+1900;
my $Pikrell_last_month = ( ( localtime() )[4] || 12 );
fhem("setreading Sonne yesterday ".$Pikrell_yesterday);  // <== hier werden die notwendigen Werte in das Astro-device Sonne geschrieben
fhem("setreading Sonne year ".$Pikrell_year);
fhem("setreading Sonne last_month ".$Pikrell_last_month );
fhem("save");
}
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

ujaudio

#546
Eine einfache Frage zuerst: Bin ich als HTTPMOD-Anfänger hier im richtigen Faden?

Ich möchte meine PV-Anlage nun in mein System einbinden und ein Gerät hat eine xml-Schnittstelle. Entsprechend habe ich definiert
Internals:
   BUSY       0
   CHANGED   
   DEF        http://192.168.178.29/cgi/ems_data.xml 30
   FUUID      5ce2734b-f33f-4e4e-f13e-f663859493614267
   Interval   30
   LASTSEND   1558354366.29024
   MainURL    http://192.168.178.29/cgi/ems_data.xml
   ModuleVersion 3.5.9 - 13.2.2019
   NAME       pw_engion
   NOTIFYDEV  global
   NR         158
   NTFY_ORDER 50-pw_engion
   STATE      ???
   TRIGGERTIME 1558354396.28927
   TRIGGERTIME_FMT 2019-05-20 14:13:16
   TYPE       HTTPMOD
   addr       http://192.168.178.29:80
   auth       0
   code       200
   compress   1
   conn       
   data       
   displayurl http://192.168.178.29/cgi/ems_data.xml
   header     
   host       192.168.178.29
   httpheader HTTP/1.1 200 Ok
Server: Ethernut 4.6.4.38
Content-Type: text/xml
Connection: close
   httpversion 1.0
   hu_blocking 0
   hu_filecount 5
   hu_port    80
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /cgi/ems_data.xml
   protocol   http
   redirects  0
   timeout    2
   url        http://192.168.178.29/cgi/ems_data.xml
   value      0
   QUEUE:
   READINGS:
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://192.168.178.29/cgi/ems_data.xml
     value      0
   sslargs:
Attributes:
   reading01Name P
   reading01Regex var name="P" value="([\d\.]+)
   room       Energie
   userattr   reading01Name reading01Regex


Das tut so weit, aber "mein" HTTPMOD entspricht nicht ganz dem Wiki (,z.B. set-Befehle). Außerdem komme ich mit dem "XPath-Strict" noch nicht zurecht, mein XML sieht so aus:
<root Timestamp="944006605" id="110000015" ChargerCount="15" Description="Reimann">
<inverter id="M041616">
<var name="P" value="0"/>
<var name="SOC" value="66"/>
<var name="Capacity" value="6912"/>
<var name="State" value="4"/>
</inverter>
</root>

und ich möchte die Werte Timestamp, P, SOC, Capacity und Value. Mit Regex funktioniert es aber.
Einen lieben Gruß
Jürgen

StefanStrobel

Hallo Jürgen,

der Wiki-Text zu HTTPMOD ist nicht ganz aktuell. Neuere Set-Befehle fehlen dort möglicherweise.
Wenn Du mit Regex klar kommst, gibt es keinen Grund sich mit XPath bei HTTPMOD herumzuschlagen ;-)

Gruss
   Stefan

ujaudio

Na, dann bleibe ich doch bei Regex ;)

Einen lieben Gruß
Jürgen
Einen lieben Gruß
Jürgen

uwirt

#549
Ich habe neuerdings bei zwei von fünf devices die folgende Fehlermeldung log:


2019.05.23 21:29:19 3: Libelium_1: no parsed JSON structure available
2019.05.23 21:29:19 3: Libelium_1: Read response to update didn't match any Reading


Wie kann ich herausfinden woran das liegt?
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS100-C6-O|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya

ujaudio

Einfache Frage: Kann man ein Bild einer Webseite, die man mit HTTPMOD zu FHEM bringt anzeigen? Wenn ja: wie??!?
Einen lieben Gruß
Jürgen

rubinho

Hallo Leute,

ich hatte am WE meine Daikin Klimaanlage in Betrieb nehmen wollen, die per HTTPMod gesteuert wird.

Quelle: https://wiki.fhem.de/wiki/HTTPMOD_Beispielkonfiguration_zur_Anbindung_einer_Daikin_Klimaanlage_mit_WLAN-Modul

Das hatte im vorigen Jahr noch funktioniert.

Speziell geht es um den Bereich...
set01Data pow=$val&mode={{mode}}&stemp={{stemp}}&shum=0&f_rate={{f_rate}}&f_dir={{f_dir}}

Die Angegebenen Variablen werden nicht ausgewertet und genau so wie sie hier stehen, mittels http übermittelt. (Mit tcpdump überprüft).

Irgendwas muss sich in den letzten Monaten geändert haben, weiß vielleicht jemand wo das Problem liegt ?

Es geht im Übrigen nicht nur mir so, auch andere haben sich mittlerweile gemeldet...
https://forum.fhem.de/index.php/topic,44710.0.html

Gruß
Rubinho


Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP

StefanStrobel

Hallo Jürgen,

Kannst Du das Bild, das du anzeigen möchtest, nicht einfach per wget holen und in ein per HTTP freigegebenes Verzeichnis schieben?
Falls Du HTTMOD benötigst, da ein Login erforderlich ist o.ä. müssten die Bilddaten aus der HTTP-Response irgendwie in eine Datei geschrieben werden. Das sieht HTTPMOD bisher nicht vor.
Evt. kannst Du das ja selbst mit einem anderen Modul aus einem Reading von HTTPMOD holen oder per Perl in eine Datei schreiben ...

Gruss
   Stefan

StefanStrobel

Hallo Rubinho,

setz doch bitte mal verbose auf 5 und poste das Log, damit man sieht, was HTTPMOD mit den Replacements macht.

Gruss
   Stefan

rubinho

#554
Hallo Stefan,

hier hast du das Log.

Die Variable "mode" und f_rate hab ich fest eingestellt. F_rate lässt sich nicht auslesen (Problem von Daikin) und mode 3 ist Cooling.

2019.05.28 18:32:36 5: AC_c_Schlafzimmer: set called with power 1
2019.05.28 18:32:36 5: AC_c_Schlafzimmer: set found option power in attribute set01Name
2019.05.28 18:32:36 5: AC_c_Schlafzimmer: set is checking value 1 against max 1
2019.05.28 18:32:36 4: AC_c_Schlafzimmer: set will now set power -> 1
2019.05.28 18:32:36 4: AC_c_Schlafzimmer: AddToQueue adds set01, initial queue len: 0
2019.05.28 18:32:36 5: AC_c_Schlafzimmer: AddToQueue adds type set01 to URL http://172.22.3.15/aircon/set_control_info?, data pow=$val&mode=3&stemp={{stemp}}&shum=0&f_rate=B&f_dir={{f_dir}}, no headers, retry 0
2019.05.28 18:32:36 5: AC_c_Schlafzimmer: HandleSendQueue called, qlen = 1
2019.05.28 18:32:36 4: AC_c_Schlafzimmer: HandleSendQueue sends request type set01 to URL http://172.22.3.15/aircon/set_control_info?,
data: pow=1&mode=3&stemp={{stemp}}&shum=0&f_rate=B&f_dir={{f_dir}}, No Header
timeout 2
2019.05.28 18:32:36 5: HttpUtils url=http://172.22.3.15/aircon/set_control_info?
2019.05.28 18:32:36 4: IP: 172.22.3.15 -> 172.22.3.15
2019.05.28 18:32:36 5: HttpUtils request header:
POST /aircon/set_control_info? HTTP/1.0
Host: 172.22.3.15
User-Agent: fhem
Accept-Encoding: gzip,deflate
Content-Length: 60
Content-Type: application/x-www-form-urlencoded

2019.05.28 18:32:36 4: http://172.22.3.15/aircon/set_control_info?: HTTP response code 200
2019.05.28 18:32:36 5: HttpUtils http://172.22.3.15/aircon/set_control_info?: Got data, length: 17
2019.05.28 18:32:36 5: HttpUtils response header:
HTTP/1.0 200 OK
Content-Length: 17
Content-Type: text/plain
2019.05.28 18:32:36 4: AC_c_Schlafzimmer: Read callback: request type was set01 retry 0,
Body: ret=PARAM NG,adv=
2019.05.28 18:32:36 5: AC_c_Schlafzimmer: ExtractSid called, context set, num 01
2019.05.28 18:32:36 4: AC_c_Schlafzimmer: CheckAuth decided no authentication required


Des Weiteren hat ein Member das Problem wohl schon erkannt...
https://forum.fhem.de/index.php?topic=44710.0

Ich muss nur schauen, dass ich es richtig übersetze.
Fhem 5.9@Zotac Zbox Ci327 | HMCCU | Z-Wave@ZMEEUZB1 | HUE Bridge Gen2 | knxd over IP