Script funktioniert nicht mehr

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
Chris42
Beiträge: 30
Registriert: 26.06.2021, 16:33
System: CCU
Hat sich bedankt: 5 Mal

Script funktioniert nicht mehr

Beitrag von Chris42 » 17.07.2022, 16:31

CCU3 / 3.65.6

Hallo Leute,

vor einem Jahre habe ich folgende Frage gestellt:

viewtopic.php?f=26&t=68739&p=671791#p671791

Daraufhin habe ich tatsächlich einen entsprechenden Beitrag gefunden und das umgesetzt, das hat letztes Jahr problemlos funktioniert und am Anfang dieses Sommers ebenfalls.

Nun seit ca. einem Monat funktioniert das Programm nicht mehr, ich habe bis auf die regelmäßigen Updates das Programm aber nicht geändert.

Die Umschaltung zwischen innen wärmer und außen wärmer wird nicht mehr durchgeführt, sie bleibt in der Position in der ich die SV manuell stelle, sonst geht nichts mehr.

Ich habe das Programm neu erstellt, ohne Erfolg...

Hier das Script das bisher einwandfrei funktionierte:

********************************************************************************************************

Code: Alles auswählen

!Innentemperatur ermitteln
var innentemp = dom.GetObject("Wandth_Wohnzimmer_Verk_Wetter");
real innen = innentemp.DPByHssDP("TEMPERATURE").Value();
WriteLine("Temperatur innen : " # innen);

!Aussentemperatur ermitteln
var aussentemp = dom.GetObject("Aussentemperatursensor1");
real aussen = aussentemp.DPByHssDP("TEMPERATURE").Value();
WriteLine("Temperatur aussen : " # aussen);

!Prüfung ob innen oder aussen wärmer und entsprechendes setzen der Systemvariable Temperaturverhaeltniss.
 if(innen > aussen){
 dom.GetObject("Temperaturverhaeltniss").State(true);
}
if(aussen > innen){
 dom.GetObject("Temperaturverhaeltniss").State(false);
}

WriteLine(dom.GetObject("Temperaturverhaeltniss").Value());
********************************************************************************************************

Kann mir jemand helfen?

Danke und Gruß

Chris
Dateianhänge
CCU1.JPG
Zuletzt geändert von alchy am 17.07.2022, 16:39, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

Chris42
Beiträge: 30
Registriert: 26.06.2021, 16:33
System: CCU
Hat sich bedankt: 5 Mal

Re: Script funktioniert nicht mehr

Beitrag von Chris42 » 17.07.2022, 16:37

ok, kann gelöscht werden...
Kaum benennt man mal nen Sensor um funktioniert das Script nicht mehr...
:oops:

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Script funktioniert nicht mehr

Beitrag von Tyfys » 17.07.2022, 18:59

Hallo Chris
Chris42 hat geschrieben:
17.07.2022, 16:37
Kaum benennt man mal nen Sensor um funktioniert das Script nicht mehr...
So wäre dir dein Lapsus schneller aufgefallen :

Code: Alles auswählen

real innen;
real aussen;

!Innentemperatur ermitteln
object DpObj = channels.Get("Wandth_Wohnzimmer_Verk_Wetter").DPByHssDP("TEMPERATURE");
if (DpObj) {
    innen = DpObj.Value();
    WriteLine("Temperatur innen : " # innen);
} else {
    WriteLine("Kanalname für innen falsch");
}

!Aussentemperatur ermitteln
object DpObj = channels.Get("Aussentemperatursensor1").DPByHssDP("TEMPERATURE");
if (DpObj) {
    aussen = DpObj.Value();
    WriteLine("Temperatur aussen : " # aussen);
} else {
    WriteLine("Kanalname für aussen falsch");
}

!Prüfung ob innen oder aussen wärmer und entsprechendes setzen der Systemvariable Temperaturverhaeltniss.
boolean tempstatus = (innen > aussen);
object SVObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get("Temperaturverhaeltniss");
if (SVObj) {
    SVObj.State(tempstatus);
} else {
    WriteLine("Systemvariable Temperaturverhaeltniss fehlt");
}
Mir ist noch aufgefallen, dass du den Fall, beide Temperaturen sind gleich, gar nicht berücksichtigt hast.
Das ist bei dieser Prüfung mit enthalten.

Code: Alles auswählen

boolean tempstatus = (innen > aussen); 
Als Vergleich könntest du auch statt > auch >= nehmen, dann wird auch schon bei Gleichheit der Status true genommen.
Gruß
Harry

Chris42
Beiträge: 30
Registriert: 26.06.2021, 16:33
System: CCU
Hat sich bedankt: 5 Mal

Re: Script funktioniert nicht mehr

Beitrag von Chris42 » 17.07.2022, 21:42

Alles klar, ich danke Dir.

Benutzeravatar
Baxxy
Beiträge: 10831
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 608 Mal
Danksagung erhalten: 2227 Mal

Re: Script funktioniert nicht mehr

Beitrag von Baxxy » 17.07.2022, 22:05

Chris42 hat geschrieben:
17.07.2022, 16:37
Kaum benennt man mal nen Sensor um funktioniert das Script nicht mehr...
Naja, so ist das halt.
Man könnte auch über...

Code: Alles auswählen

dom.GetObject('INTERFACE.SERIENNUMMER:KANAL.DATENPUNKT').Value();
... den Wert holen.
Solange der Sensor nicht kaputt geht und getauscht werden muss klappt damit der Zugriff.

Dadurch wird aber das Script "schlechter durchschaubar", da vermutlich niemand alle SN's seiner Geräte im Kopf hat. :wink:

Irgendwas ist halt immer... :mrgreen:

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Script funktioniert nicht mehr

Beitrag von Tyfys » 17.07.2022, 23:13

Baxxy hat geschrieben:
17.07.2022, 22:05
Man könnte auch über...

Code: Alles auswählen

dom.GetObject('INTERFACE.SERIENNUMMER:KANAL.DATENPUNKT').Value();
... den Wert holen.

dann aber auch gegen Tippfehler absichern - z.B. so:

Code: Alles auswählen

  if (dom.GetObject('INTERFACE.SERIENNUMMER:KANAL.DATENPUNKT')) {
      var DpVal = dom.GetObject('INTERFACE.SERIENNUMMER:KANAL.DATENPUNKT').Value();
  } else {
      WriteLine("Fehler bei Angabe von INTERFACE.SERIENNUMMER:KANAL.DATENPUNKT");
  }
Gruß
Harry

Benutzeravatar
Baxxy
Beiträge: 10831
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 608 Mal
Danksagung erhalten: 2227 Mal

Re: Script funktioniert nicht mehr

Beitrag von Baxxy » 17.07.2022, 23:31

Ja, je nach Script-Skill kann man das so nutzen.
Mein Schema sähe eher so aus, ich bevorzuge aber den dedizierten Zugriff über den Namen. (weil's mit dem SDV so schön einfach ist :wink: )

Code: Alles auswählen

object dp = dom.GetObject('INTERFACE.SERIENNUMMER:KANAL.DATENPUNKT');
if (dp) { var val = dp.Value(); }
else { WriteLine("DP nicht gefunden"); }
Tyfys hat geschrieben:
17.07.2022, 23:13
Tippfehler
Ja, die schleichen sich gerne mal ein. 8)

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“