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
Mach mal statt dem Komma ein Semikolon.
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.
War nur eine Idee zum testen.
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.
Statt
Zitat"HeizungssteuerungSchlafzimmerAn"
so
[HeizungssteuerungSchlafzimmerAn]
oder so
"[HeizungssteuerungSchlafzimmerAn]"
.
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
Weil Du damit den Status des Gerätes HeizungssteuerungSchlafzimmerAn an die Perlfunktion übergibst, oder ist das garnicht Deine Absicht?
hmmmmm
das ist mir noch unverständlich ???, weil es ja über die Eingabezeile funktioniert.
Ich werde es morgen versuchen.
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
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 (http://fhem.de/commandref_DE.html#Heating_Control) Modul auf und das funktioniert so auch.
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?
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 (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
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.
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?
Zitat von: Per am 11 Oktober 2016, 13:23:33
??? 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?
Nein, das passt schon, es wird eine Sub aus dem Modul Heating Control aufgerufen (ich nutze dies auch).
Aber mal eine ganz blöde Fragen, warum der DOIF überhaupt?
Also ich meine, was willst Du damit bezwecken?
Wenn es nun um die Rückstellung der Tempratur aus dem Heating Control Modul geht, dafür gibt es doch das windowSensor Attribut?
@ Ellert
vielen dank, deine Aussage:
ZitatBeunruhigend 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
Zitat
2016-10-11_11:05:52 SchlafzimmerLueftenStatus nein
erzeugt woanders herkommen, aber nicht aus dem DOIF.
hat mich stutzig gemacht und ich fing an weiter zu suchen. Dabei stellte ich folgendes fest. Das von mir angeprangerte DOIF ist ja Teil zwei des Lüftens.
([FensterSchlafzimmerLinks] eq "closed" and [Heizungssteuerung] eq "an" and [SchlafzimmerLueftenStatus] eq "ja") (set SchlafzimmerLueftenStatus nein, {Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")})
Der erste Teil
sah so aus:
([FensterSchlafzimmerLinks] eq "open" and [Heizungssteuerung] ne "aus" and [TemperaturFuehlerSchlafzimmerAussen:temperature:d] < 17) (set SchlafzimmerLueftenStatus ja, set HeizungReglerSchlafzimmer 12.00) DOELSE (set SchlafzimmerLueftenStatus nein)
Nachdem ich dann ALLES deaktiviert habe bin ich auch darauf gekommen das ich mit dem schließen des Fensters das erste DOIF wieder triggere :-[
So :) funktioniert das jetzt bei Fenster auf:
([FensterSchlafzimmerLinks] eq "open" and [Heizungssteuerung] ne "aus" and [TemperaturFuehlerSchlafzimmerAussen:temperature:d] < 17) (set SchlafzimmerLueftenStatus ja, set HeizungReglerSchlafzimmer 12.00)
Und dann wieder schliessen:
([FensterSchlafzimmerLinks] eq "closed" and [Heizungssteuerung] eq "an" and [SchlafzimmerLueftenStatus] eq "ja") ({Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")}, set SchlafzimmerLueftenStatus nein)
@Mitch
ZitatWenn es nun um die Rückstellung der Tempratur aus dem Heating Control Modul geht, dafür gibt es doch das windowSensor Attribut?
Bei mir alles zwave Komponennten und ich habe pro raum drei Heating_Controll.
- aus -> setz alle Thermostate Danfoss LC-13 auf 4 °C weniger oder echtes aus gibt es bei diesem Thermostaten nicht
- anwesend -> setzt die Tempetratur zeitgesteuert auf "wohlfühlen"
- abwesend -> setzt die Temperatur bei längerer Abwesenheit etwas runter
Was mir noch nicht so klar ist ob das DOIF wirklich alle Stati abfragt? Ich habe ja in beiden drei Bedingungen mit "und" verknüpft, ist das so OK?
Auch gibt es jedes Mal nachdem die Heizung wieder "Hochgefahren" wird ein "Fehler"??? im Reading des DOIF sowie auch im Logfile zu finden.
im DOIF:
error {Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")}: HASH(0x31c3f18)
und im Logfile sieht das dann so aus:
2016.10.15 11:42:44 2: LueftungSchlafzimmerAusHeizungAn: {Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn")}: HASH(0x31c3f18)
Die HASH Nummer ist ja jedes mal different, ich verstehe nur nicht ob das so OK ist denn im DOIF wird es ja als Fehler angezeigt.
LG
Tom
Zitatich verstehe nur nicht ob das so OK ist denn im DOIF wird es ja als Fehler angezeigt.
Wenn ein Perl-Aufruf einen Wert zurückliefert, den Perl als true wertet, landet das im error-Reading des DOIF.
Versuch mal
{Heating_Control_SetTemp("HeizungssteuerungSchlafzimmerAn");; return 0}
Mensch Ellert du bist ja fix.
Danke für dieses, auch mit der Erklärung. Das läuft dann so TOP.
Wobei es ja KEIN Fehler innerhalb vom fhem ist sondern nur die Ausgabe, aber so ist es natürlich sauber.
Ist denn mein Gedanke mit den drei UND so OK?
Ist o.k., wenn es funktioniert.
hmmm das klingt nicht so überzeugt ??
Zitat von: tomspatz am 15 Oktober 2016, 14:22:24
@MitchBei mir alles zwave Komponennten und ich habe pro raum drei Heating_Controll.
- aus -> setz alle Thermostate Danfoss LC-13 auf 4 °C weniger oder echtes aus gibt es bei diesem Thermostaten nicht
- anwesend -> setzt die Tempetratur zeitgesteuert auf "wohlfühlen"
- abwesend -> setzt die Temperatur bei längerer Abwesenheit etwas runter
Das ist aber nicht der Sinn von HC.
Es sollte pro Thermostat eine Definition geben. Den Rest macht man über die Attribute
Hey Mitch
passt schon du machst mehrere HC und setzt immer nur einen davon aktiv.
https://forum.fhem.de/index.php/topic,10011.msg101022.html#msg101022 (https://forum.fhem.de/index.php/topic,10011.msg101022.html#msg101022)
Da stehts
LG
Tom
Klar geht das ;) aber ist wie gesagt, nicht Sinn der Sache
Gerne gucke ich mir ein Scenario an wo so etwas über attr. gelöst ist ;)