httpmod.template: bugs, Fragen, Anregungen

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

Vorheriges Thema - Nächstes Thema

Lazgar

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:

ZitatError 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

OdfFhem

@Lazgar

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

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

Beta-User

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-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

OdfFhem

@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> |';
}


Beta-User

#79
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
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

omnior

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

rudolfkoenig

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.

frank

versuche in httpmod den header vom browserrequest nachzubauen.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

omnior

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

amenomade

#84
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)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

klausw

Hallo,

beim hm_fw_check_v2 gibt es einen Bug:

Die defmod Anweisung sollte so aussehen:
Zitatdefmod 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

Beta-User

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-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: klausw am 07 Februar 2020, 11:02:12
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.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

 :) ;) ::)
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-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

mähschaf

#89
Hallo liebes Forum & guten Abend,

da nun Tasmota 8.2.0 erschienen ist, habe ich die Chance genutzt, mein httpmod "tasmotaupdates" zu testen. Das hat leider zunächst nicht geklappt. Ich bin kein Programmierer, aber konnte folgendes feststellen:

Das Modul erwartet ein Reading namens "INFO01_Version". Das gibt es bei meinem Tasmota gar nicht, sondern lediglich das Reading "Version".

Internals:
   CID        tasmota001
   DEF        tasmota001
   DEVICETOPIC MQTT2_tasmota001
   FUUID      5e20871f-f33f-2b6d-a9b9-bbe0ae511528f216
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 2462
   MQTT2_FHEM_Server_TIME 2020-03-21 23:29:00
   MSGCNT     2462
   NAME       MQTT2_tasmota001
   NR         143
   STATE      T: 20.6°C, H: 49.1%rH
   TYPE       MQTT2_DEVICE
   Helper:
     DBLOG:
       absoluteHumidity:
         logdb:
           TIME       1584828840.64922
           VALUE      8.8
       dewpoint:
         logdb:
           TIME       1584829740.72015
           VALUE      9.5
       humidity:
         logdb:
           TIME       1584829740.72015
           VALUE      49.1
       temperature:
         logdb:
           TIME       1584828840.64922
           VALUE      20.6
   READINGS:
     2020-03-21 23:29:00   AM2301_Humidity 49.1
     2020-03-21 23:29:00   AM2301_Temperature 20.6
     2020-01-30 23:10:04   Command         Unknown
     2020-02-23 15:35:22   FallbackTopic   cmnd/tasmota001_fb/
     2020-02-23 15:35:22   GroupTopic      cmnd/tasmotas/
     2020-03-21 23:29:00   Heap            27
     2020-02-23 15:35:22   Hostname        tasmota001
     2020-02-23 15:35:22   IPAddress       192.168.4.246
     2020-03-21 23:29:00   LOGGING         23:29:00 MQT: tele/tasmota001/SENSOR = {"Time":"2020-03-21T23:29:00","AM2301":{"Temperature":20.6,"Humidity":49.1},"TempUnit":"C"}
     2020-03-19 20:17:15   LWT             Online
     2020-03-21 23:29:00   LoadAvg         19
     2020-02-23 15:35:22   Module          Generic
     2020-03-21 23:29:00   MqttCount       16
     2020-01-30 21:05:28   NtpServer1      pool.ntp.org
     2020-03-19 20:17:18   POWER           
     2020-03-21 23:29:00   POWER1          on
     2020-02-23 15:35:22   RestartReason   Software/System restart
     2020-02-07 20:00:44   SaveData        off
     2020-01-25 21:20:50   SetOption26     on
     2020-03-21 23:29:00   Sleep           50
     2020-03-21 23:29:00   SleepMode       Dynamic
     2020-01-25 21:20:49   StateText1      off
     2020-01-25 21:20:49   StateText2      on
     2020-01-25 21:20:50   StateText3      toggle
     2020-01-25 21:20:50   StateText4      hold
     2020-03-21 23:29:00   TempUnit        C
     2020-03-21 23:29:00   Time            2020-03-21T23:29:00
     2020-03-21 23:29:00   Uptime          27T07:53:46
     2020-03-21 23:29:00   UptimeSec       2361226
     2020-02-23 15:35:22   Version         8.1.0(tasmota)
     2020-02-07 20:00:39   WebColor_1      #000000
     2020-02-07 20:00:39   WebColor_10     #000000
     2020-02-07 20:00:39   WebColor_11     #5dbcf1
     2020-02-07 20:00:39   WebColor_12     #118ccd
     2020-02-07 20:00:39   WebColor_13     #e06c6c
     2020-02-07 20:00:39   WebColor_14     #b82727
     2020-02-07 20:00:39   WebColor_15     #bbe4c5
     2020-02-07 20:00:39   WebColor_16     #87c596
     2020-02-07 20:00:39   WebColor_17     #ffffff
     2020-02-07 20:00:39   WebColor_18     #999999
     2020-02-07 20:00:39   WebColor_19     #000000
     2020-02-07 20:00:39   WebColor_2      #ffffff
     2020-02-07 20:00:39   WebColor_3      #f2f2f2
     2020-02-07 20:00:39   WebColor_4      #000000
     2020-02-07 20:00:39   WebColor_5      #ffffff
     2020-02-07 20:00:39   WebColor_6      #000000
     2020-02-07 20:00:39   WebColor_7      #ffffff
     2020-02-07 20:00:39   WebColor_8      #ff0000
     2020-02-07 20:00:39   WebColor_9      #008000
     2020-02-23 15:35:22   WebServerMode   Admin
     2020-03-21 23:29:00   Wifi_AP         1
     2020-03-21 23:29:00   Wifi_BSSId      ...
     2020-03-21 23:29:00   Wifi_Channel    6
     2020-03-21 23:29:00   Wifi_Downtime   0T00:00:06
     2020-03-21 23:29:00   Wifi_LinkCount  1
     2020-03-21 23:29:00   Wifi_RSSI       86
     2020-03-21 23:29:00   Wifi_SSId       ...
     2020-03-21 23:29:00   Wifi_Signal     -57
     2020-03-21 23:29:00   absoluteHumidity 8.8
     2020-03-21 23:29:00   dewpoint        9.5
     2020-03-21 23:29:00   humidity        49.1
     2020-02-24 16:23:09   state           on
     2020-03-19 20:17:36   subscriptions   cmnd/tasmota001/# cmnd/tasmota001_fb/# cmnd/tasmotas/#
     2020-03-21 23:29:00   temperature     20.6
Attributes:
   DbLogExclude .*
   DbLogInclude temperature,humidity,absoluteHumidity,dewpoint,LWT,POWER1
   IODev      MQTT2_FHEM_Server
   event-on-change-reading .*
   readingList tasmota001:tele/tasmota001/LWT:.* LWT
tasmota001:cmnd/tasmota001/POWER:.* POWER
tasmota001:tele/tasmota001/INFO1:.* { json2nameValue($EVENT) }
tasmota001:tele/tasmota001/INFO2:.* { json2nameValue($EVENT) }
tasmota001:tele/tasmota001/INFO3:.* { json2nameValue($EVENT) }
tasmota001:tele/tasmota001/STATE:.* { json2nameValue($EVENT) }
tasmota001:stat/tasmota001/LOGGING:.* LOGGING
tasmota001:stat/tasmota001/RESULT:.* { json2nameValue($EVENT) }
tasmota001:stat/tasmota001/POWER1:.* POWER1
tasmota001:tele/tasmota001/SENSOR:.* { json2nameValue($EVENT) }
   room       Dachboden
   setList    on cmnd/tasmota001/POWER on
off cmnd/tasmota001/POWER off
   stateFormat T: AM2301_Temperature°C, H: AM2301_Humidity%rH
   userReadings temperature { ReadingsVal("MQTT2_tasmota001","AM2301_Temperature",0) }, humidity { ReadingsVal("MQTT2_tasmota001","AM2301_Humidity",0) }
   webCmd     on:off


Mit folgender Anpassung des Attributes "userReadings" hat es dann geklappt.

Internals:
   BUSY       0
   DEF        https://github.com/arendst/Tasmota/tags 86400
   FUUID      5e344ed2-f33f-2b6d-188e-26c80943655ab87a
   Interval   86400
   LASTSEND   1584830280.37596
   MainURL    https://github.com/arendst/Tasmota/tags
   ModuleVersion 3.5.22 - 7.2.2020
   NAME       tasmotaupdates
   NOTIFYDEV  global
   NR         307
   NTFY_ORDER 50-tasmotaupdates
   STATE      <div style="text-align:left">last <a title="versions" href="https://github.com/arendst/Tasmota/tags">tasmota</a>-check => 2020-03-21 23:38:00<br><br><pre>| device                           | current |   new   |  released  |<br>---------------------------------------------------------------------<br>| <a href="/fhem?detail=MQTT2_tasmota001"><b>MQTT2_tasmota001                </b></a> | <b style="color:lightgray">  8.1.0</b> | <a href="https://github.com/arendst/Tasmota/releases/tag/v8.2.0"><b style="color:red">  8.2.0</b></a> | <a href="https://github.com/arendst/Tasmota/releases/tag/v8.2.0"><b style="color:black">21.03.2020</b></a> |<br>| <a href="/fhem?detail=MQTT2_tasmota002"><b>MQTT2_tasmota002                </b></a> | <b style="color:lightgray">  8.1.0</b> | <a href="https://github.com/arendst/Tasmota/releases/tag/v8.2.0"><b style="color:red">  8.2.0</b></a> | <a href="https://github.com/arendst/Tasmota/releases/tag/v8.2.0"><b style="color:black">21.03.2020</b></a> |<br>| <a href="/fhem?detail=MQTT2_tasmota003"><b>MQTT2_tasmota003                </b></a> | <b style="color:lightgray">  8.1.0</b> | <a href="https://github.com/arendst/Tasmota/releases/tag/v8.2.0"><b style="color:red">  8.2.0</b></a> | <a href="https://github.com/arendst/Tasmota/releases/tag/v8.2.0"><b style="color:black">21.03.2020</b></a> |<br></pre></div>
   TRIGGERTIME 1584914443.40141
   TRIGGERTIME_FMT 2020-03-22 23:00:43
   TYPE       HTTPMOD
   addr       https://github.com:443
   auth       0
   code       200
   compress   1
   conn       
   data       
   displayurl https://github.com/arendst/Tasmota/tags
   header     Cookie: _gh_sess=mItUEj3abj1Nefc1oBgkLvaCkdikz%2F2Ly0AGbwOVj0t63OQwFbcq7%2FDIHinB2OJuU0zqnB7any%2Bt4DjY0ZtA61imbjpMGZVIm2aQBj4BZ2rP6jvKmy%2BDlGrals1MS8mCiLbzHbip%2Bq4m9dQDK4rfk74%2B5cgax%2FHbNDq43u%2FAq4KdQae683CGo8kiAZI3%2FLb%2BDmTx3dpS0UgXQAiYEvVaArUJPOPWVHFmkZ6u8%2B%2F4q9s57qq%2FY6MmHEU9StZZiw8NgI0LwHUd9DHU7Vc0C8Ujqw%3D%3D--bvE1CvDnfj4E40mp--sR%2B%2BDwMRm0dxm5U9KEEkUw%3D%3D; _octo=GH1.1.1973285465.1584645435; logged_in=no
   host       github.com
   httpheader HTTP/1.1 200 OK
date: Sat, 21 Mar 2020 22:38:00 GMT
content-type: text/html; charset=utf-8
server: GitHub.com
status: 200 OK
vary: X-PJAX, Accept-Encoding, Accept, X-Requested-With
etag: W/"b9bef292404e8a3a996f1017fd01dea7"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
expect-ct: max-age=2592000, report-uri="https://api.github.com/_private/browser/errors"
content-security-policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; connect-src 'self' uploads.github.com www.githubstatus.com collector.githubapp.com api.github.com www.google-analytics.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com wss://live.github.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com; frame-ancestors 'none'; frame-src render.githubusercontent.com; img-src 'self' data: github.githubassets.com identicons.github.com collector.githubapp.com github-cloud.s3.amazonaws.com *.githubusercontent.com; manifest-src 'self'; media-src 'none'; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com
Content-Encoding: gzip
Age: 0
Accept-Ranges: bytes
Connection: close
X-GitHub-Request-Id: C8F2:3F08A:4B1FA16:6BD65B2:5E769748
   httpversion 1.0
   hu_blocking 0
   hu_filecount 12
   hu_port    443
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /arendst/Tasmota/tags
   protocol   https
   redirects  0
   timeout    2
   url        https://github.com/arendst/Tasmota/tags
   value      0
   CompiledRegexes:
   HTTPCookieHash:
     _gh_sess;:
       Name       _gh_sess
       Options    Path=/; HttpOnly; Secure
       Path       
       Value      mItUEj3abj1Nefc1oBgkLvaCkdikz%2F2Ly0AGbwOVj0t63OQwFbcq7%2FDIHinB2OJuU0zqnB7any%2Bt4DjY0ZtA61imbjpMGZVIm2aQBj4BZ2rP6jvKmy%2BDlGrals1MS8mCiLbzHbip%2Bq4m9dQDK4rfk74%2B5cgax%2FHbNDq43u%2FAq4KdQae683CGo8kiAZI3%2FLb%2BDmTx3dpS0UgXQAiYEvVaArUJPOPWVHFmkZ6u8%2B%2F4q9s57qq%2FY6MmHEU9StZZiw8NgI0LwHUd9DHU7Vc0C8Ujqw%3D%3D--bvE1CvDnfj4E40mp--sR%2B%2BDwMRm0dxm5U9KEEkUw%3D%3D
     _octo;:
       Name       _octo
       Options    Path=/; Domain=github.com; Expires=Fri, 19 Mar 2021 19:17:15 GMT; Secure
       Path       
       Value      GH1.1.1973285465.1584645435
     logged_in;:
       Name       logged_in
       Options    Path=/; Domain=github.com; Expires=Fri, 19 Mar 2021 19:17:15 GMT; HttpOnly; Secure
       Path       
       Value      no
   QUEUE:
   READINGS:
     2020-03-08 15:14:27   LAST_ERROR      read from https://github.com:443 timed out
     2020-01-31 16:59:31   LAST_REQUEST    update
     2020-03-21 23:38:00   MATCHED_READINGS latestVersion latestDate
     2020-03-21 20:17:15   latestDate      21.03.2020
     2020-03-21 20:17:15   latestVersion   8.2.0
     2020-03-21 23:38:00   updatableDevices MQTT2_tasmota001 (8.1.0 | 8.2.0 | 21.03.2020),MQTT2_tasmota002 (8.1.0 | 8.2.0 | 21.03.2020),MQTT2_tasmota003 (8.1.0 | 8.2.0 | 21.03.2020)
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        https://github.com/arendst/Tasmota/tags
     value      0
   defptr:
     readingBase:
       latestDate reading
       latestVersion reading
     readingNum:
       latestDate 02
       latestVersion 01
     readingOutdated:
     requestReadings:
       update:
         latestDate reading 02
         latestVersion reading 01
   sslargs:
Attributes:
   DbLogExclude .*
   enableControlSet 1
   event-on-change-reading .*
   event-on-update-reading LAST_ERROR,MATCHED_READINGS
   handleRedirects 0
   model      tasmota_firmware_updates
   reading01Name latestVersion
   reading01Regex commit-title">[\w\W]*?<a href=".*">[\w\W]*?v(\d*.\d*.\d*)[\w\W]*?</a>
   reading02Name latestDate
   reading02OExpr $val =~ m/^(.{4})-(.{2})-(.{2})$/ ;; "$3.$2.$1"
   reading02Regex relative-time[\w\W]*?datetime="(\d*-\d*-\d*)T\d*:\d*:\d*Z"
   room       InputOutput->MQTT2
   showError  1
   showMatched 1
   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;;
}
   timestamp-on-change-reading .*
   updatableDevicesMode UPDATABLEtasmotaupdatesSMODE
   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=Version!=")) {
      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;;
}
   userattr   reading01Name reading01Regex reading02Name reading02OExpr reading02Regex updatableDevicesMode:onlyUpdatable,all
   webCmd     reread


Nur falls noch jemand aus lauter Corona-Langeweile vor dem gleichen Problem stehen sollte wie meinereiner.

Idee an die netten Verantwortlichen des Modules: Eventuell lässt sich das vor dem Version allgemeingültig über eine RegExp oder sowas wegfiltern?

Gütes Nächtle und bleibt gesund.....