ich möchte mein Projekt ”Heizungsbedarf“ vorstellen. Bitte beachte, dass ich Deutsch nur ein paar wenige Jahre gesprochen habe – für meinem Grammatik bitte ich um Entschuldigung!
So: Mein Script „Heizungsbedarf überprüfen“ läuft seit 5 Monate Fehlerfrei bei mir…
Umgebung:
Wie viele von uns, habe ich eine Gastherme im Keller. Diese wird von einem Thermostat im Wohnzimmer gesteuert. Falls Wohnzimmer zu kalt ist, wird der Therme angeschaltet.
Ich möchte aber der Heizungsbedarf in jedes Zimmer überprüfen und der Wohnzimmerthermostat steuern mit dem Ergebnis. Ergo: Falls Wohnzimmer zu warm ist, aber Schlafzimmer nicht, dann schalte trotzdem der Gastherme an
Da ich kein super Script hier im Forum gefunden habe, habe ich ein bissen zusammengeklaut und gebastelt. Danke Forum!!!!!
Ein paar Monate habe ich auch der Temperatur im Zimmer überprüft, bin aber zurück auf nur „Ventil“ überprüfen. Funktioniert bei mir besser, gerade da ich leider kein Thermostat in jedes Zimmer habe. Falls man es haben will, kann man einfach die die „IF-Abfrage“ ändern.
Mein Setup:
- Thermostat Junkers TR-200 im Wohnzimmer
- überall Heizkörperthermostate HMIP-eTRV-2 oder HMIP-eTRV-C
- Gewerk „Heizung“ (alle HK aber auch Thermostate) Geräte
- SV: „HeizungGastherme“ .Ein Boolean der entweder der Thermostat im Wohnzimmer auf „an“ oder „aus“ schaltet
- SV: „Telegram“. Verschickt ein Telegram msg. War praktisch um zu schauen wann die Heizung in welches Zimmer gebraucht war.
- SV: "HeizungsLog" (als text). hier wird der "Log" gespeichert, damit ich es auf dem Handy schauen kann.
1) Thermostat vorbereiten:
Hier bin ich super froh, dass ich hier eine Anleitung gefunden habe. Dank dieser Anleitung, konnte ich endlich mein Projekt starten!
viewtopic.php?f=79&t=54380
Der HmIP-PCBS wird mit dem SV: HeizungGastherme gesteuert.
Bei false, geht der Thermostat auf „Abend/Nacht“ Modus (Eingestellt: 17 Grad am Thermostat).
Bei true, geht der Thermsotat auf „Tagestemeratur“ (Eingestellt: 23 Grad am Thermostat).
=> somit kann ich meine Gastherme im Keller kontrollieren.
2) SV „HeizungGastherme“ als Boolean anlegen und "HeizungsLog" als Text.
3) Programm 1. Anlegen Name: Heizung Gasheizung an aus via Thermometer.
Dieses Programm überprüft der SV „HeizungGastherme“ und schaltet der HmIP-PCBS entweder an/aus. Sehr simpel 4) Programm 2. Anlegen Name „Heizungsbedarf überprüfen“.
Wird jede 5e Minute ausgeführt mit diesem Script:
Code: Alles auswählen
! Überprüft jede Heizkörper auf Temperatur (ist + soll) und Ventilöffnung. Falls notwendig, Heizung an/aus stellen
boolean sendTelegram = false;
string telegramMessage = "";
string messageTextForOn = "";
string messageTextForOff = "";
! Variablen initialisieren.
!Setzte das richtige Gewerk, um alle Devices holen zu können
var myAssembly = dom.GetObject("Heizung");
!Hole Zustand von Gastherme
boolean zustandGastherme = dom.GetObject("HeizungGastherme").Value();
string itemID;
!Möglichkeit einen Toleranz für temperatur zu setzen
real toleanz_Temperatur = 0;
boolean heizungWirdGebraucht = false;
telegramMessage = "Gastherme ist: " # zustandGastherme # "\n";
! Hole das Gewerk Durch alle angemeldeten Geräte iterieren
foreach(itemID, myAssembly.EnumUsedIDs()) {
! Gerätedetails & Schnittstelle holen
var item = dom.GetObject(itemID);
var device = dom.GetObject(item.Device());
if ( (device.HssType() == "HmIP-eTRV-2") || (device.HssType() == "HmIP-eTRV-C" ) ) {
! Interface, Name, Adresse und Kanal auslesen
var interface = dom.GetObject(item.Interface());
string interface_name = interface.Name();
string device_address = device.Address();
device_address = device_address.StrValueByIndex(":", 0);
!Get the wanted values from each device!
string channel_name = interface_name # "." # device_address # ":1.ACTUAL_TEMPERATURE";
integer actualTemperatur = dom.GetObject(channel_name).Value();
channel_name = interface_name # "." # device_address # ":1.SET_POINT_TEMPERATURE";
integer wantedTemperatur = dom.GetObject(channel_name).Value();
channel_name = interface_name # "." # device_address # ":1.LEVEL";
integer valvePosition = dom.GetObject(channel_name).Value();
! var room = dom.GetObject(item.ChnRoom()); room.Name()
!Check if Heizung gebraucht wird (entweder Ventil, Temperatur oder beide)
! if ( actualTemperatur < (wantedTemperatur - toleanz_Temperatur)) {
if ( valvePosition > 0.100000 ) {
heizungWirdGebraucht = true;
messageTextForOn = messageTextForOn # "An: " # item.Name() # ". \n - Ist: " # actualTemperatur.ToString(1) # " Soll: " # wantedTemperatur.ToString(1) # " Valve: " # valvePosition.ToString(2) # "\n";
! }elseif (actualTemperatur > (wantedTemperatur - toleanz_Temperatur)) {
}elseif ( valvePosition < 0.100000 ) {
messageTextForOff = messageTextForOff # "Aus: " # item.Name() # ". \n - Ist: " # actualTemperatur.ToString(1) # " Soll: " # wantedTemperatur.ToString(1) # " Valve: " # valvePosition.ToString(2) # "\n";
}
}
}
! Get Timestamp wenn die Heizung zu letzt geändert wurde und Timestamp jetzt
time timeStampHeizungNotwendig = dom.GetObject("HeizungGastherme").Timestamp();
time zeitJetzt = system.Date('%F %T').ToTime();
telegramMessage = telegramMessage # "Zeit jetzt: " # zeitJetzt # "\n" # "Gastherme update um: " # timeStampHeizungNotwendig # "\n\n";
!300 sek (5 min) hinzufügen um sicherzustellen, dass die Heizung nicht immer an/aus geht
timeStampHeizungNotwendig = timeStampHeizungNotwendig+280;
!Ueperpruefen ob die Heizung geändert werden muss (und kann wegen der last change)
if(zeitJetzt.ToInteger() > timeStampHeizungNotwendig.ToInteger()) {
if ( heizungWirdGebraucht != zustandGastherme ) {
dom.GetObject("HeizungGastherme").State( !zustandGastherme );
telegramMessage = telegramMessage # "Zeit ok, status Heizung ändern zu: " # !zustandGastherme;
telegramMessage = telegramMessage + "\n";
}else {
sendTelegram = false;
}
}else {
sendTelegram = false;
}
!telegramMessage = telegramMessage # messageTextForOn # "\n" # messageTextForOff;
!Speichere der log in einem Systemvariable
dom.GetObject("HeizungsLog").State(telegramMessage # messageTextForOn # "\n" # messageTextForOff);
if (sendTelegram){
dom.GetObject("Telegram").State(telegramMessage # messageTextForOn);
}
Es überprüft ob ein Zimmer „Heizungsbedarf“ hat. Überprüft aber auch, ob ich die letzte 5 Minuten die Heizung an-/ausgestellt habe (ich will sicherstellen, dass meine Gastherme nicht ständig an/aus geht).
Ich werde versuchen die Fragen, so gut wie möglich, zu beantworten (Zeitfaktor mit 3 Kinder!).
Ich bitte aktiv um Verbesserungsvorschläge. Man kann es bestimmt besser machen!
Vielen Dank vorab,