nicht Sichtbare SV sichtbar machen
Moderator: Co-Administratoren
-
- 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
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.
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.
-
- 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
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 +++
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 +++
- 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
Sind die SV's wirklich nur als unsichtbar oder auch als intern geflagged? Habe gerade keinen Zugriff zum nachschauen.
Grüße
Baxxy
Grüße
Baxxy
-
- 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
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?
-
- 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
funktioniert so nicht. SV werden nicht angezeigt. Hatte das eingegeben > dom.GetObject("svHmIPRainCounterToday_16998").Visible(true);MichaelN hat geschrieben: ↑07.07.2021, 10:20Wenn Du den Namen der SV kennst, unter "Skript testen" eingeben und ausführen:
Code: Alles auswählen
dom.GetObject("NamederSV").Visible(true);
PS: auch das funktioniert nicht > dom.GetObject(12278).Visible(true);
-
- 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
magnum1795 hat geschrieben: ↑07.07.2021, 11:22funktioniert 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);
Diese Skripte und Systemvariablen werden bei bestimmten Geräten von der CCU-Firmware automatisch (und versteckt!) angelegt!magnum1795 hat geschrieben: ↑07.07.2021, 11:04das 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?
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.
- 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
Alles klar. Wir nennen diese SysVars ja nicht ohne Grund "systeminterne SV's".
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).
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).
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
-
- 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
Ja, richtig, es war Internal
Sichtbar ist die SV, aber intern geflaggt. Nach Umschalten von Intern auf false wird sie auch angezeigt.
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());
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 +++
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 +++
-
- 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
Super, das war es . Es wird nun die SV auch angezeigt. Vielen Dank an alle Beteiligten.MichaelN hat geschrieben: ↑07.07.2021, 11:56Ja, richtig, es war Internal
Sichtbar ist die SV, aber intern geflaggt. Nach Umschalten von Intern auf false wird sie auch angezeigt.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());
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);