S7D_Write - Klick auf devStateIcon löst keine off events aus

Begonnen von nuccleon, 09 Februar 2019, 10:16:58

Vorheriges Thema - Nächstes Thema

nuccleon

Hallo Zusammen,

ich habe mir ein S7D_Write device angelegt um auf meiner S7 Steuerung ein Bit zu toggeln.

Funktioniert auch wenn man man auf on oder off klickt.

Was nicht funktioniert, ist das toggeln über das devStateIcon - also das Lampensymbol in der DeviceOverview. Es wird ausschließlich das Event on generiert. Also einschalten, ja, ausschalten nein :-/


2019-02-09 10:06:36 S7_DWrite blind0_EN_AUTO_DAY_POS on
2019-02-09 10:06:37 S7_DWrite blind0_EN_AUTO_DAY_POS on



Internals:
   ADDRESS    4.1
   AREA       db
   CPU015_MSGCNT 3745
   CPU015_TIME 2019-02-09 10:05:53
   DB         1000
   DEF        db 1000 4.1
   FUUID      5c5dfcb7-f33f-3b45-2df3-159ce24eefba638c
   IODev      CPU015
   LASTInputDev CPU015
   LENGTH     1
   MSGCNT     3745
   NAME       blind0_EN_AUTO_DAY_POS
   NR         93
   POSITION   33
   STATE      on
   TYPE       S7_DWrite
   READINGS:
     2019-02-09 10:05:53   state           on
Attributes:
   IODev      CPU015
   alias      EN_AUTO_DAY_POS
   group      blind0
   sortby     15
   verbose    5


Das Problem ist, dass der Link im Frontend von FHEM in DeviceOverview auch immer nur auf on verweist?
<a href="/fhem?cmd.blind0_EN_AUTO_DAY_POS=set blind0_EN_AUTO_DAY_POS ON&amp;room=Unsorted&fwcsrf=csrf_228011435083029">

Ich habe auch schon mal einen Blick in das Modul S7_DWrite.pm geworfen, aber da werde ich überhaupt nicht schlau. Wie kommt denn der Link im Frontend zustande?

Hat jemand eine Idee?



KernSani

Attribut devStateIcon, siehe commandref


Kurz, weil mobil
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

nuccleon

Leider nein. Ich bin aber einen Schritt weiter. Mit folgendem Workaround funktioniert das togglen der Lampe.
attr test eventMap /ON:on/OFF:off/

S7D_Write.pm und 01_FHEMWEB.pm sind sich uneinig darüber, ob on / off groß oder kleingeschrieben ist :-/

Ich hab mal ein bischen in 01_FHEMWEB.pm gestöbert und folgendes herausgefunden:


01_FHEMWEB Line 3109
my $allSets = FW_widgetOverride($d, getAllSets($d, $FW_chash));
my $state = $defs{$d}{STATE};


S7D_Write liefert in der Variable $allSets ON OFF TRIGGER.
In $state steht aber on, bzw off.

Das führt dann dazu, dass im link ?cmd.test=set ON generiert wird ^^

 
  if($hasOnOff) {
    my $isUpperCase = ($allSets =~ m/(^| )ON(:[^ ]*)?( |$)/ &&
                       $allSets =~ m/(^| )OFF(:[^ ]*)?( |$)/);
    # Have to cover: "on:An off:Aus", "A0:Aus AI:An Aus:off An:on"
    my $on  = ReplaceEventMap($d, $isUpperCase ? "ON" :"on" , 1);
    my $off = ReplaceEventMap($d, $isUpperCase ? "OFF":"off", 1);
    $link = "cmd.$d=set $d " . ($state eq $on ? $off : $on) if(!defined($link));
    $cmdList = "$on:$off" if(!$cmdList);
  }


Also für mich sieht das nach nem Bug in S7_DWrite aus. Das Modul liefert ON OFF TRIGGER als $allSets, hält sich im $state aber on off trigger.

Ich schreibe jetzt mal die Maintainer für 44_S7_DWrite und 01_FHEMWEB.pm an.