Hallo zusammen,
ich stehe ein bisschen auf dem Schlauch. Ich habe einen Temp-Fühler in meiner Gartensauna, über TTS wird mir mitgeteilt wann die Sauna eine bestimmte Temperatur erreicht hat und ich weis wann ich Saunieren kann, dies funktioniert mit einem DOIF auch prima (ja ich weis ein notify hätte es auch getan). Nun habe ich aber mehrere DOIF angelegt damit mir mein TTS Modul bei bestimmten Temperaturen eine Info gibt. Um das ganze ein bisschen aufgeräumter zu gestallten würde ich gerne alle DOIF´s in einen packen und hier stehe ich irgendwie auf dem Schlauch. Anbei die def wie ich sie mir zusammengestellt habe.
([ESPEasy_Sauna_Klima:Temperature] = 60) (set MyTTS volume 90, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius)
DOELSEIF([ESPEasy_Sauna_Klima:Temperature] = 70) (set MyTTS volume 90, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius)
DOELSEIF([ESPEasy_Sauna_Klima:Temperature] = 80) (set MyTTS volume 90, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius)
DOELSEIF([ESPEasy_Sauna_Klima:Temperature] = 90) (set MyTTS volume 90, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius)
Wenn ich DOELSEIF richtig verstehe prüft er damit jedes einzelne DOELSEIF,
das heist ....
wenn 60Grad erreicht sage es
"oder"
wenn 70Grad erreicht sage es
"oder"
wenn 80Grad erreicht sage es
"oder"
wenn 90Grad erreicht sage es
muss die Definition noch irgendwie abgeschlossen werden, oder sollte das genau das erfüllen was ich benötige? Ich möchte beim erreichen jeder Temperatur eine Ausgabe haben, nicht nur wenn 70 erreicht ist, sonder auch wenn sie als Bsp. wieder auf 60 fällt.
zum einen solltest Du >= nehmen sonst muss es GENAU 60 / 70 ... sein
Dann in den DOELSEIF Pfaden einen Bereich >60 bis <=70 u.s.w.
sonst bleibt das DOIF ewig in cmd1 weil es ja immer über 60 ist.
danke für die schnelle Antwort Frank_Huber
wie würde dann die syntax für den Befehl bis aussehen?
Hier ein Beispiel:
defmod Asche_ETA DOIF ([ETA_Kessel_4_Asche:Kessel_4_Asche] > 600 and [ETA_Kessel_4_Asche:Kessel_4_Asche] <= 699) (set PushOver msg 'Demnächst Aschebox leeren. Inhalt von [ETA_Kessel_4_Asche:Kessel_4_Asche] Kg Pellets!')\
DOELSEIF ([ETA_Kessel_4_Asche:Kessel_4_Asche] > 700 and [ETA_Kessel_4_Asche:Kessel_4_Asche] <= 799) (set PushOver msg 'Demnächst Aschebox leeren. Inhalt von [ETA_Kessel_4_Asche:Kessel_4_Asche] Kg Pellets!')\
DOELSEIF ([ETA_Kessel_4_Asche:Kessel_4_Asche] > 800 and [ETA_Kessel_4_Asche:Kessel_4_Asche] <= 899) (set PushOver msg 'Demnächst Aschebox leeren. Inhalt von [ETA_Kessel_4_Asche:Kessel_4_Asche] Kg Pellets!')\
DOELSEIF ([ETA_Kessel_4_Asche:Kessel_4_Asche] > 900 and [ETA_Kessel_4_Asche:Kessel_4_Asche] <= 949) (set PushOver msg 'Aschebox leeren! Inhalt von [ETA_Kessel_4_Asche:Kessel_4_Asche] Kg Pellets!')\
DOELSEIF ([ETA_Kessel_4_Asche:Kessel_4_Asche] > 950) (set PushOver msg 'Dringend Aschebox leeren. Inhalt von [ETA_Kessel_4_Asche:Kessel_4_Asche] Kg Pellets!')\
DOELSEIF ([ETA_Kessel_4_Asche:Kessel_4_Asche] == 0) (set PushOver msg 'Aschebox leer.')
attr Asche_ETA DbLogExclude .*
attr Asche_ETA group Benachrichtigung
attr Asche_ETA room Kommunikation
attr Asche_ETA verbose 0
super habe ich mal so übernommen.
([ESPEasy_Sauna_Klima:Temperature] > 60 and [ESPEasy_Sauna_Klima:Temperature] <= 69) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit)
DOELSEIF([ESPEasy_Sauna_Klima:Temperature] > 70 and [ESPEasy_Sauna_Klima:Temperature] <= 79) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit)
DOELSEIF([ESPEasy_Sauna_Klima:Temperature] > 80 and [ESPEasy_Sauna_Klima:Temperature] <= 89) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit)
DOELSEIF([ESPEasy_Sauna_Klima:Temperature] > 90 and [ESPEasy_Sauna_Klima:Temperature] <= 99) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit)
Eine Frage zum Verständnis habe ich aber noch. Wie verhält sich das DOIF nun, wenn mal angenommen die Temperatur über Stunden im gleichen Bereich bei 61 Grad liegt? Ich habe keine weiteren Attribute gesetzt, dann sollte auch nur einmal die TTS Ausgabe erfolgen, richtig?
Ja, nur einmal.
Wenn Du es mehrfach möchtest kannst Du es über Atribute machen.
Perfekt und vielen lieben dank für die schnelle Hilfe, habe in dem Zug mal einen ganzen Schwung DOIF Definitionen zusammen fassen können. Thema ganz klar gelöst. Daumen hoch ;D
Da DOIF der Reihe abgearbeitet wird, kannst du, bei entsprechender Sortierung, eine Grenze weglassen.
x > 60 und x < 69, damit sind die schon mal raus.
x > 70 könnte dann wegbleiben, wenn man die < 60 vorab wegfiltert.
ABER: nachdem du am Anfang nur auf die 10er Werte geprüft hast, hast du diese jetzt ganz ignoriert.
Mein Vorschlag:
DOIF ([Temp] >= 90) (say)
DOELSEIF ([Temp] >= 80) (say)
DOELSEIF ([Temp] >= 70) (say)
DOELSEIF ([Temp] >= 60) (say)
Im Ausführungsteil kannst du mit $DEVICE und $EVENT arbeiten.
Ganz tricky wäre ein
attr xxx DOIF_Readings doing:(set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [$EVEND] Grad Celsius bei [$DEVICE:Humidity] Prozent Luftfeuchtigkeit)
mit ([$SELF:doing]) im Ausführungsteil (wobei ich gerade nicht prüfen kann, ob in den DOIF_Readings $DEVICE und $EVENT funktionieren, zur Not kann man ja auf [ESPEasy_Sauna_Klima:Temperature] und [ESPEasy_Sauna_Klima:Humidity] zurückgehen).
@Damian: gehen die ? für Abfragen auch bei den DOIF_Readings?
Danke Per,
Die Abfragen hinten anzufangen ist eine gute Idee.
geht dann aber auch nur solange nur die ansteigende Richtung interessant ist.
Werd ich bei mir mal so umbauen und auch den Fehler mit den 0er Werten korriguieren.
Zitat von: Frank_Huber am 22 November 2018, 13:08:55
geht dann aber auch nur solange nur die ansteigende Richtung interessant ist.
Nö, geht auch beim Abkühlen. BTW: ich würde noch eine Abfrage einstellen, ob die Heizung überhaupt an ist. Sonst labert es dich nach der Sauna weiter voll und der Erholungseffekt ist dahin ;)
aber was genau ändert sich bei der DOELSEIF Ausgabe wenn ich die Eingrenzung von bis wegnehme? Interessant wäre auch noch Auszuschliesen das die Temperatur beim Abkühlen erneut das doif auslöst.
Am schönsten wäre es wenn ich die DOIF Definition von der syntax so hin bekommen könnte das mir die Temperaturen nur einmalig beim erreichen von 60,70,80 und 90°C angesagt werden und dann erst wider wenn die Temperatur einmal unter eine festgelegte Gradzahl "als Bsp.: 30°C" fällt von vorne beginnt. Das würde genau das verhindern was du Per gemeint hast......nach dem Saunieren fällt die Temperatur unter 80 und mein RPi labert mich voll obwohl ich fertig bin.
jemand eine Idee wie ich das noch einbinden kann?
hab das ganze jetzt erst mal so übernommen:
([ESPEasy_Sauna_Klima:Temperature] >= 90) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit)
DOELSEIF ([ESPEasy_Sauna_Klima:Temperature] >= 80) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit)
DOELSEIF ([ESPEasy_Sauna_Klima:Temperature] >= 70) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit)
DOELSEIF ([ESPEasy_Sauna_Klima:Temperature] >= 60) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit)
ich muss den Beitrag noch mal auf nicht gelösst setzen. Bei der Syntax die ich in diesem Beitrag gepostet habe löst mein DOIF ständig aus, das sollte gerade nicht passieren, aus dem Grund habe ich das ">" rausgenommen was zu einem Syntax Fehler führte. Lag an dem perl im DOIF ich musste zwei "==" setzen. Des weiteren ist das kleine Problem bei Temperaturabfall auch noch nicht abgestellt. Der RPI erzählt mir nämlich auch nach dem ich die Sauna aus habe und sie abkühlt das die Temperaturen erreicht sind.......vielleicht weis da auch noch jemand abhilfe, danke schon mal an alle für die schnelle Unterstützung zu dem Thema ;)
([$SELF:Temperature] >= 90 ) (say ...,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 80) (say ...,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 70) (say ...,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 60) (say ...,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] < 40) (setreading $SELF max say [$EVENT])
attr xxx DOIF_Readings Temperarure:([ESPEasy_Sauna_Klima:Temperature] > [$SELF:max] ? [ESPEasy_Sauna_Klima:Temperature] : 40)
Bisschen tricky, spart aber viel Schreibarbeit.
Da du kein List gepostet hast: verwendest du attr do always?
Hallo Per,
kannst du dir mal den Fehler anschauen. Er gibt mir in Zeile 5 diesen Fehler aus:
condition c05: Argument "" isn't numeric in numeric lt (<)
hier die List vom Device was ich angelegt habe:
Internals:
CFGFN
DEF ([$SELF:Temperature] >= 90 ) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 80) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 70) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 60) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] < 40) (setreading $SELF max say [$EVENT])
MODEL FHEM
NAME Sauna_Temperatur_TTS_test
NR 2235
NTFY_ORDER 50-Sauna_Temperatur_TTS_test
STATE cmd_5
TYPE DOIF
.attraggr:
.attrminint:
DOIF_Readings:
Temperarure (::ReadingValDoIf($hash,'ESPEasy_Sauna_Klima','Temperature') > ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','max') ? ::ReadingValDoIf($hash,'ESPEasy_Sauna_Klima','Temperature') : 40)
READINGS:
2018-11-26 13:16:00 Device Sauna_Temperatur_TTS_test
2018-11-26 13:08:47 Temperarure 6
2018-11-26 13:15:59 cmd 5
2018-11-26 13:15:59 cmd_event Sauna_Temperatur_TTS_test
2018-11-26 13:15:59 cmd_nr 5
2018-11-26 13:15:59 max say
2018-11-26 13:15:58 mode enabled
2018-11-26 13:15:59 state cmd_5
2018-11-26 13:15:59 warning condition c05: Argument "" isn't numeric in numeric lt (<)
Regex:
DOIF_Readings:
ESPEasy_Sauna_Klima:
Temperarure:
Temperature ^ESPEasy_Sauna_Klima$:^Temperature:
Sauna_Temperatur_TTS_test:
Temperarure:
max ^Sauna_Temperatur_TTS_test$:^max:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 90
1 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 80
2 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 70
3 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 60
4 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') < 40
devices:
0 Sauna_Temperatur_TTS_test
1 Sauna_Temperatur_TTS_test
2 Sauna_Temperatur_TTS_test
3 Sauna_Temperatur_TTS_test
4 Sauna_Temperatur_TTS_test
all Sauna_Temperatur_TTS_test
do:
0:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
1:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
2:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
3:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
4:
0 setreading Sauna_Temperatur_TTS_test max say [$EVENT]
5:
helper:
event cmd_nr: 5,cmd: 5,cmd_event: Sauna_Temperatur_TTS_test,cmd_5
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev Sauna_Temperatur_TTS_test
DOIF_eventas:
cmd_nr: 5
cmd: 5
cmd_event: Sauna_Temperatur_TTS_test
state: cmd_5
triggerEvents:
cmd_nr: 5
cmd: 5
cmd_event: Sauna_Temperatur_TTS_test
cmd_5
Device: Sauna_Temperatur_TTS_test
triggerEventsState:
cmd_nr: 5
cmd: 5
cmd_event: Sauna_Temperatur_TTS_test
state: cmd_5
internals:
itimer:
readings:
0 Sauna_Temperatur_TTS_test:Temperature
1 Sauna_Temperatur_TTS_test:Temperature
2 Sauna_Temperatur_TTS_test:Temperature
3 Sauna_Temperatur_TTS_test:Temperature
4 Sauna_Temperatur_TTS_test:Temperature
all Sauna_Temperatur_TTS_test:Temperature
trigger:
uiState:
uiTable:
Attributes:
DOIF_Readings Temperarure:([ESPEasy_Sauna_Klima:Temperature] > [$SELF:max] ? [ESPEasy_Sauna_Klima:Temperature] : 40)
alias tts Sauna Temperatur Test
do always
und ja ich habe auch bei dem anderen Device attr do always an.
do always brauchst du nicht.
Und am Anfang ist max noch nicht gesetzt.
DOELSEIF ([$SELF:Temperature] < 40) (setreading $SELF max say [$EVENT])
ist falsch, muss
DOELSEIF ([$SELF:Temperature] < 40) (setreading $SELF max [$EVENT])
heissen. Copy & paste >:(
wo muss ich max setzen? Im DOIF_readings oder in der def?
def:
([$SELF:Temperature] >= 90 ) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 80) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 70) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 60) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] < 40) (setreading $SELF max [$EVENT])
list:
Internals:
CFGFN
DEF ([$SELF:Temperature] >= 90 ) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 80) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 70) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 60) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] < 40) (setreading $SELF max [$EVENT])
MODEL FHEM
NAME Sauna_Temperatur_TTS_test
NR 2235
NTFY_ORDER 50-Sauna_Temperatur_TTS_test
STATE cmd_5
TYPE DOIF
.attraggr:
.attrminint:
DOIF_Readings:
Temperarure (::ReadingValDoIf($hash,'ESPEasy_Sauna_Klima','Temperature') > ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','max') ? ::ReadingValDoIf($hash,'ESPEasy_Sauna_Klima','Temperature') : 40)
READINGS:
2018-11-26 15:49:52 Device Sauna_Temperatur_TTS_test
2018-11-26 14:53:52 Temperarure 6
2018-11-26 15:49:52 cmd 5
2018-11-26 15:49:52 cmd_event Sauna_Temperatur_TTS_test
2018-11-26 15:49:52 cmd_nr 5
2018-11-26 15:49:52 error setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
2018-11-26 13:15:59 max say
2018-11-26 15:49:51 mode enabled
2018-11-26 15:49:52 state cmd_5
2018-11-26 15:49:52 warning condition c05: Argument "" isn't numeric in numeric lt (<)
Regex:
DOIF_Readings:
ESPEasy_Sauna_Klima:
Temperarure:
Temperature ^ESPEasy_Sauna_Klima$:^Temperature:
Sauna_Temperatur_TTS_test:
Temperarure:
max ^Sauna_Temperatur_TTS_test$:^max:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 90
1 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 80
2 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 70
3 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 60
4 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') < 40
devices:
0 Sauna_Temperatur_TTS_test
1 Sauna_Temperatur_TTS_test
2 Sauna_Temperatur_TTS_test
3 Sauna_Temperatur_TTS_test
4 Sauna_Temperatur_TTS_test
all Sauna_Temperatur_TTS_test
do:
0:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
1:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
2:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
3:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
4:
0 setreading Sauna_Temperatur_TTS_test max [$EVENT]
5:
helper:
event cmd_nr: 5,cmd: 5,cmd_event: Sauna_Temperatur_TTS_test,error: setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
,cmd_5
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent
timerevents
timereventsState
triggerDev Sauna_Temperatur_TTS_test
DOIF_eventas:
cmd_nr: 5
cmd: 5
cmd_event: Sauna_Temperatur_TTS_test
error: setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
state: cmd_5
triggerEvents:
cmd_nr: 5
cmd: 5
cmd_event: Sauna_Temperatur_TTS_test
error: setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
cmd_5
Device: Sauna_Temperatur_TTS_test
triggerEventsState:
cmd_nr: 5
cmd: 5
cmd_event: Sauna_Temperatur_TTS_test
error: setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
state: cmd_5
internals:
itimer:
readings:
0 Sauna_Temperatur_TTS_test:Temperature
1 Sauna_Temperatur_TTS_test:Temperature
2 Sauna_Temperatur_TTS_test:Temperature
3 Sauna_Temperatur_TTS_test:Temperature
4 Sauna_Temperatur_TTS_test:Temperature
all Sauna_Temperatur_TTS_test:Temperature
trigger:
uiState:
uiTable:
Attributes:
DOIF_Readings Temperarure:([ESPEasy_Sauna_Klima:Temperature] > [$SELF:max] ? [ESPEasy_Sauna_Klima:Temperature] : 40)
alias tts Sauna Temperatur Test
Einfach einmalig in der Befehlszeile
setreading Sauna_Temperatur_TTS_test max 31
eingeben. Die genaue Zahl ist relativ unkritisch, sollte aber am besten ca. der aktuellen Temperatur entsprechen.
Hallo Per,
leider brachte das setreading nicht gewünschten Erfolg und der Fehler wird weiter angezeigt. ich mache nochmal eine list vielleicht fällt dir ja noch was dazu ein.
Internals:
CFGFN
DEF ([$SELF:Temperature] >= 90 ) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 80) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 70) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] >= 60) (set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading $SELF max say [$EVENT])
DOELSEIF ([$SELF:Temperature] < 40) (setreading $SELF max [$EVENT])
MODEL FHEM
NAME Sauna_Temperatur_TTS_test
NR 2235
NTFY_ORDER 50-Sauna_Temperatur_TTS_test
STATE initialize
TYPE DOIF
.attraggr:
.attrminint:
DOIF_Readings:
Temperature (::ReadingValDoIf($hash,'ESPEasy_Sauna_Klima','Temperature') > ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','max') ? ::ReadingValDoIf($hash,'ESPEasy_Sauna_Klima','Temperature') : 40)
READINGS:
2018-11-27 14:47:29 Device Sauna_Temperatur_TTS_test
2018-11-27 07:12:31 Temperarure 4
2018-11-27 14:47:16 Temperature 40
2018-11-27 14:47:23 e_Sauna_Temperatur_TTS_test_Temperature 40
2018-11-27 07:21:09 error setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
2018-11-27 14:47:16 max 10
2018-11-27 14:46:52 mode enabled
2018-11-27 14:46:52 state initialize
Regex:
DOIF_Readings:
ESPEasy_Sauna_Klima:
Temperature:
Temperature ^ESPEasy_Sauna_Klima$:^Temperature:
Sauna_Temperatur_TTS_test:
Temperature:
max ^Sauna_Temperatur_TTS_test$:^max:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 90
1 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 80
2 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 70
3 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') >= 60
4 ::ReadingValDoIf($hash,'Sauna_Temperatur_TTS_test','Temperature') < 40
devices:
0 Sauna_Temperatur_TTS_test
1 Sauna_Temperatur_TTS_test
2 Sauna_Temperatur_TTS_test
3 Sauna_Temperatur_TTS_test
4 Sauna_Temperatur_TTS_test
all Sauna_Temperatur_TTS_test
do:
0:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
1:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
2:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
3:
0 set MyTTS volume 60, set MyTTS tts die Temperatur in der Sauna beträgt aktuell [ESPEasy_Sauna_Klima:Temperature] Grad Celsius bei [ESPEasy_Sauna_Klima:Humidity] Prozent Luftfeuchtigkeit,setreading Sauna_Temperatur_TTS_test max say [$EVENT]
4:
0 setreading Sauna_Temperatur_TTS_test max [$EVENT]
5:
helper:
DOIF_Readings_events
event checkall
globalinit 1
last_timer 0
sleeptimer -1
timerdev
timerevent cmd_nr: 5,cmd: 5,cmd_event: set_cmd_5,error: setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
,cmd_5
triggerDev Sauna_Temperatur_TTS_test
DOIF_eventas:
cmd_nr: 5
cmd: 5
cmd_event: set_cmd_5
error: setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
state: cmd_5
timerevents:
cmd_nr: 5
cmd: 5
cmd_event: set_cmd_5
error: setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
cmd_5
Device: Sauna_Temperatur_TTS_test
timereventsState:
cmd_nr: 5
cmd: 5
cmd_event: set_cmd_5
error: setreading Sauna_Temperatur_TTS_test max : Usage: setreading <name> <reading> <value>
where <name> is a single device name, a list separated by comma (,) or a regexp. See the devspec section in the commandref.html for details.
state: cmd_5
triggerEvents:
checkall
Device: Sauna_Temperatur_TTS_test
triggerEventsState:
checkall
Device: Sauna_Temperatur_TTS_test
internals:
itimer:
readings:
0 Sauna_Temperatur_TTS_test:Temperature
1 Sauna_Temperatur_TTS_test:Temperature
2 Sauna_Temperatur_TTS_test:Temperature
3 Sauna_Temperatur_TTS_test:Temperature
4 Sauna_Temperatur_TTS_test:Temperature
all Sauna_Temperatur_TTS_test:Temperature
trigger:
uiState:
uiTable:
Attributes:
DOIF_Readings Temperature:([ESPEasy_Sauna_Klima:Temperature] > [$SELF:max] ? [ESPEasy_Sauna_Klima:Temperature] : 40)
alias tts Sauna Temperatur Test
room 00 Schneider
verbose 3
Ich würde einen anderen Ansatz wählen:
defmod di_sauna DOIF init {$_grenze=90;;$_erreicht=0}\
{\
if ($_erreicht and [ESPEasy_Sauna_Klima:Temperature] < $_grenze){\
$_grenze-=10;;\
if ($_grenze==30){$_grenze=90};;\
$_erreicht=0;;\
}\
if (!$_erreicht and [ESPEasy_Sauna_Klima:Temperature] > $_grenze) {\
fhem_set"MyTTS volume 60";;\
fhem_set"MyTTS tts die Temperatur in der Sauna beträgt aktuell".[?ESPEasy_Sauna_Klima:Temperature]."Grad Celsius bei". [?ESPEasy_Sauna_Klima:Humidity]."Prozent Luftfeuchtigkeit";;\
$_erreicht=1;;\
}\
}
ohne Attribute.
statt
setreading Sauna_Temperatur_TTS_test max [$EVENT]
setreading Sauna_Temperatur_TTS_test max $EVENT
:-[