Hauptmenü

DOIF funktioniert nur manuell

Begonnen von tomspatz, 10 Oktober 2016, 17:16:34

Vorheriges Thema - Nächstes Thema

tomspatz

Folgendes DOIF:
([FensterSchlafzimmerLinks] eq "closed" and [Heizungssteuerung] eq "an" and [SchlafzimmerLueftenStatus] eq "ja") (set SchlafzimmerLueftenStatus nein, {Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")})
Wobei FensterSchlafzimmerLinks ein Sensor ist der open /closed liefert, Heizungssteuerung sowie SchlafzimmerLueftenStatus jeweils dummies sind.

Beim Lüften wird der SchlafzimmerLueftenStatus dummy auf "ja" gesetzt die Heizungssteuerung steht jetzt  sowieso auf "ja".
Schliesse ich das Fenster und der Sensor liefert ein closed wir nach 10 Sekunden
attr wait 10
abgefeuert, doch  leider nur der erste teil, also es wird nur der SchlafzimmerLueftenStatus dummy auf nein gesetzt der Rest wird scheinbar ignoriert.

ABER wenn das Fenster eh closed ist und ich setzt NUR den SchlafzimmerLueftenStatus dummy manuell auf "ja" wird nach 10 Sekunden der komplette Ausführungsteil abgearbeitet.
attr do allways ist auch noch gesetzt.

Kann sich da jemand reindenken?
LG
Tom

CoolTux

Mach mal statt dem Komma ein Semikolon.
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

tomspatz

SORRY aber warum soll das mit einem Semikolon funktionieren?
ZitatFHEM-Befehle lassen sich mit Perl-Befehlen kombinieren: ... ({system ("wmail Peter is at home")}, set lamp on)
So steht es in der Commandref.

CoolTux

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

Was mir noch einfällt. Da Du mit wait und 2 Befehlen arbeitest kannst Du mal versuchen beide Befehle in separate Klammern zu stecken. Vielleicht geht das besser.
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

Ellert

Statt
Zitat"HeizungssteuerungSchlafzimmerAn"
so [HeizungssteuerungSchlafzimmerAn] oder so "[HeizungssteuerungSchlafzimmerAn]".

tomspatz

Hi Ellert
{Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")}
so in der Eingabezeile wird ausgeführt.

Warum sollte ich das wie in deinem Beispiel ändern? Möchte es auch verstehen.

LG
Tom

Ellert

Weil Du damit den Status des Gerätes HeizungssteuerungSchlafzimmerAn an die Perlfunktion übergibst, oder ist das garnicht Deine Absicht?

tomspatz

hmmmmm

das ist mir noch unverständlich ???, weil es ja über die Eingabezeile funktioniert.
Ich werde es morgen versuchen.

Ellert

Zitatder Rest wird scheinbar ignoriert.
Was genau meinst Du damit?
Wird die Subroutine nicht aufgerufen?
Funktioniert die Sub nicht?
Woran hast Du das festgestellt?
Gibt es Fehlermeldungen im Log?
Ergänze den Befehlszeig mal mit einem Log-Befehl, nach dem Perl-Aufruf.

Vielleicht hilf dies noch bei der Fehlersuche: https://forum.fhem.de/index.php/topic,58237.0.html Punkt: Verhaltensanalyse des DOIF

tomspatz

#10
ZitatWas genau meinst Du damit?
Aus dem Ausführungsteil
(set SchlafzimmerLueftenStatus nein, {Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")})
wird NUR der dummy SchlafzimmerLueftenStatus "nein" gesetzt. Vom Rest ist nichts im Log und auch nicht im Event Monitor zu sehen.
ZitatWird die Subroutine nicht aufgerufen?
Es gibt keine Sub dazu.
{Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")})
Ruft so in der Eingabezeile das Heating_Controll http://fhem.de/commandref_DE.html#Heating_Control Modul auf und das funktioniert so auch.




Ellert

#11
Heating_Control verwende ich nicht, da kann ich nichts zu sagen. Das Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn") sieht mir aber nach einem Funktionsaufruf aus.
Daher die Frage:"Was macht Dich glauben, dass diese Funktion nicht aufgerufen wird nachdem 'set SchlafzimmerLueftenStatus nein' erfolgreich ausgeführt wurde?".
Wie schon gesagt, ergänze den Befehlszeig mal mit einem Log-Befehl, nach dem Perl-Aufruf. {Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn");; Log 1, "<DOIFname> $DEVICE: $EVENTS"}
Und mache eine Verhaltensanalyse, wie ich in Antwrot 9 schrieb.
Und poste das Ergebnis von Log und Filelog.
ZitatVom Rest ist nichts im Log und auch nicht im Event Monitor zu sehen.
Was hätte zu sehen sein müssen?

Passiert das auch, wenn Du die beiden Befehle tauschst?

tomspatz

OK
da läuft vieles scheinbar nicht richtig.
Das ist der FileLog vom DOIF
2016-10-11_10:55:42 FensterSchlafzimmerLinks reportedState: open
2016-10-11_10:55:42 FensterSchlafzimmerLinks basicSet: 255
2016-10-11_10:56:22 SchlafzimmerLueftenStatus ja
2016-10-11_10:59:59 LueftungSchlafzimmerAusHeizungAn wait_timer: no timer
2016-10-11_11:05:52 FensterSchlafzimmerLinks closed
2016-10-11_11:05:52 FensterSchlafzimmerLinks reportedState: closed
2016-10-11_11:05:52 SchlafzimmerLueftenStatus nein
2016-10-11_11:05:52 FensterSchlafzimmerLinks basicSet: 0

FHEM Log dazu
2016.10.11 10:56:22 3: ZWave set ThermostatSchlafzimmer thermostatSetpointSet 12.00
2016.10.11 10:56:22 3: set ThermostatSchlafzimmer thermostatSetpointSet 12.00 : Scheduled for sending after WAKEUP
2016.10.11 10:56:22 3: HeizungReglerNotifySchlafzimmer return value: Scheduled for sending after WAKEUP


Fenster auf erwirkt nach 40 Sekunden ZWave set ThermostatSchlafzimmer thermostatSetpointSet 12.00 der Weg ist OK
aber Fenster zu nicht.
Dazu kommt noch das der dummy:
Internals:
   NAME       SchlafzimmerLueftenStatus
   NR         421
   STATE      nein
   TYPE       dummy
   Readings:
     2016-10-11 11:05:52   state           nein
Attributes:
   alias      Schlafzimmer Lüften Status
   group      Fenster Lüften Steuerung
   sortby     4


Zeitgleich mit Fenster zu (siehe FileLog) gesetzt wird und nicht wie im DOIF attr:
attr LueftungSchlafzimmerAusHeizungAn  wait 10

Hier nochmals das komplette list :
Internals:
   DEF        ([FensterSchlafzimmerLinks] eq "closed" and [Heizungssteuerung] eq "an" and [SchlafzimmerLueftenStatus] eq "ja") ({Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")}, set SchlafzimmerLueftenStatus nein)
   NAME       LueftungSchlafzimmerAusHeizungAn
   NR         424
   NTFY_ORDER 50-LueftungSchlafzimmerAusHeizungAn
   STATE      initialized
   TYPE       DOIF
   Readings:
     2016-10-11 11:05:52   Device          FensterSchlafzimmerLinks
     2016-10-11 10:55:28   cmd             0
     2016-10-11 11:05:52   e_FensterSchlafzimmerLinks_STATE closed
     2016-10-11 11:05:52   e_SchlafzimmerLueftenStatus_STATE nein
     2016-10-11 10:55:28   state           initialized
     2016-10-11 11:15:32   wait_timer      no timer
   Condition:
     0          InternalDoIf($hash,'FensterSchlafzimmerLinks','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "closed" and InternalDoIf($hash,'Heizungssteuerung','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "an" and InternalDoIf($hash,'SchlafzimmerLueftenStatus','STATE','','',AttrVal($hash->{NAME},'notexist',undef)) eq "ja"
   Devices:
     0           FensterSchlafzimmerLinks Heizungssteuerung SchlafzimmerLueftenStatus
     all         FensterSchlafzimmerLinks Heizungssteuerung SchlafzimmerLueftenStatus
   Do:
     0:
       0          {Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")}, set SchlafzimmerLueftenStatus nein
     1:
   Helper:
     event      basicSet: 0
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev FensterSchlafzimmerLinks
     triggerEvents:
       basicSet: 0
     triggerEventsState:
       basicSet: 0
   Internals:
     0           FensterSchlafzimmerLinks:STATE Heizungssteuerung:STATE SchlafzimmerLueftenStatus:STATE
     all         FensterSchlafzimmerLinks:STATE Heizungssteuerung:STATE SchlafzimmerLueftenStatus:STATE
   Itimer:
   Readings:
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   alias      Lüften Schlafzimmer aus Heizung is an
   do         always
   eventMap   cmd_2:ja cmd_1:nein
   group      Fenster Lüften Steuerung
   wait       10


So langsam bin ich am Ende. Habe auch schon Dietmar63 angeschrieben, https://forum.fhem.de/index.php/topic,10011.msg502230.html#msg502230
das ist der Entwickler vom Heating_Control Modul.

Vielen dank fürs mitdenken :)

Tom




Ellert

#13
Beunruhigend ist auch, dass das DOIF nicht geschaltet hat, der Status ist noch auf initialized und cmd auf 0, also müsste der set-Befehl der das
Zitat2016-10-11_11:05:52 SchlafzimmerLueftenStatus nein
erzeugt woanders herkommen, aber nicht aus dem DOIF.

So würde das Filelog aussehen, wenn DOIF schaltet mit wait:
Zitat2016-10-11_12:53:46.195 TestStatus wait_timer: 11.10.2016 12:53:56 cmd_1 Test
2016-10-11_12:53:56.203 TestStatus wait_timer: no timer
2016-10-11_12:53:56.242 TestStatus cmd_nr: 1
2016-10-11_12:53:56.242 TestStatus cmd: 1
2016-10-11_12:53:56.242 TestStatus cmd_event: Test
2016-10-11_12:53:56.242 TestStatus cmd_1

das wäre der Logeintrag des Befehls im globalen Logfile:
Zitat2016.10.11 12:53:56.236 1: TestStatus cmd_1: D: Test E: 10

mit diesem DOIF
define TestStatus DOIF ([Test]) ({Log 1, "$SELF cmd_1: D: $DEVICE E: $EVENTS"})
attr TestStatus disable 0
attr TestStatus do always
attr TestStatus group 00_Test
attr TestStatus room 0_Test
attr TestStatus wait 10


"Test" ist ein Dummy, der auf 10 gesetzt wurde.

Per

Zitat von: tomspatz am 10 Oktober 2016, 19:45:31{Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")}
??? Wenn es ein internes Modul aufruft, muss es dann nicht
set Heating_Control_SetTemp HeizungssteuerungSchlafzimmerAn
(oder ähnlich) lauten? Woher soll denn der Perlbefehl (!) "Heating_Control_SetTemp" bekannt sein, wenn nicht aus einer 99_(my)Util?