Diskussion:SunnyHomeManager

Aus FHEMWiki
Version vom 20. März 2016, 12:54 Uhr von BerndArnold (Diskussion | Beiträge) (Hinweise auf 98_SHM* hinzugefügt, Leerzeile am Ende der Codeblöcke entfernt, Details hinzugefügt →‎Steuerung der Spülmaschine)

Steuerung der Spülmaschine

Das Forecast-Modul (98_SHMForecast) von Brun habe ich so angepasst, dass es die relativen Zeitwerte und deren Daten (Consumption, IsConsumptionRecommended, PvMeanPower) abbildet. Abhängig davon steuere ich über ein DOIF die Spülmaschine (oder Waschmaschine). Das Gerät muss nur eine Eigenschaft aufweisen: nach einem Stromausfall muss das Gerät an der Stelle weitermachen, wo es war, als der Strom "ausfiel".

Wie läuft das ganze ab?

  • Spülmaschine füllen
  • Strom einschalten (direkt an der Funksteckdose - ich habe den HM-ES-PMSw1 von Homematic -, per Funkschalter oder über Fhem)
  • Spülmaschine einschalten/starten
  • Den Dummy z. B. auf "NaechsteGelegenheit" setzen und die Stromzufuhr unterbrechen
  • Die Stromzufuhr wird dann über das DOIF wieder hergestellt, sobald die Bedingungen erfüllt sind und der Geschirrspüler setzt das Programm fort

Das alles ist noch recht neu, deshalb habe ich es erstmal nur hier auf die Diskussionsseite gesetzt. Dieser Beitrag bezieht sich auf die Diskussion im Forum (siehe Beitrag). Dort ist auch das benötigte Modul 98_SHMForecastRelative. Ich habe es erst seit ein paar Tagen im Einsatz. Es hat erste Tests bestanden. Als perfekt würde ich es aber noch nicht bezeichnen :-)

Das DOIF kann man beliebig anpassen und mehrere Bedingungen miteinander koppeln. Ich habe z. B. eingestellt, dass die Spülmaschine nur zwischen 10:00 Uhr und 15:00 Uhr eingeschaltet werden soll (Modus NaechsteGelegenheit). Im Modus Pflicht soll er frühestens um 11:00 Uhr laufen.

Das Abschalten muss übrigens manuell gemacht werden (entweder über den Funkschalter oder direkt an der Funksteckdose wenn man ausräumt).

Der Kanal zum Schalten der HM-Funksteckdose heißt bei mir HM_Sw1_Spuelmaschine_Sw. Auf die Wiedergabe der Definition habe ich hier verzichtet.

Hinweis: alle Code-Zeilen habe ich aus der fhem.cfg-Datei kopiert. Sie sind also nicht dazu geeignet, sie in das Befehl-Eingabefeld einzutragen und dort auszuführen.

Hier ist zunächst der Dummy, mit dem den gewünschten Modus einstellt. Die Beschreibung habe ich in das comment-Attribut gepackt.

define SpuelmaschinenAutomatik dummy                                                                                                        
attr SpuelmaschinenAutomatik comment Aus: Geschirrspüler soll nicht laufen\
NaechsteGelegenheit: Geschirrspüler wird laufen, wenn PV-Überschuss vorherrscht\
Pflicht: Geschirrspüler wird laufen, unabhängig vom PV-Überschuss (weil er halt übervoll ist und es Zeit wird)\
Aktiv: Geschirrspüler wurde eingeschaltet vom DOIF.\ 
Sofort: Geschirrspüler soll jetzt eingeschaltet werden.\
\
In Verbindung mit einem DOIF.\

attr SpuelmaschinenAutomatik room EG_Kueche
attr SpuelmaschinenAutomatik setList Aus NaechsteGelegenheit Pflicht Sofort

Voraussetzung 1: Das SHM-Modul von Brun (98_SHM.pm aus Beitrag). Siehe dazu auch die Hinweise auf SunnyHomeManager.

define MySHM SHM benutzername@example.com kennwort intervall

Voraussetzung 2: Das SHMForecastRelative-Modul (98_SHMForecastRelative.pm aus Beitrag).

define MySHMForecastRelative SHMForecastRelative intervall

Und hier ist nun das Haupt-DOIF:

define SpuelmaschineEinschalten.Pruefung DOIF ( [SpuelmaschinenAutomatik] eq "Aus" ) (\
) DOELSEIF ( [SpuelmaschinenAutomatik] eq "Sofort" ) (\
    (set HM_Sw1_Spuelmaschine_Sw on)\ 
) DOELSEIF ( [SpuelmaschinenAutomatik] eq "NaechsteGelegenheit" and [MySHMForecastRelative:Next04Hours-Total] > 1000 and [MySHMForecastRelative:Next04Hours-IsConsumptionRecommended] >= 2 and [MySHMForecastRelative:ThisHour_IsConsumptionRecommended] eq "yes" and [10:00-15:00] ) (\
    (set Pushover msg 'Sauber' 'Jetzt wird mal die Spuelmaschine eingeschalten.' 'MeinHandy' 0 '')\
    (set HM_Sw1_Spuelmaschine_Sw on)\
) DOELSEIF ( [SpuelmaschinenAutomatik] eq "Pflicht" and [11:00-13:00] ) (\
    (set Pushover msg 'Sauber' 'Jetzt wird mal die Spuelmaschine eingeschalten.' 'MeinHandy' 0 '')\
    (set HM_Sw1_Spuelmaschine_Sw on)\
) DOELSE ()
attr SpuelmaschineEinschalten.Pruefung group Photovoltaik
attr SpuelmaschineEinschalten.Pruefung room EG_Kueche
attr SpuelmaschineEinschalten.Pruefung wait 0:10:60:60:30

Hier ist das zweite DOIF, welches den Dummy steuert. Den Dummy innerhalb des oberen DOIFs zu setzen würde zwar funktionieren, aber dann bekommt es das obere DOIF nicht mit, dass sich der Status geändert hat (das soll Loops verhindern und ist innerhalb Fhem so gewollt).

define SpuelmaschineEingeschaltet.Pruefung DOIF ( [HM_Sw1_Spuelmaschine_Sw] eq "on" ) (\
    (set SpuelmaschinenAutomatik Aktiv)\
) DOELSEIF ( [HM_Sw1_Spuelmaschine_Sw] eq "off" ) (\
\
) DOELSE ()
attr SpuelmaschineEingeschaltet.Pruefung room EG_Kueche

Ich hatte noch einen FS20-Schalter (S4A) übrig. Mit diesem steuere ich den Dummy. Das ist nicht zwingend notwendig, erhöht aber bestimmt den WAF :-)

define Spuelmaschine.TasterWahl notify FS20S4_Kueche_Btn.:toggle { \
   Log 1, "Button $NAME: $EVENT";;\
   if ( $NAME =~ /Btn1/ ) {\
      fhem( "set SpuelmaschinenAutomatik Aus" );;\
      fhem( "set HM_Sw1_Spuelmaschine_Sw off" );;\
   } elsif ( $NAME =~ /Btn2/ ) {\
      fhem( "set HM_Sw1_Spuelmaschine_Sw on" );;\
   } elsif ( $NAME =~ /Btn3/ ) {\
      fhem( "set SpuelmaschinenAutomatik NaechsteGelegenheit" );;\
      fhem( "set HM_Sw1_Spuelmaschine_Sw off" );;\
   } elsif ( $NAME =~ /Btn4/ ) {\
      fhem( "set SpuelmaschinenAutomatik Pflicht" );;\
      fhem( "set HM_Sw1_Spuelmaschine_Sw off" );;\
   } else {\
      Log 1, "Unbekannter Fall: $NAME / $EVENT";;\
   }\
}
attr Spuelmaschine.TasterWahl room EG_Kueche

Der Nachteil bei diesem Notify ist, dass das Taster-Objekt nicht unter "Probably associated with..." angelistet wird. Wenn man das möchte, muss man vier einzelne Notifiy-Definitionen erstellen anstelle dem einen hier.

--BerndArnold (Diskussion) 01:00, 20. Mär. 2016 (CET)