FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Tommy82 am 09 April 2015, 21:53:28

Titel: [Gelöst]Dummy wird nicht geschaltet
Beitrag von: Tommy82 am 09 April 2015, 21:53:28
Hallo,
ich habe 3 HM Rauchmelder (Flur_EG, Kinderzimmer, Keller), deren Activity und battery Status ich über ein notify Abfragen will und wenn bei allen 3 Sowohl Activity=alive, als auch battery=ok sind, dann der dummy Status_Rauchmelder auf OK gesetzt wird, ansonsten auf Not, allerdings wird der Status des dummys nicht gesetzt.
Das list des dummys sieht so aus:
Internals:
   CFGFN
   NAME       Status_Rauchmelder
   NR         476
   STATE      ???
   TYPE       dummy
Attributes:
   setList    OK Not

und das list des notifys
Internals:
   CFGFN
   DEF        Kinderzimmer|Keller|Flur_EG:(Activity|battery) {
  if ($Activity eq "alive" && $battery eq "ok") {
    fhem("set Status_Rauchmelder OK");
  }
  else {
    fhem("set Status_Rauchmelder Not");
} }
   NAME       nt_Rauchmelder_Status
   NR         570
   NTFY_ORDER 50-nt_Rauchmelder_Status
   REGEXP     Kinderzimmer|Keller|Flur_EG:(Activity|battery)
   STATE      active
   TYPE       notify
   Readings:
     2015-04-09 21:44:55   state           active
Attributes:


was mache ich noch falsch?

Danke
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Paul am 09 April 2015, 22:33:09
Ich frage das immer mit readingsVal ab
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: rudolfkoenig am 10 April 2015, 11:25:11
Zitatif ($Activity eq "alive" && $battery eq "ok") {

FHEM/Perl kann kein DWIM, sowas ist noch wissenschaftliche Forschung. Oder ohne Ironie: Sowas funktioniert unter FHEM anders. Wie Paul schon schreibt, muss man die Daten muehsam mit readingsVal abfragen, und das fuer alle 3 Geraete einzeln, d.h. es muessen 6 readingsVal Aufrufe mit && verknuepft werden.
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Tommy82 am 10 April 2015, 20:05:35
Ok, danke für den Tip,
hab dann mal ein wenig gelesen und es dann so abgeändert
Kinderzimmer|Keller|Flur_EG:(Activity|battery) {
  if (ReadingsVal(Kinderzimmer:Activity eq "alive") && (ReadingsVal(Kinderzimmer:battery eq "ok")) &&
(ReadingsVal(Keller:Activity eq "alive") && (ReadingsVal(Keller:battery eq "ok")) &&
(ReadingsVal(Flur_EG:Activity eq "alive") && (ReadingsVal(Flur_EG:battery eq "ok")))
))
  {
    fhem("set Status_Rauchmelder OK");
  }
  else {
    fhem("set Status_Rauchmelder Not");
} }


Allerdings klappts damit auch noch nicht, im Log gibts keinen Meldung, was mache ich noch falsch?

Danke
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Puschel74 am 10 April 2015, 20:09:52
Falsch:
ReadingsVal(Kinderzimmer:Activity eq "alive"
Müsste (meiner bescheidenen Meinung nach) so aussehen:
ReadingsVal("Kinderzimmer","Activity","undef")
Das findet sich aber zuhauf in so gut wie jedem Codeschnipsel im Forum und im Wiki sollte sich der Syntax von ReadingsVal auch finden lassen.
Weiters würde ich
(Kinderzimmer|Keller|Flur_EG):(Activity|battery) {
Das sollte aber eher unter Anfängerfragen und nicht hier her - aber auch das ist nur meine bescheidene Meinung.

Edith. Bevor Nachfragen zu undef kommen - das ist der Ersatzwert wenn das Reading nicht ausgelesen werden kann.
Anstelle von undef kannst du gerne auch falsch, Fehler, Bombay oder wasauchimmer nehmen.

Edith2:
Zitatim Log gibts keinen Meldung,
Dann wird das notify nicht getriggert - der fehlerhafte ReadingsVal-Syntax muss eine Meldung im Log bringen.
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Damian am 10 April 2015, 20:30:33
Zitat von: Tommy82 am 10 April 2015, 20:05:35
Ok, danke für den Tip,
hab dann mal ein wenig gelesen und es dann so abgeändert
Kinderzimmer|Keller|Flur_EG:(Activity|battery) {
  if (ReadingsVal(Kinderzimmer:Activity eq "alive") && (ReadingsVal(Kinderzimmer:battery eq "ok")) &&
(ReadingsVal(Keller:Activity eq "alive") && (ReadingsVal(Keller:battery eq "ok")) &&
(ReadingsVal(Flur_EG:Activity eq "alive") && (ReadingsVal(Flur_EG:battery eq "ok")))
))
  {
    fhem("set Status_Rauchmelder OK");
  }
  else {
    fhem("set Status_Rauchmelder Not");
} }


Allerdings klappts damit auch noch nicht, im Log gibts keinen Meldung, was mache ich noch falsch?

Danke


Abgesehen davon, dass es so nicht funktioniert, kannst es auch etwas einfacher haben:

define di_Rauchmelder DOIF ([Kinderzimmer:Activity] eq "alive" and [Kinderzimmer:battery] eq "ok" and
[Keller:Activity] eq "alive" and [Keller:battery] eq "ok" and [Flur_EG:Activity] eq "alive" and [Flur_EG:battery] eq "ok")
  (set Status_Rauchmelder OK)
DOELSE
  (set Status_Rauchmelder Not)


Hier wird im Gegensatz zum notify nur geschaltet, wenn der Zustand sich ändert.

Gruß

Damian
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Tommy82 am 10 April 2015, 20:49:04
Hallo Puschel,
danke für deine Hinweise, habs jetzt mal so abgeändert:
(Kinderzimmer|Keller|Flur_EG):(Activity|battery) {
  if (ReadingsVal("Kinderzimmer","Activity","undef") eq "alive") && (ReadingsVal("Kinderzimmer","battery","undef") eq "ok") &&
(ReadingsVal("Keller","Activity","undef") eq "alive") && (ReadingsVal("Keller","battery","undef") eq "ok")) &&
((ReadingsVal("Flur_EG","Activity","undev") eq "alive") && (ReadingsVal("Flur_EG","battery","undef") eq "ok")))
))
  {
    fhem("set Status_Rauchmelder OK");
  }
  else {
    fhem("set Status_Rauchmelder Not");
} }


Allerdings ohne erfolg

@Damian,
wenn ich deinen Code übernehme gibt es diesen Fehler:
perl error in condition: ReadingValDoIf('Kinderzimmer','Activity','') eq "alive" and ReadingValDoIf('Kinderzimmer','battery','') eq "ok" andReadingValDoIf('Keller','Activity','') eq "alive" and ReadingValDoIf('Keller','battery','') eq "ok" and ReadingValDoIf('Flur_EG','Activity','') eq "alive" and ReadingValDoIf('Flur_EG','battery','') eq "ok": syntax error at (eval 138) line 1, near ""ok" andReadingValDoIf"

Hab das "and" noch vom ReadingVal getrennt und nun gehts mit dem DoIf, vielen Dank dafür
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: rudolfkoenig am 11 April 2015, 08:43:14
Die Loesung von Puschel wuerde auch funktionieren, wenn man bei der Verteilung von Klammer auf genauso grosszuegig waere wie bei der Klammer zu. Ich wuerde die Funktionsaufrufe alle untereinander hinschreiben, dann fallen die ueberfluessigen Klammer schneller auf. Die Vergleiche "a eq b" muss man nicht klammern (darf man aber), der if selber benoetigt eine Klammer.
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Tommy82 am 11 April 2015, 13:29:11
Hi, hab noch ein problem eigentlich eine einfache Sache, aber steh mir total auf dem Schlauch, hab das Alarmanlagenmodul im einsatz und möchte dort den Status des level6 in einen dummy schreiben, hab das mit if und auch doif versucht, aber bekomms nicht hin....

Internals:
   NAME       Alarmanlage_Neu
   NR         285
   STATE       Keine Störung
   TYPE       Alarm
   VERSION    2.5
   Readings:
     2015-04-03 14:05:17   level           0
     2015-04-05 11:16:55   level0          off
     2015-04-10 21:34:06   level6          off
     2015-03-31 20:18:07   lockstate       unlocked
     2015-04-10 21:34:06   short           0
     2015-04-11 13:21:11   state            Keine Störung
Attributes:
   armact     set Android_Wohnzimmer ttsSay Alarm ist scharf
   armdelay   02:00
   armwait    set Android_Wohnzimmer ttsSay Alarm wird in 2 Minuten scharf geschaltet
   cancelact  set Android_Wohnzimmer ttsSay Alarm zurückgesetzt
   disarmact  set Android_Wohnzimmer ttsSay Alarm ist unscharf
   level0end  1
   level0msg  1
   level0offact set FritzDect_Wohnzimmerschrank off;
   level0onact define alarm0dly1 at +00:02:00 set FritzDect_Wohnzimmerschrank on;
   level0start 1
   level0xec  disarmed
   level1end  0
   level1msg  0
   level1start 0
   level1xec  disarmed
   level2end  0
   level2msg  0
   level2start 0
   level2xec  disarmed
   level3end  0
   level3msg  0
   level3start 0
   level3xec  disarmed
   level4end  0
   level4msg  0
   level4start 0
   level4xec  disarmed
   level5end  0
   level5msg  0
   level5start 0
   level5xec  disarmed
   level6end  06:00
   level6msg  Einbruchalarm AN
   level6offact set FritzDect_Wohnzimmerschrank off;
   level6onact define alarm6dly1 at +00:02:00 set FritzDect_Wohnzimmerschrank on;
   level6start 23:00
   level6xec  armed
   level7end  0
   level7msg  0
   level7start 0
   level7xec  disarmed
   lockstate  unlock
   room       Alarmanlage
   statedisplay graphics


Habs mit diesem notify versucht:
Internals:
   DEF        Alarmanlage_Neu:level6 {
my $var = Value("Alarmanlage_Neu:level6");
  if ($var eq "off") {
    fhem("set Status_Alaram off");
  }
  else {
    fhem("set Status_Alaram on");
} }
   NAME       nt_Status_Alarm
   NOTIFYDEV  Alarmanlage_Neu
   NR         303
   NTFY_ORDER 50-nt_Status_Alarm
   REGEXP     Alarmanlage_Neu:level6
   STATE      active
   TYPE       notify
   Readings:
     2015-04-11 13:27:01   state           active
Attributes:


und diesem Doif
Internals:
   DEF        ([Alarmanlage_Neu:level6] eq "on")
  (set Status_Alaram on)
DOELSE
  (set Status_Alaram off)
   NAME       di_Alarmanlage_Status
   NR         304
   NTFY_ORDER 50-di_Alarmanlage_Status
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-04-11 13:20:07   state           initialized
   Condition:
     0          ReadingValDoIf('Alarmanlage_Neu','level6','') eq "on"
   Devices:
     0           Alarmanlage_Neu
     all         Alarmanlage_Neu
   Do:
     0          set Status_Alaram on
     1          set Status_Alaram off
   Helper:
     last_timer 0
     sleeptimer -1
   Itimer:
   Readings:
     0           Alarmanlage_Neu:level6
     all         Alarmanlage_Neu:level6
   State:
Attributes:
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Tommy82 am 01 Mai 2015, 16:06:03
Hi,
ich hänge hier leider immer noch, was ist an meinem DOIF falsch das der Dummy nicht geschaltet wird?
Internals:
   CFGFN
   DEF        ([Alarmanlage_Neu:level6] eq "on")   (set Status_Alaram on) DOELSE  (set Status_Alaram off)
   NAME       doif_Status_Alarmanlage
   NR         15065
   NTFY_ORDER 50-doif_Status_Alarmanlage
   STATE      ???
   TYPE       DOIF
   Condition:
     0          ReadingValDoIf('Alarmanlage_Neu','level6','') eq "on"
   Devices:
     0           Alarmanlage_Neu
     all         Alarmanlage_Neu
   Do:
     0          set Status_Alaram on
     1          set Status_Alaram off
   Helper:
     last_timer 0
     sleeptimer -1
   Itimer:
   Readings:
     0           Alarmanlage_Neu:level6
     all         Alarmanlage_Neu:level6
   State:
Attributes:


Internals:
   NAME       Alarmanlage_Neu
   NR         268
   STATE       0
   TYPE       Alarm
   VERSION    2.5
   Readings:
     2015-04-03 14:05:17   level           0
     2015-04-05 11:16:55   level0          off
     2015-04-10 21:34:06   level6          off
     2015-03-31 20:18:07   lockstate       unlocked
     2015-04-10 21:34:06   short           0
     2015-05-01 16:01:58   state            0
Attributes:
   armact     set Android_Wohnzimmer ttsSay Alarm ist scharf
   armdelay   02:00
   armwait    set Android_Wohnzimmer ttsSay Alarm wird in 2 Minuten scharf geschaltet
   cancelact  set Android_Wohnzimmer ttsSay Alarm zurückgesetzt
   disarmact  set Android_Wohnzimmer ttsSay Alarm ist unscharf
   level0end  1
   level0msg  1
   level0offact set FritzDect_Wohnzimmerschrank off;
   level0onact define alarm0dly1 at +00:02:00 set FritzDect_Wohnzimmerschrank on;
   level0start 1
   level0xec  disarmed
   level1end  0
   level1msg  0
   level1start 0
   level1xec  disarmed
   level2end  0
   level2msg  0
   level2start 0
   level2xec  disarmed
   level3end  0
   level3msg  0
   level3start 0
   level3xec  disarmed
   level4end  0
   level4msg  0
   level4start 0
   level4xec  disarmed
   level5end  0
   level5msg  0
   level5start 0
   level5xec  disarmed
   level6end  06:00
   level6msg  Einbruchalarm AN
   level6offact set FritzDect_Wohnzimmerschrank off;
   level6onact define alarm6dly1 at +00:02:00 set FritzDect_Wohnzimmerschrank on;
   level6start 23:00
   level6xec  armed
   level7end  0
   level7msg  0
   level7start 0
   level7xec  disarmed
   lockstate  unlock
   room       Alarmanlage
   statedisplay graphics


Internals:
   NAME       Status_Alaram
   NR         284
   STATE      ???
   TYPE       dummy
Attributes:
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Damian am 01 Mai 2015, 16:39:42
Zitat von: Tommy82 am 01 Mai 2015, 16:06:03
Hi,
ich hänge hier leider immer noch, was ist an meinem DOIF falsch das der Dummy nicht geschaltet wird?
Internals:
   CFGFN
   DEF        ([Alarmanlage_Neu:level6] eq "on")   (set Status_Alaram on) DOELSE  (set Status_Alaram off)
   NAME       doif_Status_Alarmanlage
   NR         15065
   NTFY_ORDER 50-doif_Status_Alarmanlage
   STATE      ???
   TYPE       DOIF
   Condition:
     0          ReadingValDoIf('Alarmanlage_Neu','level6','') eq "on"
   Devices:
     0           Alarmanlage_Neu
     all         Alarmanlage_Neu
   Do:
     0          set Status_Alaram on
     1          set Status_Alaram off
   Helper:
     last_timer 0
     sleeptimer -1
   Itimer:
   Readings:
     0           Alarmanlage_Neu:level6
     all         Alarmanlage_Neu:level6
   State:
Attributes:


Internals:
   NAME       Alarmanlage_Neu
   NR         268
   STATE       0
   TYPE       Alarm
   VERSION    2.5
   Readings:
     2015-04-03 14:05:17   level           0
     2015-04-05 11:16:55   level0          off
     2015-04-10 21:34:06   level6          off
     2015-03-31 20:18:07   lockstate       unlocked
     2015-04-10 21:34:06   short           0
     2015-05-01 16:01:58   state            0
Attributes:
   armact     set Android_Wohnzimmer ttsSay Alarm ist scharf
   armdelay   02:00
   armwait    set Android_Wohnzimmer ttsSay Alarm wird in 2 Minuten scharf geschaltet
   cancelact  set Android_Wohnzimmer ttsSay Alarm zurückgesetzt
   disarmact  set Android_Wohnzimmer ttsSay Alarm ist unscharf
   level0end  1
   level0msg  1
   level0offact set FritzDect_Wohnzimmerschrank off;
   level0onact define alarm0dly1 at +00:02:00 set FritzDect_Wohnzimmerschrank on;
   level0start 1
   level0xec  disarmed
   level1end  0
   level1msg  0
   level1start 0
   level1xec  disarmed
   level2end  0
   level2msg  0
   level2start 0
   level2xec  disarmed
   level3end  0
   level3msg  0
   level3start 0
   level3xec  disarmed
   level4end  0
   level4msg  0
   level4start 0
   level4xec  disarmed
   level5end  0
   level5msg  0
   level5start 0
   level5xec  disarmed
   level6end  06:00
   level6msg  Einbruchalarm AN
   level6offact set FritzDect_Wohnzimmerschrank off;
   level6onact define alarm6dly1 at +00:02:00 set FritzDect_Wohnzimmerschrank on;
   level6start 23:00
   level6xec  armed
   level7end  0
   level7msg  0
   level7start 0
   level7xec  disarmed
   lockstate  unlock
   room       Alarmanlage
   statedisplay graphics


Internals:
   NAME       Status_Alaram
   NR         284
   STATE      ???
   TYPE       dummy
Attributes:


Offenbar generiert dein Device "Alarmanlage_Neu" keine Events, sonst hätte im DOIF_Modul das Reading "e_Alarmanlage_Neu..." erscheinen müssen.

Gruß

Damian
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Tommy82 am 05 Mai 2015, 20:58:58
Hi, und was kann ich da machen?
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Puschel74 am 06 Mai 2015, 19:35:38
Zitat von: Tommy82 am 05 Mai 2015, 20:58:58
Hi, und was kann ich da machen?
Rate mal  ;D

http://forum.fhem.de/index.php/topic,26893.msg289582.html#msg289582 (http://forum.fhem.de/index.php/topic,26893.msg289582.html#msg289582)
Ich benutze das Modul zwar nicht aber ein update sollte dir wohl helfen (und ab und zu mal in den Beiträgen lesen die deine verwendeten Module betreffen).
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Tommy82 am 06 Mai 2015, 20:24:06
Hallo PUschel,
danke für den Hinweis, das Modul ist aktuell, letztes Update war gestern.
Aber hast recht, vieleicht passt es jetzt besser in den Modul Thread
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Puschel74 am 06 Mai 2015, 20:37:07
Benutz doch zur Abwechslung erstmal den EventMonitor.
Evtl. werden ja jetzt Events generiert und es passt nur was anderes nicht  ::)
Titel: Antw:Dummy wird nicht geschaltet
Beitrag von: Tommy82 am 07 Mai 2015, 20:24:45
Hi, also im Eventmonitor kommt kein Event welches mit dem Alarmanlagen Modul oder Dummy zu tun hätte....