Befehl Zyklisch solange Bedingung gültig

Begonnen von chris_z, 12 März 2015, 20:45:32

Vorheriges Thema - Nächstes Thema

chris_z

Hallo,

Ich hab Lüftungsmeldungen die ich über WebViewControl auf nem Tablet als Sprachansage ausgebe wenn die Luftfeuchte in Rämen zu hoch ist.
Nun würd ich das gern zyklisch machen, da man öfter nicht im Raum ist wenn das ausgegeben wird.

Dezeit schaut das so aus:
DOIF ([Kueche.DHT11:Humidity] > 70
and ([08:00-22:00|67] or [16:00-23:00|12345] or [04:50-05:15|12345])) (set androidTablet volume 12,set androidTablet ttsSay "Küche muss gelüftet werden")


Wie kann man sowas möglichst einfach umsetzen ?

flurin

#1
So könnte es gehen:

define humidity_alarm dummy
attr humidity_alarm setList on off

DOIF ([Kueche.DHT11:Humidity] > 70
and ([08:00-22:00|67] or [16:00-23:00|12345] or [04:50-05:15|12345])) (set humidity_alarm on) DOELSE (set humidity_alarm off)

define di_msg DOIF ([+00:05] and [humidity_alarm] eq "on") (set androidTablet volume 12,set androidTablet ttsSay "Küche muss gelüftet werden")
attr di_msg do always


Alarm-Ausgabe alle 5 min entsprechend anpassen.

Gruss
flurin

Damian

Zitat von: chris_z am 12 März 2015, 20:45:32
Hallo,

Ich hab Lüftungsmeldungen die ich über WebViewControl auf nem Tablet als Sprachansage ausgebe wenn die Luftfeuchte in Rämen zu hoch ist.
Nun würd ich das gern zyklisch machen, da man öfter nicht im Raum ist wenn das ausgegeben wird.

Dezeit schaut das so aus:
DOIF ([Kueche.DHT11:Humidity] > 70
and ([08:00-22:00|67] or [16:00-23:00|12345] or [04:50-05:15|12345])) (set androidTablet volume 12,set androidTablet ttsSay "Küche muss gelüftet werden")


Wie kann man sowas möglichst einfach umsetzen ?

einfach zusätzlich entsprechende Attribute deines DOIF-Moduls definieren:


attr dein_doif_modul do always
attr dein_doif_modul cmdpause 300


Genaueres siehe Commandref zu DOIF

Gruß

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

chris_z

Perfekt, danke Damian. Keine "Zwischengeräte" die Lösung ist super.

flurin

Zitat von: chris_z am 13 März 2015, 05:34:13
Keine "Zwischengeräte"

Bei einem ähnlichen Fall wird bei mir der Zustand (humidity_alarm) im Frontend angezeigt und ist überall ersichtlich. Zudem wird der Zustand in einem Log-File protokolliert und in einem Plot dargestellt.  ;)

Gruss
flurin

Damian

Zitat von: chris_z am 13 März 2015, 05:34:13
Perfekt, danke Damian. Keine "Zwischengeräte" die Lösung ist super.

wenn du noch verhindern willst, dass cmd_2 (das ist der hier nicht vorhandene ELSE-Fall) nicht bei jedem Senden des Feuchtigkeitsensors gesetzt wird, solltest du noch zusätzlich

attr dein_doif_modul repeatsame 0:1

setzen.

Was auch durchaus Sinn macht (in der Commandref erklärt), ist die Anzahl der Ansagen zu begrenzen, dann sieht die Sache so aus:

define di_ansage DOIF ([Kueche.DHT11:Humidity] > 70
and ([08:00-22:00|67] or [16:00-23:00|12345] or [04:50-05:15|12345])) (set androidTablet volume 12,set androidTablet ttsSay "Küche muss gelüftet werden")
attr di_ansage repeatsame 40
attr di_ansage waitsame 300


do always wird nicht gesetzt, cmd_2 wird dann automatisch nur einmal im Modul gesetzt (weil do always fehlt) und die Ansageanzahl ist hier auf 40-mal begrenzt.

Gruß

Damian


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

Gernott

Hallo

Ich habe ein ähnliches Problem und hänge mich daher mal an.
Im Unterschied zu chris_z soll ein HM-Fenstersensor (ThreeState) abgefragt werden. Wenn dort der State "open" erkannt wird, soll nach einer Wartezeit dann zyklisch eine Meldung abgesetzt werden, bis der State wieder auf "closed" geht. Da auf das Öfnnen nur einmal getriggert wird, z.B. ([hm.window_BadFenster] eq "open"), lassen sich mit repeatsame keine Wiederholungen des Kommandos erzeugen. Ich könnte nun temporär ein at definieren, das bei "closed" wieder gelöscht wird. Gibt es dazu eventuell noch eine andere Alternative im DOIF-Modul?

Viele Grüße
G.

Damian

Zitat von: Gernott am 14 März 2015, 15:21:29
Hallo

Ich habe ein ähnliches Problem und hänge mich daher mal an.
Im Unterschied zu chris_z soll ein HM-Fenstersensor (ThreeState) abgefragt werden. Wenn dort der State "open" erkannt wird, soll nach einer Wartezeit dann zyklisch eine Meldung abgesetzt werden, bis der State wieder auf "closed" geht. Da auf das Öfnnen nur einmal getriggert wird, z.B. ([hm.window_BadFenster] eq "open"), lassen sich mit repeatsame keine Wiederholungen des Kommandos erzeugen. Ich könnte nun temporär ein at definieren, das bei "closed" wieder gelöscht wird. Gibt es dazu eventuell noch eine andere Alternative im DOIF-Modul?

Viele Grüße
G.


define meldung dummy

define di_meldung DOIF ([BadFenster] eq "open") (set meldung on, push meldung)
DOELSEIF ([BadFenster] eq "closed") (set meldung off)
DOELSEIF ([meldung] eq "on" and [+00:15]) (push meldung)

attr di_meldung wait 300


Hier mit Verzögerung von 5 Minuten und Benachrichtigung alle 15 Minuten. push meldung musst du deinen Bedürfnissen anpassen.

Gruß

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

Gernott

Hallo Damian

Danke für den Lösungsvorschlag. Prinzipiell geht das, allerdings wird das dritte Kommando nach einem ersten Test nur einmalig ausgeführt, und nicht repetierend. Muß man da noch ein Attribut setzen?

Gruß
G.

Damian

Zitat von: Gernott am 14 März 2015, 17:43:38
Hallo Damian

Danke für den Lösungsvorschlag. Prinzipiell geht das, allerdings wird das dritte Kommando nach einem ersten Test nur einmalig ausgeführt, und nicht repetierend. Muß man da noch ein Attribut setzen?

Gruß
G.

Hatte ich doch glatt vergessen. Für beliebige Wiederholung reicht:

attr di_meldung do always

Für bestimmte Anzahl repeatsame verwenden - siehe deutsche Commandref zu DOIF.

Gruß

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

Gernott

Macht nichts, freue mich über jede Hilfe.
Jetzt geht es perfekt.

Viele Grüße
G.

WarLord

Hallo

ich hab da auch ein änliches problem und komme nicht so wirklich weiter. Ich möchte das eine ansage solange gespielt wird bis die tür wieder zu ist.

code aus cfg:define Tueroffen dummy
attr Tueroffen event-on-change-reading state
#
define Tueroffen_Ansage dummy
#
define watchdogTuer watchdog TuerFlur_b:open 00:10:00 TuerFlur_b:closed set Tueroffen on ;; setstate watchdogTuer defined
attr watchdogTuer regexp1WontReactivate 1
#
define AlarmTuer DOIF ([Tueroffen] eq "on") (set Tueroffen_Ansage on) DOELSEIF ([Tueroffen] eq "off") (set MyTTS tts Danke scön!)
#
define AlarmTuer_Ansage DOIF ([Tueroffen_Ansage] eq "on") (set MyTTS tts :gong.mp3: Die Haustür steht noch offen. Bitte mach sie zu!)
attr AlarmTuer_Ansage do always
#
define AlarmTuerOff notify TuerFlur_b:closed {fhem ("set Tueroffen off");; fhem ("set Tueroffen_Ansage off")}


Nur bekomme ich nur 1x die ansage obwohl die tür offen bleibt. sollte aber doch sollange weitergehen bis sie zu ist oder hab ich da was übersehen?
FHEM auf RaspberryPi B+
HMLAN Adapter + Div HM Komponenten

Damian

Zitat von: WarLord am 09 November 2015, 19:06:43
Hallo

ich hab da auch ein änliches problem und komme nicht so wirklich weiter. Ich möchte das eine ansage solange gespielt wird bis die tür wieder zu ist.

code aus cfg:define Tueroffen dummy
attr Tueroffen event-on-change-reading state
#
define Tueroffen_Ansage dummy
#
define watchdogTuer watchdog TuerFlur_b:open 00:10:00 TuerFlur_b:closed set Tueroffen on ;; setstate watchdogTuer defined
attr watchdogTuer regexp1WontReactivate 1
#
define AlarmTuer DOIF ([Tueroffen] eq "on") (set Tueroffen_Ansage on) DOELSEIF ([Tueroffen] eq "off") (set MyTTS tts Danke scön!)
#
define AlarmTuer_Ansage DOIF ([Tueroffen_Ansage] eq "on") (set MyTTS tts :gong.mp3: Die Haustür steht noch offen. Bitte mach sie zu!)
attr AlarmTuer_Ansage do always
#
define AlarmTuerOff notify TuerFlur_b:closed {fhem ("set Tueroffen off");; fhem ("set Tueroffen_Ansage off")}


Nur bekomme ich nur 1x die ansage obwohl die tür offen bleibt. sollte aber doch sollange weitergehen bis sie zu ist oder hab ich da was übersehen?

Dieses Modul kann nur etwas wiederholen, wenn es von außen immer wieder angetriggert wird, sonst nicht.

Für wiederholende Ausführung ohne externe wiederholende Triggerung gibt es eine neue Version, siehe hier:

http://forum.fhem.de/index.php/topic,43638.msg355719.html#msg355719

Gruß

Damian



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

WarLord

FHEM auf RaspberryPi B+
HMLAN Adapter + Div HM Komponenten

Damian

Zitat von: WarLord am 09 November 2015, 20:32:20
Funktioniert! Danke Schön!

Übrigens wenn du DOIF benutzt kannst du mit wait dir den watchdog sparen.

Gruß

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