Feiertagsberechnung - Skript

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Heini
Beiträge: 3
Registriert: 09.03.2010, 18:26

Re: Feiertagsberechnung - Skript

Beitrag von Heini » 09.03.2010, 18:34

Hallo Petrus,

geniale Arbeit von dir. DANKE!
Auch die Idee mit der Auswertung der Urlaubsdaten finde ich super praktisch. Ich würde nur gerne diese Scriptoption als separates Script laufen lassen. Leider habe ich als Newbie noch nichts programmiert und keine Anhnung davon. :oops:
Was muss ich wo alles ändern oder definieren?

Gruß
Heini

Petrus
Beiträge: 134
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Petrus » 09.03.2010, 19:38

Heini hat geschrieben:Leider habe ich als Newbie noch nichts programmiert und keine Anhnung davon. :oops:
Was muss ich wo alles ändern oder definieren?
Hallo Heini,

du benötigst ein Array, in dem die Anzahl der Tage je Monat enthalten ist, eine String-Variable mit dem aktuellen Datum und die Definition aller sonst enthaltenen Variablen vom entsprechenden Typ.
Kurz gesagt: Wenn du noch kein Script geschrieben hast und ich es dir hier im Detail erläutern soll, wäre es einfacher, dir eine fertige Lösung zu präsentieren. Daher werde ich mir die Option mal vornehmen und entsprechend modifizieren, so dass du und andere den Part auch separat nutzen können.

Gruß
Peter

Heini
Beiträge: 3
Registriert: 09.03.2010, 18:26

Re: Feiertagsberechnung - Skript

Beitrag von Heini » 09.03.2010, 20:27

Hallo Petrus,

na dann will ich mal geduldig abwarten. Danke im voraus.

Gruß
Heini

rhobin
Beiträge: 1007
Registriert: 09.11.2009, 12:01

Re: Feiertagsberechnung - Skript

Beitrag von rhobin » 10.03.2010, 07:14

Hallo,

dieses Projekt ist richtig toll, (von beiden Peters). Großes Lob und Dank dafür!!

Besonders lobenswert finde ich die Umsetzung in HP...

Frage an PeterM:
Hast Du Dich mal mit dem Heizungsscript von Erik beschäftigt?? Ist das umsetzbar in HP??

Gruß
Rhobin

PeterM
Beiträge: 761
Registriert: 14.10.2008, 10:15
System: Alternative CCU (auf Basis OCCU)
Wohnort: Walldorf/Baden
Danksagung erhalten: 2 Mal

Re: Feiertagsberechnung - Skript

Beitrag von PeterM » 10.03.2010, 10:15

Hallo Rhobin,

vielen Dank, das geht runter wie Öl :D
Habe mir das Heizungsskript von Erik noch nicht verinnerlicht, da meine Steuerung eher trivial ausfällt.
Meine Frau ist schon ne Weile zu Hause (während ich noch 20 Monate absitzen muß) und wo sie sich aufhält muß es warm sein, sonst... :mrgreen:
Also Erdgeschoß den ganzen Tag warm und Bad im OG nur morgens und abends. Alle anderen Zimmer sind meistens nicht mehr bewohnt, also Absenkung aktiv.

Habe allerdings diese Steuerung auch auf die HM gelegt, um leichter eingreifen zu können.
Grundsätzlich sollte aber auch das Skript in HM umgesetzt werden können, sofern nicht Werte angesprochen werden, die in HM nicht zur verfügung stehen.

Hier mal mein Heizungs-Makro fürs Bad (wird alle 10 Minuten aufgerufen):

Code: Alles auswählen

//==========================================================================
//** aktuelle Werte sichern
  tempT:= SVA_T
  tempN:= SVA_N
  tempL:= SVA_L

  SVA_T:= "M"
  SVA_N:= "FWT_BAD_Mp"
  SVA_L:= FWT_BAD_Mp_Sme
//==========================================================================

  LOG:= "Status = aktiv"
  aufrufen(MAC_wrt_LOG)

// evtl. über deaktivieren/aktivieren steuern?????
  wenn FWT_all_Heizperiode = "aus" dann
    deaktivieren(FWT_BAD_Mp)
    gehezu VERLASSEN
  endewenn

// Temperaturabsenkung:
// FWT_all_Datum_absenken und FWT_all_Datum_hochfahren = Urlaubszeit!
  wenn Datum = FWT_all_Datum_absenken dann
    wenn FWT_BAD_TAbsenkung > 0 dann
      FWT_BAD setzen auf FWT_BAD_TAbsenkung
      FWT_all_Datum_absenken:= FWT_all_Datum_absenken - 1
      LOG:= "Absenkdatum erreich, absenken auf " + FWT_BAD_TAbsenkung
      aufrufen(MAC_wrt_LOG)
      gehezu VERLASSEN
    endewenn
  endewenn

// Bei Urlaubsende wieder aufheizen entsprechend TnachAbsenkung
  wenn Datum = FWT_all_Datum_hochfahren dann
    FWT_BAD setzen auf FWT_BAD_TnachAbsenkung
    FWT_all_Datum_hochfahren:= FWT_all_Datum_hochfahren - 1
    LOG:= "Datum zum hochfahren erreicht, hochfahren auf " + FWT_BAD_TnachAbsenkung
    aufrufen(MAC_wrt_LOG)
    gehezu VERLASSEN
  endewenn

// Bei Party = an - einmalig auf Party-Temperatur setzen und so lassen
  wenn UVA_Party = "an" dann
// Wenn Party-Temperatur vorgegeben wurde: übernehmen, ansonsten aktuelle Temp. halten
    wenn FWT_BAD_TParty > 0 dann
      wenn FWT_BAD_P_erledigt = 0 dann
        FWT_BAD setzen auf FWT_BAD_TParty
        FWT_BAD_P_erledigt:= 1
        LOG:= "Party aktiv, setzen auf " + FWT_BAD_TParty
        aufrufen(MAC_wrt_LOG)
      endewenn
    endewenn
    gehezu VERLASSEN
  sonst
// Wenn Party ausgeschaltet, dann Flag wieder zurücksetzen
    wenn FWT_BAD_P_erledigt = 1 dann
      LOG:= "Party beendet, normaler Ablauf wieder aktiv"
      aufrufen(MAC_wrt_LOG)
      FWT_BAD_P_erledigt:= 0
    endewenn
  endewenn

// zunächst Zeitrahmen setzen, falls nicht exakt zur Uhrzeit aktiv!
  u:= Uhrzeit + "00:00:20"

// SVA_Feiertag wird einmalig in einem Makro zum Tageswechsel gesetzt!
// Feiertagstemperatur prüfen
  wenn SVA_Feiertag <> " " dann
    LOG:= "jetzt ist Feiertag aktiv"
    aufrufen(MAC_wrt_LOG)
    wenn FWT_BAD_Z1_WF <> " " dann
      z:= FWT_BAD_Z1_WF
      wenn z zwischen Uhrzeit und u dann
        FWT_BAD setzen auf FWT_BAD_T1
        LOG:= "Uhrzeit = Z1_WF, T1 setzen: " + FWT_BAD_T1
        aufrufen(MAC_wrt_LOG)
        gehezu VERLASSEN
      endewenn
    endewenn
    wenn FWT_BAD_Z2_WF <> " " dann
      z:= FWT_BAD_Z2_WF
      wenn z zwischen Uhrzeit und u dann
        FWT_BAD setzen auf FWT_BAD_T2
        LOG:= "Uhrzeit = Z2_WF, T1 setzen: " + FWT_BAD_T2
        aufrufen(MAC_wrt_LOG)
        gehezu VERLASSEN
      endewenn
    endewenn
    wenn FWT_BAD_Z3_WF <> " " dann
      z:= FWT_BAD_Z3_WF
      wenn z zwischen Uhrzeit und u dann
        FWT_BAD setzen auf FWT_BAD_T3
        LOG:= "Uhrzeit = Z3_WF, T1 setzen: " + FWT_BAD_T3
        aufrufen(MAC_wrt_LOG)
        gehezu VERLASSEN
      endewenn
    endewenn
    wenn FWT_BAD_Z4_WF <> " " dann
      z:= FWT_BAD_Z4_WF
      wenn z zwischen Uhrzeit und u dann
        FWT_BAD setzen auf FWT_BAD_T4
        LOG:= "Uhrzeit = Z4_WF, T1 setzen: " + FWT_BAD_T4
        aufrufen(MAC_wrt_LOG)
        gehezu VERLASSEN
      endewenn
    endewenn
    gehezu VERLASSEN
  endewenn

// Wochenendtemperatur prüfen
//                   SMDMDFS (Sonntag, Montag, Dienstag...
  wenn Wochentag =+ "1000001" dann
    LOG:= "jetzt ist Wochenende aktiv"
    aufrufen(MAC_wrt_LOG)
    wenn FWT_BAD_Z1_WF <> " " dann
      z:= FWT_BAD_Z1_WF
      wenn z zwischen Uhrzeit und u dann
        FWT_BAD setzen auf FWT_BAD_T1
        LOG:= "Uhrzeit = Z1_WF, T1 setzen: " + FWT_BAD_T1
        aufrufen(MAC_wrt_LOG)
        gehezu VERLASSEN
      endewenn
    endewenn
    wenn FWT_BAD_Z2_WF <> " " dann
      z:= FWT_BAD_Z2_WF
      wenn z zwischen Uhrzeit und u dann
        FWT_BAD setzen auf FWT_BAD_T2
        LOG:= "Uhrzeit = Z2_WF, T2 setzen: " + FWT_BAD_T2
        aufrufen(MAC_wrt_LOG)
        gehezu VERLASSEN
      endewenn
    endewenn
    wenn FWT_BAD_Z3_WF <> " " dann
      z:= FWT_BAD_Z3_WF
      wenn z zwischen Uhrzeit und u dann
        FWT_BAD setzen auf FWT_BAD_T3
        LOG:= "Uhrzeit = Z3_WF, T3 setzen: " + FWT_BAD_T3
        aufrufen(MAC_wrt_LOG)
        gehezu VERLASSEN
      endewenn
    endewenn
    wenn FWT_BAD_Z4_WF <> " " dann
      z:= FWT_BAD_Z4_WF
      wenn z zwischen Uhrzeit und u dann
        FWT_BAD setzen auf FWT_BAD_T4
        LOG:= "Uhrzeit = Z4_WF, T4 setzen: " + FWT_BAD_T4
        aufrufen(MAC_wrt_LOG)
        gehezu VERLASSEN
      endewenn
    endewenn
    gehezu VERLASSEN
  endewenn

// normale Zeiten berücksichtigen
  z:= FWT_BAD_Z1
  wenn z zwischen Uhrzeit und u dann
    FWT_BAD setzen auf FWT_BAD_T1
    LOG:= "Uhrzeit = Z1, T1 setzen: " + FWT_BAD_T1
    aufrufen(MAC_wrt_LOG)
    gehezu VERLASSEN
  endewenn

  z:= FWT_BAD_Z2
  wenn z zwischen Uhrzeit und u dann
    FWT_BAD setzen auf FWT_BAD_T2
    LOG:= "Uhrzeit = Z2, T2 setzen: " + FWT_BAD_T2
    aufrufen(MAC_wrt_LOG)
    gehezu VERLASSEN
  endewenn

  z:= FWT_BAD_Z3
  wenn z zwischen Uhrzeit und u dann
    FWT_BAD setzen auf FWT_BAD_T3
    LOG:= "Uhrzeit = Z3, T3 setzen: " + FWT_BAD_T3
    aufrufen(MAC_wrt_LOG)
    gehezu VERLASSEN
  endewenn

  z:= FWT_BAD_Z4
  wenn z zwischen Uhrzeit und u dann
    FWT_BAD setzen auf FWT_BAD_T4
    LOG:= "Uhrzeit = Z4, T4 setzen: " + FWT_BAD_T4
    aufrufen(MAC_wrt_LOG)
    gehezu VERLASSEN
  endewenn

VERLASSEN:
//==========================================================================
//** aktuelle Werte zurückholen
  SVA_T:= tempT
  SVA_N:= tempN
  SVA_L:= tempL
//==========================================================================

Auf offene Fenster nehme ich keine Rücksicht. Wie schon Volkmar sagte, müsste die Absenkung ja bereits beginnen bevor das Fenster geöffnet wird - sonst macht's wenig Sinn.
Könnte man natürlich einfach mit einbinden. Dann müsste das Skript aber wenigstens jede Minute ausgeführt werden!

Generisch geht natürlich absolut nichts mit HP. Solch ein Makro muss also von jedem Thermostaten einzeln aufgerufen werden. Datenübergabe muss über globale Variablen erfolgen...

Viele Grüsse,
Peter

rhobin
Beiträge: 1007
Registriert: 09.11.2009, 12:01

Re: Feiertagsberechnung - Skript

Beitrag von rhobin » 10.03.2010, 20:00

Hallo PeterM,

die Lösung von Erik erscheint mir auch ziemlich komplex, Dein Programm muss ich mir in einer ruhigen Minute mal zu Gemüte führen. Alle Achtung!

Auf den ersten Blick versteh' ich nur die Hälfte, was logischerweise auch an Deinen Bezeichnungen liegt. Jeder hat halt so seine eingene Systematik. :)

Was bedeutet bei Dir "FWT"? Was bedeuten die "FWT_Bad_Z3_WF"?? Z = Zeitpunkt, WF??? MAC_wrt_LOG ist wohl ein Makro, das mit SCHREIBEDATEI irgendetwas irgendwohin schreibt.

Das mit dem offenen Fenster seh' ich auch so, ausserdem lohnt sich für 3 Minuten Stosslüftung nicht die Heizung runterzudrehen, bei Fussboden- oder Wandheizung schon grad gar nicht.

Klar ist auch, dass jedes Thermostat einzeln aufgerufen werden muss. Ob ich das tatsächlich mal realisiere oder ob ich die Thermostate und die Stellantriebe sich selbst überlasse, weiß ich noch nicht. Ich kriege erst in diesem Sommer (so er denn irgendwann nochmal kommt) eine neue Zentralheizung (z.T. normale Heizkörper, z.T. Wandheizung über Sockelheizleisten = sehr träge).

Gruß
Rhobin

PeterM
Beiträge: 761
Registriert: 14.10.2008, 10:15
System: Alternative CCU (auf Basis OCCU)
Wohnort: Walldorf/Baden
Danksagung erhalten: 2 Mal

Re: Feiertagsberechnung - Skript

Beitrag von PeterM » 11.03.2010, 06:07

Hallo Rhobin,

ich verlagere mal die Antwort nach: http://homematic-forum.de/forum/viewtop ... =31&t=4306

Viele Grüsse,
Peter

Petrus
Beiträge: 134
Registriert: 13.01.2010, 20:53
Hat sich bedankt: 1 Mal
Danksagung erhalten: 25 Mal

Re: Feiertagsberechnung - Skript

Beitrag von Petrus » 14.03.2010, 16:40

Hallo Heini,
Heini hat geschrieben: na dann will ich mal geduldig abwarten.
Dann will ich deine Geduld mal nicht überstrapazieren. Ich habe das Script total überarbeitet. Es wird jetzt zuerst das Format der Daten in der SV Urlaubstage überprüft und erst dann ausgewertet. Man kann sich ja schließlich mal vertippen. Tritt ein Fehler auf, erfolgt ein Eintrag/Hinweis ins Log.

Gruß
Peter

Heini
Beiträge: 3
Registriert: 09.03.2010, 18:26

Re: Feiertagsberechnung - Skript

Beitrag von Heini » 15.03.2010, 17:00

Hallo Petrus,
Petrus hat geschrieben: Dann will ich deine Geduld mal nicht überstrapazieren.
Hast du nicht. 8) Suuuper Arbeit. Neben der Berechnung des Feiertages finde ich es halt sehr praktisch, wenn meine Urlaubstage auch berücksichtigt werden, so dass ich das an diesen Tagen der Zentrale nicht selbst mitteilen muss. Und damit habe ich schon wieder etwas automatisiert. :)

VG
Heini

rhobin
Beiträge: 1007
Registriert: 09.11.2009, 12:01

Re: Feiertagsberechnung - Skript

Beitrag von rhobin » 02.04.2010, 10:54

Hallo,

so, nachdem nun die ersten Feiertage da sind, folgende Beobachtung (für PeterM und HP CL)

Seit dem 1.4. wird Ostern nicht mehr am 4.4.2010 "vorausgesagt, sondern am 5.4.!!
Mir scheint, mit der Berechnung stimmt irgendwas nicht :?
Dementsprechend war heute zunächst mal auch nicht Karfreitag, sondern "Kein Feiertag"

Nachdem ich an dieser Stelle...

Code: Alles auswählen

 
// string + 1, da SONST nach der Zuweisung 1 fehlt!!!!!!!
      Ostern:= string + 1
      SVA_Ostern:= Ostern
...das "+1" herausgenommen habe, stimmt's wieder logischerweise. :)

Was war denn der ursprüngliche Grund für diese Addition??

Gruß
Rhobin

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“