Heizkörperthermostat Meldung INS abfangen

Kabellose und kabelgebundene Sender und Empfänger der klassischen Homematic-Serie

Moderator: Co-Administratoren

Benutzeravatar
HM-Villa
Beiträge: 488
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 28 Mal
Danksagung erhalten: 113 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von HM-Villa » 27.01.2023, 16:09

Hallo zusammen,

wir hatten schon mal in einem anderen Thread nach einer Möglichkeit gesucht, das INS zu detektieren - bisher erfolglos. DEVICE_IN_BOOTLOADER fand ich, ohne zu wissen, wann der Fehler geworfen wird, einen guten Ansatz und habe noch mal probiert. Leider steht Timestamp immer 1 Stunde nach "The Epoch" (Unix Startdatum). Schade.

Mir ist aber aufgefallen, dass das Thermostat nicht auf eine Änderung der Solltemperatur reagiert. Im WebUI irgendeine neue Temperatur gesetzt (und wenn's nur 1/2 Grad Unterschied ist) - sobald die Statusmeldung vom Thermostat rein kommt - schwubs, wieder vorhergehende Temperatur. Das könnte man doch auswerten!
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

Benutzeravatar
Henke
Beiträge: 1500
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 303 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von Henke » 27.01.2023, 17:57

"1970-01-01 01:00:00" ist 0 + timezone, die Stunde kommt nur durch die Umwandlung in den String.

2 mal Solltemperatur senden erhöht den DC zu stark, da wäre nur eine Testlösung.

Das Lasttimestamp bei 0 ist, wundert mich nicht unbedingt, aber wie man bei Xel sieht, ändert sich der Wert von Timestamp doch. Daher sind die Daten bei einem der Probleme macht durchaus interessant. Den ersten Werk kann ich zwischenspeichern und eine Meldung raus geben, wenn er sich ändert. Die käme zwar dann wohl auch, wenn die Batterien getauscht werden, aber das dürfte wohl kein Problem sein.

Benutzeravatar
HM-Villa
Beiträge: 488
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 28 Mal
Danksagung erhalten: 113 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von HM-Villa » 27.01.2023, 23:55

Tatsächlich funktioniert die Erkennung von "INS", wenn man die Solltemperatur z. B. um ein halbes Grad verstellt und nach Ablauf des Sendeintervalls des Thermostaten schaut, ob es die Änderung angenommen hat. Wenn es im INS-Modus ist, tut es das nämlich nicht nicht. Als erste Lösung kann ich bieten:

Zwischenablage01.jpg

Die 2 Zeitmodule müssen 4 min auseinanderliegen, damit die zyklische Datenübertragung vom Thermostat, die auch im INS-Modus erfolgt, durch ist. Vielleicht reicht es ja für den Anfang, das Programm (2x) während der Nacht auszuführen, öfter ist aber auch denkbar.

Zwischenablage02.jpg

Für das Script braucht man zum Zwischenspeichern der Temperatur noch eine Systemvariable.

Zwischenablage03.jpg

Das Script selbst ist weitgehend selbsterklärend.

Code: Alles auswählen

! INS detektieren
! HM-Villa, Ver. 1.00, 2023-01-27
! Versand erfolgt mit "=A5.3 Send"

string heizung_name = "=OG.Ankleide+HZ1-HZR1";                                            ! Name des Thermostates
string heizung_SN = devices.Get(heizung_name).Address();                                  ! Seriennummer des Thermostates

var programObj = dom.GetObject("=A5.3 Send");                                             ! Programm zum Senden der Push-Nachrichten
var PushOverText = "";                                                                    ! Textvariable (SV) = Inhalt Push-Nachricht

real stemp1 = dom.GetObject(ID_SYSTEM_VARIABLES).Get('T_Ankl').Value();                   ! Temperatur aus Systemvariable
real stemp2 = datapoints.Get("BidCos-RF." # heizung_SN # ":4.SET_TEMPERATURE").Value();   ! Solltemperatur vom Thermostat

if (stemp1 == 0)
   {
   ! aktuelle Solltemperatur in SV speichern
   dom.GetObject(ID_SYSTEM_VARIABLES).Get('T_Ankl').State(stemp2);
   ! Versuch, am Thermostat 0,5°C mehr einzustellen
   dom.GetObject("BidCos-RF." # heizung_SN # ":4.SET_TEMPERATURE").State(stemp2 + 0.5);  
   }
   else
      {
      ! vergleiche alte und neue Temperatur
      ! wenn gleich, ließ sie sich im if nicht verstellen -> INS-Modus
      if (stemp1 == stemp2)
         {
         ! individuelle Senderoutine 
         PushOverText = "INS am Thermostat " # heizung_name;
         dom.GetObject(ID_SYSTEM_VARIABLES).Get('PushOver').State(PushOverText);
         programObj.ProgramExecute();
         }
      ! Werte wieder zurücksetzen
      dom.GetObject(ID_SYSTEM_VARIABLES).Get('T_Ankl').State(0);  
      datapoints.Get("BidCos-RF." # heizung_SN # ":4.SET_TEMPERATURE").State(stemp1);
      }

Screenshot_20230130_072536.jpg

Ich möchte hier keine fertige Lösung bieten, sondern einen Denkansatz. Bei mir funktioniert das recht gut, wenngleich es auf jeden Fall noch Optimierungs-/Anpassungsbedarf gibt. Viel Spaß beim Testen.
Zuletzt geändert von HM-Villa am 30.01.2023, 07:30, insgesamt 1-mal geändert.
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

CCU-Anfaenger
Beiträge: 7
Registriert: 26.01.2023, 22:33
System: CCU
Hat sich bedankt: 1 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von CCU-Anfaenger » 28.01.2023, 01:15

Wow, bin beindruckt wieviele Posts zu meiner Anfrage gekommen sind. Auf die Kontrolle der Batteriekontakte auf Korrosion/Verschmutzung bin ich tatsächlich noch nicht gekommen, weil ja wohl ein Spannungsabfall am Motor bei der Ventilbewegung der Grund für den InS-Zustand zu sein scheint. Obwohl ich die Batteriewarnschwelle aus besagtem Anlass bereits schon länger mal auf 2,3V hochkorrigiert hatte und auch überwache, gab es in der CCU nie eine Meldung bevor der Regler in den InS-Status ging. Es scheint so, dass ein kurzzeitiger Spannungsabfall vermutlich nicht detektiert wird (siehe weiter unten). 2 der 3 betroffenen Regler sind in Feuchträumen, da kann schon ein theoretischer Zusammenhang mit eventuellen Übergangswiderständen an den Batteriekontakten bestehen. Werde ich die Tage mal prüfen.

Habe zwischenzeitlich noch etwas weiter die Forumssuche bemüht und bin auf diesen Thread hier gestoßen: viewtopic.php?f=27&t=74863&start=10

Im Posting auf Seite 1 (Dank an User HM-Villa) wird dieselbe Problematik über den Datenpunkt "FAULT_REPORTING = 6" des Heizungsreglers ganz gut erklärt und könnte darüber ausgewertet werden. Das wäre evtl. ein Ansatz um einen zeitnah auftretenden InS-Status vorab per Script und Push-Nachricht wie gewünscht abfangen zu können. Bin leider nicht der wirklich gute Scriptprofi, vielleicht hat ja jemand Lust hier ein paar Zeilen zu scripten, denke das könnte sicher vielen helfen, wenn man sich die schiere Zahl an Treffern bei der Forumssuche nach Problemen mit dem Ins-Status anschaut.

Viele Grüße
Oliver

Benutzeravatar
Henke
Beiträge: 1500
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 303 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von Henke » 28.01.2023, 01:32

Wie schon einmal geschrieben:

Lass das einmal über Script testen laufen:

Code: Alles auswählen

WriteLine("START");
string sDP;
foreach(sDP, dom.GetObject(ID_DATAPOINTS).EnumIDs()) {
  object oDP = dom.GetObject(sDP.ToInteger());
  if((oDP) && (oDP.Type() == OT_HSSDP) ) {
  if ( oDP.HssType() == "DEVICE_IN_BOOTLOADER" )  {
    WriteLine(oDP.Name() # " - " # " TS " # oDP.Timestamp() # "/" # oDP.Value()# " LT " # oDP.LastTimestamp()# "/" # oDP.LastValue() );
    }
  }
}
WriteLine("ENDE");


CCU-Anfaenger
Beiträge: 7
Registriert: 26.01.2023, 22:33
System: CCU
Hat sich bedankt: 1 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von CCU-Anfaenger » 29.01.2023, 22:47

Henke hat geschrieben:
28.01.2023, 01:32
Wie schon einmal geschrieben:

Lass das einmal über Script testen laufen:

Code: Alles auswählen

WriteLine("START");
string sDP;
foreach(sDP, dom.GetObject(ID_DATAPOINTS).EnumIDs()) {
  object oDP = dom.GetObject(sDP.ToInteger());
  if((oDP) && (oDP.Type() == OT_HSSDP) ) {
  if ( oDP.HssType() == "DEVICE_IN_BOOTLOADER" )  {
    WriteLine(oDP.Name() # " - " # " TS " # oDP.Timestamp() # "/" # oDP.Value()# " LT " # oDP.LastTimestamp()# "/" # oDP.LastValue() );
    }
  }
}
WriteLine("ENDE");


Ergebnis dieses Tests:

START
BidCos-RF.NEQ1228455:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.NEQ1228442:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.MEQ1834761:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.NEQ1228366:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
VirtualDevices.INT0000005:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.NEQ1228388:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.NEQ1228425:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.NEQ1295569:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.NEQ1506301:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.NEQ1506297:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.OEQ1300036:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.OEQ1301340:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.PEQ0181453:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.LEQ1021703:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.SEQ2339946:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.SEQ1233251:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.SEQ0030624:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.REQ1498184:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.LEQ1169980:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.SEQ1287268:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.SEQ1286977:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.SEQ1287274:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
VirtualDevices.INT0000007:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
BidCos-RF.NEQ0795953:0.DEVICE_IN_BOOTLOADER - TS 2023-01-29 21:59:54/false LT 1970-01-01 01:00:00/false
ENDE

CCU-Anfaenger
Beiträge: 7
Registriert: 26.01.2023, 22:33
System: CCU
Hat sich bedankt: 1 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von CCU-Anfaenger » 29.01.2023, 22:50

Der HKT mit ID BidCos-RF.NEQ1228455 war zu diesem Zeitpunkt schon ca. 15min im Staus InS. Sieht aber nicht anders aus wie die restlichen Einträge der Scriptausgabe.

Benutzeravatar
Henke
Beiträge: 1500
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 133 Mal
Danksagung erhalten: 303 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von Henke » 30.01.2023, 01:03

Mist, damit können wir nicht machen.

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von Xel66 » 30.01.2023, 07:00

Dann booten die Thermostate nicht neu, denn dabei müsste der Datenpunkt aktualisiert werden. Fragt sich dann, woher dieser Zustand kommt. Bei "normaler" Ansteuerung über Bordmittel kann ich mir das eher nicht vorstellen, denn dann wäre das Problem verbreiteter. Steuerst Du über irgendwelche zusätzlichen Konstrukte an? Damit meine ich Scripte die Parametersets schreiben, Middleware, fremde Softwarelösungen zum Editieren irgendwelcher Parameter.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
HM-Villa
Beiträge: 488
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 28 Mal
Danksagung erhalten: 113 Mal

Re: Heizkörperthermostat Meldung INS abfangen

Beitrag von HM-Villa » 30.01.2023, 11:15

Hallo an alle,

als weitere Variante habe ich mal die Idee, dass man den Temperaturverlauf am Heizkörper-Thermostat auswerten kann, wenn der Ventilöffnungsgrad 0% ist, umgesetzt. Diese Lösung kommt ohne Funkbefehle aus und erhöht damit den DC nicht. Mit meinem Beispiel-Thermostat erreichte ich damit sicher eine Erkennungszeit von 30 min.

Zwischenablage01.jpg

Code: Alles auswählen

! INS detektieren ohne DC zu verbrauchen
! HM-Villa, Ver. 1.00, 2023-01-30
! Versand erfolgt mit "=A5.3 Send"

string heizung_name = "=OG.Ankleide+HZ1-HZR1";   ! Name des Thermostates anpassen
integer karenzzeit = 30;                         ! Mindestwartezeit für INS-Meldung in Minuten
real tempschwelle = 0.5;                         ! Temperaturschwelle Auslösung INS-Meldung in °C

var programObj = dom.GetObject("=A5.3 Send");    ! Programm zum Senden von Push-Nachrichten
var PushOverText = "";                           ! Textvariable (SV) = Inhalt Push-Nachricht

string heizung_SN = devices.Get(heizung_name).Address();                                     ! Seriennummer des Thermostates
var oStart = datapoints.Get("BidCos-RF." # heizung_SN # ":4.VALVE_STATE");                   ! Ventilöffnungsgrad
real stemp2 = datapoints.Get("BidCos-RF." # heizung_SN # ":4.ACTUAL_TEMPERATURE").Value();   ! Aktuelle Temperatur vom Thermostat
var oTemp = dom.GetObject(ID_SYSTEM_VARIABLES).Get('T_HKR');                                 ! SV Temperatur


! schreibt aktuelle Temperatur bei Öffnungsgrad > 0% in SV
! letztmalig, wenn der Öffnungsgrad aktuell 0% ist
if ((oStart.Value() > 0) || ((oStart.Value() == 0) && (oStart.LastValue() > 0)))
   {
   oTemp.State(stemp2)
   }

! wenn Öffnungsgrad 0 bleibt, dann Zeit und Temperatur prüfen
if ((oStart.Value() == 0) && (oStart.LastValue() == 0))
   {
   integer diffTime = (currenttime - oTemp.Timestamp()).ToInteger();
   real diffTemp = stemp2 - oTemp.Value();
     
   if ((diffTime.ToInteger() > (karenzzeit * 60)) && (diffTemp > tempschwelle))
      {
      ! Senderoutine für PushOver
      PushOverText = "INS - Installations-Modus am Heizkörper-Thermostat " # heizung_name # "erkannt!\n\nDie Temperatur ist trotz Ventilöffnung von 0% ";
      PushOverText = PushOverText # "seit diesem Zeitpunkt weiter um " # diffTemp.ToString(1) # "°C auf " # stemp2.ToString(1) # "°C gestiegen.";
      dom.GetObject(ID_SYSTEM_VARIABLES).Get('PushOver').State(PushOverText);
      programObj.ProgramExecute();
        
      ! Zeitstempel für SV Temperatur aktualisieren
      ! Dadurch wird die Meldung erst nach erneutem Ablauf der Karenzzeit wiederholt
      oTemp.State(oTemp.Value());     
      }
   }
T_HKR ist eine Systemvariable vom Typ Zahl. Karenzzeit und Temperaturschwelle müssen an die individuellen Gegebenheiten der Heizungsanlage angepasst werden. Eine INS-Meldung wird erst generiert, wenn der Öffnungsgrad des Thermostates für die Dauer der Karenzzeit durchgängig auf 0% war und sich in die dieser Zeit eine Temperaturerhöhung um den Wert von "tempschwelle" ergeben hat.

Dann sieht das so aus:

Screenshot_20230130.jpg

Viel Spaß beim Probieren!
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

Antworten

Zurück zu „HomeMatic Aktoren und Sensoren (klassisch)“