Heizungsthermostatscript V2.0

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

Moderator: Co-Administratoren

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

Re: Heizungsthermostatscript V2.0

Beitrag von Petrus » 21.01.2018, 21:23

Hallo Christmas,

da die Thematik vielleicht auch andere hier im Forum interessiert, verlagere ich die Antwort von der PN hierhin.


Zunächst mal zu den Systemvariablen. Ich habe die alten Skripte rausgekramt und nachgeguckt.
Hier nochmal eine Gegenüberstellung mit einigen Erläuterungen. (Hinweis: Wenn ich vom neuen Skript rede, meine ich das unten angehängte)


string sv_Heizperiode = "Heizperiode";
Namen im alten und neuen Skript: Heizperiode
Bedeutung:
Wenn Sommer => Ventile auf, keine Temperaturverstellung

Bei mir ist übrigens die Auswertung anders. Wenn Heizperiode, dann Winter und heizen. Im öffentlichen und deinem Skript (neues sowie altes) ist die Logik umgekehrt.

string sv_Partytemperatur = "Partytemperatur";
Namen im alten und neuen Skript: Partytemperatur
Bedeutung:
Wenn Party => Temperatur aus dieser Systemvariablen


string sv_Urlaub1 = "Urlaub";
Namen im alten und neuen Skript: Urlaub
Bedeutung:
Urlaub und nicht zu Hause (auf Reisen) => Temperaturabsenkung (grad_urlaub)


string sv_Urlaub2 = ""; NEU
Namen im alten Skript: nicht vorhanden / Im neuen Skript: Leer
Bedeutung:
Urlaub, aber zu Hause (nicht auf Reisen) => Temperaturleiste Sa. oder So.


string sv_Gaeste = "";
Namen im alten Skript: Gaeste / Im neuen Skript: Leer
Bedeutung:
Falls Gäste im Haus => Temperaturabsenkung (grad_gaeste)


string sv_Anwesenheit = "Anwesenheit";
Namen im alten und neuen Skript: Anwesenheit
Bedeutung:
Falls außer Haus => Temperaturabsenkung (grad_aa)


string sv_Feiertag = "Feiertag_heute";
Namen im alten Skript: Feiertag / Im neuen Skript: Feiertag_heute
Bedeutung: Falls Feiertag => Temperaturleiste Sa. oder So.


Nun zu deinen Feststellungen.
Christmas hat per PN geschrieben:
Wenn ich das Programm, welches zu Hause aktiv schaltet ausführe (egal ob zu Hause schon aktiv ist) und unmittelbar danach das Script, dann setzt er die Korrekte Temperatur.
Allerdings macht er das nur einmal. Ändere ich im Script die eingestellte Temperatur und führe das Programm aus, dann passiert genau nichts... Erst wenn ich vorher wieder zu Hause auf aktiv setze (was ja eigentlich schon ist) funktioniert das Script wieder...
Christmas hat per PN geschrieben:
Bin jetzt kein Programmierer aber für mich ist das schon ein Hinweis, dass etwas mit den Varibalen nicht stimmt.
Ich kann nur sagen: Das Skript funktioniert einwandfrei und mit den Variablen stimmt auch alles. Wieso? Ich erkläre es dir.

Damit nicht bei jedem Aufruf des Skriptes die Temperaturen in den Thermostaten geschrieben werden und somit unnötig der DutyCycle in die Höhe getrieben wird, wurde eine Logik (Abfrage) eingebaut, so dass die Werte nur unter bestimmten Voraussetzungen gesendet werden.

Unter anderem ist dies der Fall, wenn...

- der Zeitstempel einer Systemvariablen jünger ist, als der Zeitstempel der letzten Sollwertänderung im Thermostaten - also trifft dies auch zu, wenn du das Programm für die Anwesenheit aufrufst und dort der selbe Wert noch einmal in die Systemvariable geschrieben wird.

- die Zeitdifferenz seit der letzten Sollwertänderung im Thermostaten größer ist, als die in deltaStdMin definierte Zeit. (Standardwert: 2 Stunden.)

Je nachdem wie du die Werte der Zeitleiste änderst, kann es aufgrund der Logik vorkommen, dass keine Temperaturwertänderung in den Thermostaten geschrieben wird.


Ich habe das Skript nochmal überarbeitet und in eine neue Version gefasst (siehe Anhang). Teste dieses mal mit deinen Angaben und debug=1 im Parser (Skript testen). Damit solltest du Erfolg haben.


Gruß
Petrus

P.S. Vielleicht hängt eric das Skript für alle an den 1. Post. Dann werde ich das hier wieder löschen.

Neues Script: Hier
Zuletzt geändert von Petrus am 12.03.2018, 20:55, insgesamt 1-mal geändert.

Semenchkare
Beiträge: 64
Registriert: 31.08.2014, 19:48
Danksagung erhalten: 1 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Semenchkare » 08.03.2018, 07:53

Hallo,

ich habe gestern auch mal versucht, die 2.12 bei mir zum laufen zu bringen, da meine 2.0a folgendes Problem hat:
wenn ich mehr als 1 Verschlusssensor eintrage, reagiert der Regler aber nur auf den zuerst eingetragenen...

Code: Alles auswählen

! Definition Sensoren: BidCos-RF.<SERIENNUMMER>:<KANALNUMMER>.<DATENPUNKT>
!   HM-Sec-SC-2        BidCos-RF.<SERIENNUMMER>:1.STATE
! Hier koennen 0 bis n-Geraete rein - mit ";" trennen oder "" fuer kein Geraet (ohne Leerzeichen)
string sTuerenUndFenster = "HmIP-RF.000xxxxxxxxx52:1.STATE";"BidCos-RF.LEQ0xxxxxx:1.STATE";
weiter unten im schript:

Code: Alles auswählen

!Wenn keine Heizperiode, dann Heizkoerper auf
if (dom.GetObject('Heizperiode').State()) {
    soll_neu = 0;
    prioritaet = true;
   
    ! Aktuelle Solltemperatur auslesen
    object regler = dom.GetObject(sRegler);
    soll_ist = regler.Value();

} else {

    integer offen = 0;
        
    regler = dom.GetObject(sRegler);
    soll_ist = regler.Value();
    if ( sTuerenUndFenster != "" ) {
        string value;
        foreach (value,sTuerenUndFenster.Split(";")) {
            object myChannel = dom.GetObject(value);
            if (myChannel.State() > 0) {
                offen = offen + 1.00;
            }
        }
    }  
    
    ! Wenn ein Verschluss im Raum offen ist, dann Fenstertemperatur einstellen   
    if (offen > 0) { ! Fenster offen, Ventile einstellen
        if (soll_ist <= grad_fenster) { ! Wenn soll_ist niedriger als grad_fenster (z.B. Ventile zu -> soll_ist = 0), dann nichts machen
            soll_neu = soll_ist;
        } else {
            soll_neu = grad_fenster;
            prioritaet = true;
        }
    } else {      ...  
Gesagt getan, die 2.12 reingenommen. Da reagiert der Regler/Thermostat bei Fenster- oder Türöffnung überhaupt nicht.
Ich habe im Einsatz:
HM-SEC-S-2,
HMIP-SRH-UM
HMIP-SWDO
HMIP-SWDO-I_UM
Kann es sein, dass die alle im Script nicht erkannt werden?

Weitere Frage: im Script ist die Variable "Verschluss" definiert. Muss ich die (wie die anderen Variablen) ebenso als echte Variable in der CCU2 eintragen?

Vielen Dank vorab, Seme
Viele Grüße

Seme

ccu3 Raspberrymatic 3.71.12.20231020,
Thermostate 8x HM-CC-RT-DN 105155 FW 1.4, Thermostat 1x HMIP-eTRV FW 1.6.3
Wandthermostat 1x HM-TC-IT-WM-W-EU FW 1.3
Tuer-Fensterkontakte 7x HM-Sec-SC-2 FW 1.2, Tuer-Fensterkontakt-optisch 1x HMIP-SWDO 1.10.7, Tuer-Fensterkontakt opt. HMIP-SWDO-I FW 1.14.0
Fenster-Drehgriffkontakt HMIP-SRH FW 1.0.1
Bewegungsmelder HM-Sec-MDIR-2 FW 1.6
Temperatur- Feuchtesensor aussen HM-WDS10-TH-O FW 1.3
Rauchmelder HM-Sec-SD FW 1.1, 2x HMIP-SWSD FW 1.0.11
Funk-Schaltaktor HM-LC-Sw1-FM FW 1.12, Funk-Schaltsteckdose HM-ES-PMSw1-Pl 2.5
Zusatzsoftware: CUXDaemon V. 2.11, E-Mail V. 1.7.6, XML API 1.22, hm_pdetect 1.16, Philips Hue 3.2.5

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

Re: Heizungsthermostatscript V2.0

Beitrag von Petrus » 08.03.2018, 12:34

Semenchkare hat geschrieben:

Code: Alles auswählen

! Definition Sensoren: BidCos-RF.<SERIENNUMMER>:<KANALNUMMER>.<DATENPUNKT>
!   HM-Sec-SC-2        BidCos-RF.<SERIENNUMMER>:1.STATE
! Hier koennen 0 bis n-Geraete rein - mit ";" trennen oder "" fuer kein Geraet (ohne Leerzeichen)
string sTuerenUndFenster = "HmIP-RF.000xxxxxxxxx52:1.STATE";"BidCos-RF.LEQ0xxxxxx:1.STATE";
Bei der Deklaration sind 2 Anführungsstriche zuviel.

Code: Alles auswählen

string sTuerenUndFenster = "HmIP-RF.000xxxxxxxxx52:1.STATE;BidCos-RF.LEQ0xxxxxx:1.STATE";
Semenchkare hat geschrieben:Kann es sein, dass die alle im Script nicht erkannt werden?
Korrekt! Da sie nicht enthalten sind, habe ich sie im nachfolgend angehängten Script hinzugefügt. Da ich keine HM-IP Geräte habe, kann ich es jedoch nicht testen.

Neues Script: hier
Semenchkare hat geschrieben:Weitere Frage: im Script ist die Variable "Verschluss" definiert. Muss ich die (wie die anderen Variablen) ebenso als echte Variable in der CCU2 eintragen?
Du musst ein Gewerk erstellen, in dem du dann alle Sensoren hinzufügst, die mit dem Script ausgewertet werden sollen. Der Name des Gewerkes im Script ist beispielhaft mit "Verschluss" (siehe unten) angegeben. Diesen dann durch den Namen ersetzen, den du in der CCU vergeben hast.

Code: Alles auswählen

string Gewerk_Verschluss = "Verschluss";  ! Gewerk in der CCU fuer die Veschluesse
Gruß
Petrus
Zuletzt geändert von Petrus am 12.03.2018, 14:03, insgesamt 1-mal geändert.

Semenchkare
Beiträge: 64
Registriert: 31.08.2014, 19:48
Danksagung erhalten: 1 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Semenchkare » 08.03.2018, 16:56

Hallo Petrus,

vielen herzlichen Dank. Das mit den Anführungszeichen hätte ich so nicht herausgefunden. So funktioniert es jetzt!

Ich werde nun aber versuchen, die 2.12a zum Laufen zu bekommen.

Das Gewerk "Verschluss" war schon standardmässig bei mir angelegt, lediglich war das in Deinem Script an der Stelle bei den anderen Variablen, deshalb dachte ich, vielleicht müsse ich auch noch eine solche anlegen.

Ich melde mich wieder und berichte!

Gruß
Seme
Zuletzt geändert von Semenchkare am 09.03.2018, 21:18, insgesamt 1-mal geändert.
Viele Grüße

Seme

ccu3 Raspberrymatic 3.71.12.20231020,
Thermostate 8x HM-CC-RT-DN 105155 FW 1.4, Thermostat 1x HMIP-eTRV FW 1.6.3
Wandthermostat 1x HM-TC-IT-WM-W-EU FW 1.3
Tuer-Fensterkontakte 7x HM-Sec-SC-2 FW 1.2, Tuer-Fensterkontakt-optisch 1x HMIP-SWDO 1.10.7, Tuer-Fensterkontakt opt. HMIP-SWDO-I FW 1.14.0
Fenster-Drehgriffkontakt HMIP-SRH FW 1.0.1
Bewegungsmelder HM-Sec-MDIR-2 FW 1.6
Temperatur- Feuchtesensor aussen HM-WDS10-TH-O FW 1.3
Rauchmelder HM-Sec-SD FW 1.1, 2x HMIP-SWSD FW 1.0.11
Funk-Schaltaktor HM-LC-Sw1-FM FW 1.12, Funk-Schaltsteckdose HM-ES-PMSw1-Pl 2.5
Zusatzsoftware: CUXDaemon V. 2.11, E-Mail V. 1.7.6, XML API 1.22, hm_pdetect 1.16, Philips Hue 3.2.5

Semenchkare
Beiträge: 64
Registriert: 31.08.2014, 19:48
Danksagung erhalten: 1 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Semenchkare » 09.03.2018, 08:19

Hallo,

mit 2.12a versuchte ich mehrere Variationen::

a) Angabe nur Raum
Gebe ich nur den Raum ein dann regelt er den Thermostat zwar, die Öffnung des Fensters (ein HMIP-SWDO) wird aber nicht erkannt
(Hinweis: das Gewerk "Verschluss" besteht und da ist der HMIP-SWDO auch zugewiesen)

b) kein Raum
Gebe ich den Raum nicht ein, dafür aber den Thermostat und den Fensterkontakt, funktioniert nichts.

C) Angabe Raum und Datenpunkt Thermostat
und bei Sensoren dann den Fensterkontakt
regelt er den Thermostat zwar, die Öffnung des Fensters (ein HMIP-SWDO) wird aber nicht erkannt


-->weitere Erkenntnis: auch wenn ich einen herkömmlichen (also nicht-IP) Fensterkontakt HM-Sec-SC-2" als Fensterkontakt angebe, habe ich gleiches Ergebnis.
Im Script muss also noch etwas anderes im Bezug auf die Tür- und Fensterkontakte (als die Zeile mit der Definition der Sensoren) nicht stimmen...


Code: Alles auswählen

    Skript bearbeiten
    ! KiZiJ Version 2.12
    ! Script von Erik Groennerud - 8.2009- MM.2013
    ! Ergaenzung von Zauberlehrling
    ! Optimiert und ergaenzt von Petrus (Peter) - 01.2018
    ! Performance Ideen von Goersch

    ! **************************************************************************
    ! Angabe fuer "raum" nur notwendig, wenn das Script die Thermostate
    ! und Sensoren automatisch ermitteln soll. Andernfalls leer lassen.
    ! **************************************************************************

      string raum = "KiZiJ";

    ! **************************************************************************
    ! Eingabe fuer Thermostate (nur wenn "raum" nicht angegeben ist):
    !   HM-CC-TC           <SERIENNUMMER>:2.SETPOINT
    !   HM-CC-RT-DN        <SERIENNUMMER>:4.SET_TEMPERATURE
    !   HM-TC-IT-WM-W-EU   <SERIENNUMMER>:2.SET_TEMPERATURE
    ! **************************************************************************

      string thermostate = "BidCos-RF.KEQxxxxxx6:4.SET_TEMPERATURE";

    ! **************************************************************************
    ! Eingabe fuer Sensoren (optional und nur, wenn "raum" nicht angegeben ist):
    ! Bsp. HM-Sec-SC-2        <SERIENNUMMER>:1.STATE
    ! **************************************************************************

      string sensoren = "HmIP-RF.0000xxxxxx9931:1.STATE"; ! Angabe mehrerer Sensoren moeglich -> Eingaben mit ";" trennen

    ! **************************************************************************
    ! Namen der Systemvariablen in der CCU
    ! Namen von nicht verwendeten Systemvarialen einfach leer lassen
    ! **************************************************************************

      string sv_Heizperiode = "Heizperiode";           ! Fuer Pruefung, ob Winter oder Sommer
      string sv_Partytemperatur = "Partytemperatur";   ! Selbsterklaerend
      string sv_Urlaub1 = "Urlaub";                    ! Fuer Pruefung, ob Urlaub und auf Reisen => Temperatur "grad_urlaub"
      string sv_Urlaub2 = "Urlaub2";                          ! Fuer Pruefung, ob Urlaub und zu Hause => Temperatur Zeitleiste Sa. oder So.
      string sv_Gaeste = "Gaeste2";                           ! Fuer Pruefung, ob Gaeste im Hause sind => Temperatur "grad_gaeste"
      string sv_Anwesenheit = "Anwesenheit";           ! Fuer Pruefung, ob ausser Haus => Temperatur "grad_aa"
      string sv_Feiertag = "Feiertag_heute";           ! Fuer Pruefung, ob heute Feiertag ist => Temperatur Zeitleiste Sa. oder So.

      string Gewerk_Verschluss = "Verschluss";  ! Gewerk in der CCU fuer die Veschluesse

    ! **************************************************************************

    ! Temperaturen 6-30 Grad, 0 = OFF, 100=ON
      real grad_0 = 17.0;
	  real grad_1 = 18.0;
	  real grad_2 = 19.0;
	  real grad_3 = 20.0;
	  real grad_4 = 20.5;
	  real grad_5 = 21.0;
	  real grad_6 = 21.5;
	  real grad_7 = 22.0;
	  real grad_8 = 22.5;
	  real grad_9 = 23.0;

      real grad_fenster = 6;         ! Temperatur bei offenem Fenster -1 = off
      real grad_urlaub  = 16;      ! Temperatur, wenn Urlaub und auf Reisen -1 = off
      real grad_gaeste  = 22;        ! Temperatur fuer Gaeste -1 = off
      real grad_aa      = 18;        ! Temperatur ausser haus, wird als Absenkung benutzt, -1 = OFF (immer Anwesenheit)

      string deltaStdMin = "0:31";  ! deltaStdMin mit "hh:mm" setzten (Std / Min immer zweistellig) Differenzzeit, die manuelle Temperatur erhalten bleibt bis überschrieben wird

      integer woche = 0;             ! 0=7 Tage Woche, 1=Montag=Wochentags & Samstag=Wochenende, 2= Montag=Woche, 3=Montag=Wochentags & Samstag=Samstag & Sonntag=Sonntag

      integer leiste = 1;                   ! Welche Zeitleiste aktiv ist

    if (leiste == 1){
    ! Zeitleiste 1
    ! Uhrzeit                             0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
    !                                         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
	string zeitleiste_mon = "111111111122345421111111111111111122335543222111";
	string zeitleiste_die = "111111111122345421111111111111111122335543222111";
	string zeitleiste_mit = "111111111122345421111111111111111122335543222111";
	string zeitleiste_don = "111111111122345421111111111111111122335543222111";
	string zeitleiste_fre = "111111111122345421111111111111111122335543222111";
	string zeitleiste_sam = "111111111111111335333333333333333333333333332211";
	string zeitleiste_son = "111111111111111335333333333333333333333533332211";
    };
    if (leiste == 2){
    ! Zeitleiste 2
    ! Uhrzeit                0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2|
    !                        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3|
	string zeitleiste_mon = "111111111111223335555555555555555555333333333322";
	string zeitleiste_die = "111111111111223335555555555555555555333333333322";
	string zeitleiste_mit = "111111111111223335555555555555555555333333333322";
	string zeitleiste_don = "111111111111223335555555555555555555333333333322";
	string zeitleiste_fre = "111111111111223335555555555555555555333333333322";
	string zeitleiste_sam = "111111111111111334555555555555555555555333333322";
	string zeitleiste_son = "111111111111111334555555555555555555555333333322";
    };

    boolean debug = 0;             ! Zu Testzwecken: Ausgaben im Parser und Werte werden bei jedem Skriptaufruf gesendet!
                                   ! Im Normalbetrieb muss debug immer auf 0 sein!
    boolean syslog = 0;            ! 1= Infos erfolgen ins Syslog ; 0= Kein Syslog (Standard)

    !******************************************************
    ! Ab hier Script CODE - Do not change behind this line
    !******************************************************

    ! Script abbrechen, wenn Eingaben nicht korrekt.
    if (((!raum) && (!thermostate)) || (!sv_Heizperiode)) {
        if (debug) { WriteLine("Angaben fuer raum und/oder thermostate pruefen!"); }
        if (syslog) {
            string stdout;
            string stderr;
            system.Exec("logger -t script -p user.debug Heizungsthermostatscript: " # raum # " Variablen raum und thermostate pruefen!\n", &stdout, &stderr);
        }
        quit;
    }

    ! Umwandeln deltaStdMin in Sekunden
    integer stunde = deltaStdMin.Substr(0, 2).ToInteger();
    integer minute = deltaStdMin.Substr(3, 2).ToInteger();
    integer setdelta = (stunde * 3600) + (minute * 60);

    object regler;                ! Datenobjekt des Reglers fuer die Solltemperatur
    object svObj;                 ! Datenobjekt fuer die Ueberpruefung der Systemvariablen

    real soll_neu;                ! Die neue Solltemperatur fuer den Raumthermostaten (Regler).
    real soll_alt;                ! Die alte Solltemperatur der Zeitleiste, die zuletzt aktuell war.
    real soll_ist = -1;           ! Die aktuelle Solltemperatur im Raumthermostat (Regler).

    time sv_timestamp;            ! Zeitstempel der Systemvariablen, die zuletzt geaendert worden ist (Wert in Sekunden).
    time rt_timestamp;            ! Zeitstempel, wann die Solltemperatur im RT zuletzt gesetzt wurde.
    boolean prioritaet = false;   ! Ist prioritaet = true, dann wird die neue Solltemperatur auf jeden Fall in den Regler geschrieben.


        ! Beginn Thermostate abfragen
        if (raum) {
            var myAssembly = dom.GetObject(raum);
            string itemID;
            var OldItem;

            ! Solltemperatur im Raumthermostat ermitteln.
            foreach(itemID, myAssembly.EnumUsedIDs()) {
                var item = dom.GetObject(itemID);
                if (item.IsTypeOf(OT_CHANNEL)) {
                    var device = dom.GetObject(item.Device());

                    ! Wenn Raumthermostat gefunden wurde...
                    if (device.HssType() == "HM-CC-RT-DN") {
                        if (OldItem<>device) {
                            regler = dom.GetObject("BidCos-RF." # device.Address() # ":4.SET_TEMPERATURE");
                            soll_ist = regler.Value();
                            OldItem=device;
                            if (debug) { WriteLine("Soll-Ist = " # soll_ist.ToString(1) # "°C (HssType: HM-CC-RT-DN)"); }
                        }
                    } else {
                        if (device.HssType() == "HM-CC-TC") {
                            if (OldItem<>device) {
                                regler = dom.GetObject("BidCos-RF." # device.Address() # ":2.SETPOINT");
                                soll_ist = regler.Value();
                                OldItem=device;
                                if (debug) { WriteLine("Soll-Ist = " # soll_ist.ToString(1) # "°C (HssType: HM-CC-TC)"); }
                            }
                        } else {
                            if (device.HssType() == "HM-TC-IT-WM-W-EU") {
                                if (OldItem<>device) {
                                    regler = dom.GetObject("BidCos-RF." # device.Address() # ":2.SET_TEMPERATURE");
                                    soll_ist = regler.Value();
                                    OldItem=device;
                                    if (debug) { WriteLine("Soll-Ist = " # soll_ist.ToString(1) # "°C (HssType: HM-TC-IT-WM-W-EU)"); }
                                }
                            }
                        }
                    }
                }
            }
        } else {
            ! Aktuelle Solltemperatur auslesen
            regler = dom.GetObject("BidCos-RF." # thermostate);
            if (regler) {
                soll_ist = regler.Value();
                if (debug) { WriteLine("Soll-Ist = " # soll_ist.ToString(1) # "°C  (BidCos-RF." # thermostate # ")"); }
            } else { quit; }
        }

        ! Ende Thermostate abfragen

        ! Beginn Ermittlung Solltemperatur

        ! Heizperiode pruefen
        if (dom.GetObject(sv_Heizperiode).State()) {
            soll_neu = 100.0;
            prioritaet = true;
        } else {

            integer offen = 0;

            if ((raum) && (Gewerk_Verschluss)) {
              ! Alle Geraete im "raum" abfragen und auswerten.
              var myAssembly = dom.GetObject(raum);
              string itemID;

              foreach(itemID, myAssembly.EnumUsedIDs()) {
                var item = dom.GetObject(itemID);
                if (item.IsTypeOf(OT_CHANNEL)) {
                    var device = dom.GetObject(item.Device());

                    ! Pruefen, ob Verschluss offen
                    ! Testen, ob Fenster Dachluken, usw. offen sind. Diese muessen dem jeweiligen Raum und dem "Gewerk_Verschluss" zugeordnet sein
                    ! Alle Gewerke dem Raum zugeordneten Geraete untersuchen
                    ! Andere als die aufgefuehrten Sensoren oder Aktoren, die als Verschluss dienen, einfach in nachfolgender IF-Anweisung aendern oder ergaenzen.

                    !    Tuerfensterkontakte                   Jalousienaktor / Dachluken Funk         Jalousienaktor / Dachluken Wired          Schliesserkontakt-Sensor Hutschienenmontage  Fenster-Drehgriffsensoren             Funk-Rollladenaktor fuer Markenschalter
                    if ((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-LC-Bl1-FM") || (device.HssType() == "HMW-LC-Bl1-DR")  || (device.HssType() == "HMW-Sen-SC-12-DR") || (device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HM-Sec-RHS-2") || (device.HssType() == "HM-LC-Bl1PBU-FM") || (device.HssType() == "HmIP-SRH") || (device.HssType() == "HmIP-SWDO-I") || (device.HssType() == "HMIP-SWDO")) {
                        var myChannel = dom.GetObject(item);
                        string id;
                        foreach(id, myChannel.ChnFunction()) {
                            var func = dom.GetObject(id);
                            if (func.Name() == Gewerk_Verschluss) {
                                if (item.State() > 0) {
                                    offen = offen + 1.00;
                                    if (debug) { WriteLine(device.HssType() # ": geöffnet"); }
                                } else { if (debug) { WriteLine(device.HssType() # ": geschlossen"); }}
                            }
                        }
                    }
                }
              }

            } else {
               if (sensoren) {
                   string id;
                   foreach (id, sensoren.Split(";")) {
                       var item = dom.GetObject("BidCos-RF." # id);
                       if (item) {
                           if (item.State() > 0) {
                               offen = offen + 1.00;
                               if (debug) {WriteLine("Verschluss (" # id # ") ist offen!");}
                           } else {
                               if (debug) {WriteLine("Verschluss (" # id # ") ist geschlossen!");}
                           }
					   } else { if (debug) {WriteLine("Fehler:" # id # " ist kein Verschluss-Objekt!");}}
                   }
               }
            }

            ! Wenn ein Verschluss im Raum offen ist, dann Fenstertemperatur einstellen
            if (offen > 0) { ! Fenster offen, Ventile einstellen
                if (soll_ist <= grad_fenster) { ! Wenn soll_ist niedriger als grad_fenster (z.B. Ventile zu -> soll_ist = 0), dann nichts machen
                    soll_neu = soll_ist;
                } else {
                    soll_neu = grad_fenster;
                    prioritaet = true;
                }
            } else {

             ! Timestamp "Partytemperatur" festhalten
             boolean b_svVar = false;
             sv_timestamp = "1970-01-01 01:00:00";
                if (sv_Partytemperatur) {
                  svObj = dom.GetObject(sv_Partytemperatur);
                  if (svObj) {
                    sv_timestamp = svObj.Timestamp();

                    ! Partytemperatur testen und einstellen; -1 = deaktiviert
                    if (svObj.Value() > -1) { b_svVar = true; }
                  }
                }
                if (b_svVar) { !Wenn Partytemperatur, dann einstellen
                    soll_neu = svObj.Value();
                } else {

                    ! Pruefen ob Timestamp "Urlaub" juenger ist als "Partytemperatur" => Wenn ja, merken
                    if (sv_Urlaub1) {
                      svObj = dom.GetObject(sv_Urlaub1);
                      if (svObj) {
                          time settime = svObj.Timestamp();
                          if (settime > sv_timestamp) {sv_timestamp = settime;}
                     if ((svObj.State()) && (grad_urlaub > -1)) { boolean b_svVar = true; }
                      }
                    }
                    ! Urlaub testen und einstellen; -1 = deaktiviert
                    if (b_svVar) { !Wenn im Urlaub und grad_urlaub nicht -1 (deaktiviert)
                         soll_neu = grad_urlaub;
                    } else {
                        if (sv_Gaeste) {
                            ! Pruefen ob Timestamp "Gaeste" juenger ist als "Urlaub" => Wenn ja, merken
                            svObj = dom.GetObject(sv_Gaeste);
                            if (svObj) {
                                settime = svObj.Timestamp();
                                if (settime > sv_timestamp) {sv_timestamp = settime;}
                                ! Gaeste testen und einstellen, -1 = deaktiviert
                          if ((svObj.State()) && (grad_gaeste > -1)) { b_svVar = true; }
                            }
                        }
                        if (b_svVar){ !Wenn Gaeste im Haus und grad_gaeste nicht -1 (deaktiviert)
                             soll_neu = grad_gaeste;
                        } else {
                            if (sv_Anwesenheit) {
                                svObj = dom.GetObject(sv_Anwesenheit);
                                if (svObj) {
                                    ! Pruefen ob Timestamp "Anwesenheit" juenger ist als "Gaeste" => Wenn ja, merken
                                    settime = svObj.Timestamp();
                                    if (settime > sv_timestamp) {sv_timestamp = settime;}
                                    if ((!svObj.State()) && (grad_aa > -1)) { b_svVar = true; }
                                }
                            }
                            ! Differenzen von ausser Haus Testen und beachten
                            if (b_svVar) {
                                soll_neu = grad_aa;
                            } else {

                                string zeitleiste_heute;        ! Die Temperaturleiste fuer den aktuellen Tag.
                                string zeitleiste_gestern;      ! Die Temperaturleiste von gestern.
                                string heizwert;                ! Enthaelt den Wert, der in der Zeitleiste zum jetzigen Zeitpunkt gilt.

                                ! Hier nun die Auswertung der Zeitleisten
                                !Auswerten, welche Zeitleiste heute ist
                                integer tag = system.Date("%u");
                                if ((tag == 1) && (woche == 0)) {zeitleiste_heute = zeitleiste_mon;} else {
                                if ((tag == 2) && (woche == 0)) {zeitleiste_heute = zeitleiste_die;} else {
                                if ((tag == 3) && (woche == 0)) {zeitleiste_heute = zeitleiste_mit;} else {
                                if ((tag == 4) && (woche == 0)) {zeitleiste_heute = zeitleiste_don;} else {
                                if ((tag == 5) && (woche == 0)) {zeitleiste_heute = zeitleiste_fre;} else {
                                if ((tag == 6) && ((woche == 0) || (woche == 3))) {zeitleiste_heute = zeitleiste_sam;} else {
                                if ((tag == 7) && ((woche == 0) || (woche == 3))) {zeitleiste_heute = zeitleiste_son;} else {
                                if ((tag >= 1) && (tag <= 5) && ((woche == 1) || (woche == 3))) {zeitleiste_heute = zeitleiste_mon;} else {
                                if ((tag >= 6) && (tag <= 7) && (woche == 1)) {zeitleiste_heute = zeitleiste_sam;} else {
                                if (woche == 2) {zeitleiste_heute = zeitleiste_mon;} }}}}}}}}}

                                ! An Feiertagen oder bei Urlaub und zu Hause, gilt die Temperatur von Samstag bzw. Sonntag
                                b_svVar = false;
                                if (sv_Urlaub2) { svObj = dom.GetObject(sv_Urlaub2); if (svObj) { if (svObj.State()) { b_svVar = true; }}}
                                if (((b_svVar) || (dom.GetObject(sv_Feiertag).State())) && ((woche == 0) || (woche == 3))) {zeitleiste_heute = zeitleiste_son;} else {
                                if (((b_svVar) || (dom.GetObject(sv_Feiertag).State())) && (woche == 1)) {zeitleiste_heute = zeitleiste_sam;}}

                                ! Position der Zeitleiste bestimmen
                                if (system.Date("%M").ToInteger() > 29) {integer add = 1;} else {integer add = 0;}
                                integer sTime = (system.Date("%H").ToInteger()*2)+add;
                                heizwert = zeitleiste_heute.Substr(sTime, 1);

                                ! Temperatur bestimmen, die gesetzt werden soll
                                if (heizwert == "0") {soll_neu = grad_0;} else {
                                if (heizwert == "1") {soll_neu = grad_1;} else {
                                if (heizwert == "2") {soll_neu = grad_2;} else {
                                if (heizwert == "3") {soll_neu = grad_3;} else {
                                if (heizwert == "4") {soll_neu = grad_4;} else {
                                if (heizwert == "5") {soll_neu = grad_5;} else {
                                if (heizwert == "6") {soll_neu = grad_6;} else {
                                if (heizwert == "7") {soll_neu = grad_7;} else {
                                if (heizwert == "8") {soll_neu = grad_8;} else {
                                if (heizwert == "9") {soll_neu = grad_9;} }}}}}}}}}

                                ! letzte Solltemeratur bestimmen, dabei muss der wert von 00:00 beachtet werden - der letzte Wert war gestern
                                if (sTime == 0) {
                                    if ((tag == 1) && ((woche == 0) || (woche == 3))) {zeitleiste_gestern = zeitleiste_son;} else {
                                    if ((tag == 2) && (woche == 0)) {zeitleiste_gestern = zeitleiste_mon;} else {
                                    if ((tag == 3) && (woche == 0)) {zeitleiste_gestern = zeitleiste_die;} else {
                                    if ((tag == 4) && (woche == 0)) {zeitleiste_gestern = zeitleiste_mit;} else {
                                    if ((tag == 5) && (woche == 0)) {zeitleiste_gestern = zeitleiste_don;} else {
                                    if ((tag == 6) && (woche == 0)) {zeitleiste_gestern = zeitleiste_fre;} else {
                                    if ((tag == 7) && ((woche == 0) || (woche == 3))) {zeitleiste_gestern = zeitleiste_sam;} else {
                                    if ((tag >= 2) && (tag <= 6) && ((woche == 1) || (woche == 3))) {zeitleiste_gestern  = zeitleiste_mon;} else {
                                    if (((tag == 1) || (tag == 7)) && (woche == 1)) {zeitleiste_gestern = zeitleiste_sam;} else {
                                    if (woche == 2) {zeitleiste_gestern = zeitleiste_mon;} }}}}}}}}}

                                    heizwert = zeitleiste_gestern.Substr(47, 1);
                                } else {
                                    heizwert = zeitleiste_heute.Substr((sTime-1), 1);
                                }

                                ! Temperatur bestimmen, die in der letzten 30 Minutenn war
                                if (heizwert == "0") {soll_alt = grad_0;} else {
                                if (heizwert == "1") {soll_alt = grad_1;} else {
                                if (heizwert == "2") {soll_alt = grad_2;} else {
                                if (heizwert == "3") {soll_alt = grad_3;} else {
                                if (heizwert == "4") {soll_alt = grad_4;} else {
                                if (heizwert == "5") {soll_alt = grad_5;} else {
                                if (heizwert == "6") {soll_alt = grad_6;} else {
                                if (heizwert == "7") {soll_alt = grad_7;} else {
                                if (heizwert == "8") {soll_alt = grad_8;} else {
                                if (heizwert == "9") {soll_alt = grad_9;} }}}}}}}}}
                            } !Ende IF Anwesenheit
                        } !Ende IF Gaeste
                    } !Ende IF Urlaub
                } !Ende IF Partytemperatur
            } !Ende IF Fenster offen
        } !Ende IF Heizungsperiode

        ! Ende Ermittlung Solltemperatur
        ! ******************************

        if (soll_ist >= 0) { ! Wenn RT geantwortet hat (Sollwert konnte ausgelesen werden)...

            ! ...dann pruefen ob neue Solltemperatur in RT geschrieben werden muss.
            if (soll_ist <> soll_neu) { ! Wenn aktuelle Solltemperatur = neue Solltemp., dann nichts machen
                time now = system.Date("%Y-%m-%d %H:%M:%S").ToTime(); ! wie spaet ist es jetzt?
                rt_timestamp = regler.Timestamp();
                integer diff = now.ToInteger() - rt_timestamp.ToInteger();

                if ((diff >= setdelta) || (prioritaet) || (soll_ist == grad_fenster) || (sv_timestamp >= rt_timestamp) || ((soll_ist == soll_alt) && (soll_alt <> soll_neu))) {
                    regler.State(soll_neu);
                    if (debug) {
                        WriteLine("Neue Solltemperatur (" # soll_neu.ToString(1) # "°C) an Thermostat gesendet!");
                        WriteLine("Letzter Zeitstempel (Sollwertänderung Thermostat): " # rt_timestamp);
                    }
                    if (syslog){
                        string stdout;
                        string stderr;
                        system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " neu gesetzt!\n", &stdout, &stderr);
                        system.Exec("logger -t script -p user.debug alte_Solltemperatur: " # soll_ist # " neue_Solltemperatur: " # soll_neu # "\n", &stdout, &stderr);
                        system.Exec("logger -t script -p user.debug Letzte_Aenderung: " # rt_timestamp # " Zeitdifferenz:_" # diff # "sek.", &stdout, &stderr);
                        system.Exec("logger -t script -p user.debug Offene_Luken: " # offen , &stdout, &stderr);
                    }
                } else {
                    if (debug) {
                        WriteLine("\rAuswertung (ODER-Verknüpfung):");
                        WriteLine("1. (diff >= setdelta) : ("#diff.ToString()#" >= "#setdelta.ToString()#") : "#(diff >= setdelta));
                        WriteLine("2. (prioritaet) : "#prioritaet);
                        WriteLine("3. (soll_ist == grad_fenster) : ("#soll_ist.ToString(1)#"°C == "#grad_fenster.ToString(1)#"°C) : "#(soll_ist == grad_fenster));
                        WriteLine("4. (sv_timestamp >= rt_timestamp) : ("#sv_timestamp#" >= "#rt_timestamp#") : "#(sv_timestamp >= rt_timestamp));
                        WriteLine("5. ((soll_ist == soll_alt) && (soll_alt <> soll_neu)) : (("#soll_ist.ToString(1)#"°C == "#soll_alt.ToString(1)#"°C) && ("#soll_alt.ToString(1)#"°C <> "#soll_neu.ToString(1)#"°C)) : "#((soll_ist == soll_alt) && (soll_alt <> soll_neu)));
                        WriteLine("Ergebnis = False = Keine Solltemperatur an Thermostat gesendet!");
                    }
                }
            } else { if (debug) { WriteLine("Keine neue Solltemperatur (" # soll_neu.ToString(1) #"°C)"); }}
        } else {
            if (syslog) {
                string stdout;
                string stderr;
                system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " antwortet nicht!", &stdout, &stderr);
            }
        }
$val$ = $this$ = $src$ = 	
Fehlerprüfung
Abbrechen OK
	
Admin 	
Startseite > Programme und Verknüpfungen > Programme > Programmerstellung
			
	
Alarmmeldungen (0)
	
Abmelden
	
Servicemeldungen (0)
Startseite
Status und Bedienung
Programme und Verknüpfungen
Einstellungen
Hilfe
Geräte anlernen
Name 	Beschreibung 	Bedingung (Wenn...) 	Aktivität (Dann.., Sonst..) 	Aktion
Heizungsscript 	zentral 	Zeit: Periodisch Ganztägig beginnend am 05.09.2014 zu Zeitpunkten auslösen 	Skript: ... sofort ausführen 	systemintern
Bedingung: Wenn...
Periodisch Ganztägig beginnend am 05.09.2014  
ODER
Anwesenheit bei  
ODER
Anwesenheit bei  
ODER
Gaeste bei  
ODER
Gaeste bei  
ODER
Heizperiode bei  
ODER
Heizperiode bei  
ODER
Partytemperatur im Wertebereich größer als -1.00 
ODER
Partytemperatur im Wertebereich kleiner als 100.00 
ODER
Fenster_Bad LEQ0174684:1 bei  
ODER
Fenster_Bad LEQ0174684:1 bei  
ODER
Fenster_Kueche LEQ0174394:1 bei  
ODER
Fenster_Kueche LEQ0174394:1 bei  
ODER
Fenster_Bedroom LEQ0498572:1 bei  
ODER
Fenster_Bedroom LEQ0498572:1 bei  
ODER
Fenster_Yasmin LEQ1061321:1 bei  
ODER
Fenster_Yasmin LEQ1061321:1 bei  
ODER
Fenster_Gast_WC LEQ0210042:1 bei  
ODER
Fenster_Gast_WC LEQ0210042:1 bei  
ODER
Fenster_Justin 0000D3C98C9931:1 bei  
ODER
Fenster_Justin 0000D3C98C9931:1 bei  
ODER
Tuer_Bedroom_0007D7099CF352:1 bei  
ODER
Tuer_Bedroom_0007D7099CF352:1 bei  
ODER
Tuer_Bedroom_0007D7099CF352:1 bei  
ODER
Fenster_Lunch_HmIP-SWDO-I 00109709A3C14A:1 bei  
ODER
Fenster_Lunch_HmIP-SWDO-I 00109709A3C14A:1 bei  
Aktivität: Dann...Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
string raum = "Lunch" ; ! ! Version 2.0 ! Script von Erik ...
string raum = "Living" ; ! ! Version 2.0 ! Script von Erik...
string raum = "Bath" ; ! ! Version 2.0 ! Script von Erik G...
string raum = "WC_Gast" ; ! ! Version 2.0 ! Script von Eri...
string raum = "KiZiY" ; ! ! Version 2.0 ! Script von Erik ...
! KiZiJ Version 2.12 ! Script von Erik Groennerud - ...
string raum = "Flur" ; ! ! Version 2.0 ! Script von Erik...
string raum = "Kueche" ; ! ! Version 2.0 ! Script von Erik...
string raum = "Bedroom" ; ! ! Version 2.0 ! Script von Eri...
Aktivität:
Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
Abbrechen
	
OK
	
Einstellungen als neues
Programm speichern
	
Skript testen
Vermutlich liegt der Fehler irgendwo hier:

Code: Alles auswählen

                    if ((device.HssType() == "HM-Sec-SC") || (device.HssType() == "HM-Sec-SC-2") || (device.HssType() == "HM-LC-Bl1-FM") || (device.HssType() == "HMW-LC-Bl1-DR")  || (device.HssType() == "HMW-Sen-SC-12-DR") || (device.HssType() == "HM-Sec-RHS") || (device.HssType() == "HM-Sec-RHS-2") || (device.HssType() == "HM-LC-Bl1PBU-FM") || (device.HssType() == "HmIP-SRH") || (device.HssType() == "HmIP-SWDO-I") || (device.HssType() == "HMIP-SWDO")) {
                        var myChannel = dom.GetObject(item);
                        string id;
                        foreach(id, myChannel.ChnFunction()) {
                            var func = dom.GetObject(id);
                            if (func.Name() == Gewerk_Verschluss) {
                                if (item.State() > 0) {
                                    offen = offen + 1.00;
                                    if (debug) { WriteLine(device.HssType() # ": geöffnet"); }
                                } else { if (debug) { WriteLine(device.HssType() # ": geschlossen"); }}
                            }
                        }
                    }
                }
              }

            } else {
               if (sensoren) {
                   string id;
                   foreach (id, sensoren.Split(";")) {
                       var item = dom.GetObject("BidCos-RF." # id);
                       if (item) {
                           if (item.State() > 0) {
                               offen = offen + 1.00;
                               if (debug) {WriteLine("Verschluss (" # id # ") ist offen!");}
                           } else {
                               if (debug) {WriteLine("Verschluss (" # id # ") ist geschlossen!");}
                           }
					   } else { if (debug) {WriteLine("Fehler:" # id # " ist kein Verschluss-Objekt!");}}
                   }
               }
            }

            ! Wenn ein Verschluss im Raum offen ist, dann Fenstertemperatur einstellen
            if (offen > 0) { ! Fenster offen, Ventile einstellen
                if (soll_ist <= grad_fenster) { ! Wenn soll_ist niedriger als grad_fenster (z.B. Ventile zu -> soll_ist = 0), dann nichts machen
                    soll_neu = soll_ist;
                } else {
                    soll_neu = grad_fenster;
                    prioritaet = true;
                }
            } else {
Leider bin ich nicht so ganz der Profi, um den fehler zu finden...
Viele Grüße

Seme

ccu3 Raspberrymatic 3.71.12.20231020,
Thermostate 8x HM-CC-RT-DN 105155 FW 1.4, Thermostat 1x HMIP-eTRV FW 1.6.3
Wandthermostat 1x HM-TC-IT-WM-W-EU FW 1.3
Tuer-Fensterkontakte 7x HM-Sec-SC-2 FW 1.2, Tuer-Fensterkontakt-optisch 1x HMIP-SWDO 1.10.7, Tuer-Fensterkontakt opt. HMIP-SWDO-I FW 1.14.0
Fenster-Drehgriffkontakt HMIP-SRH FW 1.0.1
Bewegungsmelder HM-Sec-MDIR-2 FW 1.6
Temperatur- Feuchtesensor aussen HM-WDS10-TH-O FW 1.3
Rauchmelder HM-Sec-SD FW 1.1, 2x HMIP-SWSD FW 1.0.11
Funk-Schaltaktor HM-LC-Sw1-FM FW 1.12, Funk-Schaltsteckdose HM-ES-PMSw1-Pl 2.5
Zusatzsoftware: CUXDaemon V. 2.11, E-Mail V. 1.7.6, XML API 1.22, hm_pdetect 1.16, Philips Hue 3.2.5

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

Re: Heizungsthermostatscript V2.0

Beitrag von Petrus » 12.03.2018, 14:00

Hallo Seme,

dann will ich mal Licht ins dunkle bringen.

Zuvor jedoch einmal allgemeine Informationen zu dem Script.

Das Script wurde zu einer Zeit entwickelt, als es noch keine HM-IP-Geräte oder "intelligente" Heizkörperthermostate (Bsp. HM-CC-RT-DN) gab. Heute existieren sicherlich zahlreiche alternative und/oder komfortablere Konzepte. Allerdings gibt es noch Anwender - zu denen auch ich gehöre -, die noch die alten Stellantriebe (HM-CC-VD) und Wandthermostate (HM-CC-TC) in Betrieb haben. Denn solange diese noch funktionieren und in das Gesamtkonzept passen, sehe ich keine Veranlassung Geld für neue Geräte bzw. ein Upgrade auszugeben.

Der Einsatz dieses Scriptes funktioniert nur dann reibungslos, wenn
  1. In dem Raum nur ein Heizkörper vorhanden ist. Hierbei können dann allen neuen und alten Gerätegenerationen eingesetzt werden.
  2. In einem Raum mehrere Heizkörper vorhanden sind und die alten Stellantriebe (HM-CC-VD) mit Wandthermostat (HM-CC-TC) zum Einsatz kommen.
  3. In einem Raum mehrere Heizkörper vorhanden sind und die neuen Heizkörperthermostate (HM-CC-RT-DN od. HMIP-eTRV-2) mit einem Wandthermostat (HM-TC-IT-WM-W-EU od. HmIP-WTH-2) betrieben werden.
Nun zu deinen Feststellungen:
Semenchkare hat geschrieben:a) Angabe nur Raum
Gebe ich nur den Raum ein dann regelt er den Thermostat zwar, die Öffnung des Fensters (ein HMIP-SWDO) wird aber nicht erkannt
Das liegt an dem Script, da dieses bisher nur auf nicht HM-IP-Geräte ausgelegt war. (Lösung siehe Version 2.13 unten)
Semenchkare hat geschrieben:b) kein Raum
Gebe ich den Raum nicht ein, dafür aber den Thermostat und den Fensterkontakt, funktioniert nichts.
Ursache ist, dass du deine Angaben nicht korrekt ausgeführt hast (siehe Info im Sript). Gleiches gilt für die Sensoren. Zudem ist dieser ein HM-IP-Sensor.

Deine Angabe: string thermostate = "BidCos-RF.KEQxxxxxx6:4.SET_TEMPERATURE"
Korrekt wäre: string thermostate = "KEQxxxxxx6:4.SET_TEMPERATURE"
Semenchkare hat geschrieben:C) Angabe Raum und Datenpunkt Thermostat
und bei Sensoren dann den Fensterkontakt
Wenn du beides, den "raum" und die Daten für Thermostat sowie Sensoren angibst, wird der "raum" bevorzugt und die explizit aufgeführten Daten ignoriert (Info dazu ebenfalls im Script). Das es nicht funktioniert, sie Antwort zu b).


Abschließend hier noch das neue Script, mit dem auch HM-IP-Geräte verarbeitet bzw. eingesetzt werden können.
Heizung_V2.13.txt
(27.92 KiB) 306-mal heruntergeladen
Wichtig! Damit nun HM-IP-Geräte verwendet werden können, sind im Gegensatz zur letzten Version jetzt die Daten zu "sensoren" und "thermostat" vollständig anzugeben. (Info dazu auch im Script)

Beispiel:
Vorher: string sensoren = "<SERIENNUMMER>:1.STATE";
Jetzt: string sensoren = "HmIP-RF.<SERIENNUMMER>:1.STATE";

Bitte einmal Rückmeldung, ob es mit den HM-IP-Geräten funktioniert, da ich selbst keine im Einsatz habe.

Gruß
Petrus

Semenchkare
Beiträge: 64
Registriert: 31.08.2014, 19:48
Danksagung erhalten: 1 Mal

Re: Heizungsthermostatscript V2.0

Beitrag von Semenchkare » 12.03.2018, 22:12

Hallo Petrus,

nochmals allerhöchsten Dank!
Das Script 2.13 läuft perfekt. Sowohl mit Angabe nur des Raumnamens, als auch mit Angabe nur der Thermostate bzw. Sensoren.

bisher kein Fehler gefunden, 2 Räume sind im Test, hier habe ich gemischte Nutzung von HmIP und älteren Geräten!

Falls was auffällt, melde ich mich wieder!

Gruß

Seme
Viele Grüße

Seme

ccu3 Raspberrymatic 3.71.12.20231020,
Thermostate 8x HM-CC-RT-DN 105155 FW 1.4, Thermostat 1x HMIP-eTRV FW 1.6.3
Wandthermostat 1x HM-TC-IT-WM-W-EU FW 1.3
Tuer-Fensterkontakte 7x HM-Sec-SC-2 FW 1.2, Tuer-Fensterkontakt-optisch 1x HMIP-SWDO 1.10.7, Tuer-Fensterkontakt opt. HMIP-SWDO-I FW 1.14.0
Fenster-Drehgriffkontakt HMIP-SRH FW 1.0.1
Bewegungsmelder HM-Sec-MDIR-2 FW 1.6
Temperatur- Feuchtesensor aussen HM-WDS10-TH-O FW 1.3
Rauchmelder HM-Sec-SD FW 1.1, 2x HMIP-SWSD FW 1.0.11
Funk-Schaltaktor HM-LC-Sw1-FM FW 1.12, Funk-Schaltsteckdose HM-ES-PMSw1-Pl 2.5
Zusatzsoftware: CUXDaemon V. 2.11, E-Mail V. 1.7.6, XML API 1.22, hm_pdetect 1.16, Philips Hue 3.2.5

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

Re: Heizungsthermostatscript V2.0

Beitrag von Petrus » 13.03.2018, 11:13

Hallo Seme,

das hört sich doch perfekt an :!:
Danke für die Rückinfo.

Viele Grüße
Petrus

seemann
Beiträge: 2
Registriert: 13.03.2018, 17:21

Re: Heizungsthermostatscript V2.0

Beitrag von seemann » 13.03.2018, 17:23

moin,

ich habe homematic ip thermostate und heizkörper regler. lassen sich diese auch über das script steuern ?
ich habe mehrere heizkörper in einem raum welches über ein thermostat gesteuert wird, gibts da schon eine lösung?

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

Re: Heizungsthermostatscript V2.0

Beitrag von Petrus » 13.03.2018, 19:22

Moin und willkommen im Forum,

im Script ist das HM-IP-Wandthermostat (HmIP-WTH bzw. HmIP-WTH-2) sowie das Heizkörperthermostat (HMIP-eTRV bzw. HMIP-eTRV-2) implementiert und sollte daher auch funktionieren. Da du die Heizkörperthermostate im Raum über das Wandthermostat steuerst, kannst du also das Script nutzen. Probier es doch einfach aus und gib uns mal eine Rückmeldung. Diese fehlt nämlich noch bzgl. HM-IP-Thermostate, da ich selbst keine verwende.

Gruß
Petrus

Antworten

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