nicht Sichtbare SV sichtbar machen

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
magnum1795
Beiträge: 262
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 44 Mal
Danksagung erhalten: 21 Mal

nicht Sichtbare SV sichtbar machen

Beitrag von magnum1795 » 07.07.2021, 10:02

Hätte da mal eine Frage Wie kann ich denn nicht sichtbare Systemvariablen (z.B. die Wetterstation erzeugt automatisch mehrere SV) sichtbar machen so das sie dann auch bei den Systemvariablen zu sehen sind? Leider sind diese zur Zeit irgendwie ausgeblendet und ich weiß so nicht wie man das macht. Danke

PS: wenn ich ein neues Programm erzeuge und hier eine SV auswähle, werden sie dort mit angezeigt. In der "Normalen" Systemvariablen Asicht jedoch nicht.

MichaelN
Beiträge: 9650
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: nicht Sichtbare SV sichtbar machen

Beitrag von MichaelN » 07.07.2021, 10:20

Wenn Du den Namen der SV kennst, unter "Skript testen" eingeben und ausführen:

Code: Alles auswählen

dom.GetObject("NamederSV").Visible(true); 
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

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

Re: nicht Sichtbare SV sichtbar machen

Beitrag von Baxxy » 07.07.2021, 10:36

Sind die SV's wirklich nur als unsichtbar oder auch als intern geflagged? Habe gerade keinen Zugriff zum nachschauen.
Grüße
Baxxy

magnum1795
Beiträge: 262
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 44 Mal
Danksagung erhalten: 21 Mal

Re: nicht Sichtbare SV sichtbar machen

Beitrag von magnum1795 » 07.07.2021, 11:04

Baxxy hat geschrieben:
07.07.2021, 10:36
Sind die SV's wirklich nur als unsichtbar oder auch als intern geflagged? Habe gerade keinen Zugriff zum nachschauen.
Grüße
Baxxy
das weiß ich nicht. Mir ist nur aufgefallen als ich bei Systemvariablen nachgeschaut hatte das dort eben keine sind. Wenn ich aber z.B. unter Programme und hier "Systeminterne Programme einblenden" anklicke, sehe ich das es mehrere Programme automatisch erstellt hat. In diesen Programmen werden jeweils Scripte ausgeführt mit eben den Systemvariablen. Erstelle ich ein neues Programm mit SV, werden sie dort gelistet. Aber eben nur dort.

Es sind zwar einige Programme neu entstanden, aber diese sind so auch nicht sichtbar. Nur wenn man Systeminterne Programme einblenden läßt, werden sie Sichtbar. Bei den normalen Programmen kann man "nur" das was unten in den Bild 2 ist einstellen. Bei den Systeminternen sind diese Programme neu > Bild 1


Code: Alles auswählen

object chn = dom.GetObject('16998');
object oOverflow = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER_OVERFLOW');
object oRainCounter = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER');
object oSysVarRain = dom.GetObject('svHmIPRainCounter_16998_00185D898B01A5:1');
object oSysVarRainOldVal = dom.GetObject('svHmIPRainCounterOldVal_16998');
object oSysVarCounterToday =  dom.GetObject('svHmIPRainCounterToday_16998');
object oSysVarCounterYesterday =  dom.GetObject('svHmIPRainCounterYesterday_16998');
boolean overFlowFlag = oOverflow.Value();
real devVal = oRainCounter.Value();
real devValMax = oRainCounter.ValueMax();
real oldDevVal = oSysVarRainOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarRain.Value();
real sysVarTodayVal = oSysVarCounterToday.Value();
real todayTotal = 0.0;
integer tmp_devVal = (devVal.ToString().ToFloat() * 1000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 1000).ToInteger();
if (overFlowFlag == false) {
! Normal conditions
if (tmp_oldDevVal <= tmp_devVal) {
diffVal = devVal - oldDevVal;
}
! Device has rebooted
if (tmp_oldDevVal > tmp_devVal) {
diffVal = devVal;
}
} else {
!overFlow is true
if (tmp_oldDevVal > tmp_devVal) {
! An device overflow has occured
diffVal = (devVal + devValMax) - oldDevVal;
} else {
! Once the overflow flag has been set it will only be false when the device reboots
! Therefore this is the normal condition after an device overflow
diffVal = devVal - oldDevVal;
}
}
if (tmp_devVal != 0) {
oSysVarRainOldVal.State(devVal);
oSysVarRain.State(sysVarVal + diffVal);
}
todayTotal = sysVarTodayVal + diffVal;
if (todayTotal >= 1440.0) {todayTotal = 0.0;}
oSysVarCounterToday.State(todayTotal);

Code: Alles auswählen

object chn = dom.GetObject('16998');
object oOverflow = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER_OVERFLOW');
object oRainCounter = chn.DPByControl('WEATHER_TRANSMIT.RAIN_COUNTER');
object oSysVarRain = dom.GetObject('svHmIPRainCounter_16998_00185D898B01A5:1');
object oSysVarRainOldVal = dom.GetObject('svHmIPRainCounterOldVal_16998');
object oSysVarCounterToday =  dom.GetObject('svHmIPRainCounterToday_16998');
object oSysVarCounterYesterday =  dom.GetObject('svHmIPRainCounterYesterday_16998');
boolean overFlowFlag = oOverflow.Value();
real devVal = oRainCounter.Value();
real devValMax = oRainCounter.ValueMax();
real oldDevVal = oSysVarRainOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarRain.Value();
real sysVarTodayVal = oSysVarCounterToday.Value();
real todayTotal = 0.0;
integer tmp_devVal = (devVal.ToString().ToFloat() * 1000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 1000).ToInteger();
if (overFlowFlag == false) {
! Normal conditions
if (tmp_oldDevVal <= tmp_devVal) {
diffVal = devVal - oldDevVal;
}
! Device has rebooted
if (tmp_oldDevVal > tmp_devVal) {
diffVal = devVal;
}
} else {
!overFlow is true
if (tmp_oldDevVal > tmp_devVal) {
! An device overflow has occured
diffVal = (devVal + devValMax) - oldDevVal;
} else {
! Once the overflow flag has been set it will only be false when the device reboots
! Therefore this is the normal condition after an device overflow
diffVal = devVal - oldDevVal;
}
}
if (tmp_devVal != 0) {
oSysVarRainOldVal.State(devVal);
oSysVarRain.State(sysVarVal + diffVal);
}
todayTotal = sysVarTodayVal + diffVal;
if (todayTotal >= 1440.0) {todayTotal = 0.0;}
oSysVarCounterToday.State(todayTotal);

Code: Alles auswählen

object chn = dom.GetObject('16998');
object oOverflow = chn.DPByControl('WEATHER_TRANSMIT.SUNSHINEDURATION_OVERFLOW');
object oSunshineCounter = chn.DPByControl('WEATHER_TRANSMIT.SUNSHINEDURATION');
object oSysVarSunshine = dom.GetObject('svHmIPSunshineCounter_16998_00185D898B01A5:1');
object oSysVarSunshineOldVal = dom.GetObject('svHmIPSunshineCounterOldVal_16998');
object oSysVarCounterToday =  dom.GetObject('svHmIPSunshineCounterToday_16998');
object oSysVarCounterYesterday =  dom.GetObject('svHmIPSunshineCounterYesterday_16998');
boolean overFlowFlag = oOverflow.Value();
real devVal = oSunshineCounter.Value();
real devValMax = oSunshineCounter.ValueMax();
real oldDevVal = oSysVarSunshineOldVal.Value();
real diffVal = 0.0;
real sysVarVal = oSysVarSunshine.Value();
real sysVarTodayVal = oSysVarCounterToday.Value();
real todayTotal = 0.0;
integer tmp_devVal = (devVal.ToString().ToFloat() * 1000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 1000).ToInteger();
if (overFlowFlag == false) {
! Normal conditions
if (tmp_oldDevVal <= tmp_devVal) {
diffVal = devVal - oldDevVal;
}
! Device has rebooted
if (tmp_oldDevVal > tmp_devVal) {
diffVal = devVal;
}
} else {
!overFlow is true
if (tmp_oldDevVal > tmp_devVal) {
! An device overflow has occured
diffVal = (devVal + devValMax) - oldDevVal;
} else {
! Once the overflow flag has been set it will only be false when the device reboots
! Therefore this is the normal condition after an device overflow
diffVal = devVal - oldDevVal;
}
}
if (tmp_devVal != 0) {
oSysVarSunshineOldVal.State(devVal);
oSysVarSunshine.State(sysVarVal + diffVal);
}
todayTotal = sysVarTodayVal + diffVal;
if (todayTotal >= 1440.0) {todayTotal = 0.0;}
oSysVarCounterToday.State(todayTotal);

Code: Alles auswählen

[var rainToday = dom.GetObject(12278);
var rainYesterday = dom.GetObject(12279);
var rainCounter = dom.GetObject(12271);

          if ( (rainToday) && (rainYesterday) && (rainCounter) )
          {
            if (rainCounter.LastTimestamp())
            {
              var diff = rainCounter.Value() - rainCounter.LastValue();
              if ( diff < 0.0)
              {
                diff = diff + rainCounter.ValueMax();
              }
              rainToday.State(rainToday.State() + diff);
            }
            else
            {
              rainToday.State(0.0);
              rainYesterday.State(0.0);
            }
          }/code]
          
          [code]var rainToday = dom.GetObject(12278);
var rainYesterday = dom.GetObject(12279);
var rainCounter = dom.GetObject(12271);

          if ( (rainToday) && (rainYesterday) && (rainCounter) )
          {
            if (rainCounter.LastTimestamp())
            {
              var diff = rainCounter.Value() - rainCounter.LastValue();
              if ( diff < 0.0)
              {
                diff = diff + rainCounter.ValueMax();
              }
              rainToday.State(rainToday.State() + diff);
            }
            else
            {
              rainToday.State(0.0);
              rainCounter.State(0.0);
            }
          }

Das sind die Scripte die in den jeweiligen Programmen sind von oben nach unten



PS: bei den Programmen, was meinen die mit Regen überlauf ja bzw. nein und Regenmenge normal und Regenmenge unbekannt?
Dateianhänge
Programme neu 1.jpg
programm 3 bra k1.jpg

magnum1795
Beiträge: 262
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 44 Mal
Danksagung erhalten: 21 Mal

Re: nicht Sichtbare SV sichtbar machen

Beitrag von magnum1795 » 07.07.2021, 11:22

MichaelN hat geschrieben:
07.07.2021, 10:20
Wenn Du den Namen der SV kennst, unter "Skript testen" eingeben und ausführen:

Code: Alles auswählen

dom.GetObject("NamederSV").Visible(true); 
funktioniert so nicht. SV werden nicht angezeigt. Hatte das eingegeben > dom.GetObject("svHmIPRainCounterToday_16998").Visible(true);

PS: auch das funktioniert nicht > dom.GetObject(12278).Visible(true);

frd030
Beiträge: 3610
Registriert: 14.07.2019, 20:49
System: CCU
Hat sich bedankt: 843 Mal
Danksagung erhalten: 539 Mal

Re: nicht Sichtbare SV sichtbar machen

Beitrag von frd030 » 07.07.2021, 11:42

magnum1795 hat geschrieben:
07.07.2021, 11:22
funktioniert so nicht. SV werden nicht angezeigt. Hatte das eingegeben > dom.GetObject("svHmIPRainCounterToday_16998").Visible(true);
PS: auch das funktioniert nicht > dom.GetObject(12278).Visible(true);
magnum1795 hat geschrieben:
07.07.2021, 11:04
das weiß ich nicht. Mir ist nur aufgefallen als ich bei Systemvariablen nachgeschaut hatte das dort eben keine sind. Wenn ich aber z.B. unter Programme und hier "Systeminterne Programme einblenden" anklicke, sehe ich das es mehrere Programme automatisch erstellt hat. In diesen Programmen werden jeweils Scripte ausgeführt mit eben den Systemvariablen. Erstelle ich ein neues Programm mit SV, werden sie dort gelistet. Aber eben nur dort.
PS: bei den Programmen, was meinen die mit Regen überlauf ja bzw. nein und Regenmenge normal und Regenmenge unbekannt?
Diese Skripte und Systemvariablen werden bei bestimmten Geräten von der CCU-Firmware automatisch (und versteckt!) angelegt!
Nach meiner Kenntnis sind die seitens des Herstellers auch nicht dokumentiert!

Die Programme kann man finden (das ist im WebUI-Handbuch beschrieben, wie das geht). Die SVs kann man mit Bordmitteln des WebUI nicht sichtbar machen und wenn das per Skript auch nicht geht, tja...

Wenn es Fragen dazu gibt, dann müßtest Du die ggf. an den Hersteller richten! Dies hier ist kein Forum des Herstellers, sondern von anderen Anwendern.

Es sein denn jemand hier hat andere Erkenntnisse.

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

Re: nicht Sichtbare SV sichtbar machen

Beitrag von Baxxy » 07.07.2021, 11:50

Alles klar. Wir nennen diese SysVars ja nicht ohne Grund "systeminterne SV's". :wink:
Wären sie nur unsichtbar müssten sie trotzdem bei Einstellungen -- Systemvariablen zu sehen sein.
Also nimmst du mal MichaelN's Codezeile und ersetzt Visible(true) mit Internal(false).

MichaelN
Beiträge: 9650
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1617 Mal

Re: nicht Sichtbare SV sichtbar machen

Beitrag von MichaelN » 07.07.2021, 11:56

Ja, richtig, es war Internal

Code: Alles auswählen

WriteLine("Hallo Welt!");
WriteLine(dom.GetObject("svEnergyCounter_22515_000B9BE98C3A30:5").Visible()); 

WriteLine(dom.GetObject("svEnergyCounter_22515_000B9BE98C3A30:5").Internal()); 

dom.GetObject("svEnergyCounter_22515_000B9BE98C3A30:5").Internal(false);

WriteLine(dom.GetObject("svEnergyCounter_22515_000B9BE98C3A30:5").Internal()); 
Sichtbar ist die SV, aber intern geflaggt. Nach Umschalten von Intern auf false wird sie auch angezeigt.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

magnum1795
Beiträge: 262
Registriert: 13.05.2020, 17:56
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 44 Mal
Danksagung erhalten: 21 Mal

Re: nicht Sichtbare SV sichtbar machen

Beitrag von magnum1795 » 07.07.2021, 12:09

MichaelN hat geschrieben:
07.07.2021, 11:56
Ja, richtig, es war Internal

Code: Alles auswählen

WriteLine("Hallo Welt!");
WriteLine(dom.GetObject("svEnergyCounter_22515_000B9BE98C3A30:5").Visible()); 

WriteLine(dom.GetObject("svEnergyCounter_22515_000B9BE98C3A30:5").Internal()); 

dom.GetObject("svEnergyCounter_22515_000B9BE98C3A30:5").Internal(false);

WriteLine(dom.GetObject("svEnergyCounter_22515_000B9BE98C3A30:5").Internal()); 
Sichtbar ist die SV, aber intern geflaggt. Nach Umschalten von Intern auf false wird sie auch angezeigt.
Super, das war es . Es wird nun die SV auch angezeigt. Vielen Dank an alle Beteiligten.

WriteLine("Hallo Welt!");
WriteLine(dom.GetObject("svHmIPRainCounterToday_16998").Visible());

WriteLine(dom.GetObject("svHmIPRainCounterToday_16998").Internal());

dom.GetObject("svHmIPRainCounterToday_16998").Internal(false);

WriteLine(dom.GetObject("svHmIPRainCounterToday_16998").Internal());

PS: mit diesen Script kann man sich alle SV anzeigen lassen und hat dann gleich den Richtigen Namen.

Code: Alles auswählen

string s;
string slist = "";
foreach(s, dom.GetObject(ID_SYSTEM_VARIABLES).EnumNames()) {
    slist = slist #s #"\n";    
}
WriteLine(slist);

Antworten

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