Steuerung Gartenbrunnen wetter- und zeitabhängig

Begonnen von MarcS, 12 März 2013, 19:15:49

Vorheriges Thema - Nächstes Thema

MarcS

Hallo zusammen,
ich tue mir noch schwer mit geschachtelten Abhängigkeiten.......
Ich möchte zwischen 08:00 und 20:00 meinen Gartenbrunnen einschalten, aber nur, wenn das Wetter nicht schlecht ist bzw. die Sonne scheint.
Ich habe FS20 mit FB7390 und CUL, alles läuft.
Aktor ist ein FS20 SA (geeignet für Aussenbetrieb)

Folgenden Code wollte ich probieren - bitte helft mir, ob korrekt bzw. Welche Änderungen notwendig sind:

# Brunnen wettergesteuert einschalten
# Sensor = "weather"-Modul, reading = "condition"
# wenn "condition" == "teilweise sonnig" oder "sonnig" dann einschalten
# Abfrage der "condition" alle 30 Minuten
define 9_BrunnenWeather_an at +*00:30:00 { if (ReadingsVal("weather","condition","wolkig") eq "sonnig" { fhem("set 9_Aussen_S2 on") } else { fhem("set 9_Aussen_S2 off") } }

Offene Punkte:
- wie definiere ich hierzu, dass das ganze nur von 08:00 bis 20:00 gilt ?
- wie definiere ich, dass ausser der condition "sonnig" ebenfalls die condition "teilweise sonnig", die das Modul "weather" im Reading "condition" zurückliefert, als positiv bewertet wird (parallel zu "sonnig") ?

Vielen Dank schon mal für die Hilfe !

Marc

Groby

Hallo MarcS,

für die Wetter - Validierung =~ m/sonnig/

Zeiten entweder gegen $hour und $min validieren oder gegen die aktuelle Zeit mit ($now):


{my $now=sprintf("%%02d:%%02d",$hour,$min)}
 

Einfach mal die Bsp. suchen (code ungetested :)

Gruss, Groby

eppi

Hallo Marc

Probier es mal so:
{ if (ReadingsVal("weather","condition","wolkig") eq "sonnig" || ReadingsVal("weather","condition","wolkig") eq "teilweise sonnig" && $hour >= 8 && $hour < 20{ fhem("set 9_Aussen_S2 on") } else { fhem("set 9_Aussen_S2 off") } }

Das "||" bedeutet ODER
Das "&&" bedeutet UND

Ich habe den Code nicht getestet, hoffe dass du trotzdem weiter kommst!
Viele Grüsse, Dani

MarcS

Hallo Groby,
vielen Dank für deine Tipps !

Ich bin, was das ganze angeht nicht wirklich fit in der Programmierung, deswegen stehe ic da erstmal vor einem Rätsel, wie ich deine Tipps in die Tat umsetzen kann....

V G
Marc

MarcS

Hi Dani,
vielen Dank, ich werde das morgen mal ausprobieren - klingt aber erstmal vielversprechend.

V G
Marc

Groby

Dank eppi hast Du ja schon die Lösung.

Die beiden ReadingsVal kannst Du noch mit o.g. Vergleich zusammenfassen :)


eppi

@Groby
Danke für den Tipp, man lernt nie aus :=)

@Marc
Nach dem "20" fehlt noch ein Abstand "Space"...

Viel Erfolg und Gruss Dani

MarcS

@eppi:

Vielen Dank für deine Hilfe - das Ganze funktioniert großartig.
Ich hatte zwar noch keinen "sonnigen" Tag, aber mit Umstellung der Werte hat das gut geklappt!

Eine kurze Frage vielleicht noch:
Wenn ich diese Aktion nur von April bis Oktober ausführen möchte, wie muss ich das Skript ergänzen?
Im Winter habe ich ja die Pumpe nicht im Brunnen
:-)

Vielen Dank schon einmal und viele Grüße,
Marc

det.

Einfache Lösung - wenn der Winter naht ein # vor den Code - wenn der Frühling im Anmarsch ist, das # da wieder weglöschen
LG
det.

MarcS

Stimmt - so könnte das auch funktionieren...
:-)

Aber das kann an doch siherlich auh automatiiert machen, oder ?

V G
Marc


eppi

Hallo Marc
Das freut mich! Du kannst den bestehenden Code erweitern um "month".

Beispiel
$month >=3 && $month <10

Januar entspricht Monat 0
Februar entspricht Monat 1
......
Dezember entspricht Monat 11

Wieder ungetestet. Viel Erfolg!
Gruss Dani

Klaus Rubik

Hallo *,

ich bin am verzweifeln, im Prinzip ist der Code genau das was ich für meine Poolpumpe benötige, ich bekomme ihn aber nicht zum laufen.

Code:

+*00:05:00 { if (ReadingsVal("Puchheim","condition","wolkig") eq "sonnig" || ReadingsVal("Puchheim","condition","wolkig") eq "teilweise sonnig" &&  $hour >= 10 && $hour < 18 { fhem("set Poolpumpe on") } else { fhem("set Poolpumpe off") } }

Fehlermeldung im Log:
2013.05.04 13:54:45 3: syntax error at (eval 8407) line 1, near "18  { "

Wer hat hier noch einen Tip für einen Programmierinvalieden :-)

Danke

Klaus
FHEM 6.0 auf RPI4 mit CUL868, AEOTEC, RFXTRX 433
CUL_WS  : S300TH              FHT         : FHT80B, FHT80TF
HMS        : HMS100-TF         FBDECT   : DECT!200, FRITZ!Powerline 546E
FS20       : FS20DI10, FS20ST, FS20WS1, FS20DU-2, FS20 FMS

Dietmar63

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Klaus Rubik

FHEM 6.0 auf RPI4 mit CUL868, AEOTEC, RFXTRX 433
CUL_WS  : S300TH              FHT         : FHT80B, FHT80TF
HMS        : HMS100-TF         FBDECT   : DECT!200, FRITZ!Powerline 546E
FS20       : FS20DI10, FS20ST, FS20WS1, FS20DU-2, FS20 FMS

Dietmar63

So wie du das Problem löst, schaltest du die Brunnenpumpe alle 5 Minuten - sehr oft und fast immer dann aus.

Du könntest folgendes machen:
Da du wie ich vermute das Weathermodul nutzt, könntest du ein notify auf die condition setzen:

define nf notify Puchheim:condition.* {Log 3, "Nachricht von @: %" }
dann wirst du immer informiert wenn sich die condition in Weather ändert, und abhängig von den Readings schaltest du an/oder aus. Du müstest dann nur noch {Log 3, "Nachricht von @: %"} ersetzen.

Wenn du dann noch mit  
attr Puchheim event-on-change-reading condition das Attribut event-on-change-reading setzt, dann wirst du nur noch informiert wenn sich im Weathermodul die condition tatsächlich ändert und du must nur noch ganz selten prüfen.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm