Wie kann ich eine 4-Tages-Woche über Tagesberechnung erstellen ?

Begonnen von lusche800, 03 Oktober 2017, 17:44:03

Vorheriges Thema - Nächstes Thema

lusche800

Hallo Profis.

Da ich Schichtarbeiter bin, möchte ich mir auf FHEM eine 4-Tages-Woche erstellen. Der Grund ist:

Tag 1 = Tagschicht = Morgens weg, Abends heim
Tag 2 = Nachtschicht = Abends weg, am nächsten Tag heim
Tag 3 = Frei_1 = Morgens heim, Rest Frei
Tag 4 = Frei_2 = Frei

Dann geht es mit Tag 1 wieder los / weiter. Logischerweise brauche ich dann an den verschiedenen Tagen zu bestimmten Zeiten Licht. Anhand der Berechnung können die jeweiligen Funksteckdosen geschaltet werden.

Für einen Schichtkalender per Excel habe ich folgende Formel:

Zelle A1 = das Datum ( z.B. 03.10.2017 )
Zelle B1 = die Formel (A1-4*GANZZAHL(A1/4)) => als Ergebnis kommt eine 3 heraus, die wiederrum als Frei_1 benannt wird

Auch für meine Homematic habe ich nach langem suchen folgendes gefunden:

!Schichtberechnung
string eingabe = "01.01.1970"; ! Datum in der Vergangenheit Format TT.MM.YYYY
! +++++  +++++++ +++++++ ++++++++ +++++++
string y = eingabe.StrValueByIndex(".",2);
string m = eingabe.StrValueByIndex(".",1);
string d = eingabe.StrValueByIndex(".",0);
time ausgabe = (y#"-"#m#"-"#d#" 00:00:00").ToTime();

var berechnung1 = (system.Date("%F %T").ToTime().ToInteger() - ausgabe.ToInteger() ) / 86400;
var berechnung2 = 4 * berechnung1 / 4;
var berechnung3 = berechnung1 - berechnung2;

   

    if (berechnung3 == "0") { dom.GetObject("Tagschicht").State(1); }
    else { dom.GetObject("Tagschicht").State(0); }
   if (berechnung3 == "1") { dom.GetObject("Nachtschicht").State(1); }
    else { dom.GetObject("Nachtschicht").State(0); }
   if (berechnung3 == "2") { dom.GetObject("Frei_1").State(1); }
    else { dom.GetObject("Frei_1").State(0); }
   if (berechnung3 == "3") { dom.GetObject("Frei_2").State(1); }
    else { dom.GetObject("Frei_2").State(0); }

Startdatum ist der 01.01.1970 und das aktuelle Datum wird Punkt 0:30 Uhr, über das Zeitmodul, aus dem System ausgelesen. Die Rechenformel ist wie bei Excel.
Bei der Homematic habe ich vier Variablen erstellt, die anzeigen, welcher Tag aktuell ist, damit der Rolladen im Schlafzimmer meiner Schicht angepasst wird.

Jetzt möchte ich das Ganze auch bei FHEM machen, damit das Licht dementsprechend geschaltet wird. Das Ganze über eine "Variable" z.B. Schicht. Das Ergebnis der Formel soll dann als Tag in "Schicht" angezeigt werden.

Ergebnis = 0 = Tagschicht = Anzeige bei "Schicht" => Tagschicht
Ergebnis = 1 = Nachtschicht = Anzeige bei "Schicht" => Nachtschicht
usw.

Auch hier möchte ich es Punkt 0:30 Uhr errechnen lassen.

Leider habe ich nichts verwendbares beim suchen gefunden und ich bin leider nicht in der Lage dies selbst zuerstellen.
Deswegen brauche ich Hilfe für diese Idee.

Zur Zeit habe ich über holiday eine Schicht-Datei, die jeden Tag ausgelesen wird und mir meine Schicht anzeigt. Diese Datei muss ich aber jedes Jahr selbst erstellen und daran auch denken, dies zu tun. Über Excel und Homematic konnte ich das Ganze automatisieren. Das möchte ich jetzt auch gern bei FHEM umsetzen.

Falls mir jemand helfen möchte, sage ich jetzt schon vielen herzlichen Dank. :)

Amenophis86

Ich hatte den gleichen Rhytmus und habe es so gelöst: Ich habe mir einen Dummy gebaut, welcher immer über ein at/DOIF den Status zu Tag / Nacht / Frei1 / Frei2 gewechselt hat. Sämtliche Schaltungen haben dann diesen Dummy berücksichtigt. Dazu kommt, dass ich meinen Google-Kalender mit Arbeitsterminen in FHEM integriert habe und sobald ein Tag "Urlaub" eingetragen war, wurde der Dummy für diesen Tag auf Urlaub gestellt. 
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Prof. Dr. Peter Henning

#2
Das Modul 95_YAAHM.pm ist zwar auch auf einen Wochenzyklus ausgerichtet.
Allerdings kann man beliebig viele Wochen-Timer definieren - und bräuchte somit für einen 4-Tagesrythmus, der sich ja nach 4x7=28 Tagen wiederholt, 4 Wochen-Timer. Die kann man problemlos auch per FHEM-Befehl, alktivieren oder deaktivieren, je nachdem, in welcher Phase des Zyklus man sich befindet.

LG

pah

lusche800

Vielen herzlichen Dank für die Tipps.
Ich werde beide testen und dann entscheiden, was ich nehme.
Super.  ;D

Amenophis86

Bezüglich deiner PM Anfrage, ob ich noch meine alte config zur Hand habe: Nein, ich bin inzwischen im Tagdienst. Kann aber mal schauen, ob ich noch irgendwo ein Backup habe. Vom Prinzip ist es aber nicht schwer.

- Nimm dir einen Dummy, welchen du Schicht nennst
- Schreib dir ein DOIF oder at, welches jeden Tag um 00:01 abhängig vom aktuellen Zustand auf den nächsten wechselt

Wenn du nicht weiter kommst, oder Hilfe brauchst, dann schreib hier was du hast, was nicht geht, welche Fehler aufgezeigt werden und wir gehen es gemeinsam durch.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

lusche800

OK, danke.

Wird etwas dauern. Erst wenn ich es gar nicht hinbekomme, frag ich nochmals nach.
Ich hab ja jetzt eine Schrittfolge mit den nötigen Befehlen. :)