hier nun die Weiterführung aus http://homematic-forum.de/forum/viewtop ... 8&start=24.
Auf kaju's Seite gabs mal ne Überlegung zur Benennung der Aktoren (ich finde es gerade nicht mehr wieder), das habe ich aufgegriffen. Deshalb die Namensgebung.
Naja, und der Rest halt wie es einem gerade einfällt.
Also:
FWT (FunkWandThermostat)
Z steht tatsächlich für Zeit und die 1 - 4 für den ersten bis vierten Eintrag.
WF steht für Wochenende/Feiertag.
MAC_wrt_LOG ist tatsächlich ein Makro (MACro) welches die entsprechenden Informationen direkt auf der Visualisierung ausgibt.
Das Heizungsmakro selbst ist eigentlich recht einfach. Ich stelle es hier nochmals in vereinfachter Form und mit mehr Kommentaren ein:
Code: Alles auswählen
//==========================================================================
// FWT_all_... sind globale Variable, die für alle FunkWandThermostate gelten.
// UVA_... sind Benutzervariablen (UserVAriable - das U dient nur dazu, dass diese Objekte in der Anzeige ganz hinten erscheinen),
// die über die Visualisierung gesetzt werden können und global gültig sind.
// SVA_... sind SystemVAriablen, die über Zustände und/oder Makros gesetzt werden und auch global gültig sind
//
// evtl. über deaktivieren/aktivieren steuern????? - aber wann wird wieder aktiviert???
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
// wurde eine Absenkung angegeben (FWT_BAD_TAbsenkung > 0)?
wenn FWT_BAD_TAbsenkung > 0 dann
FWT_BAD setzen auf FWT_BAD_TAbsenkung
// Datum der Absenkung verändern, damit diese WENN-Anweisung nur einmal ausgeführt wird
FWT_all_Datum_absenken:= FWT_all_Datum_absenken - 1
gehezu VERLASSEN
endewenn
endewenn
// Bei Urlaubsende wieder aufheizen entsprechend TnachAbsenkung
wenn Datum = FWT_all_Datum_hochfahren dann
// wurde eine Temperatur nach der Urlaubsabsenkung (FWT_BAD_TnachAbsenkung > 0) angegeben?
// habe noch keine Ahnung, ob das überhaupt notwendig ist, oder die Standard-Einstellung ausreicht...
wenn FWT_BAD_TnachAbsenkung > 0 dann
FWT_BAD setzen auf FWT_BAD_TnachAbsenkung
// auch hier das Datum verändern, damit die Temperatur nur einmal gesetzt wird.
FWT_all_Datum_hochfahren:= FWT_all_Datum_hochfahren - 1
gehezu VERLASSEN
endewenn
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
// FWT_BAD_P_erledigt ist nur ein Flag um zu prüfen, ob die Party-Temperatur bereits gesetzt wurde.
// dies könnte natürlich auch geprüft werden, indem die IST-Temperatur mit der Party-Temperatur verglichen wird...
// viele Wege führen nach Rom:-)
wenn FWT_BAD_P_erledigt = 0 dann
FWT_BAD setzen auf FWT_BAD_TParty
FWT_BAD_P_erledigt:= 1
endewenn
endewenn
gehezu VERLASSEN
sonst
// Wenn Party ausgeschaltet, dann Flag wieder zurücksetzen
wenn FWT_BAD_P_erledigt = 1 dann
FWT_BAD_P_erledigt:= 0
endewenn
endewenn
// zunächst Zeitrahmen setzen, falls nicht exakt zur Uhrzeit aktiv!
// kann ja sein, dass die CCU mal etwas lahmt...
u:= Uhrzeit + "00:00:20"
// SVA_Feiertag wird einmalig in einem Makro zum Tageswechsel gesetzt!
// Feiertagstemperatur prüfen
wenn SVA_Feiertag <> " " dann
wenn FWT_BAD_Z1_WF <> " " dann
// FWT_BAD_T1_WF ist ein STRING - also erst mal in einen Typ UHR (lokale Variable z) übernehmen zum vergleichen
z:= FWT_BAD_Z1_WF
wenn z zwischen Uhrzeit und u dann
FWT_BAD setzen auf FWT_BAD_T1
gehezu VERLASSEN
endewenn
endewenn
gehezu VERLASSEN
endewenn
// Wochenendtemperatur prüfen
// SMDMDFS (Sonntag, Montag, Dienstag...
// hier wird das Wochenende noch wie FEIERTAG behandelt. Hätte man eigentlich auch oben schon abfackeln
// können, aber evtl. will man hier ja doch noch etwas anderes einstellen...
wenn Wochentag =+ "1000001" dann
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
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
VERLASSEN:
Deine Nachfrage hat mich allerdings dazu gebracht mir Überlegungen zu machen, wie man hier ein globales Makro bauen kann, das von allen FWT's aus aufgerufen werden kann.
Problem wird die Visualisierung sein. In meinem Fall mit maximal 4 Temperaturen für alle Wochentage zu gleichen Zeiten und nur am Wochenende/Feiertag zu anderen Zeiten bedeutet momentan schon 12 Variable (4x Temperatur, 4x Wochentagszeiten und 4x Wochenende-/Feiertags-Zeiten). Und das für jeden Thermostaten.
Würde man jetzt WAdlers Spezialschichten zugrunde legen (mit fast täglich wechselnden Zeiten), mag ich mir die Flut der Objekte garnicht vorstellen.
In Erik's Skript wird ja quasi eine Bit-Leiste verwendet, die das alles (zumindest für eine Woche) berücksichtigt (mit 1/2-Stunden-Schaltung), aber dies würde in der Visualisierung nicht besonders brauchbar aussehen!?!?
Eine Umsetzung in ein HM-Makro wäre allerdings machbar.
Mal sehen...
Viele Grüsse,
Peter
EDIT: evtl. könnte man mit 8 Stringvariablen (pro Thermostat) arbeiten (7xWochentag + Feiertag) und diese mit Uhrzeit/Temperatur füllen: 05:30=22,5/09:30=19/20:00=22/21:30=19...
oder so änhlich.