Ich nutze den WRCD bereits seit mehreren Jahren und habe nun einen 2. WRCD in mein Homematic System aufgenommen.
Seit diesem Zeitpunkt funktionieren die erstellten Skripte (automatischer Update, manueller Update über Taster) weder für den neuen noch für den alten WRCD.
Alle Skripte (taster/automatisch sowie neu und alt) sind fast identisch nur, dass der Kanal
Code: Alles auswählen
var kanal
Code: Alles auswählen
dom.GetObject('output2')
Ich habe zum debug eine Zeile eingefügt die mir den wert des angesprochenen Kanals auch dann in eine Systemvariable schreibt.
Code: Alles auswählen
! set output channel to WRCD Display
var kanal = ("HmIP-WRCD_OG_Bad:3");
! initialize helpers
string mytime = system.Date("%H:%M");
integer temp = 0;
integer tempWT = 0;
! get outside temperature and forecast and warmwater temperature
string temperature = dom.GetObject("OutsideTemperature").Value();
integer weatherforcast = dom.GetObject("WetterFCIcon").Value().ToInteger();
string waterTemp = dom.GetObject("WaterTankTemperature").Value();
! format outside temperature for display
temp = temperature.ToInteger();
if(temp > 0){
temperature = "+" + temperature.ToString(0) + "^C";
}
else {
temperature = temperature.ToString(0) + "^C";
}
! format warmwater temperature for display
if(tempWT > 0){
waterTemp = "+" + waterTemp.ToString(0) + "^C";
}
else {
waterTemp = waterTemp.ToString(0) + "^C";
}
waterTemp = "Temp " + waterTemp;
! debug to be removed
! string output1 =mytime + " " + waterTemp;
! WriteLine(output1);
! dom.GetObject('output').State(output1);
! get outside battery and power values
string batteryState = dom.GetObject("BatterieLadung").Value(); ! muss in % formatiert werden
string wrPower = dom.GetObject("BatterieProduction").Value(); ! muss in kW formatiert werden
string houseConsumption = dom.GetObject("BatterieConsumption").Value(); ! muss in kW formatiert werden
real tempPWR;
tempPWR = wrPower.ToFloat()*0.001;
! Format display to fit values > 10kW for production
if(tempPWR < 10){
wrPower = tempPWR.ToString(1);
}
else {
wrPower = tempPWR.ToString(0);
}
tempPWR = houseConsumption.ToFloat()*0.001;
houseConsumption = tempPWR.ToString(1);
string output = batteryState.ToString(0) + "%/" + wrPower + "/" + houseConsumption + "kW";
! Zeile 2 WaterTemperature
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_STRING").State(waterTemp);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ID").State(2);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ALIGNMENT").State(1);
! dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_COMMIT").State(true);
! Zeile 3 Temperature + Forecast
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_STRING").State(temperature);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ICON").State(weatherforcast);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ID").State(3);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ALIGNMENT").State(1);
! dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_COMMIT").State(true);
! Zeile 4 - power values
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_STRING").State(output);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ID").State(4);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ALIGNMENT").State(1);
! dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_COMMIT").State(true);
! Zeile 5 - last update value
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_STRING").State("Update " + mytime);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ID").State(5);
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_ALIGNMENT").State(1);
! Alle Zeilen fixieren
dom.GetObject(kanal).DPByHssDP("DISPLAY_DATA_COMMIT").State(true);
dom.GetObject('output2').State(mytime + "last update: " + dom.GetObject(kanal).Address());
Interessanter weise funktioniert das Skript auf beiden Displays tadellos (Aktualisieren des Displays als auch schreiben der variablen) wenn ich dieses im Skript Editor starte. Das Display Update funktioniert allerdings weder beim Ausführen auf dem Button in der Raspberrymatic (3.73.9.20231130), noch beim betätigen des Schalters, noch beim automatisch stündlichen update).
Meine Idee wäre noch den neuen Taster wieder abzulernen und dann erneut die Funktion für den alten Taster zu überprüfen.
Im besten Fall würde ein reproduzierbares Szenario ergeben aber mein Problem nicht lösen.
Ich hoffe ihr habt Ideen und könnt weiterhelfen.