DOIF neue Features (Sleep-Alternative)

Begonnen von Damian, 12 Juli 2015, 21:17:52

Vorheriges Thema - Nächstes Thema

Mumpitz

Hallo Damian

Danke für Deine Antwort. Aus meiner Sicht macht es keinen Sinn, den Sensorwert als nicht triggerndes Argument zu definieren. Ich will ja genau das, dass aufgrund der Helligkeit das entsprechende Event (Beschattung on oder off) ausgelöst wird.

Gibt es eine andere Möglichkeit???
Oder muss ich schlussendlich zwei verschiedene DOIF's machen? (was ich allerdings nicht will)

Merci!

Damian

Zitat von: Mumpitz am 23 September 2015, 19:12:24
Hallo Damian

Danke für Deine Antwort. Aus meiner Sicht macht es keinen Sinn, den Sensorwert als nicht triggerndes Argument zu definieren. Ich will ja genau das, dass aufgrund der Helligkeit das entsprechende Event (Beschattung on oder off) ausgelöst wird.

Gibt es eine andere Möglichkeit???
Oder muss ich schlussendlich zwei verschiedene DOIF's machen? (was ich allerdings nicht will)

Merci!

Hast du denn geschaut, wer da die Bedingung so kurzfristig unwahr werden lässt? Der Multisensor kann es wohl nicht sein.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Mumpitz

#212
Doch, es ist der MultiSensor. Also zumindest die Zeit stimmt überein!

Aber ich frage mich schon warum der reinspielt, beim Beschattung_off frage ich den gar nicht ab! Wieso kann der den Timer wieder aufheben?

2015-09-22_13:28:34 di_SoSchu_OG wait_timer: no timer
2015-09-22_13:28:34 di_SoSchu_EG wait_timer: no timer
2015-09-22_13:28:15 di_SoSchu_OG wait_timer: 22.09.2015 14:08:15 cmd_2 Sensor_Licht_Sued
2015-09-22_13:28:15 di_SoSchu_EG wait_timer: 22.09.2015 14:08:15 cmd_3 Sensor_Licht_Sued



2015-09-22_13:28:34 Multisensor_Ost humidity: 40
2015-09-22_13:28:34 Multisensor_Ost temperature: 26
2015-09-22_13:28:34 Multisensor_Ost 7101
2015-09-22_13:28:34 Multisensor_Ost lux: 7101



Brockmann

Zitat von: Mumpitz am 23 September 2015, 21:10:13
Doch, es ist der MultiSensor. Also zumindest die Zeit stimmt überein!
Aber ich frage mich schon warum der reinspielt, beim Beschattung_off frage ich den gar nicht ab! Wieso kann der den Timer wieder aufheben?
Der Multisensor triggert, aber die Bedingungen, in denen er enthalten ist, sind nicht wahr, also geht es zum DOELSE-Fall. Das hebt den Timer auf.

Ich würde versuchen, ohne leeres DOELSE auszukommen. So nach dem Prinzip:
DOIF (Variante1)(Beschattung off)
DOELSEIF (Variante2)(Beschattung off)
DOELSE(Beschattung on)

Du kannst on und off auch vertauschen, aber entscheidend ist, dass wenn eine der Bedingungen erfüllt ist, Aktion A ausgeführt wird und wenn keine der Bedingungen erfüllt ist, Aktion B.
Dann wäre das DOIF sozusagen immer in einem wohldefinierten Zustand. Ich weiß nicht, ob das in Deinem Szenario möglich ist. Aber irgendwie sollte man es hinbekommen.

Und wirklich nur die Bedingungen triggern lassen, wo es unbedingt nötig ist. Das reduziert die Gefahr solcher Seiteneffekte.

Damian

#214
Zitat von: Mumpitz am 23 September 2015, 21:10:13
Doch, es ist der MultiSensor. Also zumindest die Zeit stimmt überein!

Aber ich frage mich schon warum der reinspielt, beim Beschattung_off frage ich den gar nicht ab! Wieso kann der den Timer wieder aufheben?

2015-09-22_13:28:34 di_SoSchu_OG wait_timer: no timer
2015-09-22_13:28:34 di_SoSchu_EG wait_timer: no timer
2015-09-22_13:28:15 di_SoSchu_OG wait_timer: 22.09.2015 14:08:15 cmd_2 Sensor_Licht_Sued
2015-09-22_13:28:15 di_SoSchu_EG wait_timer: 22.09.2015 14:08:15 cmd_3 Sensor_Licht_Sued



2015-09-22_13:28:34 Multisensor_Ost humidity: 40
2015-09-22_13:28:34 Multisensor_Ost temperature: 26
2015-09-22_13:28:34 Multisensor_Ost 7101
2015-09-22_13:28:34 Multisensor_Ost lux: 7101


Der Multisensor führt zu einer wahren Bedingung, zurückgesetzt wird dieser Zustand vermutlich aber durch einen anderen (zyklischen) Trigger.

Ich arbeite bei mehreren Bedingung selten mit DOELSE, vor allem nicht bei zyklischen Triggern, weil man schnell etwas übersieht, was zu diesem Fall führt.

Deswegen wird ein Sonst-Zustand bei mehreren Bedingungen nur bei Angabe von DOELSE gesetzt und sonst nicht. Es ist also ein gewolltes Features und eben kein Bug.

Gruß

Damian




Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Toto1973

#215
Ich habe da leider auch mal wieder ein Problem.
Ich habe mal meinen Wecker als DOIF umgebaut. Der Wochentag sowie die Weckzeit, werden über ein Dummy bestimmt.
define wecker DOIF ([([wakeUp_dummy]-[0:20])|[tag]]) ((set sz_LED_Schrank HSV 240,100,100))

Das Dummy für die Weckzeit sieht so aus:
define wakeUp_dummy dummy
attr wakeUp_dummy alias Weckzeit
attr wakeUp_dummy group Weckereinstellung
attr wakeUp_dummy icon time_timer@yellow
attr wakeUp_dummy room Schlafzimmer
attr wakeUp_dummy setList state:time
attr wakeUp_dummy webCmd state

Als State liefert es eine Uhrzeit (11:35).

Das Dummy für den Wochentag sieht so aus:
define tag dummy
attr tag alias Wecker Tag
attr tag eventMap 1:Montag 2:Dienstag 3:Mittwoch 4:Donnerstag 5:Freitag 6:Samstag 0:Sonntag 7:Wochenende 8:Werktags 9:aus
attr tag group Weckereinstellung
attr tag icon time_calendar@yellow
attr tag room Schlafzimmer
attr tag setList state:Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag,Wochende,Werktags,aus
attr tag webCmd state

Als State habe ich hier die entsprechende zahl (für Mittwoch 3).

Im DOIF selbst bei den Uhrzeiten steht das hier: timer_1_c1 26.09.2015 11:05:00|[tag]
Sollte da nicht die Zahl aus dem Dummy angezeigt werden?

Die Commandref sagt ja das hier:
Anwendungsbeispiel: Der Wochentag soll über einen Dummy bestimmt werden.

define dummy Wochentag
set Wochentag 135

define di_radio DOIF ([06:30|[Wochentag]] (set radio on) DOELSEIF ([07:30|[Wochentag]]) (set radio off)
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Toto1973

#216
So, manchmal findet man auch selbst den Fehler!

Da ich ja mit einer SetList und der EventMap arbeitet, wird der interne Status des Dummys auf den Namen des Wochentages gesetzt. Dadurch kann die Zeitangabe nix damit anfangen!
Beispiel: ([11:25|Montag])

Also muss ich im DOIF zum Dummyname auch noch :state anhängen, damit er das reading state verwendet!
Hier mal der Dummy:
tag Internals
NAME tag
NR 65
STATE Freitag
TYPE dummy
Readings state 5

Und hier die funktionierende DOIF:
define wecker DOIF ([([wakeUp_dummy]-[0:20])|[tag:state]]) ((set sz_LED_Schrank HSV 240,100,100))

Vielleicht wäre das auch in der Commandref als Ergänzung gut aufgehoben!?
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Toto1973

#217
Alles Gute ist 3...

Ich hätte da noch eine Idee!
Und zwar geht es um Zeiten. Wenn man {sunrise(0,"03:00","10:00")} benutzt, kann man ja durch die Zeitangaben den Zeitraum eingrenzen. So etwas würde ich mir auch für Dummys mit Zeitangaben wünschen.
Hintergrund ist folgender:
Ich habe eine DOIF, die mir optisch Bescheid gibt, wenn die Luftfeuchtigkeit in der Wohnung zu hoch wird. Diese soll aber nur in einem Bestimmten Zeitraum aktiv sein. Dieser Zeitraum soll aber auch von der Weckzeit abhängig sein.
Liegt nun quasi die Weckzeit außerhalb des Zeitraumes, dann soll das DOIF erst aktiv werden, wenn der Zeitraum erreicht ist.
Liegt die Weckzeit innerhalb des Zeitraumes, dann soll das DOIF ab der Weckzeit aktiv werden.

Beispiel: define feuchte DOIF ({[weckzeit_dummy](0,"09:00","23:00")} and [wz_Temperatur:humidity]>57) (set LED_Lampe on)

Wäre so etwas machbar?
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Brockmann

Zitat von: Toto1973 am 25 September 2015, 11:44:56
Beispiel: define feuchte DOIF ({[weckzeit_dummy](0,"09:00","23:00")} and [wz_Temperatur:humidity]>57) (set LED_Lampe on)

Wäre so etwas machbar?

Reicht dafür nicht einfach eine zusätzliche Bedingung?

define feuchte DOIF ({[weckzeit_dummy]} and [09:00-23:00] and [wz_Temperatur:humidity]>57) (set LED_Lampe on)

Toto1973

Zitat von: Brockmann
Reicht dafür nicht einfach eine zusätzliche Bedingung?

define feuchte DOIF ({[weckzeit_dummy]} and [09:00-23:00] and [wz_Temperatur:humidity]>57) (set LED_Lampe on)

In dem Fall würde das DOIF nur "schalten" wenn die Weckzeit innerhalb dem Zeitraum 9-23 Uhr liegt.
Liegt die Weckzeit aber außerhalb des Zeitraumes, würde nichts schalten, weil dann die Bedingung nie wahr wird!
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

Damian

Zitat von: Toto1973 am 25 September 2015, 11:44:56
Alles Gute ist 3...

Ich hätte da noch eine Idee!
Und zwar geht es um Zeiten. Wenn man {sunrise(0,"03:00","10:00")} benutzt, kann man ja durch die Zeitangaben den Zeitraum eingrenzen. So etwas würde ich mir auch für Dummys mit Zeitangaben wünschen.
Hintergrund ist folgender:
Ich habe eine DOIF, die mir optisch Bescheid gibt, wenn die Luftfeuchtigkeit in der Wohnung zu hoch wird. Diese soll aber nur in einem Bestimmten Zeitraum aktiv sein. Dieser Zeitraum soll aber auch von der Weckzeit abhängig sein.
Liegt nun quasi die Weckzeit außerhalb des Zeitraumes, dann soll das DOIF erst aktiv werden, wenn der Zeitraum erreicht ist.
Liegt die Weckzeit innerhalb des Zeitraumes, dann soll das DOIF ab der Weckzeit aktiv werden.

Beispiel: define feuchte DOIF ({[weckzeit_dummy](0,"09:00","23:00")} and [wz_Temperatur:humidity]>57) (set LED_Lampe on)

Wäre so etwas machbar?
ja.

in myÚtils.pm:


sub startzeit($$$)
{
  my ($weckzeit, $anfang, $ende) = @_;
  if ($weckzeit lt $anfang or $weckzeit gt $ende) {
    return $anfang;
  } else  {
    return $weckzeit;
  }
}


define feuchte DOIF ([{startzeit(Value("weckzeit_dummy"),"09:00","23:00")}-23:00] and [wz_Temperatur:humidity]>57) (set LED_Lampe on)

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Toto1973

Du bist einfach nur genial!
Werde ich gleich mal testen ;-)
Dankeschön!
Raspberry PI2, Rademacher DuoFern Stick, CUL, 2 x SCC,  JeeLink 868 Mhz, JeeLink 433 Mhz, 3x Magic UFO LED WiFi Controller, 4x MAX BC-RT-TRX-CyG, 2x MAX Fensterkontakt, 5x Rademacher Gurtwickler, 6x TX29DTH-it, 2x TX25-it als Helligkeitssensor, 1X HM-ES-PM, 6x Sonoff, 7x G-Homa, PIR-1000

dominik

Hi Damian,
ist es möglich über DOIF ein Datum abzufragen? Ich möchte ein DOIF schreiben, welches 6h vor Ende meines Urlaubs (CALVIEW) den Staugsaugerroboter startet.
Wie man die -6h rechnet, habe ich herausgefunden, aber für eine gezielte Datumsabfrage konnte ich nichts finden. Ein Umweg wäre wohl über $year, $month, $day zu gehen und das abzufragen.

moonsorrox hatte hier eine ähnliche Frage die wohl untergegangen ist (http://forum.fhem.de/index.php/topic,39070.msg335728.html#msg335728).
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

Damian

Zitat von: dominik am 26 September 2015, 10:01:38
Hi Damian,
ist es möglich über DOIF ein Datum abzufragen? Ich möchte ein DOIF schreiben, welches 6h vor Ende meines Urlaubs (CALVIEW) den Staugsaugerroboter startet.
Wie man die -6h rechnet, habe ich herausgefunden, aber für eine gezielte Datumsabfrage konnte ich nichts finden. Ein Umweg wäre wohl über $year, $month, $day zu gehen und das abzufragen.

moonsorrox hatte hier eine ähnliche Frage die wohl untergegangen ist (http://forum.fhem.de/index.php/topic,39070.msg335728.html#msg335728).

Datumsangaben sind bisher nicht programmiert. Ich habe allerdings folgende Variablen zum Abfragen in der Bedingung vorgesehen:

$sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst sowie $hms und $hm.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Joesky

Wie kann ich mit Hilfe von DOIF eine Methode aus 99_myUtils.pm aufrufen? Ich probiere es so:
define tkDoorOpen DOIF ([Eingangstuer] eq "open") ({ DebianMail('email@server.de', 'Tür ist geöffnet!', '');; })

Im Log bekomme ich den folgenden Fehler:
ZitattkDoorOpen: { DebianMail('email@server.de', 'Tür ist geöffnet!', ''); }: Unknown command {, try help.
Unknown command }, try help.

Wenn ich
{ DebianMail('email@server.de', 'Tür ist geöffnet!', '');; }
in fhem direkt ausführe, wird eine eMail ohne Fehler verschickt.
_______________
FREI STATT BAYERN