FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: jle am 04 Juli 2018, 10:37:56

Titel: Aus Notify einen Dummy schalten
Beitrag von: jle am 04 Juli 2018, 10:37:56
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
Titel: Antw:Aus Notify einen Dummy schalten
Beitrag von: CoolTux am 04 Juli 2018, 11:07:21
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.
Titel: Antw:Aus Notify einen Dummy schalten
Beitrag von: jle am 04 Juli 2018, 12:13:09
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!
Titel: Antw:Aus Notify einen Dummy schalten
Beitrag von: jle am 04 Juli 2018, 12:24:11
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.
Titel: Antw:Aus Notify einen Dummy schalten
Beitrag von: CoolTux am 04 Juli 2018, 13:18:38
Konnte ich in der Tat genau so nachstellen. Ich schaue es mir genauer an.
Titel: Antw:Aus Notify einen Dummy schalten
Beitrag von: CoolTux am 04 Juli 2018, 13:32:32
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.
Titel: Antw:Aus Notify einen Dummy schalten
Beitrag von: jle am 04 Juli 2018, 16:18:17
Hm bei mir geht es leider dauerhaft nicht, egal was ich versuche.
Klingt aber dann ja eher nach einem Bug in FHEM oder?
Titel: Antw:Aus Notify einen Dummy schalten
Beitrag von: jle am 04 Juli 2018, 21:41:38
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 ..