Trockner schaltet Luftentfeuchter (Code funktioniert, bitte um ein Review)

Begonnen von Cyber1000, 03 Dezember 2017, 20:22:49

Vorheriges Thema - Nächstes Thema

Cyber1000

Hallo,

Vorab: Dieser Code tut das was ich will, es ist nur eines meiner ersten DOIFs auf fhem, deshalb wollt ich fragen, ob da vielleicht ein Profi mal drübersehn kann, vielleicht macht man das ja auch ganz anders, effizienter, whatever und ich verwende hier Konstrukte, die nie so vorgesehen waren. Hab mich im wiki/forum ein wenig eingelesen und selbst ein wenig herumgespielt, aber es gibt einfach so viele Möglichkeiten, die einen Anfänger erst mal erschlagen.

Schritte, die ich hier mache:

  • sobald der Trockner anläuft wird ein Luftentfeuchter mitaktiviert und die aktuelle Luftfeuchte gespeichert (falls sie noch nicht gespeichert ist)
  • sobald der Trockner aus ist und eine halbe Stunde abgelaufen ist:

    • ist die ursprüngliche Luftfeuchte wieder erreicht, wird der Entfeuchter abgeschalten
    • Ist sie noch nicht erreicht wird noch eine weitere Stunde probiert und dann bei Erreichen oder nach dieser Stunde abgeschalten (das macht der Counter, den ich hier raufzähle)
    • Die Überprüfung erfolgt minütlich (gut alle 5 oder 10 min würde vermutlich auch reichen ...) mittels repeatcmd

Danke!

([Trockner.Status] eq 'running')
(
   set Luftentfeuchter.AutoStatus on,
   set Luftentfeuchter.Steckdose on,
   set Luftentfeuchter.Shutoff.Counter 0,
   IF ([Luftenfeuchter.Feuchte.Ziel] < 0) (set Luftenfeuchter.Feuchte.Ziel [Sensor_TL_Bad:humidity])
)
DOELSEIF ([Trockner.Status] eq 'off')
(
   IF ([Sensor_TL_Bad:humidity] <= [Luftenfeuchter.Feuchte.Ziel] or ([Sensor_TL_Bad:humidity] > [Luftenfeuchter.Feuchte.Ziel] and [Luftentfeuchter.Shutoff.Counter]>=60))
   (
      set Luftentfeuchter.AutoStatus off,
      set Luftentfeuchter.Shutoff.Counter 0,
      set Luftenfeuchter.Feuchte.Ziel -1,
      set Luftentfeuchter.Steckdose off,
     (set Benachrichtigung message Luftentfeuchter fertig, bitte entleeren! | Hausautomatisierung)
   )
   ELSE
   (
      set Luftentfeuchter.Shutoff.Counter {([Luftentfeuchter.Shutoff.Counter]+1)}
   )
)


Attribute: do always
repeatcmd: 0:60
repeatsame: 0:65
wait: 0:1800

Damian

Wenn es funktioniert, dann hast du alles richtig gemacht. Ich sehe keine groben Verstöße.

Eine elegantere Lösung wäre, statt alle paar Minuten zu pollen, die Feuchtigkeitsschwelle in einer DOIF-Bedingung abzufragen und dann sofort oder verzögert die gewünschte Aktion ausführen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Die Feuchtigkeit würde ich nicht abfragen, sondern durch die Events melden lassen.
Dann kann man in einem separaten DOIF (separat, weil anderes DEVICE) drei Fälle unterscheiden:
zu hohe Luftfeuchte, Trockner läuft -> Entfeuchter an
viel zu hohe Luftfeuchte, Trockner aus -> Entfeuchter an
normale Luftfeute - Entfeuchter aus

Anfangs mag es noch angehen, verschiedene DEVICES über ein DOIF zu schalten, sobald aber mehrere DOIF auf ein DEVICE zugreifen, kann es zu ungeahnten Seiteneffekten kommen.

Cyber1000

Danke nochmal!

Im Endeffekt habe ich das ganze noch ein wenig geradegezogen und die Feuchtigkeit wie empfohlen in die Events gezogen.
Funktioniert seit ein paar Monaten auch recht zufriedenstellend.
Gerade wieder über den Artikel gestolpert ...