Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
Benutzeravatar
GoSh
Beiträge: 62
Registriert: 30.09.2019, 19:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Beitrag von GoSh » 02.10.2020, 21:10

Textfelder in Neo-Creator haben leider keine Scrollbars/Laufbalken. Eine CCU-Text-Systemvariable (Script_Infos), in der man per foreach...EnumID z.B. den Status aller Systemvariablen auflistet, führt - angezeigt in Neo-Creator bei langen Listen zu einer unbrauchbaren Anzeige.

Aus diesem Grund habe ich ein Script erstellt, das die Systemvariablen mit Hilfe eines Zählers (Script_Lines="1,30,0") blockweise in die Variable Script_Infos schreibt. Das u.g. Script kann über einen Neo-Creator-Button mehrfach manuell ausgeführt werden und tickert damit alle Systemvariablen der CCU blockweise (z.B. 30 Zeilen) in die Variable Script_Infos.

Code: Alles auswählen

!Systemvariable_Lesen
!mit Zeilenzähler: Zeileneinträge aufsteigend/blockweise mit Script_Lines_Index und Anzahl=Script_Lines_Count in Script_Infos eintragen
!Autor:GoSh Stand:02.10.2020

var Script_Infos; 	          !Systemvariable Zeichenkette, die in einem Mediola-Textfeld angezeigt wird
var Script_Lines; 	          !Systemvariable Werteliste(Parts,Count,Index), z.B.: "1,30,0" 

integer Script_Lines_Parts;  	!0=Alle Systemvariable, 1=Nur Zeilenanzahl Script_Lines_Count
integer Script_Lines_Count;  	!Anzahl darstellbarer Zeilen in einem Mediola-Textfeld
integer Script_Lines_Index;  	!Script_Lines_Index*Script_Lines_Count = 1.Zeile in Script_Infos
integer SysVar_Count;		      !Anzahl Systemvariable

string itemID;
string address;
object dp_obj;
integer Counter;		          !Zeilenzähler
boolean Testflag=false; 	    !true/false;

Script_Infos = dom.GetObject("Script_Infos");
Script_Infos.State(""); !Leeren vor dem Neu-Eintragen

Script_Lines = dom.GetObject("Script_Lines").ValueList();
Script_Lines_Parts = Script_Lines.StrValueByIndex(",", 0).ToInteger();
Script_Lines_Count = Script_Lines.StrValueByIndex(",", 1).ToInteger();
Script_Lines_Index = Script_Lines.StrValueByIndex(",", 2).ToInteger();
foreach(itemID, dom.GetObject(ID_SYSTEM_VARIABLES).EnumIDs()) {SysVar_Count=SysVar_Count+1;} !Anzahl Systemvariable
if (Testflag==true) {
WriteLine("Script_Lines="#Script_Lines#"\n"#"Script_Lines_Count="#Script_Lines_Count.ToString()#"\n"#"Script_Lines_Index="#Script_Lines_Index.ToString());
WriteLine("Script_Lines_Index*Script_Lines_Count="#(Script_Lines_Index*Script_Lines_Count));
WriteLine("SysVar_Count="+SysVar_Count);
}

foreach(itemID, dom.GetObject(ID_SYSTEM_VARIABLES).EnumIDs())
{
         Counter=Counter+1;
         !WriteLine(itemID);
         dp_obj = dom.GetObject(itemID);
         !Script_Infos.State(Script_Infos.State()#dp_obj.Timestamp()#" "#dom.GetObject(itemID).HssType()#"="#dp_obj.Name()#"\n");
         
         if ((Counter > (Script_Lines_Index+0)*Script_Lines_Count) && (Counter <= (Script_Lines_Index+1)*Script_Lines_Count) && (Script_Lines_Parts==1))
          { !ggf. Zeilentrennung mit #"|" #"\n"
          if (dp_obj.Name()=="Script_Infos")
            {Script_Infos.State(Script_Infos.State()#"\n"#Counter.ToString()#". "#dp_obj.Name()#" ("#dp_obj.ID()#")"#" = "#"");}
            else
            {Script_Infos.State(Script_Infos.State()#"\n"#Counter.ToString()#". "#dp_obj.Name()#" ("#dp_obj.ID()#")"#" = "#dp_obj.Value());}
          } 
          else 
          {
          if (Script_Lines_Parts==0) {Script_Infos.State(Script_Infos.State()#"\n"#Counter.ToString()#". "#dp_obj.Name()#" ("#dp_obj.ID()#")"#" = "#dp_obj.Value());}
          }
          
	  !if (Testflag==true) {WriteLine("Script_Infos.State()="#Script_Infos.State());}
}

if (Testflag==true) {WriteLine("Script_Infos.State()="#Script_Infos.State());}

!Script_Lines_Index um 1 erhöhen und in Script_Lines eintragen, solange wie Zeilenanfang <= SysVar_Count
Script_Lines_Index=Script_Lines_Index+1;
if ((Script_Lines_Index*Script_Lines_Count) > SysVar_Count) {Script_Lines_Index=0;} !Reset auf Anfang
Script_Lines =Script_Lines_Parts.ToString()#","#Script_Lines_Count.ToString()#","#Script_Lines_Index.ToString();
!WriteLine(Script_Lines);
dom.GetObject("Script_Lines").ValueList(Script_Lines);
!WriteLine(dom.GetObject("Script_Lines").ValueList());
Das Script habe ich ausser für ID_SYSTEM_VARIABLES auch für andere Listen modifiziert im Einsatz : ID_PROGRAMS, ID_DEVICES. In meiner NEO-App erhalte ich so schnell wichtige CCU-Statusinfos ohne gleich einen PC hochzufahren zu müssen.

Hab hier im Forum schon viele Tipps bekommen und dachte mir, meine Lösung ist evt. auch für andere von Nutzen :D ...
Zuletzt geändert von Roland M. am 02.10.2020, 21:13, insgesamt 1-mal geändert.
Grund: Thema verschoben

Fonzo
Beiträge: 6847
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 499 Mal

Re: Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Beitrag von Fonzo » 02.10.2020, 23:33

GoSh hat geschrieben:
02.10.2020, 21:10
Textfelder in Neo-Creator haben leider keine Scrollbars/Laufbalken.
Ein Textfeld hat das nicht, aber wenn das Problem primär nur ist das Du den Textinhalt scrollen willst, kannst Du dies relativ einfach lösen.

Einfach statt einem Textfeld ein Element vom Typ Webseite nutzten und dort die Variable zuweisen.
Dann klickst Du auf
scrollen.png
scrollen.png (908 Bytes) 1832 mal betrachtet
und schon kannst Du den Inhalt scrollen und musst daher auch nicht den Inhalt extra zerlegen.

Benutzeravatar
GoSh
Beiträge: 62
Registriert: 30.09.2019, 19:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

Re: Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Beitrag von GoSh » 03.10.2020, 09:46

Danke - das werd ich mit dem Webseitenobjekt mal ausprobieren.

Das Script kann dabei mit Anpassung der Systemvariablen weiterverwendet werden : Script_Lines="0,30,0"

Mit dem 1.Parameter (0/1) kann man einstellen, ob alles in Script_Infos landet oder die Liste zerlegt wird ... ob man also Scrollen oder lieber Klicken möchte.
Zuletzt geändert von GoSh am 03.10.2020, 10:04, insgesamt 1-mal geändert.

Fonzo
Beiträge: 6847
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 499 Mal

Re: Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Beitrag von Fonzo » 03.10.2020, 10:02

GoSh hat geschrieben:
03.10.2020, 09:46
das werd ich mit dem Webseitenobjekt mal ausprobieren.
Wichtig ist, dass man bei einem Element vom TYp Webseite den Hintergund anpassen muss, damit man das gleiche Aussehen hat, wie bei einem Textfeld in der Standardeinstellung. Im Standard ist der Hintergrund bei einem Element des Typs Webseite in der Farbe weiß.
Wenn der Hintergrund des Elements Webseite wie bei einem Textfeld transparent sein soll, muss man auf
webseite 2.png
webseite 2.png (1.17 KiB) 1775 mal betrachtet
klicken und dort im Bereich Dokument-Beginn das CSS anpassen und den background auf transparent setzten.

Code: Alles auswählen

<!DOCTYPE html><html><head><meta charset="utf-8" /><style>html{background:transparent;color:#000;font-family:sans-serif;padding:10px;}</style></head><body>

Benutzeravatar
GoSh
Beiträge: 62
Registriert: 30.09.2019, 19:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

Re: Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Beitrag von GoSh » 03.10.2020, 10:43

Mit dem Webseitenobjekt funktionierts auch. Da bei mir der Hintergrund dunkel eingestellt ist, habe ich im Bereich Dokument-Beginn das CSS auf Textfarbe weiss umgestellt:

Code: Alles auswählen

<!DOCTYPE html><html><head><meta charset="utf-8" /><style>html{background:transparent;color:#fff;font-family:sans-serif;padding:10px;}</style></head><body>
Einen Mangel muss ich noch abstellen. Die Gesamtliste kommt im Webseitenobjekt leider ohne Zeilenumbruch daher. Im Script funktioniert der Zeilenumbruch für ein Textfeld mit #"\n". Ich hab es beim Webseitenobjekt mal mit #"<br>" versucht, klappt aber nicht.

Wie bekommt man im Webseitenobjekt den Zeilenumbruch hin ?

Fonzo
Beiträge: 6847
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 499 Mal

Re: Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Beitrag von Fonzo » 03.10.2020, 10:51

GoSh hat geschrieben:
03.10.2020, 10:43
Ich hab es beim Webseitenobjekt mal mit #"<br>" versucht, klappt aber nicht.
Müsste ich selber mal bei Gelegenheit schauen, da ich aber nicht von einer CCU direkt in NEO Inhalte übergebe, habe ich selber da auch keine richtige Möglichkeiten zu das nachzuvollziehen. Inhalt für das Element Webseite werden bei mir selber als gesetztes HTML übergeben.
GoSh hat geschrieben:
03.10.2020, 10:43
Wie bekommt man im Webseitenobjekt den Zeilenumbruch hin ?
Mal mit setzten der Abschnitte in <p> oder <div> und zuweisen einer Klasse probiert? Dann kannst Du das auch per CSS genau beeinflussen wie der Text im Tag dargestellt werden soll. Oder Du setzt den Inhalt gleich für eine saubere Formatierung als Tabelle.

Benutzeravatar
GoSh
Beiträge: 62
Registriert: 30.09.2019, 19:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

Re: Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Beitrag von GoSh » 03.10.2020, 11:30

Webseitenobjekt funktioniert auch mit <br>. Habs im Script schlicht an der falschen Stelle ausprobiert. Hier der geänderte Teilausschnitt - aktiviert für das Neo-Webseitenobjekt :

Code: Alles auswählen

          !String für Neo-Textfeld ergänzen
          !if (Script_Lines_Parts==0) {Script_Infos.State(Script_Infos.State()#"\n"#Counter.ToString()#". "#dp_obj.Name()#" ("#dp_obj.ID()#")"#" = "#dp_obj.Value());}
          !String für Neo-Webseitenobjekt ergänzen
          if (Script_Lines_Parts==0) {Script_Infos.State(Script_Infos.State()#"\n"#Counter.ToString()#". "#dp_obj.Name()#" ("#dp_obj.ID()#")"#" = "#dp_obj.Value()#"<br>");}
Wenn man das Script per Parameter wahlweise für ein Textfeld als auch für ein Webseitenobjekt verwenden möchte, müsste die Variable Script_Lines um einen Parameter erweitert werden und an der o.g. Stelle ein weiteres if...then...else eingebaut werden...

Benutzeravatar
GoSh
Beiträge: 62
Registriert: 30.09.2019, 19:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 15 Mal
Danksagung erhalten: 3 Mal

Re: Liste aller Systemvariablen im Neo-Creator-Textfeld anzeigen

Beitrag von GoSh » 03.10.2020, 12:37

Beim Webseitenobjekt gibt es die Einstellung "Autorefresh". Das sollte man abschalten, sonst wird ein Scrollvorgang in der Auflistung im vorgegebenen Zeitabstand wieder auf Anfang zurückgestellt:
2020-10-03 12_26_47-AIO CREATOR NEO 2.9.0.jpg
2020-10-03 12_26_47-AIO CREATOR NEO 2.9.0.jpg (3.34 KiB) 1698 mal betrachtet

Wenn man mit einem Webseitenobjekt die Liste scrollen möchte, muss zumindest einmal das Scripts ausgeführt werden. Man benötigt also auch hier einen Button wie beim Textfeld. Auf den Neo-Button kann man verzichten, wenn man z.B. das Script per Zeitsteuerung in der CCU regelmäßig aufruft. Das belastet aber dann die CCU dauerhaft und ist imho nicht zu empfehlen.

Die einfachere Lösung ist für mich daher weiterhin ein Textfeld, wo man mit dem Button und i.d.R. wenigen Klicks die Liste anzeigt.

Kleines Anzeige-Beispiel in NEO :
2020-10-03 13_39_25-AIO REMOTE NEO – 1.77.0.jpg
2020-10-03 13_39_25-AIO REMOTE NEO – 1.77.0.jpg (14.46 KiB) 1691 mal betrachtet

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“