Heizung und Schichtarbeit

Begonnen von juniorfux94, 28 Juni 2017, 20:13:18

Vorheriges Thema - Nächstes Thema

juniorfux94

Guten Tag,

ich habe eine Herausforderung, bzw. brauche mal einen Denkanstoß zur Umsetzung.

Ich arbeite im Schichtdienst, meine Frau hat feste Arbeitszeiten.

Meine Ankunft daheim kann um 15 Uhr sein, oder 16:15 oder 19:30. Meine Frau ist meist gegen 15 Uhr zu Hause.
Dazu kommt noch Urlaub zu Hause oder verreisen als mögliche Stati.

Aktuell habe ich auf Tablet-UI 2 Dropdown-Felder, die über Dummys ein AT erstellen, dass nachts die Zeiten auf die Heizkörper überträgt.
Momentan habe ich FHT-80 Geräte an der Heizung verbaut, dort wird die erste Schaltzeit von meiner Arbeitszeit, die 2. von meiner Frau belegt.

Das soll nun abgeschafft werden und gegen Homematic-Antriebe mit einer Heizplan-Datei getauscht werden.

Mein Ansatz wäre für mich und meine Frau je eine Holiday-Datei anzulegen mit den Infos:
Also für mich F (Früh), M (Mittel), S (Spät), U (Urlaub), A (Abwesend)
und für meine Frau D (Dienst), U (Urlaub), A (Abwesend)

Die Heizplan-Datei mit 3 Schaltzeiten versehen (zusammengerechnet kommen nicht mehr raus, da bei 2 meiner Schichten meine Frau schon daheim ist) mit 15 Uhr, 12 Uhr (Urlaub) und Aus für Abwesend.

Nun der Punkt an dem ich klemme und alles in Frage stelle:

Das DOIF, dass die Entscheidung treffen muss, welcher Plan der richtige ist, hätte nach meiner Rechnung ca 15 Konstellationen zu berücksichtigen.

Ich habe schon mehrfach rum überlegt und auch die Suche bequemt, aber ich finde keine Alternative.

Wisst Ihr einen Rat?

Vielen Dank

Manuel

tiwo85

Ich arbeite auch Schicht. Allerdings ist meine Frau und unsere Kinder die meiste Zeit zu Hause. Bei uns muss nur in der Frühschicht morgens das Bad zusätzlich geheizt werden.
Dafür habe ich mir einen extra Google Calendar erstellt und jeweils mit Serienelementen gefüllt. Anschließend ein notify erstellt, welches jeweils 3 Dummys (Früh, Spät, Nacht) an oder ausschaltet. Dann noch ein Doif auf den jeweiligen Dummy. Man kann dann noch rein theoretisch im google calendar eine Abfrage auf Urlaub oder Reise machen und mit den doifs für die Schichten verknüpfen.

Gesendet von meinem VKY-L09 mit Tapatalk

rabehd

Ich habe es auch mit einem Google Kalender gemacht. Entsprechend der nächsten Eintragung übertrage ich ein Heizprofil an die Thermostate.
Zusätlzlich gibt es ein vom Wecker gesteuerten Dummy der die Badheizung mit Vorlauf einschaltet. Dabei muss das Profil passen, sonst schaltet der nächste Schaltpunkt im Profil die Heizung wieder ab.
Auch funktionierende Lösungen kann man hinterfragen.

juniorfux94

Hi,

das würde bedeuten, Ihr prüft "täglich" die Quelle der Angaben auf die Schicht und danach wird der Heizplan festgelegt.
Mir kam jetzt erst die glorreiche Idee, was ist, wenn FHEM mal ausfällt, dann ist der Heizplan halt von gestern, bzw. nach dem Urlaub die Bude nicht beheizt.
Ich vermute mal einen Tod muss man sterben, Heizung nach Schicht oder Ausfallsicherheit.

Werde das wohl ungefähr so machen, ein DOIF mit Event-on-Change-Reading früh morgens auf die Schicht-Konstellationen und bei Änderung dann übertragung des Plans auf die Heizungen.

Ich danke Euch

Manuel

rabehd

Urlaub trage ich über Party ein. Solange "Party" ist wird nicht automatisch geschaltet und das Ende der "Party" ist im Thermostate.
Du kannst Dir auch einen Wochenplan basteln, aber was ist, wenn FHEm zum Schalten der neuen Woche ausgefallen ist. Wie Du selbst sagst  "einen Tod..."
Ich denke diese Lösung ist besser, als permanent manuell über FHEm zu schalten.
Auch funktionierende Lösungen kann man hinterfragen.

tiwo85

Bei mir sind die "Standart" Zeiten fest als Heizplan integriert. Bei mir wird nur on der Frühschicht an den jeweiligen Tagen die Heizung um 3:20 auf 22 Grad im Bad und in der Küche gestellt. Und um 4:00 wieder zurück auf nachtemperatur. Falls fhem ausfällt regelt das Thermostat ja von sich aus ganz normal weiter. Falls es zwischen 3:20 und 4:00 ausfällt, ist es nur bis zum nächsten schaltpunkt um 6:30 warm. Der Rest ist im Thermostat als Heizplan hinterlegt.

Gesendet von meinem VKY-L09 mit Tapatalk


Morgennebel

Zitat von: juniorfux94 am 28 Juni 2017, 20:13:18
Meine Ankunft daheim kann um 15 Uhr sein, oder 16:15 oder 19:30. Meine Frau ist meist gegen 15 Uhr zu Hause.
Dazu kommt noch Urlaub zu Hause oder verreisen als mögliche Stati.

Wie wäre es mit PRESENCE (Eurer Telephone) oder GEOFENCE (der Parkplatz Deines Autos in der Firma) mit Uhrzeit anstelle der Kalender?

Ciao, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

juniorfux94

Moin,

ich habe es mal mit 2 Holiday-Dateien und einem "kleinen" DOIF mit 15 möglichen Zuständen versucht umzusetzen.
Ist ein Berg Arbeit gewesen, zumindest sieht es bis jetzt so aus, als würde es korrekt ablaufen. Aber die Heizung ist ja noch aus, alles nur Trockenübung.

Vielen Dank für die Infos und Vorschläge.

Manuel

Tedious

Ich würde primär mir Presence und Gigaset-Tags am Schlüsselband arbeiten. Wenn jemand zuhause ist läuft die Heizung, wenn nicht ist sie aus. Das kann natürlich nur eine Basis sein, stellt aber sicher dass die Heizung immer an ist wenn jemand zuhause ist.

Alles Andere kann man denn, wie genannt, z.B. per Kalender machen. Alternativ - oder zusätzlich - kann man auch Geofence einbinden -  wenn man sich der Wohnung nähert meinetwegen einen 10-minütigen Boost (muss man testen) auf bestimmte Heizkörper geben. Oder Telegram nutzen ("ich fahre heim"), denn weiß das System "ist in X Minuten da, ich triggere die Heizung passend). Nur mit einem Kalender abfackeln wird den WAF nicht erfüllen (jemand ist Krank und zuhause, jemand kommt früher heim, etc... Bude kalt).
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

CoolTux

Ich mache es genau so. Läuft mit presence und zusätzlich wird mittels Geofence gearbeitet. Wird in einen 3km Radius eingefahren stellt sich der roommate auf location wayhome. Dies triggert ein notify welches eine Sub aufruft in der dann geschaut wird ob der roommate vorher auf Arbeit war, ob er der erste ist also keiner zu Hause ist und dann wird die Heizung aktiviert. Steht dieser roommate noch auf mood sleepy wird auch die Kaffeemaschine angeworfen und Kaffee gebrüht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Morgennebel

Zitat von: Tedious am 15 August 2017, 11:46:36
Ich würde primär mir Presence und Gigaset-Tags am Schlüsselband arbeiten.

Wie ist denn eigentlich die Reichweite der Dinger? Wir haben 4 Eingänge zum EG und eine große räumliche Ausdehnung der Wohnfläche...

Danke, -MN
Einziger Spender an FHEM e.V. mit Dauerauftrag seit >= 24 Monaten

FHEM: MacMini/ESXi, 2-3 FHEM Instanzen produktiv
In-Use: STELLMOTOR, VALVES, PWM-PWMR, Xiaomi, Allergy, Proplanta, UWZ, MQTT,  Homematic, Luftsensor.info, ESP8266, ESERA

Tedious

Habe ich noch nicht wirklich getestet. Mein Brix steht ziemlich zentral im Haus und erkennt mich schon vor der Haustür. Luftlinie geschätzt 10-12m, 3 Wände dazwischen.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

sku

Ich habe das Thema so gelöst:

Notify jeden Tag um 02:00 Uhr:
define at_Tagesplanung AT *02:00 { Tagesplanung($we,$year,$month,$mday,$wday) }

Kalendermodul, ruft den Dienstkalender, welcher auf meinem Nextcloud Server gehostet ist, ab. Nennt sich Dienstkalender.
CalView Modul, nennt sich Dienstkalender_View.

Modul Residents (Anwesenheitserkennung per Openwrt und snmp, hab ich aus dem Wiki)

Dummies für Urlaub, Krank, Heizungsabsenkung, Heizung, BadVorheizen

Funktion Tagesplanung in der myutils:

sub Tagesplanung($$$$$) {
#format für Arrays:
#date: [0]=day [1]=month [2]=year
#time: [0]=hh [1]=mm [2]=ss

  #übergebene Werte in Variablen speichern
  my ($we,$year,$month,$mday,$wday) = @_;

  #Beginndatum des nächsten Termins, Array
  my $t_001_bdate = ReadingsVal("Dienstkalender_View","t_001_bdate","0");

  #Tag- und Nachttemperaturen der Thermostate in Variablen speichern
  my $az_dayTemp = substr(ReadingsVal("az_ThstWand_Climate","R-dayTemp",""), 0, -2);
  my $bad_dayTemp = substr(ReadingsVal("bad_ThstWand_Climate","R-dayTemp",""), 0, -2);
  my $sz_dayTemp = substr(ReadingsVal("sz_ThstWand_Climate","R-dayTemp",""), 0, -2);
  my $wz_dayTemp = substr(ReadingsVal("wz_ThstWand_Climate","R-dayTemp",""), 0, -2);
  my $az_nightTemp = substr(ReadingsVal("az_ThstWand_Climate","R-nightTemp",""), 0, -2);
  my $bad_nightTemp = substr(ReadingsVal("bad_ThstWand_Climate","R-nightTemp",""), 0, -2);
  my $sz_nightTemp = substr(ReadingsVal("sz_ThstWand_Climate","R-nightTemp",""), 0, -2);
  my $wz_nightTemp = substr(ReadingsVal("wz_ThstWand_Climate","R-nightTemp",""), 0, -2);
 
  #at löschen falls vorhanden (muss zu dieser Zeit ein Fehler sein)
  if (Value("at_heizungrauf") ne "") {
    fhem ("delete at_heizungrauf");
  }

  ### Nachtabsenkung initialisieren
  if (Value("at_nachtabsenkung_on") ne "") {
    fhem("delete at_nachtabsenkung_on");
  }
  fhem("define at_nachtabsenkung_on at 19:00:00 set heizungsabsenkung:FILTER=state!=on on");
  if (Value("at_nachtabsenkung_off") ne "") {
    fhem("delete at_nachtabsenkung_off");
  }
  fhem("define at_nachtabsenkung_off at 07:00:00 set heizungsabsenkung:FILTER=state!=off off");

  ### Residents gone oder heizung aus
  if ((ReadingsVal("rgr_Residents","state","") eq "gone" || ReadingsVal("heizung","state","") eq "off") && (ReadingsVal("heizungsabsenkung","state","0") ne "Sommer")) {
    if (Value("at_heizungrauf") ne "") { fhem ("delete at_heizungrauf"); }
    if (Value("at_nachtabsenkung_off") ne "") { fhem("delete at_nachtabsenkung_off"); }
  }
  if (ReadingsVal("heizungsabsenkung","state","0") eq "Sommer") {
    fhem("delete at_sznachbetrieb_off");
fhem("delete at_nachtabsenkung_on");
fhem("delete at_nachtabsenkung_off");
  }
  if (($t_001_bdate ne "") && ($t_001_bdate ne "0") && (ReadingsVal("heizung","state","") eq "on")) { #wenn es einen anstehenden termin gibt und heizungshauptschalter ein ist

# beginndatum, beginnzeit, enddatum und endzeit in arrays speichern
my @t_001_bdate_ary = split(/\D/,$t_001_bdate);
my $t_001_btime = ReadingsVal("Dienstkalender_View","t_001_btime","0");
my @t_001_btime_ary = split(/\D/,$t_001_btime);
my $t_001_edate = ReadingsVal("Dienstkalender_View","t_001_edate","0");
my @t_001_edate_ary = split(/\D/,$t_001_edate);
my $t_001_etime = ReadingsVal("Dienstkalender_View","t_001_etime","0");
my @t_001_etime_ary = split(/\D/,$t_001_etime);
    my $Urlaub = ReadingsVal("Urlaub","state","");
    my $Krank = ReadingsVal("Krank","state","");


    if (($t_001_bdate_ary[0]==$mday) && ($t_001_bdate_ary[1]==$month) && ($t_001_bdate_ary[2]==$year) && ($Krank eq "off")) { #wenn der anstehende termin heute ist und nicht krank
  if ($t_001_btime_ary[0] < 8) {
    fhem("modify at_nachtabsenkung_off ".FmtTime(time_str2num("2015-01-01 $t_001_btime_ary[0]:$t_001_btime_ary[1]:00")-150*60).""); #1h vorm aufstehen aufheizen, aufstehen = 1,5h vor Terminbeginn
  }
      if (($Urlaub eq "off") && ($Krank eq "off") && ($t_001_btime_ary[0] < 8) && ($we eq "0")) { #wenn arbeitsbeginn vor 8 ist
  fhem("define at_heizungrunter at ".FmtTime(time_str2num("2015-01-01 $t_001_btime_ary[0]:$t_001_btime_ary[1]:00")-30*60)." set heizungsabsenkung on"); #halbe stunde von startzeit abziehen. time_str2num rechnet in sekunden seit 1970, -30*60 zieht 30minuten ab, FmtTime pickt sich die Uhrzeit im format hh:mm:ss heraus
        if ($t_001_etime_ary[0] le "15") {
          fhem("define at_heizungrauf at 13:00:00 set heizungsabsenkung:FILTER=state!=off off");
        }
        else {
          fhem("define at_heizungrauf at 15:00:00 set heizungsabsenkung:FILTER=state!=off off");
        }
      }
    }
if (($t_001_edate_ary[0]==$mday) && ($t_001_edate_ary[1]==$month) && ($t_001_edate_ary[2]==$year)) { #wenn der endtermin heute ist
  if (($t_001_etime_ary[0] <= 8) && ($t_001_etime_ary[0] >= 6)) {
    fhem("define at_badvorheizen_on at ".FmtTime(time_str2num("2015-01-01 $t_001_etime_ary[0]:$t_001_etime_ary[1]:00")-25*60)." set BadVorheizen:FILTER=state!=nie on"); #halbe stunde vor dienstende bad vorheizen, wenn erlaubt
fhem("define at_badvorheizen_off at ".FmtTime(time_str2num("2015-01-01 $t_001_etime_ary[0]:$t_001_etime_ary[1]:00")+20*60)." set BadVorheizen:FILTER=state!=nie off"); #20min nach dienstende bad vorheizen ende, wenn erlaubt
if ($we eq "0") { #unter der woche nachtabsenkung länger aktiv lassen
  fhem("modify at_nachtabsenkung_off 12:00");
}
  }
}
  }
  else {
    if ($t_001_bdate eq "") {
  Log(1,"Tagesplanung: keine anstehenden Termine");
  fhem("set gcm send Tagesplanung|Tagesplanung|keine anstehenden Termine"); #gcm nachricht für andfhem
}
    if ($t_001_bdate eq "0") {
  Log(1,"Tagesplanung: Ersatzwert 0 von ReadingsVal bekommen");
  fhem("set gcm send Tagesplanung|Tagesplanung|Ersatzwert 0 von ReadingsVal bekommen"); #gcm nachricht für andfhem
}
  }
}


Arbeitsweg ist hier ca. 15min, die Zeiten muss also jeder seinen Bedürfnissen anpassen. Der WAF zum Kalender eintippen ist sehr hoch, vorallem, da für sie im Winter schön das Bad vorgewärmt wird.  ;D