httpmod.template: bugs, Fragen, Anregungen

Begonnen von Beta-User, 21 Februar 2019, 12:04:17

Vorheriges Thema - Nächstes Thema

amenomade

Das habe ich vergessen. Ist aber nicht so schlimm. Ich mache es beim nächsten Einchecken.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

artoffhem

weil ich gerade dabei bin habe ich mir auch noch die Astro-Daten angesehen, die momentan nicht funktionieren. Der Grund dürfte das Regex für dayLength sein, dass 00:00 erwartert, jedoch momentan 0:00 ist. ORF liefert hier im Gegensatz zu anderen Zeiten keine führende NULL aus.
... [\w\W]*Tagesl[^>]+>(\d\d:\d\d)&[\w\W]* ...

meine Lösung würde so aussehen
... [\w\W]*Tagesl[^>]+>([\d]+:\d\d)&[\w\W]* ...

ORF Astro-Daten
      <div class="details">
         <div class="sunData">
            <p class="rise" title="Sonnenaufgang"><span class="offscreen">Sonnenaufgang um </span>07:56<span class="offscreen"> Uhr.</span></p>
            <p class="set" title="Sonnenuntergang"><span class="offscreen">Sonnenuntergang um </span>16:31<span class="offscreen"> Uhr.</span></p>
         </div>

         <div class="moonData">
            <p class="offscreen">Mondphase: Abnehmender Halbmond.</p>
            <p class="rise" title="Mondaufgang"><span class="offscreen">Mondaufgang um </span>23:48<span class="offscreen"> Uhr.</span></p>
            <p class="set" title="Monduntergang"><span class="offscreen">Monduntergang um </span>11:40<span class="offscreen"> Uhr.</span></p>
         </div>
      </div>

      <div class="extendedDetails">
         <p><span class="label">Tagesl&auml;nge: </span>8:34&thinsp;<abbr title="Stunden">h</abbr></p>
         <p><span class="label">D&auml;mmerung<span class="offscreen"> Morgen</span>: </span>07:21&thinsp;Uhr</p>
         <p><span class="label"><span class="offscreen">D&auml;mmerung Abend:</span></span>17:06&thinsp;Uhr</p>
      </div>

amenomade

Hab die Korrektur eingecheckt. Danke Dir :)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

antonwinden

Habe hier ein komisches Problem:
Wetter von ORF Neusiedl am See (https://wetter/orf/at/burgenland/neusiedlsee) funktioniert ohne Probleme.
Nur wenn ich Podersdorf auswähle stürzt mein Fhem ab -> https://wetter/orf/at/burgenland/podersdorf

die letzten Zeilen im Log sind:
   <script type="text/javascript">,
   var ivwPrefix = "RedCont/Wetter/Oesterreichwetter/v2wet/v2bgl/v2lawe/station/";,
   var oewa_data = {,
           "cn": "at",,
           "st": "at_w_atorf",,
           "sv": "in",,
           "ps": "lin",,
           "cp": "RedCont/Wetter/Oesterreichwetter/v2wet/v2bgl/v2lawe/station/",,
           "sc": "yes",
         };,,
>,
,
,
</body>,
</html>,
,
,
2021.04.04 08:27:43.239 4: ORFp: BodyDecode is not decoding the response body (charset utf-8, bodyDecode defaults to none),
2021.04.04 08:27:43.239 5: ORFp: GetCookies is looking for Cookies,
2021.04.04 08:27:43.239 4: ORFp: GetCookies parsed Cookie: HopSession Wert 127.0.0.178.18.171.8214try4wwf0 Rest Path=/; Domain=.orf.at; HttpOnly,
2021.04.04 08:27:43.239 5: ORFp: ExtractSid called, context get, num 01,
2021.04.04 08:27:43.239 4: ORFp: checking for redirects, code=200, ignore=0,
2021.04.04 08:27:43.239 4: ORFp: no redirects to handle,
2021.04.04 08:27:43.239 5: ORFp: Read callback sets LAST_REQUEST to get01,
2021.04.04 08:27:43.239 5: ORFp: CheckAuth decided no authentication required,
2021.04.04 08:27:43.240 5: ORFp: ExtractReading for context get, num 01 - no individual parse definition,
2021.04.04 08:27:43.240 5: ORFp: UpdateReadingList created list of reading.* nums to parse during getUpdate as 01,
2021.04.04 08:27:43.240 5: ORFp: Read starts parsing response to get01 with defined readings: 01,
2021.04.04 08:27:43.240 5: ORFp: ExtractReading reading01 with regex /(?^:(?s)Temperatur.*?.*?>.*?(?<temperature>(&minus;)?[\d,]+)&thinsp.*?Taupunkt.*?.*?>.*?(?<taupunkt>(&minus;)?[\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]+))/...,

danach kommt nichts mehr...
kann auch mit neusiedl am See gut leben...
gruß Anton
KNX, Raspberry, Denon 3313, Philips TV, Xtrend9X00 und viel Optimismus...

yersinia

Wegen Änderung einiger Readings nach Upgrade auf 9.4.0 kleine Anpassung am HTTPMOD tasmota_firmware_check (analog zum JsonMod Template):
#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:TECHZ06
par:WHICHROOM;Actual room of the device, defaults to HTTPMOD; {AttrVal("DEVICE","room","HTTPMOD" )}
par:UPDATABLEDEVICESMODE;Actual mode for updatableDevices, defaults to onlyUpdatable; {AttrVal("DEVICE","updatableDevicesMode","onlyUpdatable")}
par:INTERVAL;Actual interval for updating, defaults to one week; {InternalVal("DEVICE","Interval","604800")}
defmod DEVICE HTTPMOD https://github.com/arendst/Tasmota/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]*?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="https://github.com/arendst/Tasmota/releases" target="_blank">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",AttrVal($dev,"alias",$dev));;\
        $ret .= '</b></a> | ';;\
        $ret .= '<b style="color:lightgray;;">';;\
        $ret .= '<a href="http://'.ReadingsVal($dev,"Info2_IPAddress",ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0"))).'/up" target="_blank">';;\
        $ret .= sprintf("%7s",$old);;\
        $ret .= '</a></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 updatableDevicesMode UPDATABLEDEVICESMODE
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=readingList~.*tele[/].*INFO.*:FILTER=Version!=,TYPE=MQTT[2]?_[D]EVICE:FILTER=readingList~.*tele[/].*INFO.*:FILTER=INFO1_Version!=")) {\
      my $version = ReadingsVal($dev,"Info1_Version",ReadingsVal($dev,"Version",ReadingsVal($dev,"INFO1_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 tasmota_firmware_updates
setreading DEVICE attrTemplateVersion 20210423
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

mähschaf

[quote author=yersinia link=topic=97694.msg1151626#msg1151626 date=1619167980]
setreading DEVICE attrTemplateVersion 20210423

[/quote]

Hallo,

bei mir ist trotz Updates die - nicht funktionierende - attrTemplateVersion 20201129 verfügbar/installiert.

Wie komme ich am geschicktesten an die neue Version?

Viele Grüße und besten Dank

Otto123

Zitat von: mähschaf am 18 Mai 2021, 17:49:04

Wie komme ich am geschicktesten an die neue Version?

{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mähschaf

Hallo Otto,

danke für die prompte Hilfe.

Damit müsste doch eigentlich folgende Datei auf meinem Server landen, oder?

https://svn.fhem.de/fhem/trunk/fhem/FHEM/lib/AttrTemplate/httpmod.template

Die müsste bei einem normalen "update" doch auch gezogen werden, oder nicht?

Das Problem scheint mir zu sein, dass diese Datei die alte Version enthält.....

setreading DEVICE attrTemplateVersion 20201129

Otto123

sorry meine Zeile war für mqtt2 musst Du den Namen austauschen:
{ Svn_GetFile("FHEM/lib/AttrTemplate/httpmod.template", "FHEM/lib/AttrTemplate/httpmod.template", sub(){ AttrTemplate_Initialize() }) }

nach einem Update ohne Neustart muss eventuell das ausgeführt werden?:
{ AttrTemplate_Initialize() }
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

mähschaf

Hallo Otto,

ja, das war mir auch aufgefallen.

Kann es trotzdem sein, dass der Stand des httpmod.template im SVN veraltet ist?

Oder verstehe ich etwas falsch?

Otto123

#190
Du hast sicher Recht: Im SVN ist die Version 23490 09.01.2021 00:02:35

Und von Beta-User gab es nach dem Beitrag von  yersinia keinen Beitrag: "... ich habe ferdisch ... " ;)

im Kopf steht "#Contributed by OdfFHEM ..." mmh soll ich das jetzt einfach einchecken? Könnte ich machen  :-\ Edit: ich war im falschen Film  :o
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

yersinia

Ich denke, mein Änderungsvorschlag ist obsolet wegen:
Zitat von: Beta-User am 10 Mai 2021, 14:41:50
_Mit_ j2nv geht wohl nicht, aber _vor_ sollte gehen:

attr DEVICE readingList \
  TELETOPIC/INFO.:.* { $EVENT =~ m,^..Info[1-3]..(.+).$, ?  json2nameValue($1,'',$JSONMAP) : json2nameValue($EVENT,'',$JSONMAP) }

Daher wird Beta-User den nun offensichtlich nicht mehr benötigten 'patch' nicht übernommen haben, vermute ich.
MMn würde meine Änderung nicht schaden, wäre auch abwärtskompatibel - aber bedeutet auch insgesamt mehr (ie unübersichtlichen) Code.

Die Lorbeeren für dieses Template gehören OdfFHEM.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

Zitat von: yersinia am 19 Mai 2021, 09:07:58
[...] Daher wird Beta-User
Zur Klarstellung: Maintainer für httpmod.template ist seit längerem amenomade ;) . Ich gedenke daher im Moment nicht, Vorschläge für neue attrTemplate aus eigenem Antrieb einzupflegen, zumal ich für HTTPMOD wirklich nach wie vor nicht kompetent bin...

Was die IP-Adress-Thematik angeht, finde ich den Vorschlag mit der Erweiterung auf das "normale" j2nv()-Ergebnis aber gut, weil der HTTPMOD dann auch für die paßt, die - aus welchem Grund auch immer -  an der Stelle ihre readingList nicht anpassen wollen. Die Frage ist mAn. allenfalls, was als erstes geprüft und wie der Ausdruck effizienterweise notiert werden sollte.

Würde folgende Variante der betreffenden Zeile ins Spiel bringen:
$ret .= '<a href="http://'.ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0")).'/up" target="_blank">';;\
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

yersinia

Zitat von: Beta-User am 19 Mai 2021, 10:20:28Zur Klarstellung: Maintainer für httpmod.template ist seit längerem amenomade ;).
Stimmt. ::)
Zitat von: Beta-User am 19 Mai 2021, 10:20:28Würde folgende Variante der betreffenden Zeile ins Spiel bringen:
$ret .= '<a href="http://'.ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0")).'/up" target="_blank">';;\
Dies setzt voraus, dass, wie du schreibst, das readingsList in dem MQTT2 Device entsprechend aktualisiert worden ist. Alternativ steht immernoch diese Kaskade als Vorschlag:
$ret .= '<a href="http://'.ReadingsVal($dev,"Info2_IPAddress",ReadingsVal($dev,"IPAddress",ReadingsVal($dev,"INFO2_IPAddress","0.0.0.0"))).'/up" target="_blank">';;\
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

Beta-User

Zitat von: yersinia am 19 Mai 2021, 10:56:47
Dies setzt voraus, dass, wie du schreibst, das readingsList in dem MQTT2 Device entsprechend aktualisiert worden ist.
Vermutlich übersehe ich was wichtiges, bin aber auch nach nochmaligem Drübersehen der Ansicht, dass mein Vorschlag "effizienter" ist, weil a) alle alten und "neuen" (via aktuellem mqtt2-template "zurechtgebogenen") Fälle bereits in Stufe 1 abgedeckt sind und nur die (unterstellt wenigen) Fälle, die mit INFO2.* arbeiten (firmware-update ohne Änderung der readingList) dann als Ersatzwert in Stufe 2 ausgewertet werden.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files