Neue Version von HTTPMOD mit neuen Features zum Testen

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

Vorheriges Thema - Nächstes Thema

StefanStrobel

Hallo Uwe,

prinzipiell sollte das kein Problem sein.
Aber was für Daten möchtest Du denn damit an den Server senden?
Bei einem set wird ja meist nur ein String übertragen.

Gruss
  Stefan

UHT

Hallo Stefan,

Richtig, nur ein String, wobei ich auch ein Fall hab, wo ich nur ne URL mit PUT aufrufen will.

UHT

So hab das Modul mal modifiziert. Man kann nun bei Set die HTTP Methode auswählen (GET; PUT; PUSH)
@Stefan
kannst du so übernehmen wenn die willst. Falls etwas nicht passt, einfach melden.

mar3d@RPi3

@ Beta-User: attr Wetterwarner readingEncode UTF-8

StefanStrobel

Hallo Uwe,

sieht auf den ersten Blick gut aus und ich würde es eigentlich auch gerne übernehmen.
Nur hast Du es in einer alten Version von HTTPMOD eingebaut. Das macht die Übernahme etwas aufwändig.
Aktuell ist die 3.5.9, die bisher nur im Forum lag. Ich habe sie gerade auch eingecheckt.
Vielleicht kannst Du Deinen Diff ja auf die neue Version anwenden und dann einen Diff zur 3.5.9 posten?

Gruss
   Stefan

Beta-User

Zitat von: mar3d@RPi3 am 19 Februar 2019, 17:37:38
@ Beta-User: attr Wetterwarner readingEncode UTF-8
:)
Danke; ist jetzt auch so im template, geht ja vermutlich nicht nur mir so...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

UHT

Zitat von: StefanStrobel am 19 Februar 2019, 18:22:25
Hallo Uwe,

sieht auf den ersten Blick gut aus und ich würde es eigentlich auch gerne übernehmen.
Nur hast Du es in einer alten Version von HTTPMOD eingebaut. Das macht die Übernahme etwas aufwändig.
Aktuell ist die 3.5.9, die bisher nur im Forum lag. Ich habe sie gerade auch eingecheckt.
Vielleicht kannst Du Deinen Diff ja auf die neue Version anwenden und dann einen Diff zur 3.5.9 posten?

Gruss
   Stefan

Hallo Stefan,

ja klar kann ich machen.

UHT

Hallo Stefan,
hier der diff:
232c232
< sub HTTPMOD_AddToQueue($$$$$;$$$$);
---
> sub HTTPMOD_AddToQueue($$$$$;$$$$$);
327a328
>       "set[0-9]+Method:GET,POST,PUT " . # select HTTP method for the set
1533c1534
<         HTTPMOD_AddToQueue($hash, $url, $header, $data, "set$setNum", $rawVal);
---
>         HTTPMOD_AddToQueue($hash, $url, $header, $data, "set$setNum", $rawVal, 0, 0, 0, AttrVal($name, "set${setNum}Method", ""));
2851a2853,2856
>         if($hash->{REQUEST}{method}) {          #check if optional parameter for HTTP Method is set
>             $hash->{method}  = $hash->{REQUEST}{method};
>             Log3 $name, 5, "$name: HandleSendQueue - call with HTTP METHOD: $hash->{method} ";
>         }
2959,2960c2964,2965
< HTTPMOD_AddToQueue($$$$$;$$$$){
<     my ($hash, $url, $header, $data, $type, $value, $count, $ignoreredirects, $prio) = @_;
---
> HTTPMOD_AddToQueue($$$$$;$$$$$){
>     my ($hash, $url, $header, $data, $type, $value, $count, $ignoreredirects, $prio, $method) = @_;
2974a2980
>     $request{method}          = $method;
3478c3484
<     
---
>
3756a3763,3764
>         <li><b>set[0-9]+Method</b></li>
>             HTTP Method (GET, POST or PUT) which shall be used for the set.


Und angehängt noch das komplette File mit meinen Änderungen.

JoeALLb

Zitat von: Beta-User am 28 Dezember 2018, 09:56:43
:)
Dann mal hier eine erweiterte Sammlung für "model", neben Spritpreis ist aktuell drin:
- ORF-Wetter
- homebridge-videodoorbell
- RESOL Solaranlage

Servus,
Das ORF-Wetter scheint nur in Wien zu gehen (Innere Stadt) gibt es halt nicht überall...
Anbei ein allgemeinerer Ansatz, gleich unter Vergabe der Namen im Regex direkt.

attr wetter.orf get01Name Aktualisieren
attr wetter.orf reading01Regex (?s)Temperatur.*?.*?>.*?(?<temperature>[\d,]+)&thinsp.*?Taupunkt.*?.*?>.*?(?<taupunkt>[\d,]+)&thinsp.*?Wind.*?>\n\s*(?<wind>[^<]+)\s<abbr.*?Windspitzen.*?>\n\s*(?<windspitzen>[^<]+)\s<abbr.*?Luftdruck.*?>\n\s*(?<luftdruck>[^<]+)\s<abbr.*?Luftfeuchtigkeit.*?>\n\s*(?<humidity>[^<]+)\s<abbr.*?Sonnenschein.*?>\n\s*(?<sonne>[^<]+)\s<abbr.*?Niederschlag.*?>\n\s*(?<rain>[^<\n]+).*?</p.*?(?<messwerte>Messwerte[^<\n]+)


sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Beta-User

Servus zurück!

Danke für's Melden und Verfeinern, im ersten Wurf hatte ich nur mal so zusammengetragen, was ich in den Weiten des Forums gefunden hatte, damit überhaupt erst mal erkennbar wird, wie die Funktionalität an sich ist/sein könnte ;D . Kann also durchaus sein, dass das nicht die einzige konstruktive Kritik an der file bleiben wird ::) .

Update kommt bei Gelegenheit, dann gibts auch einen Link in der MAINTAINER.txt auf https://forum.fhem.de/index.php/topic,97694.0.html (und evtl. ein Eingangstemplate, in dem darauf verlinkt ist).

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

Zitat von: JoeALLb am 21 Februar 2019, 11:29:53
Servus,
Das ORF-Wetter scheint nur in Wien zu gehen (Innere Stadt) gibt es halt nicht überall...
Anbei ein allgemeinerer Ansatz, gleich unter Vergabe der Namen im Regex direkt.
Moin, habe das mal versucht umzusetzen, aber irgendwie will das nicht so recht...
Meine derzeitige RAW-Definition (die Reading-01-Namen hatte ich auch schon mal rausgeworfen, half auch nicht):

defmod ORFtest2 HTTPMOD https://wetter.orf.at/steiermark/ 1800
attr ORFtest2 userattr get01Name reading01-1Name reading01-2Name reading01-3Name reading01-4Name reading01-5Name reading01Regex reading02-1Name reading02-2Name reading02-3Name reading02-4Name reading02-5Name reading02-6Name reading02-7Name reading02-8Name reading02Regex
attr ORFtest2 enableControlSet 1
attr ORFtest2 get01Name grazuniversitaet
attr ORFtest2 model A_02m_ORF_weather
attr ORFtest2 reading01-1Name temperature
attr ORFtest2 reading01-2Name weather
attr ORFtest2 reading01-3Name wind
attr ORFtest2 reading01-4Name windDir
attr ORFtest2 reading01-5Name precipitation
attr ORFtest2 reading01Regex (?s)Temperatur.*?.*?>.*?(?<temperature>[\d,]+)&thinsp.*?Taupunkt.*?.*?>.*?(?<taupunkt>[\d,]+)&thinsp.*?Wind.*?>\n\s*(?<wind>[^<]+)\s<abbr.*?Windspitzen.*?>\n\s*(?<windspitzen>[^<]+)\s<abbr.*?Luftdruck.*?>\n\s*(?<luftdruck>[^<]+)\s<abbr.*?Luftfeuchtigkeit.*?>\n\s*(?<humidity>[^<]+)\s<abbr.*?Sonnenschein.*?>\n\s*(?<sonne>[^<]+)\s<abbr.*?Niederschlag.*?>\n\s*(?<rain>[^<\n]+).*?</p.*?(?<messwerte>Messwerte[^<\n]+)
attr ORFtest2 reading02-1Name sunRise
attr ORFtest2 reading02-2Name sunSet
attr ORFtest2 reading02-3Name moonPhase
attr ORFtest2 reading02-4Name moonRise
attr ORFtest2 reading02-5Name moonSet
attr ORFtest2 reading02-6Name dayLength
attr ORFtest2 reading02-7Name dawn
attr ORFtest2 reading02-8Name dusk
attr ORFtest2 reading02Regex Sonnenaufgang um <\/span>(.*)<s[\w\W]*Sonnenuntergang um <\/span>(.*)<s[\w\W]*Mondphase: (.*)\.[\w\W]*Mondaufgang um <\/span>(.*)<s[\w\W]*Monduntergang um <\/span>(.*)<s[\w\W]*Tagesl&auml;;;;nge: <\/span>(.*)&[\w\W]*Morgen<\/span>: <\/span>(.*)&[\w\W]*Abend:<\/span><\/span>(.*)&
attr ORFtest2 room Wetter
attr ORFtest2 stateFormat weather bei temperature°C

setstate ORFtest2 weather bei temperature°C


Template dazu:#Austrian weather, Forum: https://forum.fhem.de/index.php/topic,94110.msg868080.html#msg868080
name:A_02m_ORF_weather
filter:TYPE=HTTPMOD
desc: Get austrian weather.<br>Define a HTTPMOD device like <br>defmod weatherORF HTTPMOD https://wetter.orf.at/steiermark/ 1800 <br>Change region to your needs <br><a href="https://forum.fhem.de/index.php/topic,94110.msg868080.html#msg868080">Source: Forum</a>
par:STATIONNAME;Use a valid station name like grazuniversitaet,
attr DEVICE userattr reading01-1Name reading01-2Name reading01-3Name reading01-4Name reading01-5Name reading01Regex reading02-1Name reading02-2Name reading02-3Name reading02-4Name reading02-5Name reading02-6Name reading02-7Name reading02-8Name reading02Regex
attr DEVICE enableControlSet 1
attr DEVICE get01Name STATIONNAME
#attr DEVICE reading01-1Name temperature
#attr DEVICE reading01-2Name weather
#attr DEVICE reading01-3Name wind
#attr DEVICE reading01-4Name windDir
#attr DEVICE reading01-5Name precipitation
attr DEVICE reading01Regex (?s)Temperatur.*?.*?>.*?(?<temperature>[\d,]+)&thinsp.*?Taupunkt.*?.*?>.*?(?<taupunkt>[\d,]+)&thinsp.*?Wind.*?>\n\s*(?<wind>[^<]+)\s<abbr.*?Windspitzen.*?>\n\s*(?<windspitzen>[^<]+)\s<abbr.*?Luftdruck.*?>\n\s*(?<luftdruck>[^<]+)\s<abbr.*?Luftfeuchtigkeit.*?>\n\s*(?<humidity>[^<]+)\s<abbr.*?Sonnenschein.*?>\n\s*(?<sonne>[^<]+)\s<abbr.*?Niederschlag.*?>\n\s*(?<rain>[^<\n]+).*?</p.*?(?<messwerte>Messwerte[^<\n]+)
attr DEVICE reading02-1Name sunRise
attr DEVICE reading02-2Name sunSet
attr DEVICE reading02-3Name moonPhase
attr DEVICE reading02-4Name moonRise
attr DEVICE reading02-5Name moonSet
attr DEVICE reading02-6Name dayLength
attr DEVICE reading02-7Name dawn
attr DEVICE reading02-8Name dusk
attr DEVICE reading02Regex Sonnenaufgang um <\/span>(.*)<s[\w\W]*Sonnenuntergang um <\/span>(.*)<s[\w\W]*Mondphase: (.*)\.[\w\W]*Mondaufgang um <\/span>(.*)<s[\w\W]*Monduntergang um <\/span>(.*)<s[\w\W]*Tagesl&auml;;nge: <\/span>(.*)&[\w\W]*Morgen<\/span>: <\/span>(.*)&[\w\W]*Abend:<\/span><\/span>(.*)&
attr DEVICE room Wetter
attr DEVICE stateFormat weather bei temperature°C
attr DEVICE model A_02m_ORF_weather

Für einen Schubs wäre ich dankbar, wir können das gerne auch in dem anderen Thread weiter diskutieren, weiß nur nicht, ob du den beobachtest...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

JoeALLb

Bin unterwegs ohne Internet. Mach ich nächste Woche.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

Zitat von: Beta-User am 22 Februar 2019, 08:02:59
Moin, habe das mal versucht umzusetzen, aber irgendwie will das nicht so recht...

Hier war eigentlich nur due URL falsch.

Dies hier klappt (für den ersten Teil) direkt!
Der Sonnenaufgang wurd auf der Seite jedoch gar nicht dargestellt, weshalb dieser im zweiten Teil nicht gefunden werden kann.

defmod ORFtest2 HTTPMOD https://wetter.orf.at/steiermark/grazuniversitaet/ 1800
attr ORFtest2 userattr get01Name reading01-1Name reading01-2Name reading01-3Name reading01-4Name reading01-5Name reading01Regex reading02-1Name reading02-2Name reading02-3Name reading02-4Name reading02-5Name reading02-6Name reading02-7Name reading02-8Name reading02Regex
attr ORFtest2 enableControlSet 1
attr ORFtest2 get01Name grazuniversitaet
attr ORFtest2 model A_02m_ORF_weather
attr ORFtest2 reading01Regex (?s)Temperatur.*?.*?>.*?(?<temperature>[\d,]+)&thinsp.*?Taupunkt.*?.*?>.*?(?<taupunkt>[\d,]+)&thinsp.*?Wind.*?>\n\s*(?<wind>[^<]+)\s<abbr.*?Windspitzen.*?>\n\s*(?<windspitzen>[^<]+)\s<abbr.*?Luftdruck.*?>\n\s*(?<luftdruck>[^<]+)\s<abbr.*?Luftfeuchtigkeit.*?>\n\s*(?<humidity>[^<]+)\s<abbr.*?Sonnenschein.*?>\n\s*(?<sonne>[^<]+)\s<abbr.*?Niederschlag.*?>\n\s*(?<rain>[^<\n]+).*?</p.*?(?<messwerte>Messwerte[^<\n]+)
attr ORFtest2 reading02-1Name sunRise
attr ORFtest2 reading02-2Name sunSet
attr ORFtest2 reading02-3Name moonPhase
attr ORFtest2 reading02-4Name moonRise
attr ORFtest2 reading02-5Name moonSet
attr ORFtest2 reading02-6Name dayLength
attr ORFtest2 reading02-7Name dawn
attr ORFtest2 reading02-8Name dusk
attr ORFtest2 reading02Regex Sonnenaufgang um <\/span>(.*)<s[\w\W]*Sonnenuntergang um <\/span>(.*)<s[\w\W]*Mondphase: (.*)\.[\w\W]*Mondaufgang um <\/span>(.*)<s[\w\W]*Monduntergang um <\/span>(.*)<s[\w\W]*Tagesl&auml;;;;nge: <\/span>(.*)&[\w\W]*Morgen<\/span>: <\/span>(.*)&[\w\W]*Abend:<\/span><\/span>(.*)&
attr ORFtest2 room Wetter
attr ORFtest2 stateFormat weather bei temperature°C

setstate ORFtest2 weather bei 2,2°C
setstate ORFtest2 2019-02-25 08:07:52 humidity 55
setstate ORFtest2 2019-02-25 08:07:52 luftdruck 1036,8
setstate ORFtest2 2019-02-25 08:07:52 messwerte Messwerte von 7.00 Uhr
setstate ORFtest2 2019-02-25 08:07:52 rain 0,0
setstate ORFtest2 2019-02-25 08:07:52 sonne 0
setstate ORFtest2 2019-02-25 08:07:52 taupunkt 5,9
setstate ORFtest2 2019-02-25 08:07:52 temperature 2,2
setstate ORFtest2 2019-02-25 08:07:52 wind Ost, 5
setstate ORFtest2 2019-02-25 08:07:52 windspitzen Ost, 8




Der Regex müsste noch um die weiteren Werte ergänzt werden. GGf. ist dies sogar so möglich dass er fehlende Werte schlichtweg ignoriert.
Machst Du das?
sG
joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Beta-User

Zitat von: JoeALLb am 25 Februar 2019, 08:12:54
Dies hier klappt (für den ersten Teil) direkt!
[...]
Der Regex müsste noch um die weiteren Werte ergänzt werden. GGf. ist dies sogar so möglich dass er fehlende Werte schlichtweg ignoriert.
Machst Du das?
sG
joe
Moin,

den Zwischenstand habe ich jetzt mal eingecheckt, der Stationsname wird dabei auch direkt aus der URL abgeleitet, das ist vielleicht auch für weitere Anwendungsfälle interessant.
Da ich mich aber a) mit regex auch nicht leicht tue und b) nicht im schönen Österreich wohne:
Ich bau sehr gerne ein, was mir jemand was als Optimierungswunsch zuruft, aber seht mir nach, wenn wesentlich mehr nicht drin ist :-* :) .

(wir können die Diskussion btw. dann auch in dem Template-Thread weiterführen.)

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

ThomasMagnum

Hallo,

ist es möglich ein Reading als zu nutzende URL in HTTPMOD zu verwenden und diese in der DEF per ReadingsVal zu übergeben?
Hintergrund ist die flexible Nutzung von HTTPMOD zur Ermittlung von Spritpreisen anhand der aktuellen Position.

Vielen Dank schon mal.

Gruß, Thomas