Aus Notify einen Dummy schalten

Begonnen von jle, 04 Juli 2018, 10:37:56

Vorheriges Thema - Nächstes Thema

jle

Hallo alle,

ich bin noch relativ neu im FHEM-Umfeld. Ich habe eigentlich ein wahrscheinlich ziemlich simples Problem, bekomme es aber einfach nicht gelöst..

Im Grunde habe ich ein Notify was auf Veränderungen der Rolladenposition anspringt und prüft, ob die neue Position der zuletzt automatisch angefahrenen Position entspricht.
Wenn ja, dann ist alles gut. Wenn nein, dann hat scheinbar jemand die Rolladen manuell am Gerät betätigt / verstellt.
Ist dies der Fall, möchte ich einen dummy schalten, damit ich künftig die Rolladen nicht mehr automatisch steuere. (Bis der dummy wieder zurück gestellt wurde)..

Hoffe das Szenario ist soweit verständlich.

Mein Problem ist nun, daß zwar der dummy auf ,,nicht mehr Automatikmodus" gestellt wird, aber im eventmonitor nichts von dem statuswechsel zu sehen ist.
Als Konsequenz werden Folge-Notifys nicht getriggert und der Status meines Dummys wird leider auch nicht an Homebridge synchronisiert.

Führe ich den Set Dummy-Befehl händisch aus, wird es auch im eventmonitor angezeigt, die Folge-Notifys werden sauber ausgeführt und der Status des Dummy wird auch korrekt zu Homebridge synchronisiert.


Hier der dummy:
Internals:
   NAME       d_autoBliBedroom
   NR         136
   STATE      0
   TYPE       dummy
   CHANGED:
     0
   CHANGEDWITHSTATE:
   OLDREADINGS:
   READINGS:
     2018-07-04 10:09:15   state           0
Attributes:
   genericDeviceType switch
   homebridgeMapping clear
On=state,subtype=AutoBliBedroom,valueOn=1,cmdOn=1,cmdOff=0
   room       Homebridge,Schlafzimmer
   verbose    5



Und hier der Notify, der alles den dummy setzt:
DUOFERN_61F161:moving:.* {
if($EVTPART1 eq "stop") {
  my $po = ReadingsVal('DUOFERN_61F161','position','0');
  fhem("setreading DUOFERN_61F161 last_position ".$po);
  if ($po != ReadingsVal('DUOFERN_61F161','zz_autoPosition','0')) {
   fhem("setreading DUOFERN_61F161 zz_autoMode 0");
   fhem("set d_autoBliBedroom 0");
  }
} else {
  fhem("setreading DUOFERN_61F161 previous_position ".ReadingsVal('DUOFERN_61F161','last_position','0'));
}
}


Wenn das Notify durchläuft, werden alle Status ordentlich gesetzt. Im logfile sieht man das auch
2018.07.04 10:31:55 4: dummy set d_autoBliBedroom 0
Aber ich glaube das eben irgendwie kein Event oder so angestoßen wird.
Im Eventmoitor steht ja nix diesbzgl drin

Habe ich vielleicht irgend ein Attribut oder so vergessen?
Oder ist es gar nicht vorgesehen, daß man aus einem Notify ein dummy schalten kann?

Bin für jede Hilfe dankbar.

Viele Grüße

CoolTux

Habe das ganze mal im kleinen bei mir durchgespielt. da geht es. Dummy angelegt notify angelegt welches lediglich ein set dummy 0 macht aber halt so wie du als perl mit Funktionsaufruf fhem() und ein zweiten dummy der das notify auslöst. Einzig Deine Attribute
genericDeviceType switch
   homebridgeMapping clear

habe ich nicht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

jle

Hallo CoolTux
vielen Dank für deine Hilfe!

Ich habe das selber auch mal wie du mit neuen dummy und neuem Notify ausprobiert..
Dann geht es auch bei mir.

Habe daraufhin mal mein altes Notify nach und nach eingekürzt und habe das Phänomen wie folgt eingekreist.

Sieht das Notify so aus, funktioniert es einwandfrei und im EventMonitor wird das Setzen des Dummy angezeigt:
DUOFERN_61F161:moving:.* {
if($EVTPART1 eq "stop") {
  fhem("set d_autoBliBedroom 0");
}
}


Wird aber eine Variable geladen wird zwar nach wie vor der dummy korrekt geschaltet aber im EventMonitor sieht man von dem Dummy-Statuswechsel wieder nichts mehr. Auch werden dann keine Folge-Norifys etc geschaltet..
DUOFERN_61F161:moving:.* {
if($EVTPART1 eq "stop") {
  my $po = ReadingsVal('DUOFERN_61F161','position','0');
  fhem("set d_autoBliBedroom 0");
}
}



Also irgendwie scheint die Zeile
my $po = ReadingsVal('DUOFERN_61F161','position','0');
im Notify das Event-Handling zu zerstören.

Habt ihr ne Idee?
Danke!

jle

Habe vergessen zu erwähnen, daß ich meine Attribute genericDeviceType switch und  homebridgeMapping clear am dummy vorerst auch mal entfernt habe, damit wir besser die gleichen Vorraussetzungen haben.

CoolTux

Konnte ich in der Tat genau so nachstellen. Ich schaue es mir genauer an.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Interessant. Habe mal das ReadingsVal auskommentiert. Dann ging es, dann wieder einkommentiert dann ging es nicht. Und habe ich das Semikolon am Ende der letzten Zeile rausgenommen ging es auf einmal. wieder reingenommen ging es auch. Komisch.
Spiel mal bisschen mit rum.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

jle

Hm bei mir geht es leider dauerhaft nicht, egal was ich versuche.
Klingt aber dann ja eher nach einem Bug in FHEM oder?

jle

Ich habe jetzt hinter meinen set noch einen separaten trigger eingefügt.

Quasi so:
fhem("set d_autoBliBedroom 0");
fhem("trigger d_autoBliBedroom 0");


Im Kontext:
DUOFERN_61F161:moving:.* {
if($EVTPART1 eq "stop") {
  my $po = ReadingsVal('DUOFERN_61F161','position','0');
  fhem("set d_autoBliBedroom 0");
  fhem("trigger d_autoBliBedroom 0");
}
}


Nun habe ich die Events doppelt:
2018-07-04 21:25:44 Roomba980 Robbie signal-snr: 37
2018-07-04 21:25:46 at a_RobbieWorkCycle Next: 21:25:56
2018-07-04 21:25:47 dummy d_autoBliBedroom 0
2018-07-04 21:25:47 dummy d_autoBliBedroom 0
2018-07-04 21:25:47 DUOFERN DUOFERN_61F161 5


Kommentiere ich den trigger wieder aus, geht's wieder gar nicht ..