Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

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

Moderator: Co-Administratoren

Benutzeravatar
HM-Villa
Beiträge: 507
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 119 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von HM-Villa » 28.01.2023, 18:31

Mir ist aufgefallen, dass die Variablen max_vent_sin_i_c, vent_sin_open_b, min_vent_sin_i_c und vent_sin_close_b nicht definiert sind und auch nicht mit Werten gefüllt werden. Vielleicht hast Du vom kopierten Script etwas zu viel gelöscht. :wink: Warum zählst Du vent_count_i hoch, wenn Du es doch nirgends verwendest?
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

MartinMatic
Beiträge: 99
Registriert: 19.10.2020, 18:34
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 29 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von MartinMatic » 28.01.2023, 19:58

Hallo HM-Villa Narrowmatiker,
Auch ich würde gerne die Summe oder, noch besser, den Durchschnittswert der Ventilöffnungsgrade aller meiner Heizkörper sehen können, um zu kontrollieren, ob wir gerade das Energieversorgungsunternehmen glücklich machen oder nicht bzw. wie gut die Dämmung der Wohnung ist, in der wir wohnen.
ohne Dich entmutigen zu wollen: Die Problematik, wenn Du "absolute" Verbrauchswerte haben möchtest, was ich so ein bisschen aus Deiner Zielsetzung schließe, musst Du bedenken, dass die Ventilöffnung alleine nur relative Aussagen liefern kann. Hinzu kommt der Volumenstrom des Mediums (Wasser im Heizkreis) und die Vor- und Rücklauftemperaturen. Die Vorlauftemperatur wird bei den meisten Heizungen ja abhängig von der Aussentemperatur nachgeführt, so dass die Ventilöffnung alleine leider keine hohe Aussagekraft hat.

Viele Grüße

Martin
Zuletzt geändert von MartinMatic am 28.01.2023, 21:35, insgesamt 2-mal geändert.

Benutzeravatar
HM-Villa
Beiträge: 507
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 119 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von HM-Villa » 28.01.2023, 21:15

Hallo MartinMatic,

Du musst mich da irgendwie verwechseln. :wink: Dein Zitat stammt von @Narrowmatiker (aus dem Post vor mir) und als Antwort darauf (weil sein Script nicht läuft), schrieb ich auch. Deine Ergänzung passt schon ... :mrgreen:, man braucht eben einen Wärmemengenzähler. Wenn er nun aber ein Script haben will, dann soll er auch eines bekommen. Auf jeden Fall gibt ein funktionierendes Script einen Erkenntnisgewinn, der dann einen weiteren solchen möglich macht, nämlich, dass man mit der dimensionslosen Zahl der durchschnittlichen Ventilöffnung nichts anfangen kann. Alles zu seiner Zeit ... :mrgreen:
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

Narrowmatiker
Beiträge: 68
Registriert: 17.01.2017, 22:00
Wohnort: Nordrhein-Westfalen
Hat sich bedankt: 6 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von Narrowmatiker » 28.01.2023, 23:16

Hallo Ihr Beiden,

also grundsätzlich hat @MartinMatic natürlich recht, dass die Heizung mehr ist als nur die Stellung der Ventile. Aber ich würde einfach gerne mal die Ventilöffnungen quasi zusammenzählen um zu wissen, ob die Heizung gerade heftig arbeitet oder nicht. Ob mir das am Ende Erkenntnis bringt, weiß ich natürlich auch nicht so genau. Erst einmal würde ich gerne so ein einfaches Summenskipt haben, welches die Werte zusammenzählt und - als Summe oder Durchschnittwert - in eine SV schreibt.

@HM-Villa: die fehlenden Variablen habe ich wieder eingesetzt - wobei ich ja gar keine Therme steuern will, sondern nur den "Nebeneffekt" der Summierung der Ventilstellungen, ausgegeben in der SV "Ventilstellungen", erreichen will.

Aber auch das klappt leider immer noch nicht - die SV "Ventilstellungen" zeigt beharrlich Null an, obwohl ich sehe, dass gerade vier Heizungen mit teilgeöffneten Ventilen unterwegs sind.

Code: Alles auswählen

! Waermeanforderung
! Version 1.5.0
! Script von Oliver Lenker - 27.10.2012
! Ergänzungen von Vasco Dunker - 22.2.2013
!
! Historie: 	1.5.0.       - Variablen zur Therme entfernt und SV umbenannt
!			1.4.0        - Korrektur Abschaltbedingungen
!					- Kommentare ergaenzt
!			1.3.0	- Umstellung Zugriff auf Stellantriebe von undokumentierter
!                     			  Methode zu standard bzw. dokumetierter Methode
!					- Bug "ignorieren von Zeilen nach leeren Kommentarzeilen"
!					  fuehrt zu Problem mit 1. Konstante => behoben
!
!			1.2.0	- Korrektur Wertebereich "Waermeanforderung"
!					- Umbenennung / Harmonisierung der Variablen- und Konstantennamen
!					- Ergaenzung Konstanten
!					- Anpassung Header
!					- Anpassung Filename & Programmname
!					- Kommentare ergaenzt
! 
!			1.1.0	- Anpassung Abhaengigkeit Schalttrigger Ventiloeffnungen
!					- Einfuehrung von Konstanten fuer Grenzwerte u.ae.
!
!			1.0.0	- Initiale Version 
!					  Basierend auf "Waermeanforderungs-Steuerung (c) 2010 teddy278"
!
! --------------------------------------------------------------------------
! Angepasste Funktion: 	Das Script soll den Gesamtwert aller Ventilöff-
!					nungen berechnen und diesen Wert (besser noch
!					den Durschnittswert) in der entsprechenden System-
!					variable "Ventilstellungen" hinterlegen
! --------------------------------------------------------------------------
!
! Es werden folgende Softwarepakete auf der CCU benoetigt:
!
! --------------------------------------------------------------------------
!
! Es werden folgende Systemvariablen benoetigt bzw. abgefragt:
!
! 1. Systemvariable  Name: Ventilstellungen
!                     Typ: Zahl
!                   Range: 0 ... 800
!
! --------------------------------------------------------------------------
!
! Es werden evtl. folgende Anpassungen benoetigt:
!
! 1. Anpassung Anzahl und Namen der zu loggenden Systemvariablen
!
! 2. Anpassung Name des Gewerkes, welches die Stellantriebe beinhaltet
!
!
! --------------------------------------------------------------------------
! Deklaration & Initialisierung der Variablen

integer max_vent_sin_i_c = 10;		
integer min_vent_sin_i_c = 0;                 
integer sum_i = 0;
integer vent_count_i = 0;
boolean vent_sin_open_b = false;
boolean vent_sin_close_b = true;
string itemID_s;

! Schnittstelle zur WebUI
var ventilstellungen_v = dom.GetObject("Ventilstellungen");	! Systemvariable, Integer, zur Ueberwachung
object heizung_o = dom.GetObject("Heizung");			! Name des Gewerkes, welches die Stellantriebe beinhaltet

! Analyse aller Ventilstellungen und setzen der entsprechenden Variablen
foreach (itemID_s, heizung_o.EnumUsedIDs()) {
  if (dom.GetObject(itemID_s).HssType() == "CLIMATECONTROL_RT_TRANSCEIVER") {
    if (dom.GetObject(itemID_s).DPByHssDP("FAULT_REPORTING").State() == 0) {
      sum_i = sum_i + dom.GetObject(itemID_s).DPByHssDP("VALVE_STATE").State();
	  vent_count_i = vent_count_i + 1;
	  if (dom.GetObject(itemID_s).DPByHssDP("VALVE_STATE").State() >= max_vent_sin_i_c) {
	    vent_sin_open_b = true;
	  }
	  if (dom.GetObject(itemID_s).DPByHssDP("VALVE_STATE").State() >= min_vent_sin_i_c) {
	   vent_sin_close_b = false;
	  }
    }	
  }
}  

if (ventilstellungen_v.Value() != sum_i) {			! Variable aendern in sum_vent_i um relevanten Durchschnittswert zu erhalten
  ventilstellungen_v.State(sum_i);				! Variable aendern in sum_vent_i um relevanten Durchschnittswert zu erhalten
}
Könnte jemand, der etwas fitter ist als ich, das Skript nicht so weit minimieren, dass nur noch diese Ventilwerte ausgelesen und die Summe/der Durchschnitt ausgegeben wird? Wenn das so nicht umsetzbar ist, geht es natürlich nicht :wink: Aber man könnte sonst das Skript sicherlich auch für die ein oder andere Anwendung ganz gut gebrauchen.
Gruß,

der Narrowmatiker
__________________________________________________________________________________________________________________________________________
Die Lösung ist so nah - warum bin ich so weit weg?

MartinMatic
Beiträge: 99
Registriert: 19.10.2020, 18:34
System: CCU
Hat sich bedankt: 11 Mal
Danksagung erhalten: 29 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von MartinMatic » 29.01.2023, 13:41

Hallo Narrowmatiker,

der Knackpunkt liegt wahrscheinlich darin, das Du das "Standard-Gewerk" Heizung verwendest, das die Homematic von Haus aus definiert hat.
Dieses Gewerk heisst systemintern aber ${funcHeating}. (So wie "Sicherheit" auf ${funcSecurity}, "Wohnzimmer" auf ${roomLivingRoom} usw. gemappt werden.)

Das Programm ist eigentlich also gar nicht so falsch, nur muss "Heizung" mit "${funcHeating}" ersetzt werden.
Im folgenden habe ich noch alles aus dem Programm entfernt, was nicht direkt mit der Ermittelung der Ventilstellung zu tun hat.
Ausserdem habe ich noch durch die Anzahl der Ventile geteilt, so ist der Wert auf Deine gesamte Heizung "normiert", d.h. 100% entspricht max. "Gesamtventilstellung".

Code: Alles auswählen

integer sum_i = 0;
integer vent_count_i = 0;
string itemID_s;

!- Schnittstelle zur WebUI
var ventilstellungen_v = dom.GetObject("Ventilstellungen");	!- Systemvariable, Integer, zur Ueberwachung
object heizung_o = dom.GetObject("${funcHeating}");			!- Name des Gewerkes, welches die Stellantriebe beinhaltet

!- Analyse aller Ventilstellungen und setzen der entsprechenden Variablen
foreach (itemID_s, heizung_o.EnumUsedIDs()) 
        {
         if (dom.GetObject(itemID_s).HssType() == "CLIMATECONTROL_RT_TRANSCEIVER") 
		    {
             if (dom.GetObject(itemID_s).DPByHssDP("FAULT_REPORTING").State() == 0) 
	            {
                 sum_i = sum_i + dom.GetObject(itemID_s).DPByHssDP("VALVE_STATE").State();
	             vent_count_i = vent_count_i + 1;
	            }	
            }
       }  

!- Normierung auf Anzahl der Ventile
if (vent_count_i > 0)
   {
    sum_i = sum_i / vent_count_i;
   }

if (ventilstellungen_v.Value() != sum_i) {			! Variable aendern in sum_vent_i um relevanten Durchschnittswert zu erhalten
  ventilstellungen_v.State(sum_i);				! Variable aendern in sum_vent_i um relevanten Durchschnittswert zu erhalten
}
Grüße

Martin

Benutzeravatar
Roland M.
Beiträge: 9784
Registriert: 08.12.2012, 15:53
System: CCU
Wohnort: Graz, Österreich
Hat sich bedankt: 252 Mal
Danksagung erhalten: 1373 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von Roland M. » 29.01.2023, 13:43

Hallo!
MartinMatic hat geschrieben:
29.01.2023, 13:41
Das Programm ist eigentlich also gar nicht so falsch, nur muss "Heizung" mit "${funcHeating}" ersetzt werden.
...oder das Gewerk auf "Heizung xy" und zurück auf "Heizung" umbenennen. ;)


Roland
Zur leichteren Hilfestellung bitte unbedingt beachten:
  • Bezeichnung (HM-... bzw. HmIP-...) der betroffenen Geräte angeben (nicht Artikelnummer)
  • Kurzbeschreibung des Soll-Zustandes (Was soll erreicht werden?)
  • Kurzbeschreibung des Ist-Zustandes (Was funktioniert nicht?)
  • Fehlermeldungen genau abschreiben, besser noch...
  • Screenshots von Programmen, Geräteeinstellungen und Fehlermeldungen (direkt als jpg/png) einstellen!

-----------------------------------------------------------------------
1. CCU2 mit ~100 Geräten (in Umstellung auf RaspberryMatic-OVA auf Proxmox-Server)
2. CCU2 per VPN mit ~50 Geräten (geplant: RaspberryMatic auf Charly)
3. CCU2 per VPN mit ~40 Geräten (geplant: RaspberryMatic auf CCU3)
CCU1, Test-CCU2, Raspi 1 mit kleinem Funkmodul, RaspberryMatic als VM unter Proxmox, Access Point,...

Narrowmatiker
Beiträge: 68
Registriert: 17.01.2017, 22:00
Wohnort: Nordrhein-Westfalen
Hat sich bedankt: 6 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von Narrowmatiker » 29.01.2023, 14:54

Hallo Martin,

das war tatsächlich der Schlüssel - das Gewerk Heizung in dem Skript mit ${funcHeating} zu ersetzen. Ein Riesendankeschön an dieser Stelle - auch für das Kürzen des Skripts! Jetzt wird, wenn auch mit geringer Verzögerung, der Durchschnittswert der Ventilöffnungen angezeigt. Klasse!!

Das perfide (für Halbwissende wie mich) ist wohl nur, dass nach erstmaligem Auslösen des Skriptes im Skript selbst plötzlich wieder "Heizung" statt "${funcHeating}" steht, was der Funktion aber trotzdem keinen Abbrucht beschert. Doch jeder, der in gutem Glauben das Skript per Copy/Paste weitergibt, wird an derselben Stelle scheitern, weil im Skript davon nichts mehr auftaucht. Also Achtung bei der Weitergabe aus dem Programm heraus.

Nun kann und werde ich den Wert mal beobachten und könnte mir z.B. überlegen, ob ich mir eine Push aufs Handy schicke, wenn die Kids in Abwesenheit der Eltern mal aus Bequemlichkeit überall die Heizung hochdrehen. Sowas soll's ja geben...

Fröhliche Sonntagsgrüße

Jörg
Gruß,

der Narrowmatiker
__________________________________________________________________________________________________________________________________________
Die Lösung ist so nah - warum bin ich so weit weg?

Benutzeravatar
HM-Villa
Beiträge: 507
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 119 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von HM-Villa » 29.01.2023, 15:20

Hallo Narrowmatiker,

hast Du nur HM-Thermostate? Dann funktioniert das Script, HmIP-Regler kann es, weil deren Kanalnamen und Datenpunkte anders heißen, nicht anzeigen.

${funcHeating} funktioniert bei mir (mit RaspberryMatic) übrigens nicht.
______________________________________________________
950 Kanäle in 201 Geräten und 39 CUxD-Kanäle in 5 CUxD-Geräten

Narrowmatiker
Beiträge: 68
Registriert: 17.01.2017, 22:00
Wohnort: Nordrhein-Westfalen
Hat sich bedankt: 6 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von Narrowmatiker » 29.01.2023, 15:49

Hallo HM-Villa,

ja, ich habe tatsächlich nur HM-Thermostate (die ersten schon seit rund 6 Jahren). Die arbeiten sehr zuverlässig. Die IP-Thermostate finde ich inzwischen schöner, aber das alleine kann ja kein Grund sein, alle 7 Stück auszustauschen. Erst recht wenn ich lese, dass dann das Skript wieder für die Tonne wäre :wink:
Gruß,

der Narrowmatiker
__________________________________________________________________________________________________________________________________________
Die Lösung ist so nah - warum bin ich so weit weg?

Benutzeravatar
HM-Villa
Beiträge: 507
Registriert: 24.01.2022, 10:13
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 119 Mal

Re: Durchnittliche Ventilöffnung bei mehreren HK-Thermostaten

Beitrag von HM-Villa » 29.01.2023, 16:11

Narrowmatiker hat geschrieben:
29.01.2023, 15:49
Erst recht wenn ich lese, dass dann das Skript wieder für die Tonne wäre :wink:
Das lässt sich lösen:

Code: Alles auswählen

integer sum_i = 0;
integer sum_a;
integer vent_count_i = 0;
string itemID_s;
real durch_r;

! Schnittstelle zur WebUI
var ventilstellungen_v = dom.GetObject("Ventilstellungen");   ! Systemvariable, Integer, zur Ueberwachung
object heizung_o = dom.GetObject("Heizung");                  ! Name des Gewerkes, welches die Stellantriebe beinhaltet

! Analyse aller Ventilstellungen und setzen der entsprechenden Variablen
foreach (itemID_s, heizung_o.EnumUsedIDs())
   {
   if (dom.GetObject(itemID_s).HssType() == "CLIMATECONTROL_RT_TRANSCEIVER")
      {
      if (!dom.GetObject(itemID_s).DPByHssDP("FAULT_REPORTING").Value())
         {
         vent_count_i = vent_count_i + 1;
         sum_a = dom.GetObject(itemID_s).DPByHssDP("VALVE_STATE").Value();
         sum_i = sum_i + sum_a;
         if (vent_count_i < 10) { Write(" ") }
         Write(vent_count_i # ". Gerät\t" # dom.GetObject(itemID_s).Address() # "\tVentilöffnung ");
         if (sum_a < 10) { Write(" ") }
         WriteLine(sum_a # " %");
         }
      }
   if (dom.GetObject(itemID_s).HssType() == "HEATING_CLIMATECONTROL_TRANSCEIVER")
      {
      if ((!dom.GetObject(itemID_s).DPByHssDP("LEVEL_STATUS").Value()) && (dom.GetObject(itemID_s).Address().Substr(0,3) != "INT"))
         {
         vent_count_i = vent_count_i + 1;
         sum_a = (dom.GetObject(itemID_s).DPByHssDP("LEVEL").Value() * 100).ToInteger();
         sum_i = sum_i + sum_a;
         if (vent_count_i < 10) { Write(" ") }
         Write(vent_count_i # ". Gerät " # dom.GetObject(itemID_s).Address() # "\tVentilöffnung ");
         if (sum_a < 10) { Write(" ") }
         WriteLine(sum_a # " %");
         }
      }     
   }

! geänderten Durchschnittswert in SV schreiben
if (ventilstellungen_v.Value() != durch_r)
   {
   durch_r = sum_i.ToFloat() / vent_count_i;
   ventilstellungen_v.State(durch_r);
   }

WriteLine("\nAnzahl Ventile\t\t\t" # vent_count_i # " Stück");
WriteLine("Gesamtöffnungsgrad \t\t" # sum_i # " %");
WriteLine("Durchschnitt je Ventil\t" # durch_r # " %");
Kannst es ja mal zum Spaß im Scriptfenster ausführen, damit Du die Ausgaben siehst.

EDIT: Da über den Datenpunkt ERROR_CODE nicht alle HmIP-Ventile verfügen, wurde dieser gegen LEVEL_STATUS ausgetauscht. HmIP-Heizungsgruppen mussten "abgefangen" werden, da diese auch den DP besitzen.
Zuletzt geändert von HM-Villa am 29.01.2023, 18:46, insgesamt 1-mal geändert.
______________________________________________________
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)“