FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Kitt am 22 September 2017, 14:20:21

Titel: Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 22 September 2017, 14:20:21
Hallo an alle,

ich würde würde gerne eine Zeitschaltuhr ab einer gewissen Temperatur einschalten und unterhalt dieser
Temperatur ausschalten (um damit eine Elektroheizung zu betreiben).

Da der Sensor gelegentlich falsche Werte produziert, würde ich die Zeitschaltuhr gerne erst ansteuern, wenn
der Temperaturwert 2x erreicht wird.

Außerdem soll die Zeitschaltuhr nachts (ab 22 Uhr) generell aus bleiben.

Kann mir da jemand von euch mit dem Code helfen?

Viele Grüße
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 22 September 2017, 18:55:25
Was hast du denn bis her?
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: jkriegl am 22 September 2017, 19:52:21
Wann soll es in der Frühe los gehen?
Lies mal bei DOIF da kannst Du was basteln wie
([06:00-22:00] and [sensor:temperatur] < 21)
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 22 September 2017, 23:33:23
Ok, bitte nicht lachen. Das hier hab ich als Code, natürlich funktioniert es nicht. Außerdem ist die Abschaltzeit während der Nacht nicht eingebaut

Liebe Grüße

Internals:
   CFGFN
   DEF        ([Sensor:Temperature] < 20) (set Heizung=STATE on) DOELSEIF ([Sensor:Temperature] > 20) (set Heizung=State off)
   NAME       Elektroheizung
   NR         42944
   NTFY_ORDER 50-Elektroheizung
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-09-22 23:31:13   cmd             1
     2017-09-22 23:31:13   cmd_event       set_cmd_1
     2017-09-22 23:31:13   cmd_nr          1
     2017-09-22 23:31:13   state           cmd_1
   condition:
     0          ReadingValDoIf($hash,'Sensor','Temperature') < 20
     1          ReadingValDoIf($hash,'Sensor','Temperature') > 20
   devices:
     0           Sensor
     1           Sensor
     all         Sensor
   do:
     0:
       0          set Ventilator=STATE on
     1:
       0          set Ventilator=State off
     2:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   readings:
     0           Sensor:Temperature
     1           Sensor:Temperature
     all         Sensor:Temperature
   regexp:
     all:
   state:
     STATE:
Attributes:
   room       Oben
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 23 September 2017, 06:31:27

([Sensor:Temperature] < 20) (set Heizung on) DOELSEIF ([Sensor:Temperature] > 20) (set Heizung off)


So sollte er zu mindestens schalten. Probiere das erstmal aus.
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 23 September 2017, 12:49:24
Es schaltet leider nicht automatisch (über den Set-Knopf kann ich den Befehl allerdings senden, das funktioniert also).
"Sensor" ist übrigens ein Dummy.

Internals:
   CFGFN
   DEF        ([Sensor:Temperature] < 18) (set Heizung on) DOELSEIF ([Sensor:Temperature] > 19) (set Heizung off)
   NAME       Elektroheizung
   NR         42944
   NTFY_ORDER 50-Elektroheizung
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2017-09-23 12:46:46   cmd             1
     2017-09-23 12:46:46   cmd_event       set_cmd_1
     2017-09-23 12:46:46   cmd_nr          1
     2017-09-23 12:46:31   mode            enable
     2017-09-23 12:46:46   state           cmd_1
   condition:
     0          ReadingValDoIf($hash,'Sensor','Temperature') < 18
     1          ReadingValDoIf($hash,'Sensor','Temperature') > 19
   devices:
     0           Sensor
     1           Sensor
     all         Sensor
   do:
     0:
       0          set Heizung on
     1:
       0          set Heizung off
     2:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   readings:
     0           Sensor:Temperature
     1           Sensor:Temperature
     all         Sensor:Temperature
   regexp:
     all:
   state:
     STATE:
Attributes:
   room       Oben
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 23 September 2017, 14:02:44
Und der Sensor? Sehe nicht das der Sensor beachtet wird?
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 23 September 2017, 16:11:17
Wenn ich "list Sensor" eintippe, bekomme ich die Meldung "No device named Sensor found".

Achso, aber das ist ja der Alias-Name. Den darf ich wahrscheinlich nicht benutzen, oder?

Internals:
   CFGFN
   DEF        ([Oben.DHT22:Temperature] < 18) (set Heizung on) DOELSEIF ([Oben.DHT22:Temperature] > 19) (set Heizung off)
   NAME       Elektroheizung
   NR         42944
   NTFY_ORDER 50-Elektroheizung
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2017-09-23 16:10:44   cmd             0
     2017-09-23 16:10:44   state           initialized
   condition:
     0          ReadingValDoIf($hash,'Oben.DHT22','Temperature') < 18
     1          ReadingValDoIf($hash,'Oben.DHT22','Temperature') > 19
   devices:
     0           Oben.DHT22
     1           Oben.DHT22
     all         Oben.DHT22
   do:
     0:
       0          set Heizung on
     1:
       0          set Heizung off
     2:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   readings:
     0           Oben.DHT22:Temperature
     1           Oben.DHT22:Temperature
     all         Oben.DHT22:Temperature
   regexp:
     all:
   state:
     STATE:
Attributes:
   room       Oben
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 23 September 2017, 16:24:12
Nur Devicenamen
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 23 September 2017, 16:25:11
Denke mal so passt das schon. Jetzt schauen wir mal
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 23 September 2017, 19:19:37
Juhuu, es scheint zu funktionieren!!!
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 23 September 2017, 19:37:30
Sehr gut. Was fehlt noch?
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 23 September 2017, 23:07:18
Ich würde die Heizung gerne zwischen 22 Uhr und 6 Uhr abschalten  :)
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: TomLee am 24 September 2017, 00:44:03
Das wird vermutlich mit dem dritten Beispiel ganz am Anfang der commandref gehen.

ZitatKombinierte Ereignis- und Zeitsteuerung

define di_lamp DOIF ([06:00-09:00] and [sensor:brightness] < 40) (set lamp on) DOELSE (set lamp off)
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 24 September 2017, 07:21:39

(["^Oben.DHT22$:^Temperature",20] < 18 and [?06:00-22:00]) (set Heizung on) DOELSEIF (["^Oben.DHT22$:^Temperature",20] > 19 and [?22:00-06:00] ) (set Heizung off)


Schau mal bitte ob das so geht. Wenn nicht muß nur bisschen die RegEx angepasst werden
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 24 September 2017, 14:17:39
Ich habe eine Frage zum neuen Code:

Schaltet sich damit die Heizung nicht nur dann ab, wenn die Temperatur über 19 °C ist UND es zwischen 22 und 6 Uhr ist?
Sie soll sich tagsüber ja auch abschalten, wenn es über 19 °C ist.

Müsste da nicht eigentlich ein "Oder" hin?
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 24 September 2017, 14:35:26
Ha, und jetzt fällt mir auch wieder ein wieso ich off als erstes hatte. Also vor dem DOELSEIF
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 24 September 2017, 14:38:26

(["^Oben.DHT22$:^Temperature",20] > 19 or [?22:00-06:00] ) (set Heizung off)
DOELSEIF (["^Oben.DHT22$:^Temperature",20] < 18) (set Heizung on)


So sollte es nun gehen
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 24 September 2017, 17:02:52
Nochmal eine generelle Frage dazu:

Das DOIF reagiert immer, wenn der Sensor ein neues Reading hat, oder?
Das passiert bei mir alle 15 Minuten.

Es wird doch also alle 15 Minuten ein Funksignal geschickt, egal ob die Steckdose
bereits an ist oder nicht?

Also: Kann man das so einstellen, dass nur ein Signal gesendet wird, wenn sich der Zustand auch ändern soll.
(Z.B. wird ja nachts alle 15 Minten ein "Off"Signal geschickt).
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 24 September 2017, 17:41:18
DOIF verwendet bereits das Prinzip einer Zustandsmaschine. Ist also einmal ein Zustand erreicht, wird dieser nicht noch mal geschalten bevor nicht vorher ein anderer Zustand eingetroffen ist.
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 25 September 2017, 16:34:08
Habe gerade selbst noch ein bisschen gelesen und die Info dann auch gefunden.

Trotzdem Danke! Es läuft soweit alles gut, heute morgen pünktlich um 6 ging die
Heizung an. Ich bin echt begeistert von den ganzen Möglichkeiten.

Wozu braucht man eigentlich das ",20" im Code? Das ist mir noch nicht ganz klar.

Vorhin hätte ich mir im Ikea fast eine farbige Tradfri LED-Lampe mitgenommen.
Aber ich glaube laut Forum ist das Gateway nicht sehr zuverlässig...  :-\
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: CoolTux am 25 September 2017, 16:36:44
Zitat von: Kitt am 25 September 2017, 16:34:08
Wozu braucht man eigentlich das ",20" im Code? Das ist mir noch nicht ganz klar.
Das ist im Prinzip wie bei ReadingsVal. Das ist der Default Wert welcher genommen werden soll wenn nichts anderes ausgelesen werden kann.
Titel: Antw:Temperaturgesteuerte Zeitschaltuhr
Beitrag von: Kitt am 25 September 2017, 16:41:43
Ok, danke!!!  :) Ist wahrscheinlich ganz sinnvoll, wenn die Heizung sich im Zweifel abschaltet.