Neue Version von HTTPMOD mit neuen Features zum Testen

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

Vorheriges Thema - Nächstes Thema

amenomade

Die Änderung eines Attr würde aber ein rotes Fragezeichen jedes Mal oben links bringen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

StefanStrobel

Das stimmt natürlich.

Die Set-Funktion speichert die Liste der möglichen Werte bzw. Hints in $hash->{".setList"}.
Die wird aber sofort neu aus den Attributen generiert, wenn ein passendes Attribut geändert wird.
Dazu wird am Ende der Attr-Funktion ein Flag gesetzt:

if ($aName =~ /^[gs]et/ || $aName eq "enableControlSet") {
    $hash->{".updateHintList"} = 1;
}

Wenn man zur Laufzeit keine Attribute mehr anfasst, könnte man also auch in einer Expression $hash->{".setList"} modifizieren ...
Nur kann ich nicht garantieren, dass das bei künftigen Änderungen auch noch funktioniert.

Ebenso könnte man ein Attribut ändern, indem man direkt in die Attribut-Variablen schreibt. Auch nicht schön.

Ich nehme mal ein neues Attribut "setXYHintExpression" auf die Wunschliste, über das man eine Perl-Expression angeben kann, die dann die Hints dynamisch ergänzt ...

Gruss
   Stefan



alkazaa

#677
Hallo (und natürlich frohes Fest usw. usf.)!

Ich habe ein Problem mit einem per attribut definierten 'set', in dem die PUT Methode genutzt wird. Habe erst kürzlich gemerkt, dass das geht und wollte nun die Licht-An-Aus Funktion einer Miele Dunstabzughaube damit realisieren.

Das ging bei mir in der Vergangenheit über ein dummy und ein notify, mit dem letzlich eine Routine folgenden Inhalts aufgerufen wurde:
sub putDA {
  my $befehl = "curl -X PUT 'https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx/actions' -H 'accept: */*' -H 'Content-Type: application/json' -H 'Authorization: Bearer ";
  $befehl .= InternalVal("Dunsthaube","sid", "");
  if (@_[0] eq 'on') {
    $befehl .= "' -d '{\"light\":1}' &";
   } else {
    $befehl .= "' -d '{\"light\":2}' &";
  };
  Log 3,$befehl;
  system("$befehl");
  return 0;
}

Um diesen Umweg über eine extra dummy und ein extra notify zu vermeiden, habe ich die oben erwähnte "set-mit-PUT" Methode implementiert. Hier das komplette device-Listing:
Internals:
   BUSY       0
   DEF        https://api.mcs3.miele.com/v1/devices/000xxxxxxxx?language=de 120
   FUUID      5da421bf-f33f-a50b-de06-0b67e3955dbde971
   Interval   120
   JSONEnabled 1
   LASTSEND   1577365895.5201
   LastAuthTry 2019-12-26 14:10:41
   MainURL    https://api.mcs3.miele.com/v1/devices/000xxxxxxxx?language=de
   ModuleVersion 3.5.19 - 29.11.2019
   NAME       Dunsthaube
   NOTIFYDEV  global
   NR         55
   NTFY_ORDER 50-Dunsthaube
   STATE      Aus
   TRIGGERTIME 1577365961.65862
   TRIGGERTIME_FMT 2019-12-26 14:12:41
   TYPE       HTTPMOD
   addr       https://api.mcs3.miele.com:443
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl https://api.mcs3.miele.com/v1/devices/000xxxxxxxx?language=de
   header     Authorization: Bearer DE_xxxxxxxxxxxxxxxxxxxxxe8de0b
Content-Type: application/json
   host       api.mcs3.miele.com
   httpheader HTTP/1.1 200 OK
Date: Thu, 26 Dec 2019 13:11:35 GMT
Content-Type: application/json
Content-Length: 554
Connection: close
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
Access-Control-Allow-Methods: PUT, GET, POST, OPTIONS
Access-Control-Allow-Origin: *
Content-Encoding: gzip
Strict-Transport-Security: max-age=15724800; includeSubDomains
Vary: Accept-Encoding
   httpversion 1.0
   hu_blocking 0
   hu_filecount 7
   hu_port    443
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /v1/devices/000xxxxxxxx?language=de
   protocol   https
   redirects  0
   sid        DE_xxxxxxxxxxxxxxxxxxxxxe8de0b
   timeout    2
   url        https://api.mcs3.miele.com/v1/devices/000xxxxxxxx?language=de
   value      0
   CompiledRegexes:
   QUEUE:
   READINGS:
     2019-12-26 14:11:35   Licht           2
   REQUEST:
     data       
     header     Authorization: Bearer $sid
Content-Type: application/json
     ignoreredirects 0
     retryCount 0
     type       update
     url        https://api.mcs3.miele.com/v1/devices/000xxxxxxxx?language=de
     value      0
   defptr:
     readingBase:
       Licht      reading
     readingNum:
       Licht      01
     readingOutdated:
     requestReadings:
       update:
         Licht      reading 01
   sslargs:
Attributes:
   disable    0
   enableControlSet 1
   event-on-change-reading .*
   reAuthRegex 500.Internal.Server.Error|Unauthorized|default.backend...401
   reading01JSON state_light
   reading01Name Licht
   requestHeader01 Authorization: Bearer $sid
   requestHeader02 Content-Type: application/json
   room       Haus
   set01Data  {"light":$val}
   set01Header1 accept: */*
   set01Header2 Authorization: Bearer $sid
   set01Header3 Content-Type: application/json
   set01IMap  1:on,2:off
   set01Method PUT
   set01Name  Licht_
   set01URL   https://api.mcs3.miele.com/v1/devices/000xxxxxxxx/actions
   sid1URL    https://api.mcs3.miele.com/thirdparty/login/?response_type=code&state=login&client_id=xxxxxxxxxxxxxxxxxxxx&scope=&redirect_uri=https%3A%2F%2Fapi.mcs3.miele.com%2Fthirdparty%2Flogin%2F
   sid2Data   email=a.b@gmx.de&password=strenggeheim&redirect_uri=https%3A%2F%2Fapi.mcs3.miele.com%2Fthirdparty%2Flogin%2F&state=login&response_type=code&client_id=xxxxxxxxxxxxxxxxxxxx&vgInformationSelector=de-DE
   sid2IdRegex (?s)code=(DE_[0-9a-f]+)
   sid2IgnoreRedirects 1
   sid2URL    https://api.mcs3.miele.com/oauth/auth
   sid3Data   grant_type=authorization_code&code=$sid&redirect_uri=https%3A%2F%2Fapi.mcs3.miele.com%2Fthirdparty%2Flogin%2F&client_id=xxxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxxxxx
   sid3IdJSON access_token
   sid3URL    https://api.mcs3.miele.com/thirdparty/token/
   stateFormat {ReadingsVal($name,"Licht",0)==1 ? "An" : "Aus"}
   userattr   reading01JSON reading01Name requestHeader01 requestHeader02 set01Data set01Header1 set01Header2 set01Hint set01IMap set01Max set01Method:GET,POST,PUT set01Min set01Name set01URL setHeader1 sid1URL sid2Data sid2IdRegex sid2IgnoreRedirects:0,1 sid2URL sid3Data sid3IdJSON sid3URL
   verbose    3


Das funktioniert zwar...,
...aber danach sind keine 'reread' mehr möglich! An- und Ausschalten kann ich die Dunsthaube weiterhin mit 'set Dunsthaube Licht_ on/off", nur reread geht nicht mehr. Ein 'shutdown restart' bringt zwar alles wieder in Ordnung, aber nur bis 'set Dunsthaube' erneut aufgerufen wird. (Beim Schalten per dummy über den Aufruf von putDA() gbt es das Problem nicht).

Folgende Log-Auszüge haben mir leider auch nicht weiter geholfen:

Logauszug nach funktionierendem 'reread'
2019.12.26 13:00:05 5: Dunsthaube: set called with reread
2019.12.26 13:00:05 5: Dunsthaube: GetUpdate called (reread)
2019.12.26 13:00:05 5: Dunsthaube: AddToQueue adds type update to URL https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de, no data, header Authorization: Bearer $sid
Content-Type: application/json, retry 0, initial queue len: 0
2019.12.26 13:00:05 5: Dunsthaube: HandleSendQueue called, qlen = 1
2019.12.26 13:00:05 4: Dunsthaube: HandleSendQueue sends update with timeout 2 to https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de, No Data,
header: Authorization: Bearer DE_xxxxxxxxxxxxxxxxxfa5c899
Content-Type: application/json
2019.12.26 13:00:05 5: HttpUtils url=https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de
2019.12.26 13:00:05 4: IP: api.mcs3.miele.com -> 52.232.28.91
2019.12.26 13:00:05 5: HttpUtils request header:
GET /v1/devices/000xxxxxxxxx?language=de HTTP/1.0
Host: api.mcs3.miele.com
User-Agent: fhem
Accept-Encoding: gzip,deflate
Authorization: Bearer DE_xxxxxxxxxxxxxxxxxfa5c899
Content-Type: application/json

2019.12.26 13:00:05 4: https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de: HTTP response code 200
2019.12.26 13:00:05 5: HttpUtils https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de: Got data, length: 1419
2019.12.26 13:00:05 5: HttpUtils response header:
HTTP/1.1 200 OK
Date: Thu, 26 Dec 2019 12:00:05 GMT
Content-Type: application/json
Content-Length: 558
Connection: close
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
Access-Control-Allow-Methods: PUT, GET, POST, OPTIONS
Access-Control-Allow-Origin: *
Content-Encoding: gzip
Strict-Transport-Security: max-age=15724800; includeSubDomains
Vary: Accept-Encoding
2019.12.26 13:00:05 4: Dunsthaube: Read callback: request type was update retry 0,
header: HTTP/1.1 200 OK
Date: Thu, 26 Dec 2019 12:00:05 GMT
Content-Type: application/json
Content-Length: 558
Connection: close
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
Access-Control-Allow-Methods: PUT, GET, POST, OPTIONS
Access-Control-Allow-Origin: *
Content-Encoding: gzip
Strict-Transport-Security: max-age=15724800; includeSubDomains
Vary: Accept-Encoding, body length 1419
2019.12.26 13:00:05 5: Dunsthaube: Read callback: body
{"ident":{"type":{"key_localized":"Gerätetyp","value_raw":18,"value_localized":"Dunstabzugshaube"},"deviceName":"","deviceIdentLabel":{"fabNumber":"000xxxxxxxxx","fabIndex":"00","techType":"DA 6708 D","matNumber":"10755620","swids":[]},"xkmIdentLabel":{"techType":"EK039W","releaseVersion":"02.65"}},"state":{"ProgramID":{"value_raw":0,"value_localized":"","key_localized":"Programmbezeichnung"},"status":{"value_raw":5,"value_localized":"In Betrieb","key_localized":"Status"},"programType":{"value_raw":0,"value_localized":"Programm","key_localized":"Programmart"},"programPhase":{"value_raw":4608,"value_localized":"","key_localized":"Programmphase"},"remainingTime":[0,0],"startTime":[0,0],"targetTemperature":[{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"temperature":[{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"},{"value_raw":-32768,"value_localized":null,"unit":"Celsius"}],"signalInfo":false,"signalFailure":false,"signalDoor":false,"remoteEnable":{"fullRemoteControl":false,"smartGrid":false},"light":2,"elapsedTime":[],"spinningSpeed":{"unit":"U/min","value_raw":null,"value_localized":null,"key_localized":"Schleuderdrehzahl"},"dryingStep":{"value_raw":null,"value_localized":"","key_localized":"Trockenstufe"},"ventilationStep":{"value_raw":0,"value_localized":"","key_localized":"Lüfterstufe"},"plateStep":[]}}
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix , ref is HASH(0x58d6bf0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_, ref is HASH(0x5aa2648)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_dryingStep_, ref is HASH(0x5b1d010)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_dryingStep_key_localized to Trockenstufe
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_dryingStep_value_localized to
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_ventilationStep_, ref is HASH(0x5b284e0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_ventilationStep_key_localized to L�fterstufe
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_ventilationStep_value_localized to
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_ventilationStep_value_raw to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_signalFailure to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a ARRAY
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_remainingTime_, ref is ARRAY(0x5b2ee98)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_remainingTime_0 to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_remainingTime_1 to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a ARRAY
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_elapsedTime_, ref is ARRAY(0x5a9c6d0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_status_, ref is HASH(0x5a65ef8)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_status_key_localized to Status
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_status_value_localized to In Betrieb
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_status_value_raw to 5
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_spinningSpeed_, ref is HASH(0x5b2ecd0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_spinningSpeed_key_localized to Schleuderdrehzahl
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_spinningSpeed_unit to U/min
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_signalInfo to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a ARRAY
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_startTime_, ref is ARRAY(0x5b1caa0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_startTime_0 to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_startTime_1 to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_light to 2
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_programPhase_, ref is HASH(0x5b28798)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_programPhase_value_raw to 4608
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_programPhase_key_localized to Programmphase
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_programPhase_value_localized to
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_remoteEnable_, ref is HASH(0x5ada2b8)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_remoteEnable_fullRemoteControl to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_remoteEnable_smartGrid to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_signalDoor to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a ARRAY
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_targetTemperature_, ref is ARRAY(0x5b249f0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_targetTemperature_01_, ref is HASH(0x5b1cde8)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_targetTemperature_01_unit to Celsius
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_targetTemperature_01_value_raw to -32768
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a ARRAY
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_temperature_, ref is ARRAY(0x5b241b0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_temperature_01_, ref is HASH(0x418df70)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_temperature_01_value_raw to -32768
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_temperature_01_unit to Celsius
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_temperature_02_, ref is HASH(0x5aa21c8)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_temperature_02_value_raw to -32768
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_temperature_02_unit to Celsius
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_temperature_03_, ref is HASH(0x5b28720)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_temperature_03_unit to Celsius
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_temperature_03_value_raw to -32768
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_programType_, ref is HASH(0x5aa4658)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_programType_value_localized to Programm
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_programType_key_localized to Programmart
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_programType_value_raw to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a ARRAY
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_plateStep_, ref is ARRAY(0x41907b0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix state_ProgramID_, ref is HASH(0x5adc1b8)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_ProgramID_value_raw to 0
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_ProgramID_key_localized to Programmbezeichnung
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets state_ProgramID_value_localized to
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix ident_, ref is HASH(0x5aa2c48)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix ident_type_, ref is HASH(0x5a67150)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_type_value_raw to 18
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_type_key_localized to Ger�tetyp
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_type_value_localized to Dunstabzugshaube
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix ident_deviceIdentLabel_, ref is HASH(0x5adad08)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_deviceIdentLabel_matNumber to 10755620
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_deviceIdentLabel_fabIndex to 00
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a ARRAY
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix ident_deviceIdentLabel_swids_, ref is ARRAY(0x5aa0c40)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_deviceIdentLabel_fabNumber to 000xxxxxxxxx
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_deviceIdentLabel_techType to DA 6708 D
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter doing recursion because value is a HASH
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter called : prefix ident_xkmIdentLabel_, ref is HASH(0x5a654f0)
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_xkmIdentLabel_techType to EK039W
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_xkmIdentLabel_releaseVersion to 02.65
2019.12.26 13:00:05 5: Dunsthaube: JSON Flatter sets ident_deviceName to
2019.12.26 13:00:05 4: Dunsthaube: extracted JSON values to internal
2019.12.26 13:00:05 5: Dunsthaube: ExtractSid called, context reading, num
2019.12.26 13:00:05 5: Dunsthaube: GetRegex found precompiled reAuthRegex for  as (?^:500.Internal.Server.Error|Unauthorized|default.backend...401)
2019.12.26 13:00:05 5: Dunsthaube: CheckAuth is checking buffer with ReAuthRegex (?^:500.Internal.Server.Error|Unauthorized|default.backend...401)
2019.12.26 13:00:05 5: Dunsthaube: CheckAuth decided no authentication required
2019.12.26 13:00:05 5: Dunsthaube: Read starts parsing response to update with defined readings: 01
2019.12.26 13:00:05 5: Dunsthaube: ExtractReading Licht with json state_light ...
2019.12.26 13:00:05 5: Dunsthaube: ExtractReading for reading01-1 sets Licht to 2
2019.12.26 13:00:05 4: Dunsthaube: Read response matched 1, unmatch 0 Reading(s)
2019.12.26 13:00:05 5: Dunsthaube: Read response to update matched Licht
2019.12.26 13:00:05 5: Dunsthaube: HandleSendQueue called, qlen = 0


Logauszug nach nicht-funktionierendem 'reread'

2019.12.26 13:04:14 5: Dunsthaube: set called with reread
2019.12.26 13:04:14 5: Dunsthaube: GetUpdate called (reread)
2019.12.26 13:04:14 5: Dunsthaube: AddToQueue adds type update to URL https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de, no data, header Authorization: Bearer $sid
Content-Type: application/json, retry 0, initial queue len: 0
2019.12.26 13:04:14 5: Dunsthaube: HandleSendQueue called, qlen = 1
2019.12.26 13:04:14 4: Dunsthaube: HandleSendQueue sends update with timeout 2 to https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de, No Data,
header: Authorization: Bearer DE_xxxxxxxxxxxxxxxxxfa5c899
Content-Type: application/json
2019.12.26 13:04:14 5: HttpUtils url=https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de
2019.12.26 13:04:14 4: IP: api.mcs3.miele.com -> 52.232.28.91
2019.12.26 13:04:14 5: HttpUtils request header:
PUT /v1/devices/000xxxxxxxxx?language=de HTTP/1.0
Host: api.mcs3.miele.com
User-Agent: fhem
Accept-Encoding: gzip,deflate
Authorization: Bearer DE_xxxxxxxxxxxxxxxxxfa5c899
Content-Type: application/json

2019.12.26 13:04:14 4: https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de: HTTP response code 405
2019.12.26 13:04:14 5: HttpUtils https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx?language=de: Got data, length: 52
2019.12.26 13:04:14 5: HttpUtils response header:
HTTP/1.1 405 Method Not Allowed
...
Und ab hier läufts dann natürlich schief. Weitere Zeilen weggelassen, außer den beiden letzten:
...
2019.12.26 13:04:17 4: Dunsthaube: Read response to update didn't match any Reading
2019.12.26 13:04:17 5: Dunsthaube: HandleSendQueue called, qlen = 0


Logauszug nach Aufruf von "set Dunsthaube Licht_ on"
2019.12.26 13:02:39 5: Dunsthaube: set called with Licht_ on
2019.12.26 13:02:39 5: Dunsthaube: set found option Licht_ in attribute set01Name
2019.12.26 13:02:39 5: Dunsthaube: MapConvert called from Set converted on to 1 with reversed map on:1, off:2,
2019.12.26 13:02:39 4: Dunsthaube: set will now set Licht_ -> 1
2019.12.26 13:02:39 5: Dunsthaube: AddToQueue adds type set01 to URL https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx/actions, data {"light":$val}, header Authorization: Bearer $sid
Content-Type: application/json, retry 0, initial queue len: 0
2019.12.26 13:02:39 5: Dunsthaube: HandleSendQueue called, qlen = 1
2019.12.26 13:02:39 5: Dunsthaube: HandleSendQueue - call with HTTP METHOD: PUT
2019.12.26 13:02:39 4: Dunsthaube: HandleSendQueue sends set01 with timeout 2 to https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx/actions,
data: {"light":1},
header: accept: */*
Authorization: Bearer DE_xxxxxxxxxxxxxxxxxfa5c899
Content-Type: application/json
2019.12.26 13:02:39 5: HttpUtils url=https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx/actions
2019.12.26 13:02:39 4: IP: api.mcs3.miele.com -> 52.232.28.91
2019.12.26 13:02:39 5: HttpUtils request header:
PUT /v1/devices/000xxxxxxxxx/actions HTTP/1.0
Host: api.mcs3.miele.com
User-Agent: fhem
Accept-Encoding: gzip,deflate
Authorization: Bearer DE_xxxxxxxxxxxxxxxxxfa5c899
Content-Type: application/json
Content-Length: 11

2019.12.26 13:02:40 4: https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx/actions: HTTP response code 204
2019.12.26 13:02:40 5: HttpUtils https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx/actions: Got data, length: 0
2019.12.26 13:02:40 5: HttpUtils response header:
HTTP/1.1 204 No Content
Date: Thu, 26 Dec 2019 12:02:40 GMT
Content-Type: application/octet-stream
Connection: close
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
Access-Control-Allow-Methods: PUT, GET, POST, OPTIONS
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=15724800; includeSubDomains
2019.12.26 13:02:40 4: Dunsthaube: Read callback: request type was set01 retry 0,
header: HTTP/1.1 204 No Content
Date: Thu, 26 Dec 2019 12:02:40 GMT
Content-Type: application/octet-stream
Connection: close
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
Access-Control-Allow-Methods: PUT, GET, POST, OPTIONS
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=15724800; includeSubDomains, no body
2019.12.26 13:02:40 5: Dunsthaube: Read callback: body empty
2019.12.26 13:02:40 5: Dunsthaube: ExtractSid called, context set, num 01
2019.12.26 13:02:40 5: Dunsthaube: GetRegex found precompiled reAuthRegex for  as (?^:500.Internal.Server.Error|Unauthorized|default.backend...401)
2019.12.26 13:02:40 5: Dunsthaube: CheckAuth is checking buffer with ReAuthRegex (?^:500.Internal.Server.Error|Unauthorized|default.backend...401)
2019.12.26 13:02:40 5: Dunsthaube: CheckAuth decided no authentication required


Logauszug nach Aufruf von "set Dunstdummy on"
2019.12.26 13:29:21 4: dummy set Dunstdummy on
2019.12.26 13:29:21 3: curl -X PUT 'https://api.mcs3.miele.com/v1/devices/000xxxxxxxxx/actions' -H 'accept: */*' -H 'Content-Type: application/json' -H 'Authorization: Bearer DE_2c50fa09612b9011fdd9235b9bc68267' -d '{"light":1}' &
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    11    0     0  100    11      0      9  0:00:01  0:00:01 --:--:--     9
100    11    0     0  100    11      0      4  0:00:02  0:00:02 --:--:--     4
100    11    0     0  100    11      0      3  0:00:03  0:00:02  0:00:01     3


Woran könnte es liegen?

Dank im Voraus für jede Hilfe!

-Franz

amenomade

Warum auch immer, macht er wieder ein PUT bei reread.
Versuch mal deine set01XX Attribute set02XX umzubenennen.
Wenn es nicht reicht, das Problem zu umgehen, muss wahrscheinlich Stefan schauen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

alkazaa

Danke für den Hinweis auf das PUT an der falschen Stelle (hätte ich auch selbst sehen können, war aber dann schon zu beriebsblind).

Leider hat der Vorschlag mit dem Umnummerieren der set01XX Attribute nichts gebracht. Das Setzen von  setxxMethod=PUT scheint sehr 'sticky' zu sein und wird dann wohl auch vom reread genommen. Da das set-mit-PUT wohl erst am 8.11. implementiert wurde (laut Kommentar in 98_HTTPMOD.pm), ist's vielleicht kein Wunder, dass es noch nicht auffiel.

-Franz

StefanStrobel

Hallo Franz,

da bist Du über einen Bug gestolpert.
Bitte probier mal die angehängte neue Version.

Gruss / Thanx
    Stefan

alkazaa

Hallo Stefan,
es tut jetzt!
Vielen Dank und ein frohes Neues!

-Franz

holle75

Zitat von: StefanStrobel am 23 Dezember 2019, 12:33:50
Hallo holle75,

Das Abfragen von Webseiten macht HTTPMOD schon immer asynchron ohne zu blockieren.
Eventuell hängt es aber an den DNS-Abfragen.
Das kannst Du über das globale Attribut dnsServer steuern (siehe https://forum.fhem.de/index.php/topic,53309.msg449992.html#msg449992)

Gruß
    Stefan

Merci Stefan, attr dnsServer  habe ich schon angelegt und mit der IP meiner FritzBox belegt. Das war wohl falsch. Jetzt auf den DNS Server der auch IN der Fritte angegeben ist umgestellt und werde beobachten und berichten.

Romoker

Die Attribut-Templates sind schon eine tolle Sache. Ich habe heute das Template DWD_weather_warnings ausprobiert und bin über einen kleinen Fehler gestolpert, mit der Folge, dass die JSON-Struktur nicht als gültig erkannt wurde. Ursache war ein überflüssiges Semikolon in der preProcessRegex-Definition:
s/warnWetter..............|\);;|\t|\n|\r//g
Mit dieser Definition funktioniert das Template:
s/warnWetter..............|\);|\t|\n|\r//g

Vielleicht kann der Maintainer bei Gelegenheit das Attribut-Template korrigieren.

Ich wünsche allen ein gutes neues FHEM-Jahr 2020
BeagleBoneBlack & Raspberry Pi 4; FB7490; div. Homematic Komponenten; CUL433: CUL_TX, Conbee II, SOMFY, 1-Wire, Z-Wave, Zigbee, SmartPlugs von Sonoff und Shelly mit MQTT

Beta-User

Gutes neues zusammen!

Danke für die Rückmeldung zu attrTemplate@HTTPMOD  :) . Problem beim DWD-template ist mit dem heutigen Update gefixt.

(Anmerkung: Solche Meldungen bitte lieber in dem "Fragen..."-Thread speziell zu den attrTemplates lt. MAINTAINER.txt).
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

fireball

#685
Hi,

kann man über HTTPMOD auch 2 Values in ein setURL übergeben?

   set03Data  {"action" : $val}
   set03Hint  0,1,2
   set03Name  Taster
   set03URL   http://192.168.178.128/ocf/$val2/shutter/1


Ich würde gern set HTTPMOD Taster val val2.

VG
René

PS: noch eine Frage... aus irgendwelchen umstanden, verliert Interval sehr oft seinen Wert und ich muss es neu setzen. keine ahnung, warum das nicht gespeichert bleibt.

holle75

... bekomme, da ich HTTPMOD Readings in einem DOIF nutze, wenn update von Readings schieflaufen, gerne mal Fehler a la


2020.01.02 15:48:09 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 18284) line 1.
2020.01.02 15:48:09 3: eval: Container_XTENDER_Schalter_BoilerAnAusDOIF: warning in condition c01
2020.01.02 15:48:11 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 18301) line 1.
2020.01.02 15:48:11 3: eval: Container_XTENDER_Schalter_BoilerAnAusDOIF: warning in condition c01
2020.01.02 16:01:09 1: PERL WARNING: Argument "" isn't numeric in numeric gt (>) at (eval 19787) line 1.
2020.01.02 16:01:09 3: eval: Container_XTENDER_Schalter_BoilerAnAusDOIF: warning in condition c01


im fhem-log. Wie kann ich eine "0" in diesem Fall für das entsprechende Reading in HTTPMOD ersetzen?

commandref gibt mir hier viele Möglichkeiten wie MaxAge, MaxAgeReplacement, MaxAgeReplacementMode, DeleteIfUnmatched, DeleteOnError, und wahrscheinlich auch das attr, was man dafür verwenden sollte  .... nur welches macht das von mir angedachte und wie genau?

StefanStrobel

Hallo holle75,

Zunächst kannst kannst Du beim Parsen schon entscheiden, ob ein leerer String überhaupt ein zulässiger Wert ist. Falls Du das mit Regexes machst und für das Reading ein (.*) verwendest, könntest Du den durch (.+) ersetzen, dann matcht der leere String nicht (siehe Perl Regexes).

Danach kannst Du das Ergebnis mit einer Perl-Expression im Attribut readingXYOExpr weiterverarbeiten und z.B. Werte ersetzen.

Zudem kannst Du bei DOIF die Bedingung so umformulieren, dass ein leerer String nicht zu Fehlern führt.

Gruß
    Stefan

holle75

Zitat von: StefanStrobel am 03 Januar 2020, 18:25:08
Hallo holle75,

Zunächst kannst kannst Du beim Parsen schon entscheiden, ob ein leerer String überhaupt ein zulässiger Wert ist. Falls Du das mit Regexes machst und für das Reading ein (.*) verwendest, könntest Du den durch (.+) ersetzen, dann matcht der leere String nicht (siehe Perl Regexes).

Danach kannst Du das Ergebnis mit einer Perl-Expression im Attribut readingXYOExpr weiterverarbeiten und z.B. Werte ersetzen.

Zudem kannst Du bei DOIF die Bedingung so umformulieren, dass ein leerer String nicht zu Fehlern führt.

Gruß
    Stefan

Danke Stefan, meine Regexes sind leider ohne .*


get02Regex <FloatValue>([1-3][0-9]\.?[0-9]?[0-9]?)

get05Regex <FloatValue>([-.0-9]*)


ich hatte das Gefühl, da schon recht explizit zu sein?

Wie formuliere ich die Bedingung in dem DOIF um?

Im Moment sieht´s so aus:

.... [XtenderReadout:Volt_Batt] > 27 and [XtenderReadout:Charge_Discharge_W] > 0 ....

Beta-User

Na ja,
get05Regex <FloatValue>([-.0-9]*)
ist im Prinzip nur ein "erweitertes .*"...
Mach' mal
get05Regex <FloatValue>([-.0-9]+)

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