Heizungssteuerung mit Uhrzeit von Dashboard

Begonnen von stefanru, 30 Oktober 2016, 23:48:43

Vorheriges Thema - Nächstes Thema

stefanru

Hi,

ich brauche mal Hilfe. Ich bin neu in FHEM.
Ich möchte eine Heizungssteuerung umsetzen.
Geschaltet wird eine Steckdose die per 433MHZ am Raspberry hängt die die Heizungspumpe steuert.
Das tut auch alles.

Die Eingaben mache ich über ein Dashboard (siehe Anhang).
Automatik an / aus
Temperatur aussen
Uhrzeit An
Uhrzeit Aus

Die einzelnen Eingaben sind Dummys.
Soweit funktioniert das auch.

Mein Problem ist das Schalten der Steckdose mit Hilfe der eingegebenen Zeit.
Zuerst hatte ich doif probiert und die Zeiten mit    
([{ReadingsVal("UG.SchaltZeit1AnHeizung", "state", "05:30:00")}-{ReadingsVal("UG.SchaltZeit1AusHeizung", "state", "01:00:00")}]) (set Steckdose.Heizung on) DOELSE (set Steckdose.Heizung off)
eingefügt.
Das Problem ist, dass wenn ich auf dem Dashboard die Zeit neu eingebe sich das DOIF nicht aktualisiert.
Außerdem gefällt mir nicht dass immer nur einmal zur Zeit getriggert wird.

Dann hatte ich es mit at probiert. Hier habe ich das selbe Problem und die selben Nachteile.

Als letztes habe ich es mit at als trigger im 10 Sekunden takt probiert.
Das war schon ganz gut, so möchte ich es eigentlich. Dass egal was passiert die Werte geprüft werden und die Schaltung ausgeführt wird.
   
+*00:00:10 {
my $hm = sprintf("%02d:%02d", $hour, $min);
if ( Value("UG.AutomatikHeizung") eq "an" and
      $hm ge Value("UG.SchaltZeit1AnHeizung") )
  { 
   fhem "set Steckdose.Heizung on"
  }
}

Mir ist dann aber der Zeitvergleich aufgefallen.
Wie realisiere ich denn eine Schaltung von 23:00 - 03:00?
mit ge 23:00 geht es wohl um 0 Uhr aus oder?

Wie würdet Ihr experten dieses Probelm lösen?

Kurz gefasst:
Zeit vom Dashboard wird in doif oder at wenn mit ReadingsVal eingefügt nicht aktualisiert wenn sie auf dem UI geändert wird. Auch wird immer nur zur angegeben Zeit 1x getriggert.

Problem bei if Bedingung, wie realisiere ich einen Zeitvergleich über die 24 Uhr. Bsp:
an 23:00
aus 3:00

Viele Grüße und schon mal vielen Dank
Stefan





Damian

Zitat von: stefanru am 30 Oktober 2016, 23:48:43
Hi,

ich brauche mal Hilfe. Ich bin neu in FHEM.
Ich möchte eine Heizungssteuerung umsetzen.
Geschaltet wird eine Steckdose die per 433MHZ am Raspberry hängt die die Heizungspumpe steuert.
Das tut auch alles.

Die Eingaben mache ich über ein Dashboard (siehe Anhang).
Automatik an / aus
Temperatur aussen
Uhrzeit An
Uhrzeit Aus

Die einzelnen Eingaben sind Dummys.
Soweit funktioniert das auch.

Mein Problem ist das Schalten der Steckdose mit Hilfe der eingegebenen Zeit.
Zuerst hatte ich doif probiert und die Zeiten mit    
([{ReadingsVal("UG.SchaltZeit1AnHeizung", "state", "05:30:00")}-{ReadingsVal("UG.SchaltZeit1AusHeizung", "state", "01:00:00")}]) (set Steckdose.Heizung on) DOELSE (set Steckdose.Heizung off)
eingefügt.
Das Problem ist, dass wenn ich auf dem Dashboard die Zeit neu eingebe sich das DOIF nicht aktualisiert.
Außerdem gefällt mir nicht dass immer nur einmal zur Zeit getriggert wird.

Dann hatte ich es mit at probiert. Hier habe ich das selbe Problem und die selben Nachteile.

Als letztes habe ich es mit at als trigger im 10 Sekunden takt probiert.
Das war schon ganz gut, so möchte ich es eigentlich. Dass egal was passiert die Werte geprüft werden und die Schaltung ausgeführt wird.
   
+*00:00:10 {
my $hm = sprintf("%02d:%02d", $hour, $min);
if ( Value("UG.AutomatikHeizung") eq "an" and
      $hm ge Value("UG.SchaltZeit1AnHeizung") )
  { 
   fhem "set Steckdose.Heizung on"
  }
}

Mir ist dann aber der Zeitvergleich aufgefallen.
Wie realisiere ich denn eine Schaltung von 23:00 - 03:00?
mit ge 23:00 geht es wohl um 0 Uhr aus oder?

Wie würdet Ihr experten dieses Probelm lösen?

Kurz gefasst:
Zeit vom Dashboard wird in doif oder at wenn mit ReadingsVal eingefügt nicht aktualisiert wenn sie auf dem UI geändert wird. Auch wird immer nur zur angegeben Zeit 1x getriggert.

Problem bei if Bedingung, wie realisiere ich einen Zeitvergleich über die 24 Uhr. Bsp:
an 23:00
aus 3:00

Viele Grüße und schon mal vielen Dank
Stefan

Die Lösung findest du hier:

http://fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stefanru

Wow,

danke Damian, ich war wohl blind. Mit doppelten [ geht das. Probiere ich gleich :-)

Aber bleibt mit DOIF dann nicht trotzdem das Problem bei einem Stromausfall?

Zur Erklärung:
Wenn der Strom ausfällt ist die Steckdose standrtmäßig aus, auch wenn sie vorher an war.
Wenn fhem neustartet prüft es ja nicht die doif's oder? FHEM wird auch nicht versuchen den alten Status durch schicken eines neuen AN signals an die Steckdose herstellen.
D.h. ja dann die Steckdose geht erst wieder in den richtigen Status wenn der nächste Zeitpunkt erreicht wird.
Was dann bedeutet die Heizung ist nach einem Stromausfall erstmal aus, oder?

Wie ist hier eine gute Lösung?

Vielen Dank
Stefan



Damian

#3
define di DOIF([[Anfang]-[Ende]] or [?[Anfang]-[Ende]] and ["global:INITIALIZED"]) (set Steckdose.Heizung on) DOELSE (set Steckdose.Heizung off)

attr di do always


Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

stefanru

Super Danke!
["global:INITIALIZED"] wird immer beim Start von FHEM ausgelöst?

Ich habe meine Lösung jetzt am laufen. Das global initialized hatte ich nicht gebraucht da ich ne Wetterstation abfrage per HTTPMOD. Somit wird bei jeder Abfrage des Wetter Wertes (120sek) ausgelöst.
Das langt mir auch.

Damit jeder was von hat hier mein fertiges Beispiel, im Anhang der Screenshot von dem Dashboard:

Dummys:
define UG.AutomatikHeizung dummy
attr UG.AutomatikHeizung alias Automatik
attr UG.AutomatikHeizung devStateIcon .*:rc_BLANK
attr UG.AutomatikHeizung group Heizung_Einstellungen
attr UG.AutomatikHeizung icon temp_outside
attr UG.AutomatikHeizung room UG
attr UG.AutomatikHeizung setList state:an,aus
attr UG.AutomatikHeizung webCmd state

define UG.SchaltTemperaturHeizungAussen dummy
attr UG.SchaltTemperaturHeizungAussen alias Schalt Temperatur Außen
attr UG.SchaltTemperaturHeizungAussen devStateIcon .*:rc_BLANK
attr UG.SchaltTemperaturHeizungAussen group Heizung_Einstellungen
attr UG.SchaltTemperaturHeizungAussen icon temp_outside
attr UG.SchaltTemperaturHeizungAussen room UG
attr UG.SchaltTemperaturHeizungAussen setList state:slider,10,0.5,30
attr UG.SchaltTemperaturHeizungAussen webCmd state

define UG.SchaltZeit1AnHeizung dummy
attr UG.SchaltZeit1AnHeizung alias Schalt Zeit 1 An
attr UG.SchaltZeit1AnHeizung devStateIcon .*:rc_BLANK
attr UG.SchaltZeit1AnHeizung group Heizung_Einstellungen
attr UG.SchaltZeit1AnHeizung icon temp_outside
attr UG.SchaltZeit1AnHeizung room UG
attr UG.SchaltZeit1AnHeizung setList state:time
attr UG.SchaltZeit1AnHeizung webCmd state

define UG.SchaltZeit1AusHeizung dummy
attr UG.SchaltZeit1AusHeizung alias Schalt Zeit 1 Aus
attr UG.SchaltZeit1AusHeizung devStateIcon .*:rc_BLANK
attr UG.SchaltZeit1AusHeizung group Heizung_Einstellungen
attr UG.SchaltZeit1AusHeizung icon temp_outside
attr UG.SchaltZeit1AusHeizung room UG
attr UG.SchaltZeit1AusHeizung setList state:time
attr UG.SchaltZeit1AusHeizung webCmd state

define Steckdose.Heizung dummy
attr Steckdose.Heizung group Heizung_Steckdose
attr Steckdose.Heizung room UG
attr Steckdose.Heizung setList on off
define off_Steckdose.Heizung notify Steckdose.Heizung:off {system("/home/pi/433Utils/RPi_utils/codesend 1111111 4")}
attr off_Steckdose.Heizung room UG
define on_Steckdose.Heizung notify Steckdose.Heizung:on {system("/home/pi/433Utils/RPi_utils/codesend 1111111 4")}
attr on_Steckdose.Heizung room UG

das doif:
define UG.doHeizung DOIF (\
[UG.AutomatikHeizung] eq "an" and\
[[UG.SchaltZeit1AnHeizung]-[UG.SchaltZeit1AusHeizung]] and \
[wetter_moeba_kappelenweg:temperature] <= [UG.SchaltTemperaturHeizungAussen]\
)\
(set Steckdose.Heizung on) \
DOELSE \
(set Steckdose.Heizung off)
attr UG.doHeizung room UG
define FileLog_Heizung FileLog ./log/Heizung-%Y.log Steckdose.Heizung
attr FileLog_Heizung room UG
define SVG_FileLog_Heizung_1 SVG FileLog_Heizung:SVG_FileLog_Heizung_1:CURRENT
attr SVG_FileLog_Heizung_1 group Heizung_Log
attr SVG_FileLog_Heizung_1 room UG

Dashboard:
define Heizung Dashboard
attr Heizung dashboard_activetab 2
attr Heizung dashboard_tab1groups Heizung_Einstellungen, Heizung_Steckdose, Heizung_Log
attr Heizung dashboard_tab1name Heizung
attr Heizung room UG

Wetter ist über http://api.wunderground.com/ und HTTPMOD angebunden.

Vielen Dank für die Hilfe.
Vor allem an Damian!

Gruß,
Stefan