[gelöst] HTTPMOD: set-Befehl über die Befehlszeile funktioniert nicht

Begonnen von frober, 04 Mai 2021, 20:18:51

Vorheriges Thema - Nächstes Thema

frober

Hallo,

ich möchte mein Shelly über http konfigurieren.

Im Modul funktioniert das Set, über die Befehlszeile oder notify gibt
set shedule_Rollo_Schlafzimmer Urlaub
keine Reaktion. :(

Internals:
   BUSY       0
   DEF        none 0
   FUUID      608d804b-f33f-ff70-8483-0d3513f80f8a4dec
   Interval   0
   MainURL   
   ModuleVersion 4.1.08 - 1.4.2021
   NAME       shedule_Rollo_Schlafzimmer
   NOTIFYDEV  global
   NR         463
   NTFY_ORDER 50-shedule_Rollo_Schlafzimmer
   STATE      stop
   TYPE       HTTPMOD
   value      0
   HttpUtils:
     NAME       
     addr       http://ip:80
     auth       1
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl http://user:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
     header     
     host       ip
     httpheader HTTP/1.1 200 OK
Server: Mongoose/6.18
Connection: close
Content-Type: application/json
Content-Length: 557
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    80
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
     protocol   http
     pwd        pw
     redirects  0
     timeout    2
     url        http://user:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
     user       user
     sslargs:
   QUEUE:
   READINGS:
     2021-05-04 16:31:48   btn_reverse     0
     2021-05-04 16:31:48   button_type     momentary
     2021-05-04 16:31:48   default_state   stop
     2021-05-04 16:31:48   input_mode      openclose
     2021-05-04 16:31:48   is_valid        1
     2021-05-04 16:31:48   maxtime         20
     2021-05-04 16:31:48   maxtime_close   20
     2021-05-04 16:31:48   maxtime_open    21
     2021-05-04 16:31:48   obstacle_action stop
     2021-05-04 16:31:48   obstacle_delay  1
     2021-05-04 16:31:48   obstacle_mode   disabled
     2021-05-04 16:31:48   obstacle_power  200
     2021-05-04 16:31:48   off_power       2
     2021-05-04 16:31:48   positioning     1
     2021-05-04 16:31:48   power           0
     2021-05-04 16:31:48   safety_action   stop
     2021-05-04 16:31:48   safety_allowed_on_trigger none
     2021-05-04 16:31:48   safety_mode     while_opening
     2021-05-04 16:31:48   safety_switch   0
     2021-05-04 16:31:48   schedule        1
     2021-05-04 16:31:48   schedule_rules_0 0800-0123456-open
     2021-05-04 16:31:48   schedule_rules_1 0019ass-0123456-close
     2021-05-01 18:51:04   schedule_rules_2 0800-56-open
     2021-05-04 16:31:48   state           stop
     2021-05-04 16:31:48   swap            0
     2021-05-04 16:31:48   swap_inputs     0
   REQUEST:
     context    set
     data       
     header     
     ignoreredirects 0
     method     
     num        01
     retryCount 0
     type       set01
     url        http://user:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
     value      0
   defptr:
     readingBase:
       btn_reverse get
       button_type get
       default_state get
       input_mode get
       is_valid   get
       maxtime    get
       maxtime_close get
       maxtime_open get
       obstacle_action get
       obstacle_delay get
       obstacle_mode get
       obstacle_power get
       off_power  get
       positioning get
       power      get
       safety_action get
       safety_allowed_on_trigger get
       safety_mode get
       safety_switch get
       schedule   get
       schedule_rules_0 get
       schedule_rules_1 get
       state      get
       swap       get
       swap_inputs get
     readingNum:
       btn_reverse 01
       button_type 01
       default_state 01
       input_mode 01
       is_valid   01
       maxtime    01
       maxtime_close 01
       maxtime_open 01
       obstacle_action 01
       obstacle_delay 01
       obstacle_mode 01
       obstacle_power 01
       off_power  01
       positioning 01
       power      01
       safety_action 01
       safety_allowed_on_trigger 01
       safety_mode 01
       safety_switch 01
       schedule   01
       schedule_rules_0 01
       schedule_rules_1 01
       state      01
       swap       01
       swap_inputs 01
     readingOutdated:
     requestReadings:
       get01:
         btn_reverse get 01
         button_type get 01
         default_state get 01
         input_mode get 01
         is_valid   get 01
         maxtime    get 01
         maxtime_close get 01
         maxtime_open get 01
         obstacle_action get 01
         obstacle_delay get 01
         obstacle_mode get 01
         obstacle_power get 01
         off_power  get 01
         positioning get 01
         power      get 01
         safety_action get 01
         safety_allowed_on_trigger get 01
         safety_mode get 01
         safety_switch get 01
         schedule   get 01
         schedule_rules_0 get 01
         schedule_rules_1 get 01
         state      get 01
         swap       get 01
         swap_inputs get 01
Attributes:
   extractAllJSON 1
   get01Name  Shedule
   get01URL   http://user:pw@ip/settings/roller/0
   room       Technik->Rolladen
   set01Name  Wochentag
   set01NoArg on
   set01URL   http://user:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
   set02Name  Urlaub
   set02NoArg on
   set02URL   http://user:pw@ip/settings/roller/0?schedule_rules=0800-0123456-open,0019ass-0123456-close


Funktioniert HTTPMOD dies bezgl. anders, oder muss ich noch etwas konfigurieren?
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

StefanStrobel

Hallo frober,

setz doch mal verbose für Deine Device auf 5 und poste einen Auszug aus dem Log, in dem man den set-Befehl und die weitere Verarbeitung sieht.
Zusätzlich wäre die Konfiguration hilfreich.

Gruss
   Stefan

frober

#2
Zitat von: StefanStrobel am 06 Mai 2021, 17:13:01
Hallo frober,

setz doch mal verbose für Deine Device auf 5 und poste einen Auszug aus dem Log, in dem man den set-Befehl und die weitere Verarbeitung sieht.
Zusätzlich wäre die Konfiguration hilfreich.

Gruss
   Stefan

Hallo Stefan,

ich muss meine Aussage revidieren, das Set funktioniert.
Die Readings werden auf einmal nicht mehr aktualisiert.
Das hat mich getäuscht, da die Readings, wenn ich im Modul das set benutzt habe noch aktualisiert wurden.

Dazu kam, dass ich im Shelly einen Browserrefresh brauche um die geänderten Daten zu sehen. Ein umschalten zwischen den Funktionen reicht nicht.

Nun werden die Readings überhaupt nicht mehr aktualisiert, habe schon einen reboot von Fhem gemacht.
Es funktioniert soweit alles, die readings ändern sich nur über get shedule, das hat mich verwirrt.

Gibt es hier keine Rückmeldung beim set, so wie in den anderen Modulen?

Die def als RAW:
defmod shedule_Rollo_Schlafzimmer HTTPMOD none 0
attr shedule_Rollo_Schlafzimmer extractAllJSON 1
attr shedule_Rollo_Schlafzimmer get01Name Shedule
attr shedule_Rollo_Schlafzimmer get01URL http://usr:pw@ip/settings/roller/0
attr shedule_Rollo_Schlafzimmer room Technik->Rolladen
attr shedule_Rollo_Schlafzimmer set01Name Wochentag
attr shedule_Rollo_Schlafzimmer set01NoArg 1
attr shedule_Rollo_Schlafzimmer set01URL http://usr:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open
attr shedule_Rollo_Schlafzimmer set02Name Urlaub
attr shedule_Rollo_Schlafzimmer set02NoArg 1
attr shedule_Rollo_Schlafzimmer set02URL http://usr:pw@ip/settings/roller/0?schedule_rules=0800-0123456-open,0019ass-0123456-close
attr shedule_Rollo_Schlafzimmer verbose 5


Verbose5:
2021.05.06 17:29:34 5: shedule_Rollo_Schlafzimmer: set called with Wochentag
2021.05.06 17:29:34 5: shedule_Rollo_Schlafzimmer: set found option Wochentag in attribute set01Name
2021.05.06 17:29:34 4: shedule_Rollo_Schlafzimmer: set will now set Wochentag
2021.05.06 17:29:34 5: shedule_Rollo_Schlafzimmer: AddToQueue adds type set01 to URL http://usr:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open, no data, no headers, retry 0, initial queue len: 0
2021.05.06 17:29:34 5: shedule_Rollo_Schlafzimmer: HandleSendQueue called from AddToSendQueue, qlen = 1
2021.05.06 17:29:34 4: shedule_Rollo_Schlafzimmer: HandleSendQueue sends set01 with timeout 2 to http://usr:pw@ip/settings/roller/0?schedule_rules=0019bsr-01234-open,0019ass-0123456-close,0800-56-open, No Data, No Header
2021.05.06 17:29:36 5: shedule_Rollo_Schlafzimmer: ReadCallback called from __ANON__
2021.05.06 17:29:36 4: shedule_Rollo_Schlafzimmer: Read callback: request type was set01 retry 0,
header: HTTP/1.1 200 OK
Server: Mongoose/6.18
Connection: close
Content-Type: application/json
Content-Length: 557, body length 557
2021.05.06 17:29:36 5: shedule_Rollo_Schlafzimmer: Read callback: body
{"maxtime":20.00,"maxtime_open":21.00,"maxtime_close":20.00,"default_state":"stop","swap":false,"swap_inputs":false,"input_mode":"openclose","button_type":"momentary","btn_reverse":0,"state":"stop","power":0.00,"is_valid":true,"safety_switch":false,"schedule":true,"schedule_rules":["0019bsr-01234-open","0019ass-0123456-close","0800-56-open"],"obstacle_mode":"disabled","obstacle_action":"stop","obstacle_power":200,"obstacle_delay":1,"safety_mode":"while_opening","safety_action":"stop","safety_allowed_on_trigger":"none","off_power":2,"positioning":true}
2021.05.06 17:29:36 4: shedule_Rollo_Schlafzimmer: BodyDecode is not decoding the response body (charset not found, bodyDecode defaults to none)
2021.05.06 17:29:36 4: shedule_Rollo_Schlafzimmer: extracted JSON values to internal
2021.05.06 17:29:36 5: shedule_Rollo_Schlafzimmer: GetCookies is looking for Cookies
2021.05.06 17:29:36 5: shedule_Rollo_Schlafzimmer: ExtractSid called, context set, num 01
2021.05.06 17:29:36 4: shedule_Rollo_Schlafzimmer: checking for redirects, code=200, ignore=0
2021.05.06 17:29:36 4: shedule_Rollo_Schlafzimmer: no redirects to handle
2021.05.06 17:29:36 5: shedule_Rollo_Schlafzimmer: Read callback sets LAST_REQUEST to set01
2021.05.06 17:29:36 5: shedule_Rollo_Schlafzimmer: CheckAuth decided no authentication required


aktuelle readings nach dem Verbose5-Test:
setstate shedule_Rollo_Schlafzimmer stop
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 btn_reverse 0
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 button_type momentary
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 default_state stop
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 input_mode openclose
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 is_valid 1
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 maxtime 20
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 maxtime_close 20
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 maxtime_open 21
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 obstacle_action stop
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 obstacle_delay 1
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 obstacle_mode disabled
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 obstacle_power 200
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 off_power 2
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 positioning 1
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 power 0
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 safety_action stop
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 safety_allowed_on_trigger none
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 safety_mode while_opening
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 safety_switch 0
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 schedule 1
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 schedule_rules_0 0800-0123456-open
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 schedule_rules_1 0019ass-0123456-close
setstate shedule_Rollo_Schlafzimmer 2021-05-01 18:51:04 schedule_rules_2 0800-56-open
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 state stop
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 swap 0
setstate shedule_Rollo_Schlafzimmer 2021-05-04 16:31:48 swap_inputs 0


Jetzt habe ich noch alle Readings gelöscht, das set ausgeführt, es werden keine neuen Readings mehr angelegt. :o

Nachtrag: Ein Reboot des Raspi hat auch nicht geholfen, es gibt keine Readings mehr im Modul.

Danke und Grüße
Bernd
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

StefanStrobel

Hallo Bernd,

Bei HTTPMOD definierst Du ja für einen get- oder set-Befehl, welche HTTP-Requests an einen Web-Server gesendet werden.
Ob bei einem set-Befehl tatsächlich ein Wert gesetzt wird, der einem Reading entspricht, ist nicht sicher.
Oft wird ein Request vom Server auch so beantwortet, dass der neue Wert gar nicht in der Response steht.
Um den neu gesetzten Wert zu lesen / zu verifizieren, muss HTTPMOD dann einen weiteren Request senden, der eventuell in einem get-Befehl definiert ist oder auch nicht.
Da das alles im Ermessen des Anwenders ist, ist auch die Zuordnung zwischen einem set-Befehl und einem darauf möglicherweise sinnvollen get-Befehl Definitionssache.

Das Attribut, das Du suchst ist vermutlich

(get|set)[0-9]*FollowGet
allows to chain a get command after another set or get command.
If for example you want to set a new required temerature with a set 'TargetTemp' command and this set command changes the temperature with a series of HTTP requests in your heating system, then you can automaticaly do a get 'TargetTemp' to read out the new value from your heating.
The value of this attribute must match a defined get command name.


Gruss
   Stefan

frober

#4
Zitat von: StefanStrobel am 07 Mai 2021, 07:48:56
Hallo Bernd,

Bei HTTPMOD definierst Du ja für einen get- oder set-Befehl, welche HTTP-Requests an einen Web-Server gesendet werden.
Ob bei einem set-Befehl tatsächlich ein Wert gesetzt wird, der einem Reading entspricht, ist nicht sicher.
Oft wird ein Request vom Server auch so beantwortet, dass der neue Wert gar nicht in der Response steht.
Um den neu gesetzten Wert zu lesen / zu verifizieren, muss HTTPMOD dann einen weiteren Request senden, der eventuell in einem get-Befehl definiert ist oder auch nicht.
Da das alles im Ermessen des Anwenders ist, ist auch die Zuordnung zwischen einem set-Befehl und einem darauf möglicherweise sinnvollen get-Befehl Definitionssache.

Das Attribut, das Du suchst ist vermutlich

(get|set)[0-9]*FollowGet
allows to chain a get command after another set or get command.
If for example you want to set a new required temerature with a set 'TargetTemp' command and this set command changes the temperature with a series of HTTP requests in your heating system, then you can automaticaly do a get 'TargetTemp' to read out the new value from your heating.
The value of this attribute must match a defined get command name.


Gruss
   Stefan

Hallo Stefan,

danke, das werde ich ausprobieren.
Den Thread setze ich schonmal auf gelöst.

P.S. im Browser bekomme ich die geänderte Konfig. als requests.

Grüße Bernd
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

Durch deinen Wink, habe ich selbst noch einmal nachgelesen (Englisch war nicht mein Lieblingsfach) und hab folgendes gefunden:

Zitatset[0-9]*ParseResponse
defines that the HTTP response to the set will be parsed as if it was the response to a get command.

Damit funktioniert es in einem Schritt  :)
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...