Autor Thema: httpmod.template: bugs, Fragen, Anregungen  (Gelesen 4333 mal)

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
httpmod.template: bugs, Fragen, Anregungen
« am: 21 Februar 2019, 12:04:17 »
Hallo zusammen,

Bitte nutzt möglichst diesen Thread, wenn ihr Fragen zur Nutzung von httpmod.template habt oder neue templates vorschlagen wollt.

Allgemeine Fragen die Nutzung des features attrTemplate an sich (also nicht speziell auf httpmod bezogen) gehören bitte nicht hierher.

Super wäre, wenn bei Vorschlägen für neue templates für HTTPMOD entsprechend auch die Hinweise in diesem Thread beachtet werden könnten (da gibt es auch einen link zum entsprechenden Thread für MQTT2_DEVICE). Besonders schön wäre es, wenn jeweils die Quelle in der desc mit angegeben werden könnte, damit man als user ggf. den passenden Thread findet. Das erleichtert es ggf., den HTTPMOD dann leichter an die individuellen Wünsche anzupassen.

Sinnvoll ist es, zuerst die Hinweise zu einzelnen httpmod.templates zu lesen. Diese erhält man mit set <device> attrTemplate ?
Wer einfach mal schauen will, was es so gibt, kann einfach irgendein HTTPMOD-Device definieren und dann mal schauen, was es so gibt, ohne erst den Quelltext nach den jeweiligen URL's durchsuchen zu müssen. Beispiel:
define myAttrTemplateViewer HTTPMOD www.spiegel.de 0
set myAttrTemplateViewer attrTemplate ?
Viel Spaß mit dem neuen Feature!

Beta-User
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #1 am: 26 Februar 2019, 07:49:57 »
Servus!

Da ich mich aber a) mit regex auch nicht leicht tue und b) nicht im schönen Österreich wohne:

Regex kann ich (ein bisschen ;-) ).
Zeit habe ich aber wenig, bin viel dienstlich unterwegs, oft auch ohne Internet.
Werde sehen, dass ich den Regex noch verbessere!
Gibt es auch eine Wunschliste?
Ich hätte gerne ein Template für Bergfex (https://www.bergfex.at/sommer/innsbruck/wetter/),
da das in meiner Region das genaueste Wetter ist... Im Moment komme ich nicht selber dazu, da die Seite doch recht viele Werte ausgibt!
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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #2 am: 26 Februar 2019, 08:23:00 »
Servus zurück!

bergfex wäre natürlich super, da hätte ich sogar ein "gewisses" Eigeninteresse dran.
(Aber diese Webseitenausleserei im Quältext, da bin ich noch nicht richtig drin :( . Meinen ersten HTTPMOD habe ich angelegt beim Zusammensuchen des ersten template-Vorschlags für StefanStrobel, um ihn von der Sinnhaftigkeit der Unterstützung von attrTemplate zu überzeugen, ansonsten reichen eigentlich ja meistens sehr einfache Einzeiler...)

Ansonsten ist mir auch klar, dass du auch andere Baustellen hast, dann machen wir es ggf. halt iterativ mit dem ORF-Wetter, ist ja nicht schlimm, die derzeitige und die vorige Version funktionieren (ggf. nach Anpassung) ja.

@all: Hat da jemand eine Art Grundlage für bergfex.at?
Muß ja nicht gleich super-duper sein, ein Anfang mit ein paar Basiswerten wäre halt gut...

Wenn mich da jemand aufschlauen will, wie man am besten ganz allgemein mit Seiten wie bergfex.at umgeht, wäre das auch nett.

Generell: Wenn jemand anderes, der mehr Ahnung vom Webseiten-Auslesen hat, die Pflege der httpmod-Templates (ggf. mit) übernehmen möchte, wäre das für mich auch ok.
Kurz zum Hintergrund: Ich hatte vor wenigen Monaten die modulseitige Unterstützung für attrTemplate bei StefanStrobel angefragt. Bei den MQTT2-templates war schon zu sehen, dass es auch und eigentlich gerade für HTTPMOD einen großen Bedarf geben müßte, eine Art zentraler Beispielsammlung zu haben. Ich hatte mal vor längerer Zeit einen lust- und erfolglosen Versuch für meinen Brother-Drucker unternommen, dabei ist mir aufgefallen, dass man beim Suchen von passenden HTTPMOD-Beispielen für häufige Fragestellungen endlos im Forum und Wiki suchen konnte und am Ende oft nicht wußte, was jetzt warum gut ist bzw. wie auf die eigenen Bedürfnisse vollends anzupassen (jedenfalls, wenn man so ein noob in dem Thema ist wie meinereiner).

Nachdem attrTemplate für HTTPMOD jetzt "etabliert" ist (was schneller gegangen zu sein scheint, als ich das vorher vermutet hätte), wäre m.E. jetzt der nächste Schritt, dass das jemand übernimmt, der da bei den regex-Geschichten und der Funktionalität von HTTPMOD im allgemeinen besser durchblickt.
Wir könnten auch gerne ein Duo daraus machen, vor allem, wenn jemand Interessiertes Bedarf bei der Unterstützung zu den "speziellen" Anforderungen der "template-Sprache" sehen sollte (ist m.E. nicht wirklich speziell).

Gruß, Beta-User
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4151
  • Wer anderen eine Bratwurst brät...
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #3 am: 26 Februar 2019, 10:33:44 »
https://www.bergfex.at/sommer/innsbruck/wetter/

Regex Ort:
forecast-current">\n\n.+?<h2>\n\s+(.*?)\n.+?</Regex Höhe:
h2-sub">\n.+?(\d{1,4})\smRegex Temperatur:
temperature">\n.+<span.class="value">(.*?)</Regex Niederschlag:
Niederschlag:\s(.*?)%Regex letze Aktualisierung:
important">Heute,\s(.*?)</Regex Wetterzustand:
\d\d:\d\d</span>\n.+-\s(.*?)\nRegex Text Wetter heute:
h2>\n.+Heute,\s.*?\n</h2>\n\n<div\sclass="txt_markup"><p>(.*?)</Regex Text Wetter morgen:
h2>\n.+Morgen,\s.*?\n</h2>\n\n<div\sclass="txt_markup"><p>(.*?)</Regex Text Wetter übermorgen:
h2>\n.+Übermorgen,\s.*?\n</h2>\n\n<div\sclass="txt_markup"><p>(.*?)</
Regexe für die Prognose (https://www.bergfex.at/sommer/innsbruck/wetter/prognose/)

Icon:
"forecast-day-0"\n.*\n.*\n\n.*\n.*"icon"><img\ssrc="(.*?)"Tmax:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*?"tmax">(.*?)°C</Tmin:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*\n.*?"tmin">(.*?)°C</nschnee:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*\n.*\n.*?"nschnee.">\n(.*?)</rrr:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n\n.*\n.*?"rrr.*?">\n(.*)</rrp:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n\n.*\n.*\n.*\n\n.*?"rrp.*">\n(.*?)%</sgrenze:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n\n.*\n.*\n.*\n\n.*\n.*\n.*\n.*?class="group\ssgrenze">\n(.*?)m</Sonnendauer:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n\n.*\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n.*?"sonne.*">\n(.*?)h?</Gewitterwahrscheinlichkeit:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n\n.*\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*?Gewitterwahrscheinlichkeit:\s\d{1,3}%">\n(.*?)</Wind:
"forecast-day-0"\n.*\n.*\n\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n\n.*\n.*\n.*\n\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*?"ff\s\s"\s>\n(.*?)</

Die 0 (Null) bei "forecast-day-0" kann beliebig von 0-8 ausgetauscht werden um die Vorhersage für die kommenden 8 Tage zu erhalten.

Was wird noch benötigt?

Gruß
Dan
« Letzte Änderung: 26 Februar 2019, 15:38:30 von DeeSPe »
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #4 am: 26 Februar 2019, 10:39:04 »

Was wird noch benötigt?

Wenn Du schon so fragst, dann:  ;)


  • 7 Tages Vorherschau (minMax Temp zur Heizungssteuerung/Pufferaufladung, Sonnenscheindauer, gemeldete Regenmenge)
  • Text Wetter Heute
  • Text Wetter morgen
  • Name der Icons
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

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4151
  • Wer anderen eine Bratwurst brät...
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #5 am: 26 Februar 2019, 10:46:22 »
Wenn Du schon so fragst, dann:  ;)


  • 7 Tages Vorherschau (minMax Temp zur Heizungssteuerung/Pufferaufladung, Sonnenscheindauer, gemeldete Regenmenge)
  • Text Wetter Heute
  • Text Wetter morgen
  • Name der Icons

Hab die Wettertexte für heute, morgen und übermorgen ergänzt.
Die anderen Sachen gucke ich mir an.

Gruß
Dan

EDIT: Meinst Du die 9-Tage Wettervorhersage? 7 Tage finde ich nicht.
Die richtige Prognose steht leider auf einer eigenen Webseite (https://www.bergfex.at/sommer/innsbruck/wetter/prognose/).
« Letzte Änderung: 26 Februar 2019, 10:50:56 von DeeSPe »
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #6 am: 26 Februar 2019, 10:55:36 »
EDIT: Meinst Du die 9-Tage Wettervorhersage? 7 Tage finde ich nicht.

Korrekt, wobei ich in der Visu und für die Heizungsoptimierung nur 7 Tage nutze....

Die richtige Prognose steht leider auf einer eigenen Webseite (https://www.bergfex.at/sommer/innsbruck/wetter/prognose/).
Puh, noch gar nicht aufgefallen (da ich am Handy deren App nutze)... Aber der Text scheint der selbe zu sein...
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

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4151
  • Wer anderen eine Bratwurst brät...
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #7 am: 26 Februar 2019, 11:01:39 »
Habe noch Ort und Höhe ergänzt.

Wenn Du wirklich die Prognosedaten brauchst, dann geht das (denke ich) nur über ein eigenes HTTPMOD Device auf die URL https://www.bergfex.at/sommer/innsbruck/wetter/prognose/ mit dementsprechenden eigenen Regexen.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #8 am: 26 Februar 2019, 11:10:23 »
Wow...

Dann schaue ich bei Gelegenheit mal, wie ich das in template-Form gegossen bekomme :) .

Wenn Du wirklich die Prognosedaten brauchst, dann geht das (denke ich) nur über ein eigenes HTTPMOD Device auf die URL https://www.bergfex.at/sommer/innsbruck/wetter/prognose/ mit dementsprechenden eigenen Regexen.
Hmm, irgendwo hatte ich mal einen HTTPMOD gesehen, der mehrere URL-Angaben jeweils für einen eigenen Reading-Bereich enthalten hatte. Allerdings war das einer, der aktiv aufgerufen wurde.
Leider habe ich grade keinen link, aber an sich würde ich wetten, dass man das in einen HTTPMOD packen kann.

(Wenn das so ist: Wieder ein Beispiel dafür, wei mächtig das Tool ist und wie wenig verbreitet das Wissen, wie "die Macht" genutzt werden kann...)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #9 am: 26 Februar 2019, 11:17:29 »
Hmm, irgendwo hatte ich mal einen HTTPMOD gesehen, der mehrere URL-Angaben jeweils für einen eigenen Reading-Bereich enthalten hatte. Allerdings war das einer, der aktiv aufgerufen wurde.
Leider habe ich grade keinen link, aber an sich würde ich wetten, dass man das in einen HTTPMOD packen kann.
Ja, das geht... das könnt ich eventuell beisteuern... aktiv und nciht aktiv, ist nur ein Attribut das dies unterscheidet.
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

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4151
  • Wer anderen eine Bratwurst brät...
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #10 am: 26 Februar 2019, 11:20:19 »
Ja, das geht... das könnt ich eventuell beisteuern... aktiv und nciht aktiv, ist nur ein Attribut das dies unterscheidet.

Wenn das geht wäre es ja der Burner!
Ich kenne mich mit HTTPMOD eigentlich überhaupt nicht aus, ich mag nur Regex und damit Werte "herausfischen".

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #11 am: 26 Februar 2019, 11:23:44 »
Dann schaue ich bei Gelegenheit mal, wie ich das in template-Form gegossen bekomme :) .

Schick mir, wenn Du das hast, dann versuche ich den Rest zu ergänzen!
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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #12 am: 26 Februar 2019, 11:30:12 »
Jungs, das gefällt mir, wie das vorangeht, wenn man die jeweiligen Kenntnisse zusammenwirft :) !

Ja, das geht... das könnt ich eventuell beisteuern... aktiv und nciht aktiv, ist nur ein Attribut das dies unterscheidet.
Das wäre klasse.

Bei der Gelegenheit:
Vielleicht mag dann auch jemand mit hp-Druckern unter diesem Gesichtspunkt einen Blick auf die hp-templates werfen?
 Da ist es ähnlich, dass die diversen Infos (v.a. der Status und die Tonerwerte) aus unterscheidlichen Pfaden stammen und jeweils als eigener HTTPMOD abgebildet sind, aber eigentlich _ein_ HTTPMOD die bessere Lösung wäre.
(Ich habe nur keine hp's, sonst würde ich mich da "ausnahmsweise" selbst kümmern... Die sind auch erst mal so reingekommen, wie ich das "irgendwo" gefunden hatte ;D .)

Der template-Entwurf für bergfex.at kann etwas dauern, mal schauen.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #13 am: 26 Februar 2019, 11:51:53 »
Anbei ein Beispiel, wie es mit 2 URLs funktioniert!
Wenn get01Poll=1, dann wird dies automatisch mit aktualisiert.
Wenn get01Poll =0, muss man ein "get wetter_bergfex 9-TagesPrognose" direkt abrufen. Man ist also ziemlich flexibel!
Der Regex "get01Regex" Muss natürlich noch aufgebohrt werden und ist hier nur beispielhaft verwendet.

defmod wetter_bergfex HTTPMOD https://www.bergfex.at/sommer/innsbruck/wetter/ 1800
attr wetter_bergfex userattr get01-1Name get01-2Name get01Name get01Regex get01URL
attr wetter_bergfex get01-1Name LetzteAktualisierung
attr wetter_bergfex get01-2Name Schneefallgrenze
attr wetter_bergfex get01Name 9-TagesPrognose
attr wetter_bergfex get01Poll 1
attr wetter_bergfex get01Regex Vorhersage von [^>]*>(.*?)</\p{Any}*?group sgrenze[^\d]*(.*?)m
attr wetter_bergfex get01URL https://www.bergfex.at/sommer/innsbruck/wetter/prognose/
attr wetter_bergfex group Temperatur-Außen
attr wetter_bergfex reading01Name lesteAktualisierung
attr wetter_bergfex reading01Regex important">Heute,\s(.*?)</
attr wetter_bergfex room Wetter
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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #14 am: 26 Februar 2019, 12:14:33 »
Hmmm, wenn ihr grade dabei seid, dann mal ein untetesteter erster template-Wurf:

name:A_02n_bergfex_at_weather
filter:TYPE=HTTPMOD
desc: Get austrian weather from bergfex.at.<br>Define a HTTPMOD device like <br>defmod wetter_bergfex HTTPMOD https://www.bergfex.at/sommer/innsbruck/wetter/ 1800 <br>Change city to your needs <br><a href="https://forum.fhem.de/index.php/topic,97694.msg911761.html#msg911761">Source: Forum</a>
par:URL_LONG;Name of the respective weather station as written in the last part of the URL;{ InternalVal("DEVICE","url","") =~ m,(https://www.bergfex.at/sommer/[^/]+[/]wetter/), ? $1 : undef }
attr DEVICE userattr get01-1Name get01-2Name get01Name get01Regex get01URL
attr DEVICE get01-1Name LetzteAktualisierung
attr DEVICE get01-2Name Schneefallgrenze
attr DEVICE get01Name 9-TagesPrognose
attr DEVICE get01Poll 1
attr DEVICE get01Regex Vorhersage von [^>]*>(.*?)</\p{Any}*?group sgrenze[^\d]*(.*?)m
attr DEVICE get01URL URL_LONGprognose/
attr DEVICE group Temperatur-Außen
attr DEVICE reading01Name letzteAktualisierung
attr DEVICE reading01Regex important">Heute,\s(.*?)</
attr DEVICE model A_02n_bergfex_at_weather
Da die diversen Abfragen - jedenfalls, soweit ich das verstanden habe - in der richtigen Reihenfolge kommen müssen, muß der Rest ggf. noch warten, bis ich das austesten kann - wen nicht jemand doch schneller ist ;) .
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4151
  • Wer anderen eine Bratwurst brät...
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #15 am: 26 Februar 2019, 15:40:43 »
Habe noch die Prognose Regexe hinzugefügt.
Kann leider nicht testen ob das wirklich in einem HTTPMOD Device funktioniert, da ich hier mit meinem FHEM-Testsystem keinen dauerhaften Internetzugang habe.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #16 am: 27 Februar 2019, 09:34:44 »
So,

jetzt habe ich mal mit dieser Option rumgespielt, unterschiedliche URL's anzugeben (bei der eher einfachen Seite vom ORF), auch um ein besseres "Gefühl" für das zu bekommen, wei HTTPMOD überhaupt tickt. Leider bekomme ich immer noch keine Sonnendaten usw., sondern nur die erweiterten Wetterdaten.

List meines letzten Versuchs:
defmod wORF_neu HTTPMOD https://wetter.orf.at/steiermark/ 1800
attr wORF_neu userattr get01Name get01Poll:0,1 get01URL get02Name get02Poll:0,1 get02URL 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 wORF_neu enableControlSet 1
attr wORF_neu get01Name Graz-Universität
attr wORF_neu get01Poll 1
attr wORF_neu get01URL https://wetter.orf.at/steiermark/grazuniversitaet/
attr wORF_neu get02Name Sonnendaten
attr wORF_neu get02Poll 1
attr wORF_neu get02URL https://wetter.orf.at/steiermark/
attr wORF_neu model A_02m_ORF_weather
attr wORF_neu 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 wORF_neu reading02-1Name sunRise
attr wORF_neu reading02-2Name sunSet
attr wORF_neu reading02-3Name moonPhase
attr wORF_neu reading02-4Name moonRise
attr wORF_neu reading02-5Name moonSet
attr wORF_neu reading02-6Name dayLength
attr wORF_neu reading02-7Name dawn
attr wORF_neu reading02-8Name dusk
attr wORF_neu 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 wORF_neu room Wetter
attr wORF_neu stateFormat weather bei temperature°C

setstate wORF_neu weather bei 9,7°C
setstate wORF_neu 2019-02-27 09:22:50 humidity 42
setstate wORF_neu 2019-02-27 09:22:50 luftdruck 1027,5
setstate wORF_neu 2019-02-27 09:22:50 messwerte Messwerte von 9.00 Uhr
setstate wORF_neu 2019-02-27 09:22:50 rain 0,0
setstate wORF_neu 2019-02-27 09:22:50 sonne 60
setstate wORF_neu 2019-02-27 09:22:50 taupunkt 3,0
setstate wORF_neu 2019-02-27 09:22:50 temperature 9,7
setstate wORF_neu 2019-02-27 09:22:50 wind West, 3
setstate wORF_neu 2019-02-27 09:22:50 windspitzen Südwest, 8
Mit get ... Graz-Universität bekomme ich sauber die grazuniversität-Daten rein, aber get ... Sonnendaten klappt nicht. Hängt bestimmt nur an irgend einer Kleinigkeit, vielleicht sieht die jemand und mag mir den Trick verraten?

Anbei auch noch ein list von einer leicht angepassten Version des Ausgangscodes. Da klappt das mit den Sonnendaten:
defmod weatherORF HTTPMOD https://wetter.orf.at/steiermark/ 1800
attr weatherORF 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 weatherORF enableControlSet 1
attr weatherORF reading01-1Name temperature
attr weatherORF reading01-2Name weather
attr weatherORF reading01-3Name wind
attr weatherORF reading01-4Name windDir
attr weatherORF reading01-5Name precipitation
attr weatherORF reading01Regex Graz<\/h3>[\s\S]*temperature\">([&minus;;]*\d*,?\d?)[\s\S]*screen\">, ([\s\S]*)\.<\/span>[\s\S]*wind\">(\d*,?\d?)[\s\S]*screen\">,.([\s\S]*)\.[\s\S]*precipitation\">(\d*,?\d+)[\s\S]*sta-\d+
attr weatherORF reading02-1Name sunRise
attr weatherORF reading02-2Name sunSet
attr weatherORF reading02-3Name moonPhase
attr weatherORF reading02-4Name moonRise
attr weatherORF reading02-5Name moonSet
attr weatherORF reading02-6Name dayLength
attr weatherORF reading02-7Name dawn
attr weatherORF reading02-8Name dusk
attr weatherORF 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 weatherORF room Wetter
attr weatherORF stateFormat weather bei temperature°C

setstate weatherORF heiter bei 8,7°C
setstate weatherORF 2019-02-27 09:19:40 dawn 06:12
setstate weatherORF 2019-02-27 09:19:40 dayLength 10:57
setstate weatherORF 2019-02-27 09:19:40 dusk 18:11
setstate weatherORF 2019-02-27 09:19:40 moonPhase Abnehmender Mond
setstate weatherORF 2019-02-27 09:19:40 moonRise 01:55
setstate weatherORF 2019-02-27 09:19:40 moonSet 11:13
setstate weatherORF 2019-02-27 09:19:40 precipitation 0,0
setstate weatherORF 2019-02-27 09:19:40 sunRise 06:43
setstate weatherORF 2019-02-27 09:19:40 sunSet 17:40
setstate weatherORF 2019-02-27 09:19:40 temperature 8,7
setstate weatherORF 2019-02-27 09:19:40 weather heiter
setstate weatherORF 2019-02-27 09:19:40 wind 3
setstate weatherORF 2019-02-27 09:19:40 windDir Süd
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #17 am: 27 Februar 2019, 09:55:07 »
Leider bekomme ich immer noch keine Sonnendaten usw., sondern nur die erweiterten Wetterdaten.

Mal sehen:

Verbose 5 liefert folgende Fehlermeldung
5: wORF_neu: ExtractReading Sonnendaten with regex /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>(.*)&/...
5: wORF_neu: ExtractReading Sonnendaten did not match
3: wORF_neu: Read response to get02 didn't match any Reading
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

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #18 am: 27 Februar 2019, 10:12:21 »
Anbei ein angepasstes Device.

Ich habe:
1) readings02-1Name auf get02-1Name umbenannt
2) den Regexp get02Regex  angepasst. Habe diesen "etwas" flexibler im Matching gemacht...

hier das Ergebnis':

defmod wORF_neu HTTPMOD none 0
attr wORF_neu userattr get01Name get01Poll:0,1 get01URL get02-1Name get02-2Name get02-3Name get02-4Name get02-5Name get02-6Name get02-7Name get02-8Name get02Name get02Poll:0,1 get02Regex get02URL reading01-1Name reading01-2Name reading01-3Name reading01-4Name reading01-5Name reading01Regex
attr wORF_neu enableControlSet 1
attr wORF_neu get01Name Graz-Universität
attr wORF_neu get01Poll 1
attr wORF_neu get01URL https://wetter.orf.at/steiermark/grazuniversitaet/
attr wORF_neu get02-1Name sunRise
attr wORF_neu get02-2Name sunSet
attr wORF_neu get02-3Name moonPhase
attr wORF_neu get02-4Name moonRise
attr wORF_neu get02-5Name moonSet
attr wORF_neu get02-6Name dayLength
attr wORF_neu get02-7Name dawn
attr wORF_neu get02-8Name dusk
attr wORF_neu get02Name Sonnendaten
attr wORF_neu get02Poll 1
attr wORF_neu get02Regex Sonnenaufgang um <\/span>(.*)<s[\w\W]*Sonnenuntergang um <\/span>(.*)<s\p{Any}*?Mondphase:\s?([^\.]+)[\w\W]*Mondaufgang um\s?<\/span>(\d\d:\d\d)<s[\w\W]*Monduntergang um <\/span>(\d\d:\d\d)<s[\w\W]*Tagesl[^>]+>(\d\d:\d\d)&[\w\W]*Morgen<\/span>: <\/span>(\d\d:\d\d)&[\w\W]*Abend:<\/span><\/span>(\d\d:\d\d)
attr wORF_neu get02URL https://wetter.orf.at/steiermark/
attr wORF_neu model A_02m_ORF_weather
attr wORF_neu 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 wORF_neu room Wetter
attr wORF_neu showBody 1
attr wORF_neu stateFormat weather bei temperature°C
attr wORF_neu verbose 5

setstate wORF_neu weather bei 9,7°C
setstate wORF_neu 2019-02-27 10:10:12 dawn 06:12
setstate wORF_neu 2019-02-27 10:10:12 dayLength 10:57
setstate wORF_neu 2019-02-27 10:10:12 dusk 18:11
setstate wORF_neu 2019-02-27 09:45:12 humidity 42
setstate wORF_neu 2019-02-27 09:45:12 luftdruck 1027,5
setstate wORF_neu 2019-02-27 09:45:12 messwerte Messwerte von 9.00 Uhr
setstate wORF_neu 2019-02-27 10:10:12 moonPhase Abnehmender Mond
setstate wORF_neu 2019-02-27 10:10:12 moonRise 01:55
setstate wORF_neu 2019-02-27 10:10:12 moonSet 11:13
setstate wORF_neu 2019-02-27 09:45:12 rain 0,0
setstate wORF_neu 2019-02-27 09:45:12 sonne 60
setstate wORF_neu 2019-02-27 10:10:12 sunRise 06:43
setstate wORF_neu 2019-02-27 10:10:12 sunSet 17:40
setstate wORF_neu 2019-02-27 09:45:12 taupunkt 3,0
setstate wORF_neu 2019-02-27 09:45:12 temperature 9,7
setstate wORF_neu 2019-02-27 09:45:12 wind West, 3
setstate wORF_neu 2019-02-27 09:45:12 windspitzen Südwest, 8

« Letzte Änderung: 27 Februar 2019, 10:39:08 von JoeALLb »
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

Online frank

  • Hero Member
  • *****
  • Beiträge: 8095
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #19 am: 27 Februar 2019, 10:32:17 »
ich würde bei verwendung mehrerer gets auch die url aus dem define löschen, bzw durch "none" ersetzen.
dann zu jedem getXX dann natürlich auch entsprechende getXXname/regex kombinationen.
FHEM: 5.8(SVN) => Pi3(jessie)
IO: CUL433_V3.3(1.00.01B53)|CUL868_V3.3(1.58)|HMLAN(0.965)|HMUSB2(0.967)|HMUART(1.4.1)
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

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #20 am: 27 Februar 2019, 10:40:35 »
ich würde bei verwendung mehrerer gets auch die url aus dem define löschen, bzw durch "none" ersetzen.
dann zu jedem getXX dann natürlich auch entsprechende getXXname/regex kombinationen.

Stimme ich zu, habs aus dem übernommen Beispiel oben entfernt/angepasst.
Dann fehlt jedoch lediglich die Option "get xxx all", ansonsten muss man immer jede URL einzeln abrufen, wenn man ohne fixe Intervalle arbeiten möchte.
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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #21 am: 27 Februar 2019, 10:47:36 »
Danke, kaum macht der Profi das...

Habe jetzt auch nochmal die beiden Ausgangs-Regexe verglichen. Eigentlich war ich der Ansicht gewesen, die hätte ich einfach vom einen ins andere kopiert, aber da scheint irgendwas schief gegangen zu sein >:( .

Und dass die Rückmeldungen dann getxx-xName heißen sollten, wenn man das so mit den getURL's löst, findet sich bestimmt auch irgendwo in der Doku ::) . Ist zwar jetzt immer alles noch etwas neblig, aber es wird besser :) .
Dann mache ich die Tage mal noch ein schönes Update für den ORF, und dann ist bergfex hoffentlich auch nicht mehr die ganz große Herausforderung mit der Vorarbeit hier.

@frank:
Danke für den Hinweis. Muß mal überlegen, wie ich das jetzt insgesamt in das template einfließen lasse.
Vorläufige Idee: Der User startet mit einem "vollen Pfad" (hier also https://wetter.orf.at/steiermark/grazuniversitaet/), würde dann durch das template nach dem Städtenamen gefragt (hier: Graz-Universität, das ist aber hier im Prinzip auch willkürlich), das template würde dann daraus die beiden URL's generieren und dann ein defmod auf das Device selbst absetzen mit "none".
(Das könnte man eventuell noch so erweitern, dass bei einer vorhandenen get01URL diese verwendet wird, da müßte ich mich aber auch erst eindenken; das ist aber jetzt alles Kosmetik...)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Online frank

  • Hero Member
  • *****
  • Beiträge: 8095
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #22 am: 27 Februar 2019, 10:51:43 »
wenn im define ein interval steh, wird jedes get, welches mit getXXPoll=1 "aktiviert" ist, auch automatisch ausgelöst.

ebenso sollten beide/alle gets manuell über set reread nacheinander aufgerufen werden.
FHEM: 5.8(SVN) => Pi3(jessie)
IO: CUL433_V3.3(1.00.01B53)|CUL868_V3.3(1.58)|HMLAN(0.965)|HMUSB2(0.967)|HMUART(1.4.1)
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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #23 am: 28 Februar 2019, 08:03:32 »
So, eben habe ich dann mal die aktualisierte Fassung des ORF-templates hochgeladen.

Ein paar Dinge wären nett:
- Zum einen wäre eine Rückmeldung hilfreich, wie ihr die "Nutzerführung" findet bzw. ob/welches Verbesserungspotential ihr da seht (ich würde das als eine Art Basistemplate für ähnlich gelagerte Fälle sehen)
- im Ausgangscode von drhirn war noch der Infotext drin, also sowas wie "Stürmisches Scheißwetter bei x°C". Eigentlich fand ich das schöner, vielleicht mag das noch jemand reinbasteln, sonst bleiben im STATE jetzt halt die objektiven Angaben drin, die derzeit verfügbar sind.
- die hp-Drucker würde ich ggf. entsprechend auf die mehrfache URL-Fassung anpassen und das Statustemplate in die beiden (?) anderen integrieren. Aber ohne Hardware... (Wenigstens ein list wäre hilfreich, dann kann ich das ggf. versuchen zu "vertemplaten".

Dann kommt irgendwann auch bergfex dran (bin grade aber noch an ein paar anderen Dingen dran, kann dauern). Übrigens scheinen sich der ORF und Bergfex zumindest die Basisdaten aus derselben Quelle zu holen; die Pfade kommen mir da so bekannt vor...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1564
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #24 am: 28 Februar 2019, 08:17:34 »
Puh, steht nicht so direkt in der seite.

Aber das hier findet etwas und wird im Webbrowser "verborgen",
es funktioniert jedoch für Wien, Steiermark und Innsbruck:

Beobachtung:\s?(.*?)\.?<
Der Status war dann daraus und der Temperatur zusammengesetzt.
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

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4151
  • Wer anderen eine Bratwurst brät...
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #25 am: 28 Februar 2019, 11:06:45 »
Hier mal eine Definition eines fertigen HTTPMOD Device für die Wetterdaten von bergfex.at (noch ohne Prognose).
Das war gar nicht so einfach... ::)
11 Readings sind schon umgesetzt.
defmod Innsbruck HTTPMOD https://www.bergfex.at/sommer/innsbruck/wetter/ 3600
attr Innsbruck userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07-1Name reading07-1OExpr reading07-2Name reading07-2OExpr reading07-3Name reading07-3OExpr reading07-4Name reading07-4OExpr reading07-5Name reading07-5OExpr reading07Regex reading08Name reading08Regex reading09Name reading09Regex
attr Innsbruck enableControlSet 1
attr Innsbruck reading01Name location
attr Innsbruck reading01Regex "forecast-current">\n\n.+<h2>\n.+?(\w+)\n.+</h2
attr Innsbruck reading02Name height
attr Innsbruck reading02Regex "h2-sub">\n.+?(\d{1,4}).m
attr Innsbruck reading03Name temperature
attr Innsbruck reading03Regex "temperature".*?\n.+<span.class="value">(.*?)</
attr Innsbruck reading04Name chance_of_raining
attr Innsbruck reading04Regex Niederschlag:.(\d{1,3})%
attr Innsbruck reading05Name last_update
attr Innsbruck reading05Regex "important">Heute,.(.*?)</
attr Innsbruck reading06Name condition
attr Innsbruck reading06Regex \d\d:\d\d</span>\n.+-.(.*?)\n
attr Innsbruck reading07-1Name text_today
attr Innsbruck reading07-1OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck reading07-2Name text_tomorrow
attr Innsbruck reading07-2OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck reading07-3Name text_day_after_tomorrow
attr Innsbruck reading07-3OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck reading07-4Name text_in_3_days
attr Innsbruck reading07-4OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck reading07-5Name text_in_4_days
attr Innsbruck reading07-5OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck reading07Regex (?s)<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>
attr Innsbruck stateFormat condition bei temperature°C und chance_of_raining% Regenwahrscheinlichkeit

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4151
  • Wer anderen eine Bratwurst brät...
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #26 am: 28 Februar 2019, 11:48:46 »
Bin dabei auch die Prognose einzubauen.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4151
  • Wer anderen eine Bratwurst brät...
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #27 am: 28 Februar 2019, 16:07:54 »
So, jetzt Wetter und Prognose von bergfex.at mit entsprechenden "Gettern".

Viel Spaß beim "vertemplaten":
defmod Innsbruck HTTPMOD none 3600
attr Innsbruck userattr get01-10Name get01-10OExpr get01-11Name get01-11OExpr get01-1Name get01-2Name get01-3Name get01-4Name get01-5Name get01-6Name get01-7Name get01-7OExpr get01-8Name get01-8OExpr get01-9Name get01-9OExpr get01Name get01Poll:0,1 get01Regex get01URL get02-10Name get02-11Name get02-12Name get02-13Name get02-14Name get02-15Name get02-16Name get02-16OExpr get02-17Name get02-17OExpr get02-18Name get02-19Name get02-19OExpr get02-1Name get02-20Name get02-21Name get02-22Name get02-23Name get02-24Name get02-25Name get02-26Name get02-26OExpr get02-27Name get02-27OExpr get02-28Name get02-29Name get02-2Name get02-30Name get02-31Name get02-32Name get02-33Name get02-34Name get02-35Name get02-36Name get02-36OExpr get02-37Name get02-37OExpr get02-38Name get02-39Name get02-3Name get02-40Name get02-41Name get02-42Name get02-43Name get02-44Name get02-45Name get02-46Name get02-46OExpr get02-47Name get02-47OExpr get02-48Name get02-49Name get02-4Name get02-50Name get02-51Name get02-52Name get02-53Name get02-54Name get02-55Name get02-56Name get02-56OExpr get02-57Name get02-57OExpr get02-58Name get02-59Name get02-5Name get02-60Name get02-61Name get02-62Name get02-63Name get02-64Name get02-65Name get02-66Name get02-66OExpr get02-67Name get02-67OExpr get02-68Name get02-69Name get02-6Name get02-70Name get02-71Name get02-72Name get02-73Name get02-74Name get02-75Name get02-76Name get02-76OExpr get02-77Name get02-77OExpr get02-78Name get02-79Name get02-7Name get02-7OExpr get02-80Name get02-81Name get02-82Name get02-83Name get02-84Name get02-85Name get02-86Name get02-86OExpr get02-87Name get02-87OExpr get02-88Name get02-89Name get02-8Name get02-90Name get02-9Name get02-9OExpr get02Name get02Poll:0,1 get02Regex get02URL reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07-1Name reading07-1OExpr reading07-2Name reading07-2OExpr reading07-3Name reading07-3OExpr reading07-4Name reading07-4OExpr reading07-5Name reading07-5OExpr reading07Regex reading08Name reading08Regex reading09Name reading09Regex
attr Innsbruck devStateIcon {"<img src='https:".ReadingsVal($name,"fc1_icon","")."' alt='".ReadingsVal($name,"condition","")."' />"}
attr Innsbruck enableControlSet 1
attr Innsbruck event-on-change-reading .+
attr Innsbruck get01-10Name text_in_3_days
attr Innsbruck get01-10OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck get01-11Name text_in_4_days
attr Innsbruck get01-11OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck get01-1Name location
attr Innsbruck get01-2Name height
attr Innsbruck get01-3Name last_update
attr Innsbruck get01-4Name condition
attr Innsbruck get01-5Name chance_of_raining
attr Innsbruck get01-6Name temperature
attr Innsbruck get01-7Name text_today
attr Innsbruck get01-7OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck get01-8Name text_tomorrow
attr Innsbruck get01-8OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck get01-9Name text_day_after_tomorrow
attr Innsbruck get01-9OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr Innsbruck get01Name Wetter
attr Innsbruck get01Poll 1
attr Innsbruck get01Regex "forecast-current">\n\n.+<h2>\n.+?(\w+)\n.+</.*?\n\n.*?"h2-sub">\n\s+(.*?)m\n.*\n\n\n\t\n.*?\n.*\n.*?>Heute,\s(.*?)</.*?\n.*?-\s(\w+)\n.*?\n.*?\n\s+Niederschlag:\s(\d{1,3})%\n.*?\n.*\n\t\n.*?"temperature">\n.*?"value">(.*?)</(?s).*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</
attr Innsbruck get01URL https://www.bergfex.at/sommer/innsbruck/wetter/
attr Innsbruck get02-10Name fc1_wind
attr Innsbruck get02-11Name fc2_icon
attr Innsbruck get02-12Name fc2_tmax
attr Innsbruck get02-13Name fc2_tmin
attr Innsbruck get02-14Name fc2_snow
attr Innsbruck get02-15Name fc2_rrr
attr Innsbruck get02-16Name fc2_rrp
attr Innsbruck get02-17Name fc2_snow_fall_limit
attr Innsbruck get02-17OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-18Name fc2_sun_period
attr Innsbruck get02-19Name fc2_thunderstorms
attr Innsbruck get02-1Name fc1_icon
attr Innsbruck get02-20Name fc2_wind
attr Innsbruck get02-21Name fc3_icon
attr Innsbruck get02-22Name fc3_tmax
attr Innsbruck get02-23Name fc3_tmin
attr Innsbruck get02-24Name fc3_snow
attr Innsbruck get02-25Name fc3_rrr
attr Innsbruck get02-26Name fc3_rrp
attr Innsbruck get02-27Name fc3_snow_fall_limit
attr Innsbruck get02-27OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-28Name fc3_sun_period
attr Innsbruck get02-29Name fc3_thunderstorms
attr Innsbruck get02-2Name fc1_tmax
attr Innsbruck get02-30Name fc3_wind
attr Innsbruck get02-31Name fc4_icon
attr Innsbruck get02-32Name fc4_tmax
attr Innsbruck get02-33Name fc4_tmin
attr Innsbruck get02-34Name fc4_snow
attr Innsbruck get02-35Name fc4_rrr
attr Innsbruck get02-36Name fc4_rrp
attr Innsbruck get02-37Name fc4_snow_fall_limit
attr Innsbruck get02-37OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-38Name fc4_sun_period
attr Innsbruck get02-39Name fc4_thunderstorms
attr Innsbruck get02-3Name fc1_tmin
attr Innsbruck get02-40Name fc4_wind
attr Innsbruck get02-41Name fc5_icon
attr Innsbruck get02-42Name fc5_tmax
attr Innsbruck get02-43Name fc5_tmin
attr Innsbruck get02-44Name fc5_snow
attr Innsbruck get02-45Name fc5_rrr
attr Innsbruck get02-46Name fc5_rrp
attr Innsbruck get02-47Name fc5_snow_fall_limit
attr Innsbruck get02-47OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-48Name fc5_sun_period
attr Innsbruck get02-49Name fc5_thunderstorms
attr Innsbruck get02-4Name fc1_snow
attr Innsbruck get02-50Name fc5_wind
attr Innsbruck get02-51Name fc6_icon
attr Innsbruck get02-52Name fc6_tmax
attr Innsbruck get02-53Name fc6_tmin
attr Innsbruck get02-54Name fc6_snow
attr Innsbruck get02-55Name fc6_rrr
attr Innsbruck get02-56Name fc6_rrp
attr Innsbruck get02-56OExpr $val =~ s/,/./g;; $val;;
attr Innsbruck get02-57Name fc6_snow_fall_limit
attr Innsbruck get02-57OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-58Name fc6_sun_period
attr Innsbruck get02-59Name fc6_thunderstorms
attr Innsbruck get02-5Name fc1_rrr
attr Innsbruck get02-60Name fc6_wind
attr Innsbruck get02-61Name fc7_icon
attr Innsbruck get02-62Name fc7_tmax
attr Innsbruck get02-63Name fc7_tmin
attr Innsbruck get02-64Name fc7_snow
attr Innsbruck get02-65Name fc7_rrr
attr Innsbruck get02-66Name fc7_rrp
attr Innsbruck get02-66OExpr $val =~ s/,/./g;; $val;;
attr Innsbruck get02-67Name fc7_snow_fall_limit
attr Innsbruck get02-67OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-68Name fc7_sun_period
attr Innsbruck get02-69Name fc7_thunderstorms
attr Innsbruck get02-6Name fc1_rrp
attr Innsbruck get02-70Name fc7_wind
attr Innsbruck get02-71Name fc8_icon
attr Innsbruck get02-72Name fc8_tmax
attr Innsbruck get02-73Name fc8_tmin
attr Innsbruck get02-74Name fc8_snow
attr Innsbruck get02-75Name fc8_rrr
attr Innsbruck get02-76Name fc8_rrp
attr Innsbruck get02-77Name fc8_snow_fall_limit
attr Innsbruck get02-77OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-78Name fc8_sun_period
attr Innsbruck get02-79Name fc8_thunderstorms
attr Innsbruck get02-7Name fc1_snow_fall_limit
attr Innsbruck get02-7OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-80Name fc8_wind
attr Innsbruck get02-81Name fc9_icon
attr Innsbruck get02-82Name fc9_tmax
attr Innsbruck get02-83Name fc9_tmin
attr Innsbruck get02-84Name fc9_snow
attr Innsbruck get02-85Name fc9_rrr
attr Innsbruck get02-86Name fc9_rrp
attr Innsbruck get02-87Name fc9_snow_fall_limit
attr Innsbruck get02-87OExpr $val =~ s/\.//g;; $val;;
attr Innsbruck get02-88Name fc9_sun_period
attr Innsbruck get02-89Name fc9_thunderstorms
attr Innsbruck get02-8Name fc1_sun_period
attr Innsbruck get02-90Name fc9_wind
attr Innsbruck get02-9Name fc1_thunderstorms
attr Innsbruck get02Name Prognose
attr Innsbruck get02Poll 1
attr Innsbruck get02Regex "forecast-day-0"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.+">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-1"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-2"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-3"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-4"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-5"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-6"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-7"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-8"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</
attr Innsbruck get02URL https://www.bergfex.at/sommer/innsbruck/wetter/prognose/
attr Innsbruck stateFormat condition bei temperature°C und chance_of_raining% Regenwahrscheinlichkeit

Weiß nicht ob das mit dem devStateIcon so gewünscht ist, wenn nicht einfach das Attribut weglassen.
Falls noch was fehlt sagt mir bitte Bescheid.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #28 am: 28 Februar 2019, 16:58:33 »
 :o :) ;D 8)
*grins über beide Backen*
Ihr seid mir ja welche...

Noch ungetestet, aber mit einem gewissen Optimismus:
#Austrian (and other) weather info from bergfex.at or other bergfex sites, Forum: https://forum.fhem.de/index.php/topic,97694.msg912879.html#msg912879
name:A_02n_bergfex_weather
filter:TYPE=HTTPMOD
desc: Get austrian weather.<br>Define a HTTPMOD device like <br>defmod bergfexInnsbruck HTTPMOD none 3600 <br>You will be asked to provide a BERGFEXURL like https://www.bergfex.at/sommer/innsbruck/wetter/ and a CITYNAME like innsbruck<br><a href="https://forum.fhem.de/index.php/topic,97694.msg912879.html#msg912879">Source: FHEM Forum</a>
par:BERGFEXURL;Complete weather-URL. Example: https://www.bergfex.at/sommer/innsbruck/wetter/;{ AttrVal("DEVICE","get01URL","") =~ m,(https://www.bergfex..*/sommer/[^/]+[/]wetter/).*, ? $1 : undef }
par:CITYNAME;Name of the respective weather station as written in the middle part of the URL. Examples: innsbruck;{ AttrVal("DEVICE","get01URL","") =~ m,https://www.bergfex..*/sommer/([^/]+)[/]wetter/.*, ? $1 : undef }
attr DEVICE userattr get01-10Name get01-10OExpr get01-11Name get01-11OExpr get01-1Name get01-2Name get01-3Name get01-4Name get01-5Name get01-6Name get01-7Name get01-7OExpr get01-8Name get01-8OExpr get01-9Name get01-9OExpr get01Name get01Poll:0,1 get01Regex get01URL get02-10Name get02-11Name get02-12Name get02-13Name get02-14Name get02-15Name get02-16Name get02-16OExpr get02-17Name get02-17OExpr get02-18Name get02-19Name get02-19OExpr get02-1Name get02-20Name get02-21Name get02-22Name get02-23Name get02-24Name get02-25Name get02-26Name get02-26OExpr get02-27Name get02-27OExpr get02-28Name get02-29Name get02-2Name get02-30Name get02-31Name get02-32Name get02-33Name get02-34Name get02-35Name get02-36Name get02-36OExpr get02-37Name get02-37OExpr get02-38Name get02-39Name get02-3Name get02-40Name get02-41Name get02-42Name get02-43Name get02-44Name get02-45Name get02-46Name get02-46OExpr get02-47Name get02-47OExpr get02-48Name get02-49Name get02-4Name get02-50Name get02-51Name get02-52Name get02-53Name get02-54Name get02-55Name get02-56Name get02-56OExpr get02-57Name get02-57OExpr get02-58Name get02-59Name get02-5Name get02-60Name get02-61Name get02-62Name get02-63Name get02-64Name get02-65Name get02-66Name get02-66OExpr get02-67Name get02-67OExpr get02-68Name get02-69Name get02-6Name get02-70Name get02-71Name get02-72Name get02-73Name get02-74Name get02-75Name get02-76Name get02-76OExpr get02-77Name get02-77OExpr get02-78Name get02-79Name get02-7Name get02-7OExpr get02-80Name get02-81Name get02-82Name get02-83Name get02-84Name get02-85Name get02-86Name get02-86OExpr get02-87Name get02-87OExpr get02-88Name get02-89Name get02-8Name get02-90Name get02-9Name get02-9OExpr get02Name get02Poll:0,1 get02Regex get02URL reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07-1Name reading07-1OExpr reading07-2Name reading07-2OExpr reading07-3Name reading07-3OExpr reading07-4Name reading07-4OExpr reading07-5Name reading07-5OExpr reading07Regex reading08Name reading08Regex reading09Name reading09Regex
attr DEVICE devStateIcon {"<img src='https:".ReadingsVal($name,"fc1_icon","")."' alt='".ReadingsVal($name,"condition","")."' />"}
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .+
attr DEVICE get01-10Name text_in_3_days
attr DEVICE get01-10OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr DEVICE get01-11Name text_in_4_days
attr DEVICE get01-11OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr DEVICE get01-1Name location
attr DEVICE get01-2Name height
attr DEVICE get01-3Name last_update
attr DEVICE get01-4Name condition
attr DEVICE get01-5Name chance_of_raining
attr DEVICE get01-6Name temperature
attr DEVICE get01-7Name text_today
attr DEVICE get01-7OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr DEVICE get01-8Name text_tomorrow
attr DEVICE get01-8OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr DEVICE get01-9Name text_day_after_tomorrow
attr DEVICE get01-9OExpr $val =~ s/\n/ /g;; $val =~ s/<\/p><p>//g;; $val =~ s/<\/?p>//g;; $val;;
attr DEVICE get01Name Wetter
attr DEVICE get01Poll 1
attr DEVICE get01Regex "forecast-current">\n\n.+<h2>\n.+?(\w+)\n.+</.*?\n\n.*?"h2-sub">\n\s+(.*?)m\n.*\n\n\n\t\n.*?\n.*\n.*?>Heute,\s(.*?)</.*?\n.*?-\s(\w+)\n.*?\n.*?\n\s+Niederschlag:\s(\d{1,3})%\n.*?\n.*\n\t\n.*?"temperature">\n.*?"value">(.*?)</(?s).*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</div>.*<div.class="txt_markup">(.*?)</
attr DEVICE get01URL BERGFEXURL
attr DEVICE get02-10Name fc1_wind
attr DEVICE get02-11Name fc2_icon
attr DEVICE get02-12Name fc2_tmax
attr DEVICE get02-13Name fc2_tmin
attr DEVICE get02-14Name fc2_snow
attr DEVICE get02-15Name fc2_rrr
attr DEVICE get02-16Name fc2_rrp
attr DEVICE get02-17Name fc2_snow_fall_limit
attr DEVICE get02-17OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-18Name fc2_sun_period
attr DEVICE get02-19Name fc2_thunderstorms
attr DEVICE get02-1Name fc1_icon
attr DEVICE get02-20Name fc2_wind
attr DEVICE get02-21Name fc3_icon
attr DEVICE get02-22Name fc3_tmax
attr DEVICE get02-23Name fc3_tmin
attr DEVICE get02-24Name fc3_snow
attr DEVICE get02-25Name fc3_rrr
attr DEVICE get02-26Name fc3_rrp
attr DEVICE get02-27Name fc3_snow_fall_limit
attr DEVICE get02-27OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-28Name fc3_sun_period
attr DEVICE get02-29Name fc3_thunderstorms
attr DEVICE get02-2Name fc1_tmax
attr DEVICE get02-30Name fc3_wind
attr DEVICE get02-31Name fc4_icon
attr DEVICE get02-32Name fc4_tmax
attr DEVICE get02-33Name fc4_tmin
attr DEVICE get02-34Name fc4_snow
attr DEVICE get02-35Name fc4_rrr
attr DEVICE get02-36Name fc4_rrp
attr DEVICE get02-37Name fc4_snow_fall_limit
attr DEVICE get02-37OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-38Name fc4_sun_period
attr DEVICE get02-39Name fc4_thunderstorms
attr DEVICE get02-3Name fc1_tmin
attr DEVICE get02-40Name fc4_wind
attr DEVICE get02-41Name fc5_icon
attr DEVICE get02-42Name fc5_tmax
attr DEVICE get02-43Name fc5_tmin
attr DEVICE get02-44Name fc5_snow
attr DEVICE get02-45Name fc5_rrr
attr DEVICE get02-46Name fc5_rrp
attr DEVICE get02-47Name fc5_snow_fall_limit
attr DEVICE get02-47OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-48Name fc5_sun_period
attr DEVICE get02-49Name fc5_thunderstorms
attr DEVICE get02-4Name fc1_snow
attr DEVICE get02-50Name fc5_wind
attr DEVICE get02-51Name fc6_icon
attr DEVICE get02-52Name fc6_tmax
attr DEVICE get02-53Name fc6_tmin
attr DEVICE get02-54Name fc6_snow
attr DEVICE get02-55Name fc6_rrr
attr DEVICE get02-56Name fc6_rrp
attr DEVICE get02-56OExpr $val =~ s/,/./g;; $val;;
attr DEVICE get02-57Name fc6_snow_fall_limit
attr DEVICE get02-57OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-58Name fc6_sun_period
attr DEVICE get02-59Name fc6_thunderstorms
attr DEVICE get02-5Name fc1_rrr
attr DEVICE get02-60Name fc6_wind
attr DEVICE get02-61Name fc7_icon
attr DEVICE get02-62Name fc7_tmax
attr DEVICE get02-63Name fc7_tmin
attr DEVICE get02-64Name fc7_snow
attr DEVICE get02-65Name fc7_rrr
attr DEVICE get02-66Name fc7_rrp
attr DEVICE get02-66OExpr $val =~ s/,/./g;; $val;;
attr DEVICE get02-67Name fc7_snow_fall_limit
attr DEVICE get02-67OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-68Name fc7_sun_period
attr DEVICE get02-69Name fc7_thunderstorms
attr DEVICE get02-6Name fc1_rrp
attr DEVICE get02-70Name fc7_wind
attr DEVICE get02-71Name fc8_icon
attr DEVICE get02-72Name fc8_tmax
attr DEVICE get02-73Name fc8_tmin
attr DEVICE get02-74Name fc8_snow
attr DEVICE get02-75Name fc8_rrr
attr DEVICE get02-76Name fc8_rrp
attr DEVICE get02-77Name fc8_snow_fall_limit
attr DEVICE get02-77OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-78Name fc8_sun_period
attr DEVICE get02-79Name fc8_thunderstorms
attr DEVICE get02-7Name fc1_snow_fall_limit
attr DEVICE get02-7OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-80Name fc8_wind
attr DEVICE get02-81Name fc9_icon
attr DEVICE get02-82Name fc9_tmax
attr DEVICE get02-83Name fc9_tmin
attr DEVICE get02-84Name fc9_snow
attr DEVICE get02-85Name fc9_rrr
attr DEVICE get02-86Name fc9_rrp
attr DEVICE get02-87Name fc9_snow_fall_limit
attr DEVICE get02-87OExpr $val =~ s/\.//g;; $val;;
attr DEVICE get02-88Name fc9_sun_period
attr DEVICE get02-89Name fc9_thunderstorms
attr DEVICE get02-8Name fc1_sun_period
attr DEVICE get02-90Name fc9_wind
attr DEVICE get02-9Name fc1_thunderstorms
attr DEVICE get02Name Prognose
attr DEVICE get02Poll 1
attr DEVICE get02Regex "forecast-day-0"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.+">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-1"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-2"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-3"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-4"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-5"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-6"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-7"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</.*?\n.*?\n.*\n\n\n\n.*?"forecast-day-8"\n.*\n.*\n\n.*\n.*?src="(.*?)".*\n\n.*\n.*?"tmax">(.*?)°C.*\n.*?"tmin">(.*?)°C.*\n.*?"nschnee.">\n(.*?)</.*?\n.*\n\n.*\n.*?"rrr.+">\n(.*?)l?.*\n\n.*?"rrp.*">\n(.*?)%.*\n.*\n.*?sgrenze">\n(.*?)m.*\n.*\n.*?"sonne.*?">\n(.*?)h.*\n.*\n.*\n.*?"Gew.*?:.*?\n(.*?)%?</.*\n.*\n.*\n.*?"ff.*?".*?\n(.*?)</
attr DEVICE get02URL BERGFEXURLprognose/
attr DEVICE stateFormat condition bei temperature°C und chance_of_raining% Regenwahrscheinlichkeit
attr DEVICE model A_02n_bergfex_weather

Sollte auch für andere Bergfex-Länder funktionieren, wird bei Gelegenheit getestet und dann eingecheckt. Ich finde devStateIcons grundsätzlich nett, besonders, wenn sie kombiniert sind...

Bin mal gespannt, wann der erste wissen will, wieviel Schnee rund um das verrückte Kangaroo liegt (und sonstwo) bzw. wie er das auf dem einfachsten Weg rausbekommt 8) .

See you ;D
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #29 am: 01 März 2019, 10:48:14 »
Grummel, irgendwas paßt da noch nicht.
Das template scheint eigentlich zu funktionieren, die URL's werden sauber aufgebaut, soweit ich das erkennen kann. Aber dann läuft auf meinem Testsystem nach Absetzen der gets endlos die Uhr. Das letzte was im Log steht, ist die Anwendung der regex für die Ermittlng der Readinginhalte (aus der vermutlich ersten URL).
Muß ich mir noch genauer ansehen, evtl. wieder ein Kopier-Problem oä., wenn ich nicht klarkomme, gibts auch log-Auszüge (die habe ich grade nicht bei der Hand).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline mrfloppy

  • Full Member
  • ***
  • Beiträge: 178
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #30 am: 29 April 2019, 11:30:12 »
Hallo
Ich würde mir ein Template für den Österreichischen Spritpreisrechner der E-control wünschen.
Vielleicht kann da ja wer was zusammen basteln.

LG Thomas
Fhem 5.9, CCU2, RFXtrx433 E USB, Div. Thermostate, CUL433, Fhemduino, Signalduino, Temp/luftfeuchesensoren,Fensterkontakte,Intertechno Schalter,....... HM-IP

Offline SirUli

  • Full Member
  • ***
  • Beiträge: 150
    • wolf-u.li
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #31 am: 04 Mai 2019, 11:54:11 »
Hi Beta-User,

Clever-Tanken hat ein Update der Website gemacht, daher ist folgender Patch notwendig:

--- httpmod-orig.template       2019-05-04 11:45:58.050623533 +0200
+++ httpmod.template    2019-05-04 11:48:58.940098540 +0200
@@ -24,11 +24,11 @@
 attr DEVICE userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex readingOExpr
 attr DEVICE enableControlSet 1
 attr DEVICE reading01Name Diesel
-attr DEVICE reading01Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Diesel
+attr DEVICE reading01Regex "price-type-name">Diesel</div>[\d\D]{700,900}"current-price-.">([0-9\.]+[^0-9]+suffix-price-.">[0-9])
 attr DEVICE reading02Name SuperE10
-attr DEVICE reading02Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Super E10
+attr DEVICE reading02Regex "price-type-name">Super E10</div>[\d\D]{700,900}"current-price-.">([0-9\.]+[^0-9]+suffix-price-.">[0-9])
 attr DEVICE reading03Name SuperE5
-attr DEVICE reading03Regex SpritsortenController[^0-9]+([0-9,]+)[^0-9]+Super E5
+attr DEVICE reading03Regex "price-type-name">Super E5</div>[\d\D]{700,900}"current-price-.">([0-9\.]+[^0-9]+suffix-price-.">[0-9])
 attr DEVICE readingOExpr $val =~ tr/,/./;;$val
 attr DEVICE stateFormat E5: SuperE5 € / E10: SuperE10 € / D: Diesel €
 attr DEVICE timeout 10

Vielen Dank im Voraus!

Cheers,
Uli

Edit: Sehe da grad noch einen Copy&Paste Fehler:
--- httpmod-orig.template       2019-05-04 11:57:08.837329308 +0200
+++ httpmod.template    2019-05-04 11:59:49.444661159 +0200
@@ -115,7 +115,7 @@
 #Geschwindigkeitsüberwachung, Forum: https://forum.fhem.de/index.php/topic,90014.msg824805.html#msg824805
 name:A_03a_blitzer
 filter:TYPE=HTTPMOD
-desc: Get austrian weather.<br>Define a HTTPMOD device like <br>defmod DEVICE HTTPMOD https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box=52.xxxxxx,8.xxxxxx,53.xxxxxx,9.xxxxxx 0 <br>Change city to your needs <br><a href="https://forum.fhem.de/index.php/topic,90014.msg824805.html#msg824805">Source: Forum</a>
+desc: Get speed cameras.<br>Define a HTTPMOD device like <br>defmod DEVICE HTTPMOD https://cdn2.atudo.net/api/1.0/vl.php?type=0,1,2,3,4,5,6&box=52.xxxxxx,8.xxxxxx,53.xxxxxx,9.xxxxxx 0 <br>Change city to your needs <br><a href="https://forum.fhem.de/index.php/topic,90014.msg824805.html#msg824805">Source: Forum</a>
 attr DEVICE userattr getData getHeader1 getHeader2 getURL reading01DeleteIfUnmatched reading01JSON reading01Name reading01Regex reading02Name reading02RegOpt reading02Regex reading03JSON reading03Name readingEncode requestHeader1 requestHeader2 setParseResponse:0,1
 attr DEVICE enableControlSet 1
 attr DEVICE extractAllJSON 1
« Letzte Änderung: 04 Mai 2019, 12:00:00 von SirUli »
FHEM auf x86 VM mit KNX, RaspberryPI mit RS485, Verschiedene Netzwerk-Devices

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #32 am: 04 Mai 2019, 12:05:49 »
Clever-Tanken hat ein Update der Website gemacht, daher ist folgender Patch notwendig:
Vielen Dank zurück!
Hab's eben eingecheckt :) .

Hallo
Ich würde mir ein Template für den Österreichischen Spritpreisrechner der E-control wünschen.
Vielleicht kann da ja wer was zusammen basteln.
Etwas Vorarbeit wäre schon gut.
Meine eigenen Regex-Kenntnisse sind leider nicht so gut, als dass ich da "einfach so" was erfinden könnte.


Zu bergfex und dem ORF-Wetter noch eine Anmerkung:

das klemmt beides irgendwie, ich weiß nur leider nicht, warum. Ich wollte erst ORF fixen. Da geht nur eine der beiden Abfragen, die andere liefert einfach nichts, bergfex scheint sogar das ganze System zu blockieren (auf dem Testsystem, kann sein, dass da das dns-Attribut bei global helfen könnte, aber Inet-Zugang ist eigentlich da?).
Wie gesagt, ich bin nicht der regex-Experte und habe leider im Moment nach wie vor keine Idee, an was es eigentlich hängt.

Schubsen wäre nett... ::)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline SirUli

  • Full Member
  • ***
  • Beiträge: 150
    • wolf-u.li
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #33 am: 04 Mai 2019, 13:38:54 »
Hab's eben eingecheckt :)

Merci und ich lege gleich nochmal nach. Basierend auf Artikeln in meinem Blog, hier noch für die HP Printer ne Erweiterung und der Brother Scanner mit dazu als Template. Ich habe den letzteren mal unter B_02a rein sortiert, das kannst du natürlich machen wie deine Idee dazu ist ;) Dazu habe ich noch die aktuelle Notfallapotheke und für Pihole die statistiken ;)

--- httpmod-orig.template       2019-05-04 12:00:32.502030867 +0200
+++ httpmod.template    2019-05-04 13:33:50.035551364 +0200
@@ -145,6 +145,57 @@
 attr DEVICE set01NoArg 1
 attr DEVICE model A_02c_homebridge_videodoorbell

+# Pihole Statistics, Website: https://wolf-u.li/5987/einbindung-der-pihole-statistiken-in-fhem/
+name:A_02e_pihole_statistics
+filter:TYPE=HTTPMOD
+desc: Get Statistics from your pihole instance.<br />Define a HTTPMOD device like <br />define DEVICE HTTPMOD http://192.168.133.7/admin/api.php 300<br />Change IP to your needs<br /><a href="https://wolf-u.li/5987/einbindung-der-pihole-statistiken-in-fhem/">Source: Website</a>
+attr DEVICE userattr getURL
+attr DEVICE extractAllJSON 1
+attr DEVICE getURL http://dns/admin/api.php
+attr DEVICE stateFormat DNS Anfragen: dns_queries_today<br>Geblockte Seiten: ads_blocked_today (ads_blocked_today_formatted %)
+attr DEVICE userReadings ads_blocked_today_formatted {round(ReadingsNum($name,"ads_percentage_today",0),0)}
+
+# Pharmacy Emergency Service Germany, Forum: https://forum.fhem.de/index.php?topic=87234.0
+name:A_02f_pharmacy_emergency_service_germany
+filter:TYPE=HTTPMOD
+desc: Gets the current emergency service of a pharmacy closeby your postal code<br />Define a HTTPMOD device like <br />define DEVICE HTTPMOD http://apothekenfinder.mobi/interface/json.php?device=web&source=not&search=1337 0<br />Change the postalcode (1337 in this example) to yours<br /><a href="https://forum.fhem.de/index.php/topic,87234.0.html>Source: Forum</a><br />Hint: The emergency service changes every day at 09:00 CET, thus create a AT like this to update the DEVICE timely:<br />defmod UPDATE_EMERGENCY_SERVICE at *09:15:00 set EMERGENCY_HTTPMOD_DEVICE reread
+attr DEVICE userattr get01Encode get01JSON get01Name get02ExtractAllJSON:0,1 getURL reading01Encode reading01JSON reading01Name reading02JSON reading02Name reading03JSON reading03Name reading04JSON reading04Name reading05JSON reading05Name reading06JSON reading06Name reading07JSON reading07Name reading07OExpr reading08JSON reading08Name reading08OExpr reading09JSON reading09Name reading10JSON reading10Name reading11JSON reading11Name readingEncode requestHeader requestHeader1 requestHeader2 requestHeader3 requestHeader4 requestHeader5 requestHeader6 requestHeader7
+attr DEVICE reading01Encode UTF-8
+attr DEVICE reading01JSON result_01_name
+attr DEVICE reading01Name Name
+attr DEVICE reading02JSON result_01_street
+attr DEVICE reading02Name Strasse
+attr DEVICE reading03JSON result_01_plz
+attr DEVICE reading03Name Plz
+attr DEVICE reading04JSON result_01_place
+attr DEVICE reading04Name Ort
+attr DEVICE reading05JSON result_01_number
+attr DEVICE reading05Name Telefon
+attr DEVICE reading06JSON result_01_fax
+attr DEVICE reading06Name Telefax
+attr DEVICE reading07JSON result_01_start
+attr DEVICE reading07Name Beginn
+attr DEVICE reading07OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
+attr DEVICE reading08JSON result_01_end
+attr DEVICE reading08Name Ende
+attr DEVICE reading08OExpr strftime "%a %e.%m.%Y %H:%M", localtime($val)
+attr DEVICE reading09JSON result_01_lng
+attr DEVICE reading09Name Laengengrad
+attr DEVICE reading10JSON result_01_lat
+attr DEVICE reading10Name Breitengrad
+attr DEVICE reading11JSON result_01_distance
+attr DEVICE reading11Name Entfernung
+attr DEVICE readingEncode UTF-8
+attr DEVICE requestHeader2 Accept-Encoding: gzip, deflate
+attr DEVICE requestHeader3 Accept-Language: de-DE,de;;q=0.9,en-US;;q=0.8,en;;q=0.7,fr;;q=0.6
+attr DEVICE requestHeader4 User-Agent: Lynx/2.8.8dev.3 libwww-FM/2.14 SSL-MM/1.4.1
+attr DEVICE requestHeader5 Referer: http://apothekenfinder.mobi/
+attr DEVICE requestHeader6 X-Requested-With: XMLHttpRequest
+attr DEVICE requestHeader7 Connection: keep-alive
+attr DEVICE showBody 0
+attr DEVICE stateFormat Name, Telefon, Strasse in Plz Ort
+attr DEVICE timeout 60
+
 #################################
 #HP Printers
 #
@@ -173,8 +224,8 @@
 # Printer cartridge states
 name:B_01a_hp_printer_cartridge_status
 filter:TYPE=HTTPMOD
-desc: Get cartridge states of your hp printer.<br>Define a HTTPMOD device like <br>defmod DEVICE HTTPMOD http://192.168.5.43/DevMgmt/ProductConfigDyn.xml 3600 <br>Change IP to your needs <br><a href="https://forum.fhem.de/index.php/topic,90601.msg874683.html#msg874683">Source: Forum</a>
-attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict
+desc: Get cartridge states of your HP printer.<br>Define a HTTPMOD device like <br>defmod DEVICE HTTPMOD http://192.168.5.43/DevMgmt/ConsumableConfigDyn.xml 3600 <br>Change IP to your needs <br><a href="https://forum.fhem.de/index.php/t$
+attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict$
 attr DEVICE httpVersion 1.1
 attr DEVICE reading01Name Cyan
 attr DEVICE reading01XPath-Strict //ccdyn:ConsumableInfo[2]/dd:ConsumablePercentageLevelRemaining/text()
@@ -184,32 +235,62 @@
 attr DEVICE reading03XPath-Strict //ccdyn:ConsumableInfo[4]/dd:ConsumablePercentageLevelRemaining/text()
 attr DEVICE reading04Name Black
 attr DEVICE reading04XPath-Strict //ccdyn:ConsumableInfo[1]/dd:ConsumablePercentageLevelRemaining/text()
+attr DEVICE reading05Name CyanCatridgeModel
+attr DEVICE reading05XPath-Strict //ccdyn:ConsumableInfo[3]/dd:ConsumableSelectibilityNumber/text()
+attr DEVICE reading06Name MagentaCatridgeModel
+attr DEVICE reading06XPath-Strict //ccdyn:ConsumableInfo[2]/dd:ConsumableSelectibilityNumber/text()
+attr DEVICE reading07Name YellowCatridgeModel
+attr DEVICE reading07XPath-Strict //ccdyn:ConsumableInfo[4]/dd:ConsumableSelectibilityNumber/text()
+attr DEVICE reading08Name BlackCatridgeModel
+attr DEVICE reading08XPath-Strict //ccdyn:ConsumableInfo[5]/dd:ConsumableSelectibilityNumber/text()
 attr DEVICE stateFormat C: Cyan% M: Magenta% Y: Yellow% B: Black%
 attr DEVICE model B_01a_hp_printer_cartridge_status

 # Printer statistics
 name:B_01a_hp_printer_statistics
 filter:TYPE=HTTPMOD
-desc: Get cartridge states of your hp printer.<br>Define a HTTPMOD device like <br>defmod DEVICE HTTPMOD http://192.168.5.43/DevMgmt/ProductUsageDyn.xml 3600<br>Change IP to your needs <br><a href="https://forum.fhem.de/index.php/topic,90601.msg874683.html#msg874683">Source: Forum</a>
-attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict reading07Name reading07XPath-Strict reading08Name reading08XPath-Strict
+desc: Gets various statistics from your HP printer.<br>Define a HTTPMOD device like <br>defmod DEVICE HTTPMOD http://192.168.5.43/DevMgmt/ProductUsageDyn.xml 3600<br>Change IP to your needs <br><a href="https://forum.fhem.de/index.php/topic,90601.msg874683.html#msg874683">Source: Forum</a>
+attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict reading07Name reading07XPath-Strict reading08Name reading08XPath-Strict reading09Name reading09XPath-Strict reading10Name reading10XPath-Strict reading11Name reading11XPath-Strict reading20Name reading20XPath-Strict reading30Name reading30XPath-Strict reading40Name reading40XPath-Strict reading41Name reading41XPath-Strict reading50Name reading50XPath-Strict reading51Name reading51XPath-Strict
 attr DEVICE httpVersion 1.1
-attr DEVICE reading01Name Pages_Total
+attr DEVICE reading01Name Printer_Pages_Total
 attr DEVICE reading01XPath-Strict //pudyn:PrinterSubunit/dd:TotalImpressions/text()
-attr DEVICE reading02Name Pages_Monochrome
+attr DEVICE reading02Name Printer_Pages_Monochrome
 attr DEVICE reading02XPath-Strict //pudyn:PrinterSubunit/dd:MonochromeImpressions/text()
-attr DEVICE reading03Name Pages_Color
+attr DEVICE reading03Name Printer_Pages_Color
 attr DEVICE reading03XPath-Strict //pudyn:PrinterSubunit/dd:ColorImpressions/text()
-attr DEVICE reading04Name Pages_Duplex
+attr DEVICE reading04Name Printer_Pages_Duplex
 attr DEVICE reading04XPath-Strict //pudyn:PrinterSubunit/dd:DuplexSheets/text()
-attr DEVICE reading05Name Jam_Events
+attr DEVICE reading05Name Printer_Jam_Events
 attr DEVICE reading05XPath-Strict //pudyn:PrinterSubunit/dd:JamEvents/text()
-attr DEVICE reading06Name Mispick_Events
+attr DEVICE reading06Name Printer_Mispick_Events
 attr DEVICE reading06XPath-Strict //pudyn:PrinterSubunit/dd:MispickEvents/text()
-attr DEVICE reading07Name ADF_Image_Scans
-attr DEVICE reading07XPath-Strict //pudyn:ScannerEngineSubunit/dd:AdfImages/text()
-attr DEVICE reading08Name Flatbed_Image_Scans
-attr DEVICE reading08XPath-Strict //pudyn:ScannerEngineSubunit/dd:FlatbedImages/text()
-attr DEVICE stateFormat Total: Pages_Total Monochrome: Pages_Monochrome Color: Pages_Color
+attr DEVICE reading10Name Scanner_Scans_Total
+attr DEVICE reading10XPath-Strict //pudyn:ScannerEngineSubunit/dd:ScanImages/text()
+attr DEVICE reading11Name Scanner_Scans_ADF_Image
+attr DEVICE reading11XPath-Strict //pudyn:ScannerEngineSubunit/dd:AdfImages/text()
+attr DEVICE reading12Name Scanner_Scans_Flatbed_Image
+attr DEVICE reading12XPath-Strict //pudyn:ScannerEngineSubunit/dd:FlatbedImages/text()
+attr DEVICE reading13Name Scanner_Jam_Events
+attr DEVICE reading13XPath-Strict //pudyn:ScannerEngineSubunit/dd:JamEvents/text()
+attr DEVICE reading14Name Scanner_Mispick_Events
+attr DEVICE reading14XPath-Strict //pudyn:ScannerEngineSubunit/dd:MispickEvents/text()
+attr DEVICE reading20Name InkMagentaPagesRemaining
+attr DEVICE reading20XPath-Strict //pudyn:Consumable[dd:MarkerColor='Magenta']/dd:EstimatedPagesRemaining/text()
+attr DEVICE reading21Name InkMagentaPercentRemaining
+attr DEVICE reading21XPath-Strict //pudyn:Consumable[dd:MarkerColor='Magenta']/dd:ConsumableRawPercentageLevelRemaining/text()
+attr DEVICE reading30Name InkCyanPagesRemaining
+attr DEVICE reading30XPath-Strict //pudyn:Consumable[dd:MarkerColor='Cyan']/dd:EstimatedPagesRemaining/text()
+attr DEVICE reading31Name InkCyanPercentRemaining
+attr DEVICE reading31XPath-Strict //pudyn:Consumable[dd:MarkerColor='Cyan']/dd:ConsumableRawPercentageLevelRemaining/text()
+attr DEVICE reading40Name InkYellowPagesRemaining
+attr DEVICE reading40XPath-Strict //pudyn:Consumable[dd:MarkerColor='Yellow']/dd:EstimatedPagesRemaining/text()
+attr DEVICE reading41Name InkYellowPercentRemaining
+attr DEVICE reading41XPath-Strict //pudyn:Consumable[dd:MarkerColor='Yellow']/dd:ConsumableRawPercentageLevelRemaining/text()
+attr DEVICE reading50Name InkBlackPagesRemaining
+attr DEVICE reading50XPath-Strict //pudyn:Consumable[dd:MarkerColor='Black']/dd:EstimatedPagesRemaining/text()
+attr DEVICE reading51Name InkBlackPercentRemaining
+attr DEVICE reading51XPath-Strict //pudyn:Consumable[dd:MarkerColor='Black']/dd:ConsumableRawPercentageLevelRemaining/text()
+attr DEVICE stateFormat Total: Printer_Pages_Total Monochrome: Printer_Pages_Monochrome Color: Printer_Pages_Color
 attr DEVICE model B_01a_hp_printer_statistics

 # Printer status
@@ -270,6 +351,42 @@
 attr DEVICE reading05Regex <th>1<\/th><td>(.*?)<
 attr DEVICE model B_01c_brother_printer_cartridge_status

+#################################
+#Brother Scanners
+
+# Brother ADS Scanners
+name:B_02a_brother_scanner_ads_status
+filter:TYPE=HTTPMOD
+desc: Get status of your Brother scanner.<br>Define a HTTPMOD device like <br>defmod DEVICE HTTPMOD http://192.168.133.7/ft/gen_maintenance 3600<br>Change IP to your needs <br><a href="https://wolf-u.li/6005/darstellung-der-statistiken-des-brother-ads-1700w-in-fhem/">Source: Website</a>.<br />Tested to work with ADS-1700W, possibly others.
+attr DEVICE userattr reading01Name reading01XPath-Strict reading02Name reading02XPath-Strict reading03Name reading03XPath-Strict reading04Name reading04XPath-Strict reading05Name reading05XPath-Strict reading06Name reading06XPath-Strict reading07Name reading07XPath-Strict reading08Name reading08XPath reading08XPath-Strict reading09Name reading09XPath-Strict reading10Name reading10XPath-Strict reading11Name reading11XPath-Strict reading12Name reading12XPath-Strict
+attr DEVICE httpVersion 1.1
+attr DEVICE reading01Name Model
+attr DEVICE reading01XPath-Strict //Model_name/text()
+attr DEVICE reading02Name Serial_Number
+attr DEVICE reading02XPath-Strict //Serial_Number/text()
+attr DEVICE reading03Name Firmware_Version
+attr DEVICE reading03XPath-Strict //MainVersion/text()
+attr DEVICE reading04Name PickupRollerPagesThreshold
+attr DEVICE reading04XPath-Strict //RemainingPick/text()
+attr DEVICE reading05Name PickupRollerPagesUsed
+attr DEVICE reading05XPath-Strict //RemainingPick_current/text()
+attr DEVICE reading06Name ScheduledMaintenancePagesThreshold
+attr DEVICE reading06XPath-Strict //RemainingScheduled/text()
+attr DEVICE reading07Name ScheduledMaintenancePagesUsed
+attr DEVICE reading07XPath-Strict //RemainingScheduled_current/text()
+attr DEVICE reading08XPath SeparationPadPagesThreshold
+attr DEVICE reading08XPath-Strict //RemainingPad_Threshold/text()
+attr DEVICE reading09Name SeparationPadPagesUsed
+attr DEVICE reading09XPath-Strict //RemainingSeparation_Pad/text()
+attr DEVICE reading10Name ScannedPagesTotal
+attr DEVICE reading10XPath-Strict //ScanPage/text()
+attr DEVICE reading11Name RollerReplacements
+attr DEVICE reading11XPath-Strict //RollerReplace/text()
+attr DEVICE reading12Name PaperJams
+attr DEVICE reading12XPath-Strict //PaperJams/text()
+attr DEVICE stateFormat Pages: ScannedPagesTotal Modell: Model SN: Serial_Number
+
+#################################
 #RESOL Solaranlage, Forum: https://forum.fhem.de/index.php/topic,86678.0.html
 name:C_01a_resol_solar
 filter:TYPE=HTTPMOD
FHEM auf x86 VM mit KNX, RaspberryPI mit RS485, Verschiedene Netzwerk-Devices
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #34 am: 04 Mai 2019, 13:53:45 »
Thx!
Ist ebenfalls bereits eingecheckt :) .
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Online Otto123

  • Hero Member
  • *****
  • Beiträge: 14569
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #35 am: 09 November 2019, 14:37:02 »
Hi,

wie an andere Stelle angekündigt, ich habe (ohne wirkliche Kennung) ein HTTMOD Device für die Konfiguration des Shell PlugS gebaut. Das ist noch nicht komplett, aber da ist so ziemlich alles drin was die API bietet.

Ich habe das wirklich Schritt für Schritt zu Fuß gemacht, ob das in dem Modul in Wirklichkeit viel einfacher geht, hat sich mir noch nicht erschlossen.  :-[
defmod shellyplug_s_h HTTPMOD none 0
attr shellyplug_s_h userattr get01Name get01URL get02Name get02URL get03Name get03URL set01IMap set01Name set01TextArg:0,1 set01URL set02Name set02TextArg:0,1 set02URL set03Name set03TextArg:0,1 set03URL set04Name set04TextArg:0,1 set04URL set05Name set05TextArg:0,1 set05URL set06Name set06TextArg:0,1 set06URL set07Name set07TextArg:0,1 set07URL set10Name set10TextArg:0,1 set10URL set11Name set11TextArg:0,1 set11URL set12Name set12TextArg:0,1 set12URL set15Name set15TextArg:0,1 set15URL set16Name set16URL set17Name set18URL
attr shellyplug_s_h eventMap /switch on:on/switch off:off/switch toggle:toggle
attr shellyplug_s_h extractAllJSON 1
attr shellyplug_s_h get01Name settings
attr shellyplug_s_h get01URL http://shellyplug-s-040E41/settings
attr shellyplug_s_h get02Name status
attr shellyplug_s_h get02URL http://shellyplug-s-040E41/status
attr shellyplug_s_h get03Name settings_relay_0
attr shellyplug_s_h get03URL http://shellyplug-s-040E41/settings/relay/0
attr shellyplug_s_h room HTTPMOD_Device
attr shellyplug_s_h set01Name mqtt_max_qos
attr shellyplug_s_h set01URL http://shellyplug-s-040E41/settings/?mqtt_max_qos=$val
attr shellyplug_s_h set02Name mqtt_retain
attr shellyplug_s_h set02TextArg 1
attr shellyplug_s_h set02URL http://shellyplug-s-040E41/settings/?mqtt_retain=$val
attr shellyplug_s_h set03Name mqtt_update_period
attr shellyplug_s_h set03URL http://shellyplug-s-040E41/settings/?mqtt_update_period=$val
attr shellyplug_s_h set04Name settings_relay_0_default_state
attr shellyplug_s_h set04TextArg 1
attr shellyplug_s_h set04URL http://shellyplug-s-040E41/settings/relay/0/?default_state=$val
attr shellyplug_s_h set05Name settings_relay_0_btn_type
attr shellyplug_s_h set05TextArg 1
attr shellyplug_s_h set05URL http://shellyplug-s-040E41/settings/relay/0/?btn_type=$val
attr shellyplug_s_h set06Name settings_relay_0_auto_on
attr shellyplug_s_h set06URL http://shellyplug-s-040E41/settings/relay/0/?auto_on=$val
attr shellyplug_s_h set07Name settings_relay_0_auto_off
attr shellyplug_s_h set07URL http://shellyplug-s-040E41/settings/relay/0/?auto_off=$val
attr shellyplug_s_h set10Name led_status_disable
attr shellyplug_s_h set10TextArg 1
attr shellyplug_s_h set10URL http://shellyplug-s-040E41/settings/?max_power=$val
attr shellyplug_s_h set11Name led_status_disable
attr shellyplug_s_h set11TextArg 1
attr shellyplug_s_h set11URL http://shellyplug-s-040E41/settings/?led_status_disable=$val
attr shellyplug_s_h set12Name led_power_disable
attr shellyplug_s_h set12TextArg 1
attr shellyplug_s_h set12URL http://shellyplug-s-040E41/settings/?led_power_disable=$val
attr shellyplug_s_h set15Name switch
attr shellyplug_s_h set15TextArg 1
attr shellyplug_s_h set15URL http://shellyplug-s-040E41/relay/0/?turn=$val
attr shellyplug_s_h set16Name timeron
attr shellyplug_s_h set16URL http://shellyplug-s-040E41/relay/0/?timer=$val&turn=on
attr shellyplug_s_h set17Name timeroff
attr shellyplug_s_h set18URL http://shellyplug-s-040E41/relay/0/?timer=$val&turn=off
Am meisten hat mich geärgert, das ich es nicht gerafft habe ob man die URL zum Gerät ein einer Stelle setzen kann und alle set denn relativ angeben kann. Aber in der Doku steht das auch nur absolut.

Ich weiß noch nicht ob es ein Weg wäre, im Falle Shelly, das MQTT Device und das HTTMOD Device "zu kombinieren" um z.B. on-for-timer usw. einfach mit dem HTTPMOD umzusetzen.
Zum normalen Betrieb taugt das HTTPMOD Device für Shelly meiner Meinung nach nicht. Zum Konfigurieren und ein paar Funktionen (Timer) aber schon

Nach dem Urlaub schau ich mir dann mal die Template Geschichte noch weiter an, versprochen. :)
Ich muss an einem von beiden Beispielen lernen, wie man aus seiner Raw Def ein Template strickt :)

Gruß Otto
« Letzte Änderung: 09 November 2019, 14:44:38 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #36 am: 11 November 2019, 13:54:39 »
...Danke mal vorab...

Was die Fragen zu HTTPMOD angeht, solltest du die ggf. separat im "Neue Version.."-Thread stellen, ich bin wie gesagt - eigentlich gar nicht der HTTPMOD-Experte, sondern versuche nur, das template-Thema einigermaßen sinnvoll z kuratieren... Dafür reicht in der Regel eine RAW-Definition von einem funktionierenden Device; um festzustellen, ob sich da was optimieren läßt, reichen meine Kenntnisse der HTTPMOD-Spezifika leider in der Regel nicht (deswegen frage ich ja bei jeder halbwegs sinnvollen Gelegenheit, ob nicht jemand Interesse hat, der weiß, was da möglich ist...).

MMn. macht eine Kombination zwischen MQTT- und HTTPMOD-Welt nicht den großen Sinn, evtl. kann man in MQTT2_DEVICE "etwas Perl" verbauen, um ein paar HTTP-Posts zu setzen. Insgesamt weiß ich nicht recht, inwieweit es sinnvoll ist, z.B. für die Konfiguration einen HTTPMOD zu verwenden statt das direkt in dem Web-Interface (auf das man ohne weiteres vom MQTT2_DEVICE kommt, oder?) einzugeben. Ist ja in der Regel eine Einmalaktion.

 Von RAW nach template ist "eigentlich" einfach. Insbesondere "par:" ist in der Regel "einfach nur etwas regex", der Rest ist entweder selbsterklärend oder eine Übungsfrage (was löst man am besten wie?), bei der die Antwort teilweise sehr stark davon abhängt, was das jeweilige Device "kann".
Um entsprechende Fragen zu erörtern, kannst du gerne auch einen separaten Thread aufmachen (vermutlich sinnvollerweise im MQTT-Bereich).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 361
    • Cyanide & Happiness
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #37 am: 11 November 2019, 14:57:44 »
Hallo,

ich nutze HTTPMOD auch um mir FW-aktualisierungen anzeigen zu lassen - und zwar bisher von ESPEasy und dnscrypt-proxy:

ESPEasy Firmware-Check:
defmod ESPEasy_version HTTPMOD https://github.com/letscontrolit/ESPEasy/releases 86400
attr ESPEasy_version userattr reading01Name reading01Regex
attr ESPEasy_version reading01Name esp_version
attr ESPEasy_version reading01Regex Release (mega-[\d]{8})
attr ESPEasy_version stateFormat {"<p align=\"left\">".ReadingsTimestamp($name,'esp_version','')."<br />Online: <a href=\"https://github.com/letscontrolit/ESPEasy/releases\"\
title=\"ChangeLog\" rel=\"noopener noreferrer\" target=\"_blank\"><b>".ReadingsVal($name,'esp_version','none')."</b></a><br />\
ESP01: <b>".InternalVal('ESP01-Reading1','ESP_BUILD_GIT','-')."</b><br />\
ESP02: <b>".InternalVal('ESP02-Reading1','ESP_BUILD_GIT','-')."</b><br />\
ESP03: <b>".InternalVal('ESP03-Reading1','ESP_BUILD_GIT','-')."</b>\
</p>"}
attr ESPEasy_version timeout 5
Hierbei muss nur bei ESP01: <b>".InternalVal('ESP01-Reading1','ESP_BUILD_GIT','-')."</b> das entsprechende ESP Device ESP01-Reading1 durch ein echtes ESP Device ersetzt werden.

dnscrypt-proxy:
defmod dnscrypt_proxy_version HTTPMOD https://api.github.com/repos/jedisct1/dnscrypt-proxy/releases/latest 86400
attr dnscrypt_proxy_version userattr reading01Name
attr dnscrypt_proxy_version extractAllJSON 1
attr dnscrypt_proxy_version extractAllJSONFilter tag_name
attr dnscrypt_proxy_version stateFormat {"<p align=\"left\">".ReadingsTimestamp($name,'tag_name','')."<br />Online: <a href=\"https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/ChangeLog\"\
title=\"ChangeLog\" rel=\"noopener noreferrer\" target=\"_blank\"><b>".ReadingsVal($name,'tag_name','')."</b></a><br />\
installed: <b>".ReadingsVal($name,'installed_version','')."</b></p>"}
attr dnscrypt_proxy_version userReadings installed_version {ReadingsVal($name,"value","2.0.31");;}
allerdings muss hier die installierte Version manuell angepasst werden (userReading installed_version).

Vielleicht kann man sowas auch in ein Template einbauen. Oder jmd. kann es gebrauchen. Oder verbessern. :)
« Letzte Änderung: 11 November 2019, 14:59:33 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #38 am: 11 November 2019, 16:59:10 »
Vorab mal Danke für den Vorschlag bzw. die Vorschläge.

Zu ESPEasy:
Die Liste in dem stateFormat könnte man vermutlich ähnlich (und automatisiert) zusammenbauen wie bei dem homematic-template (CUL_HM_firmware_update_downloader), allerdings müßte das hier einfacher gehen.
Magst du dich daran mal versuchen, ist mMn. eine gute Perl-Übung  ;) ?
(Sonst finden sich evtl. auch andere ESPEasy-Nutzer, die das interessant finden...?)

Bei dem anderen verstehe ich den Umweg über das userReading im Moment nicht. Warum geht das nicht direkt via "value" (das muß man dann ggf. halt setzen mit setreading (+reload für die Anzeige), ist aber (ohne praktische Erfahrung damit zu haben dem Bauchgefühl nach) besser, als im Attribut rumzueditieren; die Bedienungsanleitung kann man ja z.B. in den comment nehmen).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 361
    • Cyanide & Happiness
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #39 am: 12 November 2019, 10:58:32 »
Die Liste in dem stateFormat könnte man vermutlich ähnlich (und automatisiert) zusammenbauen wie bei dem homematic-template (CUL_HM_firmware_update_downloader), allerdings müßte das hier einfacher gehen.
Magst du dich daran mal versuchen, ist mMn. eine gute Perl-Übung  ;) ?
(Sonst finden sich evtl. auch andere ESPEasy-Nutzer, die das interessant finden...?)
Da bin ich mir gar nicht so sicher, ob sich das sinnvoll umsetzen lässt. Es kann pro ESPEasy ja m devices geben, aber ich habe nur eine ESPEasy Version. (In meinem Fall: 3 ESPs und 8 ESP Devices) perl ist darüberhinaus auch nicht meine Haussprache. ;) Für mich funktioniert es erstmal, vielleicht überkommt es mich und ich pass' das irgendwann an.

Bei dem anderen verstehe ich den Umweg über das userReading im Moment nicht. Warum geht das nicht direkt via "value" (das muß man dann ggf. halt setzen mit setreading (+reload für die Anzeige), ist aber (ohne praktische Erfahrung damit zu haben dem Bauchgefühl nach) besser, als im Attribut rumzueditieren; die Bedienungsanleitung kann man ja z.B. in den comment nehmen).
Für mich war das ein gangbarer Weg mit dem UserReadings; ich meine, direkt den Text "2.0.31" einzugeben ging nicht. Oder ich war zu ungeduldig. Im Prinzip missbrauche ich die Funktion ReadingsVal hier.
Hinzu kommt, dass ich zum einen nicht weiss wie ich die Version des dnscrypt-proxys aus FHEM heraus aufrufe - und ich mir noch nicht einmal sicher bin, ob ich das will.
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #40 am: 12 November 2019, 11:22:00 »
@Beta-User

Hallo,

dies ist ein Vorschlag für die Prüfung auf mögliche Tasmota-Updates (optisch angelehnt an die Homematic-Variante).

defmod DEVICE HTTPMOD https://github.com/arendst/Tasmota/releases/latest 86400
attr DEVICE userattr reading01JSON reading01Name reading01OExpr reading01Regex reading02Name reading02OExpr reading02Regex reading03Name reading03OExpr reading03Regex
attr DEVICE alignTime 10:00
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 1
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex <h2>Changelog</h2>[\w\W]*?<p>Version (\d*.\d*.\d*)\s\d*</p>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})(.{2})(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex <h2>Changelog</h2>[\w\W]*?<p>Version \d*.\d*.\d*\s(\d*)</p>
attr DEVICE room Tasmota
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left">';;\
    $ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">tasmota</a>-check => '.$lastCheck;;\
    $ret .= '<br><br><pre>';;\
    $ret .= "| device                           | current |   new   |  released  |<br>";;\
    $ret .= "---------------------------------------------------------------------<br>";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-32s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</b> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:red">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:black">';;\
        $ret .= sprintf("%-10s",$date);;\
        $ret .= '</b></a>';;\
        $ret .= " |<br>";;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    my $DATE = ReadingsVal($name,"latestDate","unknown");;\
    foreach my $dev (devspec2array("TYPE=MQTT[2]?_DEVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\
      my $version = ReadingsVal($dev,"INFO1_Version","unknown");;\
      $version =~ m/([0-9.]*).*/;;\
      $version = $1;;\
      if($version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #41 am: 12 November 2019, 12:41:30 »
@OdfFhem: Wow, das ging schnell!

Hier dann das ganze mit der vorgesehenen "Einbettung" in die template-file:
name:tasmota_firmware_updates
filter:TYPE=HTTPMOD
desc: Check Tasmota homepage for available new firmware files<br>Define a HTTPMOD device like <br>define tasmotaupdates HTTPMOD https://github.com/arendst/Tasmota/releases/latest 86400<a href="https://forum.fhem.de/index.php/topic,97694.msg992308.html#msg992308">Source: Forum</a>.
order:X_01e
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01JSON reading01Name reading01OExpr reading01Regex reading02Name reading02OExpr reading02Regex reading03Name reading03OExpr reading03Regex
attr DEVICE alignTime 10:00
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 1
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex <h2>Changelog</h2>[\w\W]*?<p>Version (\d*.\d*.\d*)\s\d*</p>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})(.{2})(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex <h2>Changelog</h2>[\w\W]*?<p>Version \d*.\d*.\d*\s(\d*)</p>
attr DEVICE room Tasmota
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left">';;\
    $ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">tasmota</a>-check => '.$lastCheck;;\
    $ret .= '<br><br><pre>';;\
    $ret .= "| device                           | current |   new   |  released  |<br>";;\
    $ret .= "---------------------------------------------------------------------<br>";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-32s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</b> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:red">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:black">';;\
        $ret .= sprintf("%-10s",$date);;\
        $ret .= '</b></a>';;\
        $ret .= " |<br>";;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    my $DATE = ReadingsVal($name,"latestDate","unknown");;\
    foreach my $dev (devspec2array("TYPE=MQTT[2]?_DEVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\
      my $version = ReadingsVal($dev,"INFO1_Version","unknown");;\
      $version =~ m/([0-9.]*).*/;;\
      $version = $1;;\
      if($version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE enableControlSet 1
attr DEVICE model tasmota_firmware_updates
Wäre nett, wenn's vorab nochmal jemand gegentesten könnte, ich habe derzeit keine Tasmota-ESP's im Einsatz... Ansonsten geht das voraussichtlich für morgen ins svn.

Hier noch das andere, mMn. müßte das mit einem userattr genauso funktionieren, aber ich bekomme leider mit meinem Testsystem weder mit yersinias noch mit der template-Version irgendwelche Readings, daher aktualisiert sich das in STATE gar nicht...
name:dnscrypt-proxy_updates
filter:TYPE=HTTPMOD
desc: Show updates for <a href="https://dnscrypt.info/">DNSCRYPT.</a><br>Define a HTTPMOD device like <br>defmod dnscrypt_proxy_version HTTPMOD https://api.github.com/repos/jedisct1/dnscrypt-proxy/releases/latest 86400<br><a href="https://forum.fhem.de/index.php/topic,97694.msg992002.html#msg992002">Source: Forum</a>
order:X_01x
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name myInstalledVersion
attr DEVICE extractAllJSON 1
attr DEVICE extractAllJSONFilter tag_name
attr DEVICE stateFormat {"<p align=\"left\">".ReadingsTimestamp($name,'tag_name','')."<br />Online: <a href=\"https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/ChangeLog\"\
title=\"ChangeLog\" rel=\"noopener noreferrer\" target=\"_blank\"><b>".ReadingsVal($name,'tag_name','')."</b></a><br />\
installed: <b>".AttrVal($name,'myInstalledVersion','')."</b></p>"}
attr DEVICE myInstalledVersion 2.0.31
attr DEVICE room WHICHROOM
attr DEVICE enableControlSet 1
attr DEVICE model dnscrypt-proxy_updates
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #42 am: 12 November 2019, 13:31:35 »
@Beta-User / tasmota_firmware_updates

Noch einige, kleine Anmerkungen ...


Beim userattr haben leider ein paar Altlasten überlebt; sollte besser so aussehen:
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex

Am Ende hast Du ein zweites attr DEVICE enableControlSet 1 eingeschleust - eine von beiden Stellen sollte wegfallen.

Gleiches gilt für den room; da sollte wohl besser meine "Vorgabe" wegfallen.

Fraglich ist außerdem, ob man via Template eine alignTime vorgeben will/soll ... dann prüfen alle zum gleichen Zeitpunkt ... würde ich im Zweifel eher wegfallen lassen, weil dann die nächste Prüfzeit vom ersten Prüfzeitpunkt abhängt ...

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #43 am: 12 November 2019, 13:51:58 »
Thx für die Rückmeldung,

dass ich da was doppelt reingebaut hat, war wir irgendwie entgangen...

Das mit alignTime kann wirklich raus, zumal man das ja bei Bedarf auch manuell anschubsen kann.

Damit werde ich wohl das hier einchecken:
name:tasmota_firmware_updates
filter:TYPE=HTTPMOD
desc: Check Tasmota homepage for available new firmware files<br>Define a HTTPMOD device like <br>define tasmotaupdates HTTPMOD https://github.com/arendst/Tasmota/releases/latest 86400<a href="https://forum.fhem.de/index.php/topic,97694.msg992308.html#msg992308">Source: Forum</a>.
order:X_01e
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 1
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex <h2>Changelog</h2>[\w\W]*?<p>Version (\d*.\d*.\d*)\s\d*</p>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})(.{2})(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex <h2>Changelog</h2>[\w\W]*?<p>Version \d*.\d*.\d*\s(\d*)</p>
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left">';;\
    $ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">tasmota</a>-check => '.$lastCheck;;\
    $ret .= '<br><br><pre>';;\
    $ret .= "| device                           | current |   new   |  released  |<br>";;\
    $ret .= "---------------------------------------------------------------------<br>";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-32s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</b> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:red">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:black">';;\
        $ret .= sprintf("%-10s",$date);;\
        $ret .= '</b></a>';;\
        $ret .= " |<br>";;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    my $DATE = ReadingsVal($name,"latestDate","unknown");;\
    foreach my $dev (devspec2array("TYPE=MQTT[2]?_DEVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\
      my $version = ReadingsVal($dev,"INFO1_Version","unknown");;\
      $version =~ m/([0-9.]*).*/;;\
      $version = $1;;\
      if($version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model tasmota_firmware_updates

Macht vermutlich Sinn, das dann auch noch irgendwo im Wiki zu verlinken, allerdings bin ich unschlüssig, wo (MQTT#Tasmota, ESP8266, Praxisbeispiele?)... (Btw.: Ein Screenshot von dem HTTPMOD "in Aktion" für's/im Wiki wäre hilfreich.).

@yersinia:
Evtl. ist es auf dieser Basis jetzt deutlich einfacher, den Transfer auch für ESPEasy hinzubekommen? (Ich habe aber zugegebenermaßen den Einwand nicht so ganz verstanden, dass die Zahlen/Versionen nicht passen müssen. Das obige template sollte (wenn es ist wie bei HM) immer nur jeweils die Microcontroller anzeigen, die nicht die aktuelle firmware haben und den Rest/die aktuellen gar nicht.)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #44 am: 12 November 2019, 13:58:31 »
@Beta-User / tasmota_firmware_updates

Ich habe Deine Template-Fassung mal getestet und daraus ergibt sich noch eine wichtige Anpassung ...

Die Zeile
foreach my $dev (devspec2array("TYPE=MQTT[2]?_DEVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\
muss durch folgende Zeile ersetzt werden
foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\

Ansonsten wird DEVICE durch den Gerätenamen ersetzt ... und das soll ja nicht passieren.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #45 am: 12 November 2019, 14:07:42 »
Thx, macht doch immer wieder Sinn, das mit Echtdevices zu testen ::) ...

Sowas fällt eher nicht auf, wenn man nur Trockenübungen macht; ohne kommt da halt einfach kein bzw irgendein Ergebnis, das man nicht sinnvoll gg. den Ausgangsstand vergleichen kann.

Damit sollte es dann also so passen:
name:tasmota_firmware_updates
filter:TYPE=HTTPMOD
desc: Check Tasmota homepage for available new firmware files<br>Define a HTTPMOD device like <br>define tasmotaupdates HTTPMOD https://github.com/arendst/Tasmota/releases/latest 86400<a href="https://forum.fhem.de/index.php/topic,97694.msg992308.html#msg992308">Source: Forum</a>.
order:X_01e
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 1
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex <h2>Changelog</h2>[\w\W]*?<p>Version (\d*.\d*.\d*)\s\d*</p>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})(.{2})(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex <h2>Changelog</h2>[\w\W]*?<p>Version \d*.\d*.\d*\s(\d*)</p>
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left">';;\
    $ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">tasmota</a>-check => '.$lastCheck;;\
    $ret .= '<br><br><pre>';;\
    $ret .= "| device                           | current |   new   |  released  |<br>";;\
    $ret .= "---------------------------------------------------------------------<br>";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-32s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</b> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:red">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:black">';;\
        $ret .= sprintf("%-10s",$date);;\
        $ret .= '</b></a>';;\
        $ret .= " |<br>";;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    my $DATE = ReadingsVal($name,"latestDate","unknown");;\
    foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\
      my $version = ReadingsVal($dev,"INFO1_Version","unknown");;\
      $version =~ m/([0-9.]*).*/;;\
      $version = $1;;\
      if($version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model tasmota_firmware_updates
(Wer jetzt TASMOTA_DEVICE nutzt, muß das halt entsprechend anpassen bzw. zu MQTT2_DEVICE wechseln :P ).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 361
    • Cyanide & Happiness
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #46 am: 12 November 2019, 17:31:42 »
Bezgl dnscrypt-proxy läuft das bei mir sehr gut. HTTPMOD filtert den tag_name automatisch aus dem JSON und generiert daraus ein Reading.
defmod dnscrypt_proxy_version HTTPMOD https://api.github.com/repos/jedisct1/dnscrypt-proxy/releases/latest 86400
attr dnscrypt_proxy_version userattr myInstalledVersion
attr dnscrypt_proxy_version extractAllJSON 1
attr dnscrypt_proxy_version extractAllJSONFilter tag_name
attr dnscrypt_proxy_version myInstalledVersion 2.0.31
attr dnscrypt_proxy_version stateFormat {"<p align=\"left\">".ReadingsTimestamp($name,'tag_name','')."<br />Online: <a href=\"https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/ChangeLog\"\
title=\"ChangeLog\" rel=\"noopener noreferrer\" target=\"_blank\"><b>".ReadingsVal($name,'tag_name','')."</b></a><br />\
my installed Version: <b>".AttrVal($name,'myInstalledVersion','')."</b></p>"}
« Letzte Änderung: 13 November 2019, 09:08:36 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 361
    • Cyanide & Happiness
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #47 am: 12 November 2019, 18:49:12 »
So, ich hab mal bei OdfFHEM abgeschrieben - jetzt sieht der ESPEasy FW Check analog zum Tasmota bzw Homemativ FW Check aus:
defmod ESPEasy_fw_check HTTPMOD https://github.com/letscontrolit/ESPEasy/releases 86400
attr ESPEasy_fw_check userattr reading01Name reading01Regex
attr ESPEasy_fw_check enableControlSet 1
attr ESPEasy_fw_check event-on-change-reading .*
attr ESPEasy_fw_check event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr ESPEasy_fw_check handleRedirects 1
attr ESPEasy_fw_check reading01Name latestVersion
attr ESPEasy_fw_check reading01Regex Release mega-([\d]{8})
attr ESPEasy_fw_check showError 1
attr ESPEasy_fw_check showMatched 1
attr ESPEasy_fw_check stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left;;">';;\
    $ret .= 'last <a href="https://github.com/letscontrolit/ESPEasy" title="ESPEasy" rel="noopener noreferrer" target="_blank">ESPEasy</a> version check => '.$lastCheck;;\
    $ret .= '<br /><br /><pre>';;\
    $ret .= "| device                                       | current  |   new    | <br />";;\
    $ret .= "---------------------------------------------------------------------- <br />";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-44s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray;;">';;\
$ret .= '<a href="https://github.com/letscontrolit/ESPEasy/releases/tag/mega-'.$old.'" title="ESPEasy Release mega-'.$old.'" rel="noopener noreferrer" target="_blank">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</a></b> | ';;\
        $ret .= '<a href="https://github.com/letscontrolit/ESPEasy/releases/tag/mega-'.$new.'" title="ESPEasy Release mega-'.$new.'" rel="noopener noreferrer" target="_blank">';;\
        $ret .= '<b style="color:red;;">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> |<br />';;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr ESPEasy_fw_check timestamp-on-change-reading .*
attr ESPEasy_fw_check userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    foreach my $dev (devspec2array("TYPE=ESPEasy:FILTER=HOST!=bridge")) {\
      my $version = InternalVal($dev,"ESP_BUILD_GIT","unknown");;\
      $version =~ m/([\d]{8})/;;\
      $version = $1;;\
      if($version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr ESPEasy_fw_check webCmd reread

Danke an OdfFHEM und Beta-User :D
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #48 am: 13 November 2019, 08:21:06 »
 :)
Danke für die Rückmeldung. Das ganze ist jetzt via update verfügbar, nochmaliges kurzes Gegenchecken wäre nett...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 361
    • Cyanide & Happiness
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #49 am: 13 November 2019, 09:08:20 »
Cool, Danke @Beta-User!

Eine Anmerkung habe ich noch: ich benutze anstelle von myInstalledVersion das userattr pihole_version - weil mein dnscrypt-proxy auf dem pihole raspi läuft. Sinnhafterweise wäre aber myInstalledVersion besser; das ist mir beim kopieren allerdings unterlaufen. Korrigierte Version oben, betrifft aber auch nur:
attr dnscrypt_proxy_version userattr myInstalledVersion
attr dnscrypt_proxy_version myInstalledVersion 2.0.31
attr dnscrypt_proxy_version stateFormat {"<p align=\"left\">".ReadingsTimestamp($name,'tag_name','')."<br />Online: <a href=\"https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/ChangeLog\"\
title=\"ChangeLog\" rel=\"noopener noreferrer\" target=\"_blank\"><b>".ReadingsVal($name,'tag_name','')."</b></a><br />\
my installed Version: <b>".AttrVal($name,'myInstalledVersion','')."</b></p>"}
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #50 am: 13 November 2019, 10:59:43 »
 ;D ... und ich hatte angenommen, du wolltest mir mit dem list noch was (an Verbesserungsmöglichkeiten) mitteilen ;D .

Korrigiere ich bei Gelegenheit, ist ja vermutlich eh' so, dass viele die pihole-Variante nutzen  (das template wäre fast so benannt worden...)

Bei der Gelegenheit vielleicht noch zwei generelle Anmerkungen:
- v.a., wenn es schon template-Code gibt, ist es für mich einfacher, wenn hier (kompletter) korrigierter template-Code zurückkommt (muß kein diff sein, so wie im Betrag von OdfFhem von 11:22 gestern ist völlig ausreichend, wenn der "Kopf" schon steht, gerne dann auch mit dem)
- manchmal ist vollständiger RAW-Code hilfreich. Damit kann man ein Device auch in einem Testsystem anlegen (und sehen!), ohne dass dort z.B. ESPEasy oder Tasmota-Geräte vorhanden sein müßten (ist hier nicht notwendig, das HM-Dingens kenne ich aus eigender Anschauung).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}
Zustimmung Zustimmung x 1 Liste anzeigen

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #51 am: 02 Dezember 2019, 07:46:30 »
@Beta-User

Immer wieder schön: kaum hat man was in ein Template gegossen bzw. giessen lassen, schon wird die Tasmota-Benamungstheorie geändert. Jetzt haben die Releases scheinbar keine Datumsverklauslierung mehr als Name, sondern echte Namen. Das neueste Release v7.1.1 heißt nun nicht mehr nach dem bekannten Schema "20191201", sondern "Betty". Dadurch klappt die automatische Auswertung nicht mehr und es müssen ein paar Änderungen vorgenommen werden.

  • Um ans Datum zu kommen, musste die URL geändert werden; damit sollte hier auch ein defmod ins Template übernommen werden (wie z.B. bei eq3). Evtl. sollte man das aktuell geltende Aktualisierungsintervall aus einem schon existierenden FHEM-Device auslesen und übernehmen.
  • Es ist momentan kein Redirect-Handling mehr nötig; um es bei vorhandenen FHEM-Devices abzuschalten, bitte so übernehmen.
  • Die gewünschten Readings sind nun leicht anders zu ermitteln.

defmod DEVICE HTTPMOD https://github.com/arendst/Tasmota/tags 604800
attr DEVICE handleRedirects 0
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex commit-title">[\w\W]*?<a href=".*">[\w\W]*?v(\d*.\d*.\d*)[\w\W]*?</a>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})-(.{2})-(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex relative-time[\w\W]*?datetime="(\d*-\d*-\d*)T\d*:\d*:\d*Z"

Mal schauen, wie lange diese Theorie anwendbar ist ...

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #52 am: 02 Dezember 2019, 09:37:49 »
Ja ja, so ist das mit den updates...

Vielleicht eine Anmerkung für die Allgemeinheit: Es mag nicht jedermanns Sache sein, im svn zu wühlen, aber in der Regel gibt es bzgl. Änderungen, die nicht nur kosmetischer Natur sind, auch einen kurzen Kommentar. Diese kann man über die Änderungshistorie des einzelnen Files, z.B. https://svn.fhem.de/trac/log/trunk/fhem/FHEM/lib/AttrTemplate/httpmod.template aufrufen.

Daher werde ich in das General_Info dann mal einen link reinbasteln, über den das schnell zu erreichen ist:
name:General_Info
filter:TYPE=HTTPMOD
desc: Forum <a href="https://forum.fhem.de/index.php/topic,97694.0.html">link</a> for suggestions or bug reports on httpmod-template.<br>For changes and updates on this file, see <a href="https://svn.fhem.de/trac/log/trunk/fhem/FHEM/lib/AttrTemplate/httpmod.template">svn changelog</a>. In most cases, major changes will be mentionned there.
order:00000000

Wäre nett, wenn ihr Rückmeldung geben könntet, ob das ein gangbarer Weg ist, um wenigstens für etwas (schnell für alle auf demselben Weg zu findende) Transparenz zu sorgen...?

Was das Tasmota-Thema angeht, finde ich den Vorschlag gut, das Intervall für den defmod zu übernehmen. Als Trockenübung müßte das hier funktionieren:
#Contributed by OdfFHEM, see https://forum.fhem.de/index.php/topic,97694.msg992348.html#msg992348
name:tasmota_firmware_updates
filter:TYPE=HTTPMOD
desc: Check Tasmota homepage for available new firmware files<br>Define a HTTPMOD device like <br>define tasmotaupdates HTTPMOD https://github.com/arendst/Tasmota/tags 86400<a href="https://forum.fhem.de/index.php/topic,97694.msg992308.html#msg992308">Source: Forum</a>.
order:X_01e
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to one day; {InternalVal("DEVICE","DEF",undef)=~ m,\s([\d]+)\s?, ? $1 : 86400}
defmod DEVICE HTTPMOD https://github.com/arendst/Tasmota/tags INTERVAL
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 0
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex commit-title">[\w\W]*?<a href=".*">[\w\W]*?v(\d*.\d*.\d*)[\w\W]*?</a>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})-(.{2})-(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex relative-time[\w\W]*?datetime="(\d*-\d*-\d*)T\d*:\d*:\d*Z"
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left">';;\
    $ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">tasmota</a>-check => '.$lastCheck;;\
    $ret .= '<br><br><pre>';;\
    $ret .= "| device                           | current |   new   |  released  |<br>";;\
    $ret .= "---------------------------------------------------------------------<br>";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-32s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</b> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:red">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<a href="https://github.com/arendst/Tasmota/releases/tag/v'.$new.'">';;\
        $ret .= '<b style="color:black">';;\
        $ret .= sprintf("%-10s",$date);;\
        $ret .= '</b></a>';;\
        $ret .= " |<br>";;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    my $DATE = ReadingsVal($name,"latestDate","unknown");;\
    foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\
      my $version = ReadingsVal($dev,"INFO1_Version","unknown");;\
      $version =~ m/([0-9.]*).*/;;\
      $version = $1;;\
      if($version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model tasmota_firmware_updates
Wäre nett, wenn jemand Rückmeldung geben könnte, ob das paßt, dann übernehme ich das auch für den CUL_HM-defmod.

Danke auf alle Fälle für den Update, @OdfFhem!

Gruß, Beta-User
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #53 am: 02 Dezember 2019, 11:01:21 »
@Beta-User

Test hat funktioniert - alles im grünen Bereich.

Übrigens gibt es auch InternalVal("DEVICE","Interval",86400), aber mir persönlich gefallen reguläre Ausdrücke auch besser ;)

Fraglich ist aus meiner Sicht noch, ob man nicht auch hier standardmäßig auf wöchentliches Prüfen reduziert. Nur, wer ganz nah am Puls der Zeit sein will, wird wahrscheinlich die tägliche, stündliche, ... Prüfung brauchen.
Zustimmung Zustimmung x 1 Liste anzeigen

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #54 am: 02 Dezember 2019, 11:15:17 »
Thx für's Gegenchecken.

Werde das dann ohne regex ( ;D ::) ) machen, mit einer Woche als Intervall und in die CUL_HM-Geschichte ebenfalls einbauen. Wäre fast die Frage, ob man das nicht zwangsweise auf "lange" (oder "0" ?) stellt, dann man kann ja (denke ich doch), immer noch ein reread manuell auslösen, wenn einen das "jetzt" interessiert (z.B., weil man grade Zeit und Lust für Updates hat; "0" ist nur nicht so toll, wenn man das auch als Statusanzeige irgendwo einbauen will)...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #55 am: 03 Dezember 2019, 10:18:50 »
@Beta-User

Es war zu befürchten: Der Wechsel der Hauptversion hat noch mehr Änderungen mit sich gebracht. Heute habe ich mal ein Gerät auf die neueste Version gebracht und schon stellte ich fest, dass die über MQTT transportierte Versionierung nun nicht mehr das Wort "sonoff" enthält, sondern schlicht "tasmota". Das macht die Match-Regel unbrauchbar und bedarf eines allgemeiner gehaltenen RegEx.

Da in letzter Zeit schon öfter der Wunsch geäußert wurde, alle und nicht nur die updatefähigen Geräte im Blick zu halten, habe ich noch ein neues user-Attribut updatableDevicesMode ergänzt - Benamung in Anlehnung an das relevante userReading updatableDevices. Über dieses Attribut kann die Aufbereitung einfach umgeschaltet werden, so dass keine Quell-Code-Änderung mehr notwendig ist; ein reread bleibt einem jedoch nicht erspart. Wäre natürlich schön, bei evtl. vorhandenem Gerät den schon vorhandenen Wert für updatableDevicesMode beizubehalten. Als weitere Folge wird bei nicht updatefähige Geräten die neue Version im stateFormat nicht rot, sondern schwarz eingefärbt.

+ par:UPDATABLEDEVICESMODE;Actual mode for updatableDevices, defaults to onlyUpdatable; {AttrVal("DEVICE","updatableDevicesMode","onlyUpdatable")}

- attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex
+ attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex updatableDevicesMode:onlyUpdatable,all

- $ret .= '<b style="color:red">';;\
+ $ret .= '<b style="color:'.(($new eq $old)?'black':'red').'">';;\

+ < attr DEVICE updatableDevicesMode UPDATABLEDEVICESMODE

- foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=INFO1_Version=.*\\(.*sonoff\\)")) {\
- my $version = ReadingsVal($dev,"INFO1_Version","unknown");;\
+ foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=INFO1_Version!=")) {\
+ my $version = ReadingsVal($dev,"INFO1_Version","0.0.0");;\

- if($version ne $VERSION) {\
+ if ((AttrVal($name,"updatableDevicesMode","onlyUpdatable") eq "all") || ($version ne $VERSION)) {\


Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #56 am: 03 Dezember 2019, 10:50:05 »
Thx, hab's eingearbeitet, mal schauen, ob ich das (zusammen mit einigem anderem) in den update-Zyklus für morgen bekomme.

M.E. kann man hier ein paar Klammern sparen, oder?
+ if ( AttrVal($name,"updatableDevicesMode","onlyUpdatable") eq "all" || $version ne $VERSION ) {\
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #57 am: 03 Dezember 2019, 11:18:12 »
@Beta-User

Auch der überarbeitete Vorschlag führt zum Ziel ... meine Klammerung ist einfach nur Gewohnheit.



Ich habe übrigens auch noch einen Template-Vorschlag für Updates zu zigbee2mqtt ... interessant?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #58 am: 03 Dezember 2019, 11:28:17 »
Ich habe übrigens auch noch einen Template-Vorschlag für Updates zu zigbee2mqtt ... interessant?
Klar.

Ist das HTTPMOD oder MQTT2_DEVICE? (Im 2. Fall bitte im entsprechenden Thread)...

Zitat
Auch der überarbeitete Vorschlag führt zum Ziel ... meine Klammerung ist einfach nur Gewohnheit.
...diese Angewohnheit, lieber zu viele Klammern zu machen, hatte ich auch mal, als ich noch mit DOIF rumexperimentiert hatte ;D . In der Regel ist es aber ohne unnötige Klammern besser lesbar, daher mache ich die lieber weg...
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #59 am: 03 Dezember 2019, 12:05:37 »
@Beta-User

Ist HTTPMOD; hierbei geht es um die serverseitig laufende Software.

In einem weiteren Schritt müsste man auch noch Firmware-Versionen für einen Stick prüfen. Dies gestaltet sich aber schwierig, da es mittlerweile einen zu bunten Strauß von Versionen gibt ... daher erstmal schieben. Die serverseitig laufende Software kooperiert zum Glück meist auch mit "älteren" Stick-Firmware-Versionen.

#Contributed by OdfFHEM, see ????????????????????????
?????????? name:zigbee2mqtt_updates
filter:TYPE=HTTPMOD
?????????? desc: Check zigbee2mqtt homepage for new versions<br>Define a HTTPMOD device like <br>define zigbee2mqtt_updates HTTPMOD https://github.com/Koenkk/zigbee2mqtt/tags 604800<a href="????????????????????????">Source: Forum</a>.
?????????? order:X_01e
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to one day; {InternalVal("DEVICE","Interval",604800)}
par:UPDATABLEDEVICESMODE;Actual mode for updatableDevices, defaults to onlyUpdatable; {AttrVal("DEVICE","updatableDevicesMode","onlyUpdatable")}
defmod DEVICE HTTPMOD https://github.com/Koenkk/zigbee2mqtt/tags INTERVAL
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex updatableDevicesMode:onlyUpdatable,all
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 0
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex commit-title">[\w\W]*?<a href=".*">[\w\W]*?(\d*\.\d*\.\d*)[\w\W]*?</a>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})-(.{2})-(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex relative-time[\w\W]*?datetime="(\d*-\d*-\d*)T\d*:\d*:\d*Z"
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left">';;\
    $ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">ZigBee</a>-check => '.$lastCheck;;\
    $ret .= '<br><br><pre>';;\
    $ret .= "| device                           | current |   new   |  released  |<br>";;\
    $ret .= "---------------------------------------------------------------------<br>";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-32s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</b> | ';;\
        $ret .= '<a href="https://github.com/Koenkk/zigbee2mqtt/releases/tag/'.$new.'">';;\
        $ret .= '<b style="color:'.(($new eq $old)?'black':'red').'">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<a href="https://github.com/Koenkk/zigbee2mqtt/releases/tag/'.$new.'">';;\
        $ret .= '<b style="color:black">';;\
        $ret .= sprintf("%-10s",$date);;\
        $ret .= '</b></a>';;\
        $ret .= " |<br>";;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr DEVICE updatableDevicesMode UPDATABLEDEVICESMODE
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    my $DATE = ReadingsVal($name,"latestDate","unknown");;\
    foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=permit_join!=")) {\
      my $version = ReadingsVal($dev,"version","0.0.0");;\
      $version =~ m/([0-9.]*).*/;;\
      $version = $1;;\
      if (AttrVal($name,"updatableDevicesMode","onlyUpdatable") eq "all" || $version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
?????????? attr DEVICE model zigbee2mqtt_updates

Es sind übrigens noch ein paar Fragezeichen übriggeblieben ...
« Letzte Änderung: 03 Dezember 2019, 12:07:17 von OdfFhem »

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #60 am: 03 Dezember 2019, 12:24:52 »
Na ja, viele Fragezeichen sind es nicht mehr...

Wenn "wir" das mit der firmware nicht in denselben HTTPMOD bekommen, würde ich vorschlagen, den Namen um "daemon" zu erweitern, das ganze ergäbe dann:
#Contributed by OdfFHEM, see https://forum.fhem.de/index.php/topic,97694.msg998835.html#msg998835
name:zigbee2mqtt_daemon_updates
filter:TYPE=HTTPMOD
desc: Check zigbee2mqtt homepage for new versions of the deamon software.<br>Define a HTTPMOD device like <br>define zigbee2mqtt_updates HTTPMOD https://github.com/Koenkk/zigbee2mqtt/tags 604800<br>
<a href="https://forum.fhem.de/index.php/topic,97694.msg998835.html#msg998835">Source: Forum</a>.
order:X_01f
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to one day; {InternalVal("DEVICE","Interval",604800)}
par:UPDATABLEDEVICESMODE;Actual mode for updatableDevices, defaults to onlyUpdatable; {AttrVal("DEVICE","updatableDevicesMode","onlyUpdatable")}
defmod DEVICE HTTPMOD https://github.com/Koenkk/zigbee2mqtt/tags INTERVAL
attr DEVICE userattr reading01Name reading01Regex reading02Name reading02OExpr reading02Regex updatableDevicesMode:onlyUpdatable,all
attr DEVICE enableControlSet 1
attr DEVICE event-on-change-reading .*
attr DEVICE event-on-update-reading LAST_ERROR,MATCHED_READINGS
attr DEVICE handleRedirects 0
attr DEVICE reading01Name latestVersion
attr DEVICE reading01Regex commit-title">[\w\W]*?<a href=".*">[\w\W]*?(\d*\.\d*\.\d*)[\w\W]*?</a>
attr DEVICE reading02Name latestDate
attr DEVICE reading02OExpr $val =~ m/^(.{4})-(.{2})-(.{2})$/ ;; "$3.$2.$1"
attr DEVICE reading02Regex relative-time[\w\W]*?datetime="(\d*-\d*-\d*)T\d*:\d*:\d*Z"
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE stateFormat {   my $ret ="";;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;\
    $ret .= '<div style="text-align:left">';;\
    $ret .= 'last <a title="versions" href="'.InternalVal($name,"MainURL","unknown").'">ZigBee</a>-check => '.$lastCheck;;\
    $ret .= '<br><br><pre>';;\
    $ret .= "| device                           | current |   new   |  released  |<br>";;\
    $ret .= "---------------------------------------------------------------------<br>";;\
    my $check = ReadingsVal($name,"updatableDevices","error => no or wrong data from server!");;\
    if($check eq "no updates needed!") {\
      $ret .= '| <b style="color:green">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } elsif($check eq "error => no or wrong data from server!") {\
      $ret .= '| <b style="color:red">';;\
      $ret .= sprintf("%-65s",$check);;\
      $ret .= '</b> |';;\
    } else {\
      my @devices = split(',',$check);;\
      foreach my $devStr (@devices) {\
        my ($dev,$old,$new,$date) = $devStr =~ m/^([^\s]+)\s\(([^\s]+)\s\|\s([^\s]+)\s\|\s([^\)]+)\)$/;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'"><b>';;\
        $ret .= sprintf("%-32s",$dev);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</b> | ';;\
        $ret .= '<a href="https://github.com/Koenkk/zigbee2mqtt/releases/tag/'.$new.'">';;\
        $ret .= '<b style="color:'.(($new eq $old)?'black':'red').'">';;\
        $ret .= sprintf("%7s",$new);;\
        $ret .= '</b></a> | ';;\
        $ret .= '<a href="https://github.com/Koenkk/zigbee2mqtt/releases/tag/'.$new.'">';;\
        $ret .= '<b style="color:black">';;\
        $ret .= sprintf("%-10s",$date);;\
        $ret .= '</b></a>';;\
        $ret .= " |<br>";;\
      }\
    }\
    $ret .= '</pre></div>';;\
  return $ret;;\
}
attr DEVICE updatableDevicesMode UPDATABLEDEVICESMODE
attr DEVICE timestamp-on-change-reading .*
attr DEVICE userReadings updatableDevices:MATCHED_READINGS.* {\
  my $ret = "";;\
  if (ReadingsVal($name,"MATCHED_READINGS","") eq "") {\
    $ret = "error => no or wrong data from server!";;\
  } else {\
    my $VERSION = ReadingsVal($name,"latestVersion","unknown");;\
    my $DATE = ReadingsVal($name,"latestDate","unknown");;\
    foreach my $dev (devspec2array("TYPE=MQTT[2]?_[D]EVICE:FILTER=permit_join!=")) {\
      my $version = ReadingsVal($dev,"version","0.0.0");;\
      $version =~ m/([0-9.]*).*/;;\
      $version = $1;;\
      if (AttrVal($name,"updatableDevicesMode","onlyUpdatable") eq "all" || $version ne $VERSION) {\
        $ret .= "," if($ret ne "");;\
        $ret .= $dev." (".$version." | ".$VERSION." | ".$DATE.")";;\
      }\
    }\
  }\
  return ($ret eq "")?"no updates needed!":$ret;;\
}
attr DEVICE webCmd reread
attr DEVICE room WHICHROOM
attr DEVICE model zigbee2mqtt_daemon_updates

In die mqtt2.template-file würde ich dann zu zigbee2mqtt_bridge noch folgendes anfügen?
attr DEVICE comment To check for new updates of the deamon software, you might want to use a separate HTTPMOD device. See HTTPMOD template zigbee2mqtt_daemon_updates for further details.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #61 am: 03 Dezember 2019, 13:02:34 »
@Beta-User

Die Firmware müsste man vermutlich in mehreren HTTPMOD abhandeln, da die Firmware pro verwendetem Chip / pro Einsatzzweck / pro Zigbee-Protokoll-Version zu unterscheiden ist. Bislang schaue ich "automatisch" nach neuer Firmware nur, wenn es neue Server-Software gibt oder ich ein Problem mit der aktuellen Firmware habe ... zum Glück ein eher seltenes Unterfangen.

Einen Namenszusatz zu verwenden finde ich gut und ein bisschen "Werbung" im MQTT-Bereich schadet ja nicht ...

Offline Romoker

  • Full Member
  • ***
  • Beiträge: 112
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #62 am: 03 Januar 2020, 09:47:53 »
Mit dem Attribut-Template DWD_weather_warnings wurden die aktuellen DWD-Warnungen zu meinem REGIONCODE als Readings wunderbar angelegt.
Wie bekomme ich es hin, dass die Readings wieder gelöscht werden, wenn die DWD-Warnungen nicht mehr existent sind?
Es gibt ja das Attribut DeleteIfUnmatched. Aber wie wende ich das auf die generierten JSON-Readings an?

Viele Grüße
BeagleBoneBlack mit Debian; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, SOMFY, 1-Wire, Z-Wave, SmartPlugs von Sonoff und Shelly mit MQTT

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #63 am: 03 Januar 2020, 09:57:43 »
Würde mal (ungetestet) auf
attr DEVICE readingMaxAge 10
attr DEVICE readingMaxAgeReplacementMode delete
tippen (analog einiger anderer attrTemplate). Das scheint (nach Zeitablauf, hier 10 sec. nach dem Parsen) schlicht alle Readings zu löschen, die es nicht mehr gibt.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Romoker

  • Full Member
  • ***
  • Beiträge: 112
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #64 am: 03 Januar 2020, 10:39:25 »
Danke - funktioniert.

Ich schlage vor die zwei Attribute mit in das Template DWD_weather_warnings aufzunehmen.

Viele Grüße
BeagleBoneBlack mit Debian; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, SOMFY, 1-Wire, Z-Wave, SmartPlugs von Sonoff und Shelly mit MQTT

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #65 am: 05 Januar 2020, 06:34:30 »
THX, ist ab nachher via update verfügbar.
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Panik

  • Full Member
  • ***
  • Beiträge: 133
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #66 am: 21 Januar 2020, 08:49:44 »
Hallo Beta-User

ich habe in einem anderen Forumsblock eine Frage gestellt, die wohl besser hier aufgehoben wäre:
https://forum.fhem.de/index.php/topic,107454.msg1015106.html#msg1015106

Da geht es um das HTTPMOD Template DWD_weather_warnings und eine Umformatierung eines Unix-Zeitstempels

Wie kann man denn das readingFormat so universell anwenden, dass es nur auf die
warnings_109187000_0x_end und warnings_109187000_0x_start wirkt, die ja auch mal
in der Anzahl mehr oder weniger oft vorhanden sein können.

Der Wert des dortigen Unix-Zeitstempels sollte so ähnlich formatiert sein: localtime(TIMESTAMP)

Cubietruck (mit FHEM),  FHEM 5.5 von fhem.de (root), Perl v5.12.2 , CUL USB V3 mit V 1.57 CUL868, TRXRFX433, FB7490

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #67 am: 21 Januar 2020, 09:51:31 »
Hi Panik,

ob das besser hier aufgehoben ist, sei mal dahingestellt, was HTTPMOD angeht, bin ich auch eher "Not-Maintainer"... ;D

Vermutlich ist das Thema am besten im allg. HTTPMOD-Thread aufgehoben, sollten wir hier nicht Ansatzpunkte finden. Wenn ich es richtig verstanden habe, soll eigentlich der Readingwert in den zwei Fällen direkt weiterverarbeitet werden (durch 1000 teilen (ggf. int davon) und dann in
FmtDateTime() umgewandelt werden).

Das sieht mir nach einem etwas komplexeren coding für ein (get|reading)[0-9]*OExpr-Attribut aus...

Hilft dir dieses Stichwort schon weiter?

(Evtl. gibt es hier ja jemanden, der damit etwas mehr Erfahrung hat wie meinereiner, der das austesten könnte...?)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Panik

  • Full Member
  • ***
  • Beiträge: 133
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #68 am: 21 Januar 2020, 15:33:47 »
Hallo Beta-User,

defmod Wetterwarnungen_rg readingsGroup .*:.*[Ww]arnings.*
attr Wetterwarnungen_rg group Wetter
attr Wetterwarnungen_rg room Wetter
attr Wetterwarnungen_rg timestampStyle style="color: silver"
attr Wetterwarnungen_rg valueFormat {return FmtDateTime($VALUE/1000) if( $READING =~ "end" );;;;return FmtDateTime($VALUE/1000) if( $READING =~ "start" );;;;}

Vom HTTPMOD-Maintainer bekam ich die Empfehlung, es hier zu versuchen
bzw. readingFormat zu verwenden.

mit readingFormat ist leider so ein Konstrukt wie ich es in der RG mit valueFormat umsetzen konnte nicht möglich.
Cubietruck (mit FHEM),  FHEM 5.5 von fhem.de (root), Perl v5.12.2 , CUL USB V3 mit V 1.57 CUL868, TRXRFX433, FB7490

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #69 am: 21 Januar 2020, 16:30:33 »
Ok, ich gebe mich geschlagen ;D ...

Versuch's mal mit
attr Wetterwarner readingOExpr $val = FmtDateTime($val/1000) if $val =~ m/^[\d]+$/g && $val >10000;;;;$val
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Panik

  • Full Member
  • ***
  • Beiträge: 133
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #70 am: 22 Januar 2020, 05:38:02 »
BINGO!

Danke!

Ich wusste doch, da geht was in den Attributen.
An den Trick ">10000" hat ich auch schon gedacht, um die richtigen Werte zu bearbeiten.  ;)
Cubietruck (mit FHEM),  FHEM 5.5 von fhem.de (root), Perl v5.12.2 , CUL USB V3 mit V 1.57 CUL868, TRXRFX433, FB7490

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 361
    • Cyanide & Happiness
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #71 am: 01 Februar 2020, 14:56:24 »
Hallo Beta-User,

hier zwei neue Template Vorschläge - bitte mal auf Fehler prüfen und bei gefallen übrnehmen.

neuer homematic fw check
#Contributed by Pfriemler & yersinia, see https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327
name:hm_fw_check_v2
filter:TYPE=HTTPMOD
desc: check for homematic firmware updates; based on new link provided by Pfriemler (switch from eq-3.de to update.homematic.com)<br>Define a HTTPMOD device like <br>define hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400<a href="https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327">Source: Forum</a>
order:X_01a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to one day (86400s); {InternalVal("DEVICE","Interval",86400)}
defmod DEVICE HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE INTERVAL
attr DEVICE userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr DEVICE enableControlSet 1
attr DEVICE icon hm_ccu
attr DEVICE reading01AutoNumLen 2
attr DEVICE reading01Name hmfw-type
attr DEVICE reading01RegOpt g
attr DEVICE reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr DEVICE reading02AutoNumLen 2
attr DEVICE reading02Name hmfw-version
attr DEVICE reading02RegOpt g
attr DEVICE reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr DEVICE readingMaxAge 10
attr DEVICE readingMaxAgeReplacementMode delete
attr DEVICE room WHICHROOM
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE showNewFWOnly yes
attr DEVICE stateFormat {   my $ret ="";;;;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\
    $ret .= '<div style="text-align:left">';;;;\
    $ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;;;\
    $ret .= '<br><br><pre>';;;;\
    $ret .= "| device                         | model                   | cur_fw | new_fw |<br>";;;;\
    $ret .= "------------------------------------------------------------------------------<br>";;;;\
    my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\
    if($check eq "no fw-updates needed!") {\
      $ret .= '| <b style="color:green">';;;;\
      $ret .= sprintf("%-74s",$check);;;;\
      $ret .= '</b> |';;;;\
    } elsif($check eq "error => no or wrong data from eq3-server!") {\
      $ret .= '| <b style="color:red">';;;;\
      $ret .= sprintf("%-74s",$check);;;;\
      $ret .= '</b> |';;;;\
    } else {\
      my @devices = split(',',$check);;;;\
      foreach my $devStr (@devices) {\
        my ($dev,$md,$idx,$ofw,$nfw) = $devStr =~ m/([^\s]+)\s[(]([^\s]+)\s[(](\d+)[)]\sofw_([\d\.]+)\s=>\snfw_([\d\.]+)/;;;;\
        my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'" target="_blank"><b>';;;;\
        $ret .= sprintf("%-30s",$dev);;;;\
        $ret .= '</b></a> | ';;;;\
        $ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow;;"':' style="color:lightgray;;"').'>';;;;\
        $ret .= sprintf("%-23s",$md);;;;\
        $ret .= '</b> | ';;;;\
        $ret .= '<b'.(($ofw eq "0.0")?' title="missing attribute firmware => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray;;"').'>';;;;\
        $ret .= sprintf("%6s",$ofw);;;;\
        $ret .= '</b> | ';;;;\
        $ret .= '<a title="download firmware file" href="'.$fw_link.'" target="_blank"><b style="color:red;;">';;;;\
        $ret .= sprintf("%6s",$nfw);;;;\
        $ret .= '</b></a> | ';;;;\
        $ret .= "<br />";;;;\
      }\
    }\
    $ret .= '</pre></div>';;;;\
  return $ret;;;;\
}
attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\
  my $ret = "";;;;\
  my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;;;\
  if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
    my @eq3FwList = map { \
sprintf(ReadingsVal($name,"hmfw-type-".$_,"?").":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;;;\
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d)/g;;;;\
\
foreach my $dev (devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)")) {\
      my $md = AttrVal($dev,"model","?");;;;\
      my $v = AttrVal($dev,"firmware","0.0");;;;\
      my ($h,$l) = split('\.',$v);;;;\
      foreach my $newFW (grep m/^${md}:/i,@eq3FwList) {\
my ($fwmd, $fwv, $idx) = $newFW =~ m/([^:]+):(\d+[.]\d+[.]\d+):(\d+)$/;;;;\
my ($fwh, $fwl) = split('\.',$fwv);;;;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
          $ret .= "," if($ret ne "");;;;\
  $ret .= $dev." (".$md." (".$idx.") ofw_".$v." => nfw_".$fwv.")";;;;\
        }\
      }\
    }\
  } else {\
    $ret = "error => no or wrong data from eq3-server!";;;;\
  }\
  return ($ret eq "")?"no fw-updates needed!":$ret;;;;\
}
attr DEVICE webCmd reread

Heizölpreis-ermittlung via easyoil:
#Contributed by subseven & yersinia, see https://forum.fhem.de/index.php/topic,107189.msg1017754.html#msg1017754
name:fuel_oil_check
filter:TYPE=HTTPMOD
desc: checks fuel oil prices via easyoil.com<br>Define a HTTPMOD device like<br>define heizoelpreis HTTPMOD https://www.esyoil.com/preisausgabe.php?pr-unloading-points=%%ENTLADESTELLEN%%&pr-product=8&pr-payment-type=2&%%ANHAENGER%%&pr-hose-length=%%SCHLAUCHLAENGE%%&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit= 3600 <a href="https://forum.fhem.de/index.php/topic,107189.msg1017754.html#msg1017754">Source: Forum</a>
order:X_02a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to hourly (3600s); {InternalVal("DEVICE","Interval",3600)}
defmod Heizoelpreis HTTPMOD https://www.esyoil.com/preisausgabe.php?pr-unloading-points=%%ENTLADESTELLEN%%&pr-product=8&pr-payment-type=2&%%ANHAENGER%%&pr-hose-length=%%SCHLAUCHLAENGE%%&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit= INTERVAL
attr DEVICE userattr reading010Name reading010OExpr reading010Regex 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
attr DEVICE enableControlSet 1
attr DEVICE reading010Name Heizoelpreis
attr DEVICE reading010OExpr $val =~ s/,/\./;; $val;;
attr DEVICE reading010Regex <span class="fw_b ">([\d\,]+)
attr DEVICE replacement01Mode text
attr DEVICE replacement01Regex %%PLZ%%
attr DEVICE replacement01Value 40764
attr DEVICE replacement02Mode text
attr DEVICE replacement02Regex %%MENGE%%
attr DEVICE replacement02Value 3000
attr DEVICE replacement03Mode text
attr DEVICE replacement03Regex %%ENTLADESTELLEN%%
attr DEVICE replacement03Value 1
attr DEVICE replacement04Mode text
attr DEVICE replacement04Regex %%SCHLAUCHLAENGE%%
attr DEVICE replacement04Value 40
attr DEVICE replacement05Mode text
attr DEVICE replacement05Regex %%ANHAENGER%%
attr DEVICE replacement05Value pr-truck-type=short_vehicle
attr DEVICE room WHICHROOM
attr DEVICE stateFormat {"<div>".ReadingsTimestamp($name,"Heizoelpreis","-")." \
<b>".ReadingsVal($name,"Heizoelpreis","-")."&euro;;</b>/100l</div>"}
attr DEVICE webCmd reread

Bei der order war ich mir nicht ganz sicher, was ich eintragen soll...-.-
« Letzte Änderung: 02 Februar 2020, 10:26:03 von yersinia »
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #72 am: 03 Februar 2020, 13:05:43 »
Moin,

hab's erst mal fast so übernommen.

Was das homematic-Thema angeht, bin ich eigentlich geneigt, das andere attrTemplate rauszunehmen, eine (funktionierende...) Quelle sollte reichen, oder?

Order für Heizöl habe ich jetzt so gewählt, dass es nach den Spritpreisen aufgelistet werden sollte...

(du siehst: alles kein Hexenwerk  ;) ...)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}
Hilfreich Hilfreich x 1 Liste anzeigen

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 361
    • Cyanide & Happiness
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #73 am: 03 Februar 2020, 14:28:31 »
Bedankt. :D

Was das homematic-Thema angeht, bin ich eigentlich geneigt, das andere attrTemplate rauszunehmen, eine (funktionierende...) Quelle sollte reichen, oder?
Ja, ich denke auch, da es -anscheinend zurzeit- nicht funktioniert. Oder man markiert die eq-3 Version als deprecated.

Order für Heizöl habe ich jetzt so gewählt, dass es nach den Spritpreisen aufgelistet werden sollte...
pascht. (auch hier kann es mehrere Lösungen geben, die Anbieter variieren ja....)
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #74 am: 03 Februar 2020, 14:41:03 »
Bedankt. :D
(Hoffe, die Aussage hinter der Aussage kam an...?)

Daher noch ein paar weitere Anmerkungen:
Zitat
Ja, ich denke auch, da es -anscheinend zurzeit- nicht funktioniert. Oder man markiert die eq-3 Version als deprecated.
Könnte man. Aber es ist ja kein "funktionales" Device in dem Sinne, dass man da typischerweise Eventhandler usw. andocken würde, es ist nach meinem Verständnis eher ein informatorisches "Hilfsdevice" zur direkten Bedienung durch den User. Von daher kann man die alte Version immer noch wieder aus dem svn holen, wenn man das bräuchte. Sehe aber im Moment keinen Grund anzunehmen, dass die neue Quelle eher versiegen würde als die alte...

Zitat
pascht. (auch hier kann es mehrere Lösungen geben, die Anbieter variieren ja....)
Klar. Ist eine reine Geschmacksfrage, und dadurch, dass order "nur" im Hintergrund verarbeitet wird, kann man das insgesamt im Prinzip auch völlig frei nachträglich ändern oder dieselbe order-Anbage sogar mehrfach nehmen. Wichtig ist m.E. nur, dass thematisch ähnliche Templates irgendwie "beeinander" auftauchen, wichtigere optimalerweise vorneweg; aber auch das ist nur eine Frage der Benutzerführung, nicht der Funktionalität...

(Wie gesagt: der Stuhl ist frei ;) ).
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline Lazgar

  • New Member
  • *
  • Beiträge: 17
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #75 am: 04 Februar 2020, 08:35:41 »
Hallo.

Ich habe mir den Tasmota Firmware Check definiert... aber scheinbar fehlt mir da noch irgendwas damit es auch läuft.

Bekomme immer folgende Fehlermeldung:

Zitat
Error evaluating OU_VPI_TEST stateFormat: Global symbol "$new" requires explicit package name (did you forget to declare "my $new"?) at (eval 105602) line 14.
Global symbol "$old" requires explicit package name (did you forget to declare "my $old"?) at (eval 105602) line 14.

Das Device hab ich einfach über das Template erstellen lassen.
Kann mir wer sagen was ich tun muss damit es läuft?

Danke schon mal im Voraus!

LG Lasgar

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #76 am: 04 Februar 2020, 09:09:03 »
@Lazgar

Kämpfst Du gerade damit, v8.1.0-Tasmota_Firmware_Check zu prüfen ...

Noch bin ich unsicher, was Du genau momentan machst ...

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #77 am: 04 Februar 2020, 09:59:46 »
Hmm, vermutlich kommt die Fehlermeldung aus der Zeile hier (im Zweig "elsif($check eq "error => no or wrong data from server!") {\"):
$ret .= '| <b style="color:'.(($new eq $old)?'black':'red').'">';;\
Da sind wirklich weder $new noch $old initialisiert, oder?
@Lazgar: Würde vorschlagen, einfach in diesem Fall alles rot zu machen, das sollte mit dieser Änderung der Zeile gehen:
$ret .= '| <b style="color:red">';;\
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline OdfFhem

  • Sr. Member
  • ****
  • Beiträge: 565
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #78 am: 04 Februar 2020, 10:20:52 »
@Beta-User

So steht das aktuell im November drin:
elsif($check eq "error => no or wrong data from server!") {
  $ret .= '| <b style="color:red">';
  $ret .= sprintf("%-65s",$check);
  $ret .= '</b> |';
}

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #79 am: 04 Februar 2020, 10:47:17 »
Hmm, in der aktuellen template-Fassung im svn ist das anders, kann grade nicht nachvollziehen, warum. Update kommt bei Gelegenheit, sorry for inconvenience...

EDIT: update ist im svn
« Letzte Änderung: 04 Februar 2020, 12:30:25 von Beta-User »
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline omnior

  • Full Member
  • ***
  • Beiträge: 102
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #80 am: 05 Februar 2020, 18:11:42 »
Ich versuche gerade mit HTTPMOD eine Abfrage bei fewo-direkt einzurichten und dort eine aufpoppende Infoleiste abzufangen. Hat das jemand schon mal versucht oder mit etwas Ähnlichem eine Erfahrung?

die Definition lautet:
define fewo HTTPMOD https://www.fewo-direkt.de/ferienwohnung-ferienhaus/p1110139

Wenn man den Link dieser Seite im Browser aufruft kommt während des Aufrufs der Popup "Wurde in den letzten 48 Stunden x-mal aufgerufen".
Leider kann ich das auf der in fhem eingelesenen Seite aber nirgends finden um es zu parsen. Ich vermute das funktioniert noch irgendwie anders. Jemand eine Idee wie man da rankommen könnte?
Robert

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 21647
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #81 am: 05 Februar 2020, 18:27:51 »
Der Browser laedt alle verlinkten Dokumente und fuehrt auch JavaScript aus, HTTPMOD tut das alles nicht.
Lade mal diese Seite per wget oder curl, und analysiere das Ergebnis, das entspricht in etwa dem, was HTTPMOD hat.

Online frank

  • Hero Member
  • *****
  • Beiträge: 8095
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #82 am: 05 Februar 2020, 18:34:14 »
versuche in httpmod den header vom browserrequest nachzubauen.
FHEM: 5.8(SVN) => Pi3(jessie)
IO: CUL433_V3.3(1.00.01B53)|CUL868_V3.3(1.58)|HMLAN(0.965)|HMUSB2(0.967)|HMUART(1.4.1)
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

Offline omnior

  • Full Member
  • ***
  • Beiträge: 102
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #83 am: 05 Februar 2020, 21:24:14 »
Also mit:curl 'https://www.fewo-direkt.de/pdp/graphql' -H 'authority: www.fewo-direkt.de' -H 'pragma: no-cache' -H 'cache-control: no-cache' -H 'origin: https://www.fewo-direkt.de' -H 'x-homeaway-site: homeaway_de' -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36' -H 'x-csrf-jwt-pdp: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6IjU5N2QyZGJmYjg2MmFlZjM2Y2IzMTMxMGNkZDZlMTlkZTE0MTYwOWViYTEzYWQ1MWYzMjU2NTU5MzVlYWE4ZjRjMTZhYmM2YjY1YmVlOWQ3NzM2MDE2Njg0YTc3OGE2OTg1Nzg4M2IzYWI0YTUzZmU0N2IyNWU1YjczN2E5MzRkMmZhNmYwZWUwMDM2ODg0N2RkMTRkYTM5MDJmNTUyNDkzMDk2M2ZjZDVlNDBhNTk1MTVlNTFmZjRlNzAyNjY3ZWQyMzc4ODA2ODUxYTgxYjY0MGI4ZTQ1Y2Q3OGMyNjA4ZjA5Nzc2ODg5Mzk0OWY4NzA4Njk4YTcwOWRjNmNkMGJkOWRiNDIwNzI2NzNlNjI0NTM3YmQ2YTI0YTI0MzAwNSIsImlhdCI6MTU4MDg0MzI0MSwiZXhwIjoxNTgxNDQ4MDQxfQ.9977gmSQ_RyexkYjVesPKkQis4b8vDWKOEPu6zcBH8o' -H 'content-type: application/json' -H 'x-homeaway-displaylocale: de_DE' -H 'dnt: 1' -H 'accept: */*' -H 'sec-fetch-site: same-origin' -H 'sec-fetch-mode: cors' -H 'referer: https://www.fewo-direkt.de/ferienwohnung-ferienhaus/p2064237?r=SEARCH' -H 'accept-encoding: gzip, deflate, br' -H 'accept-language: de,en-US;q=0.9,en;q=0.8,he;q=0.7' -H 'cookie: ha-device-id=7bc2e7b3-b798-4271-980c-f8a8548cce8a; hav=7bc2e7b3-b798-4271-980c-f8a8548cce8a; visid_incap_1042227=mEcdWovaR9a/6vF+knKW2E008VwAAAAAQUIPAAAAAAAbVYJzIPXh0XXGj3t57S8N; nlbi_1042227=ybUWJ4RegXX2w/+Uy55XXgAAAAD5XxH1SiypgY87EybW3yZD; ha-cookie-settings=functional%3A1; ha-gx-prefs=de_DE|EUR; ha-mkt=33cf1a9a-132a-4e22-863a-f79982124c82; incap_ses_473_1042227=aiIYLujH5An93BtZbnCQBuKFPV0AAAAA42PmDFn76blnoUuVtLiK7w==; ef199862-9147-4c8e-9f26-cd9247c918d5SL=1; has=ef199862-9147-4c8e-9f26-cd9247c918d5; eu-site=1; ha-trip-prst=%7B%22arrival%22%3A%22%22%2C%22departure%22%3A%22%22%2C%22numberOfAdults%22%3A0%2C%22numberOfChildren%22%3A0%2C%22petIncluded%22%3Afalse%7D; site=homeaway_de; crumb=Yvv-KzQxxjUNJ1_C8dFQ_7M5eBeNjAQnbIlJ6zC3KjO; ha-mkt=fb7095a5-356e-4c75-9e02-04ea2254da1e' --data-binary $'{"query":"\\n    query UnitMessage(\\n            $unitUuid: String\u0021, \\n            $dateRange: UrgencyDateRange, \\n            $assetVersion: Int\u0021, \\n            $totalPrice: UnitTotalPrice, \\n            $guests: UrgencyGuests\\n        ) {\\n        unitMessage(\\n            unitUuid: $unitUuid, \\n            dateRange: $dateRange, \\n            assetVersion: $assetVersion,\\n            guests: $guests,\\n            totalPrice: $totalPrice\\n        ) {\\n            iconText {\\n                message\\n                icon\\n                messageValueType\\n            }\\n        }\\n    }\\n","variables":{"unitUuid":"5a136a6f-d9f2-4951-8c6b-9ca55cddbf1d","assetVersion":1},"operation":"graphql_get_urgency_message"}' --compressed
bekomme ich als Antwort:
{"data":{"unitMessage":{"iconText":{"message":"Wurde in den letzten 48 Stunden 32-mal angesehen","icon":"VIEWED_HOUSE","messageValueType":"VIEWED"}}}}
und hier steht dann genau das richtige drin :)
Ich weiß nur nicht wie ich diesen riesenlangen Curl Befehl nun in das httpmod reinbekomme

Offline amenomade

  • Hero Member
  • *****
  • Beiträge: 5240
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #84 am: 06 Februar 2020, 00:50:59 »
defmod fewo HTTPMOD https://www.fewo-direkt.de/pdp/graphql 0
attr fewo userattr requestData requestData04 requestHeader01 requestHeader02 requestHeader03 requestHeader04 requestHeader05 requestHeader06 requestHeader07 requestHeader08 requestHeader09 requestHeader10 requestHeader11 requestHeader12 requestHeader13
attr fewo enableControlSet 1
attr fewo enableCookies 1
attr fewo requestData {"query":"\n    query UnitMessage(\n            $unitUuid: String!, \n            $dateRange: UrgencyDateRange, \n            $assetVersion: Int!, \n            $totalPrice: UnitTotalPrice, \n            $guests: UrgencyGuests\n        ) {\n        unitMessage(\n            unitUuid: $unitUuid, \n            dateRange: $dateRange, \n            assetVersion: $assetVersion,\n            guests: $guests,\n            totalPrice: $totalPrice\n        ) {\n            iconText {\n                message\n                icon\n                messageValueType\n            }\n        }\n    }\n","variables":{"unitUuid":"5a136a6f-d9f2-4951-8c6b-9ca55cddbf1d","assetVersion":1},"operation":"graphql_get_urgency_message"}
attr fewo requestHeader01 user-agent: Mozilla/5.0 (Macintosh;; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
attr fewo requestHeader02 authority: www.fewo-direkt.de
attr fewo requestHeader03 origin: https://www.fewo-direkt.de
attr fewo requestHeader04 cookie: ha-device-id=7bc2e7b3-b798-4271-980c-f8a8548cce8a;; hav=7bc2e7b3-b798-4271-980c-f8a8548cce8a;; visid_incap_1042227=mEcdWovaR9a/6vF+knKW2E008VwAAAAAQUIPAAAAAAAbVYJzIPXh0XXGj3t57S8N;; nlbi_1042227=ybUWJ4RegXX2w/+Uy55XXgAAAAD5XxH1SiypgY87EybW3yZD;; ha-cookie-settings=functional%3A1;; ha-gx-prefs=de_DE|EUR;; ha-mkt=33cf1a9a-132a-4e22-863a-f79982124c82;; incap_ses_473_1042227=aiIYLujH5An93BtZbnCQBuKFPV0AAAAA42PmDFn76blnoUuVtLiK7w==;; ef199862-9147-4c8e-9f26-cd9247c918d5SL=1;; has=ef199862-9147-4c8e-9f26-cd9247c918d5;; eu-site=1;; ha-trip-prst=%7B%22arrival%22%3A%22%22%2C%22departure%22%3A%22%22%2C%22numberOfAdults%22%3A0%2C%22numberOfChildren%22%3A0%2C%22petIncluded%22%3Afalse%7D;; site=homeaway_de;; crumb=Yvv-KzQxxjUNJ1_C8dFQ_7M5eBeNjAQnbIlJ6zC3KjO;; ha-mkt=fb7095a5-356e-4c75-9e02-04ea2254da1e
attr fewo requestHeader05 x-homeaway-site: homeaway_de
attr fewo requestHeader06 content-type: application/json
attr fewo requestHeader07 x-homeaway-displaylocale: de_DE
attr fewo requestHeader08 dnt: 1
attr fewo requestHeader09 accept: */*
attr fewo requestHeader10 sec-fetch-site: same-origin
attr fewo requestHeader11 sec-fetch-mode: cors
attr fewo requestHeader12 referer: https://www.fewo-direkt.de/ferienwohnung-ferienhaus/p2064237?r=SEARCH
attr fewo requestHeader13 x-csrf-jwt-pdp: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbiI6IjU5N2QyZGJmYjg2MmFlZjM2Y2IzMTMxMGNkZDZlMTlkZTE0MTYwOWViYTEzYWQ1MWYzMjU2NTU5MzVlYWE4ZjRjMTZhYmM2YjY1YmVlOWQ3NzM2MDE2Njg0YTc3OGE2OTg1Nzg4M2IzYWI0YTUzZmU0N2IyNWU1YjczN2E5MzRkMmZhNmYwZWUwMDM2ODg0N2RkMTRkYTM5MDJmNTUyNDkzMDk2M2ZjZDVlNDBhNTk1MTVlNTFmZjRlNzAyNjY3ZWQyMzc4ODA2ODUxYTgxYjY0MGI4ZTQ1Y2Q3OGMyNjA4ZjA5Nzc2ODg5Mzk0OWY4NzA4Njk4YTcwOWRjNmNkMGJkOWRiNDIwNzI2NzNlNjI0NTM3YmQ2YTI0YTI0MzAwNSIsImlhdCI6MTU4MDg0MzI0MSwiZXhwIjoxNTgxNDQ4MDQxfQ.9977gmSQ_RyexkYjVesPKkQis4b8vDWKOEPu6zcBH8o
attr fewo showBody 1


0 in DEF durch gewünschte Frequenz ersetzen, oder manuell mit "set fewo reread" die Abfrage starten
(Allerdings ist es hier ein Thread über httpmod Templates, nicht über HTTPMOD Grundlagen. Wenn weitere Fragen, bitte ein neues Thread z.B. in Anfängerfragen oder Sonstiges Subforum öffnen)
« Letzte Änderung: 06 Februar 2020, 01:01:24 von amenomade »
FHEM 5.9 Pi 3, EchoDot, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, und HM Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Offline klausw

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1916
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #85 am: 07 Februar 2020, 11:02:12 »
Hallo,

beim hm_fw_check_v2 gibt es einen Bug:

Die defmod Anweisung sollte so aussehen:
Zitat
defmod DEVICE HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE INTERVAL

Das "DEVICE" im Link wird aber dummerweise durch den Devicenamen ersetzt und das Ganze funktioniert dann nicht.

Hast Du eine Möglichkeit diesen replace String zu escapen?


RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #86 am: 07 Februar 2020, 11:06:16 »
Ja, escapen geht wie üblich mit einem "\" (siehe z.B. manche MQTT2_\DEVICE-Einträge in mqtt2.template)

Und vor allem: Danke für den Hinweis, ich hatte das template vor kurzem kurz angetestet und mich gewundert, warum wieder nichts als updatebar angezeigt wurde, aber bisher keine Muße, dem mal nachzugehen... ::)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}

Offline yersinia

  • Full Member
  • ***
  • Beiträge: 361
    • Cyanide & Happiness
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #87 am: 07 Februar 2020, 14:38:58 »
Hallo,

beim hm_fw_check_v2 gibt es einen Bug:

Die defmod Anweisung sollte so aussehen:
Das "DEVICE" im Link wird aber dummerweise durch den Devicenamen ersetzt und das Ganze funktioniert dann nicht.

Hast Du eine Möglichkeit diesen replace String zu escapen?

omg, das hab ich völlig übersehen. Gut, hab die templates selbst nicht getestet *facepalm*. Anyhow, müsste mit dem escape dann so ausshene, oder?
defmod DEVICE HTTPMOD https://update.homematic.com/firmware/api/firmware/search/\DEVICE INTERVAL
Als template:
#Contributed by Pfriemler & yersinia, see https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327
name:hm_fw_check_v2
filter:TYPE=HTTPMOD
desc: check for homematic firmware updates; based on new link provided by Pfriemler (switch from eq-3.de to update.homematic.com)<br>Define a HTTPMOD device like <br>define hm_fw_check HTTPMOD https://update.homematic.com/firmware/api/firmware/search/DEVICE 86400<br /><a href="https://forum.fhem.de/index.php/topic,78501.msg1019327.html#msg1019327">Source: Forum</a>
order:X_01a
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:INTERVAL;Actual interval for updating, defaults to one day (86400s); {InternalVal("DEVICE","Interval",86400)}
defmod DEVICE HTTPMOD https://update.homematic.com/firmware/api/firmware/search/\DEVICE INTERVAL
attr DEVICE userattr reading01AutoNumLen reading01Name reading01RegOpt reading01Regex reading02AutoNumLen reading02Name reading02RegOpt reading02Regex readingMaxAge readingMaxAgeReplacementMode:text,reading,internal,expression,delete showNewFWOnly:yes,no
attr DEVICE enableControlSet 1
attr DEVICE icon hm_ccu
attr DEVICE reading01AutoNumLen 2
attr DEVICE reading01Name hmfw-type
attr DEVICE reading01RegOpt g
attr DEVICE reading01Regex (?i)"type":"((?:\w+[-]*){1,})
attr DEVICE reading02AutoNumLen 2
attr DEVICE reading02Name hmfw-version
attr DEVICE reading02RegOpt g
attr DEVICE reading02Regex (?si)"version":"(\d+[.]\d+[.]\d+)
attr DEVICE readingMaxAge 10
attr DEVICE readingMaxAgeReplacementMode delete
attr DEVICE room WHICHROOM
attr DEVICE showError 1
attr DEVICE showMatched 1
attr DEVICE showNewFWOnly yes
attr DEVICE stateFormat {   my $ret ="";;;;\
    my $lastCheck = ReadingsTimestamp($name,"MATCHED_READINGS","???");;;;\
    $ret .= '<div style="text-align:left">';;;;\
    $ret .= 'last <a title="eq3-downloads" href="http://www.eq-3.de/service/downloads.html">homematic</a>-fw-check => '.$lastCheck;;;;\
    $ret .= '<br><br><pre>';;;;\
    $ret .= "| device                         | model                   | cur_fw | new_fw |<br>";;;;\
    $ret .= "------------------------------------------------------------------------------<br>";;;;\
    my $check = ReadingsVal($name,"newFwForDevices","error => no or wrong data from eq3-server!");;;;\
    if($check eq "no fw-updates needed!") {\
      $ret .= '| <b style="color:green">';;;;\
      $ret .= sprintf("%-74s",$check);;;;\
      $ret .= '</b> |';;;;\
    } elsif($check eq "error => no or wrong data from eq3-server!") {\
      $ret .= '| <b style="color:red">';;;;\
      $ret .= sprintf("%-74s",$check);;;;\
      $ret .= '</b> |';;;;\
    } else {\
      my @devices = split(',',$check);;;;\
      foreach my $devStr (@devices) {\
        my ($dev,$md,$idx,$ofw,$nfw) = $devStr =~ m/([^\s]+)\s[(]([^\s]+)\s[(](\d+)[)]\sofw_([\d\.]+)\s=>\snfw_([\d\.]+)/;;;;\
        my $fw_link = "https://ccu3-update.homematic.com/firmware/download?cmd=download&serial=0&product=".$md;;;;\
        $ret .= '| <a href="/fhem?detail='.$dev.'" target="_blank"><b>';;;;\
        $ret .= sprintf("%-30s",$dev);;;;\
        $ret .= '</b></a> | ';;;;\
        $ret .= '<b'.(($md eq "?")?' title="missing attribute model => set device in teach mode to receive missing data" style="color:yellow;;"':' style="color:lightgray;;"').'>';;;;\
        $ret .= sprintf("%-23s",$md);;;;\
        $ret .= '</b> | ';;;;\
        $ret .= '<b'.(($ofw eq "0.0")?' title="missing attribute firmware => set device in teach mode to receive missing data" style="color:yellow"':' style="color:lightgray;;"').'>';;;;\
        $ret .= sprintf("%6s",$ofw);;;;\
        $ret .= '</b> | ';;;;\
        $ret .= '<a title="download firmware file" href="'.$fw_link.'" target="_blank"><b style="color:red;;">';;;;\
        $ret .= sprintf("%6s",$nfw);;;;\
        $ret .= '</b></a> | ';;;;\
        $ret .= "<br />";;;;\
      }\
    }\
    $ret .= '</pre></div>';;;;\
  return $ret;;;;\
}
attr DEVICE userReadings newFwForDevices:MATCHED_READINGS.* {\
  my $ret = "";;;;\
  my $newfwonly = AttrVal($name,"showNewFWOnly","yes");;;;\
  if (ReadingsVal($name,"UNMATCHED_READINGS","?") eq "") {\
    my @eq3FwList = map { \
sprintf(ReadingsVal($name,"hmfw-type-".$_,"?").":".ReadingsVal($name,"hmfw-version-".$_,"?").":".$_);;;;\
} ReadingsVal($name,"MATCHED_READINGS","?")=~ m/hmfw-version-(\d\d)/g;;;;\
\
foreach my $dev (devspec2array("TYPE=CUL_HM:FILTER=DEF=......:FILTER=subType!=(virtual|)")) {\
      my $md = AttrVal($dev,"model","?");;;;\
      my $v = AttrVal($dev,"firmware","0.0");;;;\
      my ($h,$l) = split('\.',$v);;;;\
      foreach my $newFW (grep m/^${md}:/i,@eq3FwList) {\
my ($fwmd, $fwv, $idx) = $newFW =~ m/([^:]+):(\d+[.]\d+[.]\d+):(\d+)$/;;;;\
my ($fwh, $fwl) = split('\.',$fwv);;;;\
if(($newfwonly eq "no") || (($fwh > $h) || (($fwh == $h) && ($fwl > $l)))) {\
          $ret .= "," if($ret ne "");;;;\
  $ret .= $dev." (".$md." (".$idx.") ofw_".$v." => nfw_".$fwv.")";;;;\
        }\
      }\
    }\
  } else {\
    $ret = "error => no or wrong data from eq3-server!";;;;\
  }\
  return ($ret eq "")?"no fw-updates needed!":$ret;;;;\
}
attr DEVICE webCmd reread
viele Grüße, yersinia
----
FHEM 6.0 (SVN) on RPi 4B with Raspian Buster (perl 5.28.1) | FTUI
nanoCUL@a-culfw-> 2x868 (1x ser2net), 1x433 | MQTT | Tasmota | ESPEasy
VCCU->14xHM-SEC-SCo, 7xHM-CC-RT-DN, 5xHM-LC-Bl1PBU-FM, 3xHM-TC-IT-WM-W-EU, 1xHM-PB-2-WM55, 1xHM-LC-Sw1PBU-FM, 1xHM-ES-PMSw1-Pl

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 9243
  • eigentlich eher "user" wie "developer"
Antw:httpmod.template: bugs, Fragen, Anregungen
« Antwort #88 am: 07 Februar 2020, 15:11:48 »
 :) ;) ::)
Danke für's "mundfertige" Vorbereiten. Das müßte so passen und ist seit eben auch so (samt model-Angabe) im svn, das alte ist jetzt komplett raus. Hatte sowieso noch einige weitere Kleinigkeiten in mqtt2.template (vielleicht gibt's ja jemanden, der manche grade für mich sehr undurchsichtige Fragen zum Thema Sprachsteuerung mit beantworten könnte, das verursacht grade "etwas Bewegung"...? Thread wäre hier...)
Server: HP-T620@Debian 10, aktuelles FHEM + ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | BT@OpenMQTTGateway
svn:MySensors, WeekdayTimer, RandomTimer, AttrTemplate => {mqtt2, mysensors, httpmod}
Gefällt mir Gefällt mir x 1 Liste anzeigen