Script: Batteriespannungen in Werteliste

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

Benutzeravatar
Feyrgas Mortes
Beiträge: 3
Registriert: 14.11.2017, 13:58
Wohnort: Mörfelden-Walldorf

Script: Batteriespannungen in Werteliste

Beitrag von Feyrgas Mortes » 14.11.2017, 14:19

Hallo,

ich habe ein kleines Scripting Problem...
Ich versuche seit geraumer Zeit via Script den "BATTERY_STATE" der HKT's und Wandthermostaten abzufragen und in einer Systemvariablen abzulegen.

Hier erst mal dass Script:

Code: Alles auswählen

var BatDev = dom.GetObject("Batterie");
    string itemID;
    string text = "";

    ! Durch alle angemeldeten Geräte laufen
    foreach(itemID, BatDev.EnumUsedIDs())
    {
    ! Gerätedetails & Schnittstelle holen
    var item = dom.GetObject(itemID);
    var device = dom.GetObject(item.Device());
    var interface = dom.GetObject(item.Interface());

    ! Name, Adresse, Kanal und Batteriespannung auslesen (Kanal4)
    string interface_name = interface.Name();
    string device_address = device.Address();
    device_address = device_address.StrValueByIndex(":", 0);
    string channel_name = interface_name # "." # device_address # ":4.BATTERY_STATE";
    var channel = dom.GetObject(channel_name);
    string batvalue = dom.GetObject(channel_name).Value();
    ! Text zusammensetzen
    string text = text # "- " # item.Name() # " hat: " # batvalue.ToString(1) # " V Spannung" # "\r\n";
!WriteLine(text);
    }
    }
     dom.GetObject("Batteriestatus").State(text);
! WriteLine(Batteriestatus);

Soweit funzt es ganz gut ABER:
1) Die SysVar "Batteriestatus" bleibt leer. Warum? :?:
2) Habe ich das Problem dass manche Geräte Kanal 2 (:2.BATTERY_STATE) verwenden. Wie kann ich dass lösen dass ich NICHT 2x foreach durchlaufen lassen muss?
3) Aktuell hat die SysVar den Typus "Zeichenkette". Wie funktioniert dass ganze mit dem Typus "Wertetabelle"?

Ich möchete ein Programm anlegen welches alle 24 Std. die SysVar mit den Aktuellen Spannungen aktualisiert. Möchte mir die Variable auf dem Startbildschirm meiner CCU2 anzeigen lassen.
Es geht mir nur um das Script, die Programme und Rest ist kein Problem.

Danke im Vorraus
Feyrgas Mortes
Zuletzt geändert von alchy am 14.11.2017, 15:08, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
I'm the REAL 'Master of Desaster' `;.;´

Cash
Beiträge: 1184
Registriert: 09.01.2016, 17:42
Wohnort: Sauerland
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Script: Batteriespannungen in Werteliste

Beitrag von Cash » 14.11.2017, 15:12

Code: Alles auswählen

string text = text # "- " # item.Name() # " hat: " # batvalue.ToString(1) # " V Spannung" # "\r\n";
Nimm dort mal das string weg.

Ich weiß nicht ob es daran liegt aber wenn man in einen Script eine Variable neue deklariert wird der vorige Wert gelöscht. Steht auch so in der Doku. Weiß nicht ob das in einer Schleife auch gilt.

Noch ein anderer Hinweis: Am Anfang ist es vielleicht total spannend den Batteriestatus ablesen zu können aber nach längerer Nutzung? Am Anfang bekam ich täglich eine Mail darüber. Nach ein paar Monaten habe ich es deaktiviert. Im Bedarfsfall kann ich per Button mir die Pushnachricht schicken lassen aber der Bedarf ist bei mir eigentlich nie da. Ich warte bis ich irgendwann die Meldung bekomme das ich die Batterie tauschen soll und danach tausche ich - fertig. Die Warnmeldung kamen bisher immer sehr zeitig so das ich mich darauf verlasse und nicht selber kontrolliere.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Script: Batteriespannungen in Werteliste

Beitrag von alchy » 14.11.2017, 16:08

Feyrgas Mortes hat geschrieben: Soweit funzt es ganz gut
ernsthaft? Kann ich mir aber nicht wirklich vorstellen.
Ok kann es nicht testen, aber ich habe da so meine theoretischen Zweifel. :shock:

Was kriegst du denn als Ausgaben?

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
Feyrgas Mortes
Beiträge: 3
Registriert: 14.11.2017, 13:58
Wohnort: Mörfelden-Walldorf

Re: Script: Batteriespannungen in Werteliste

Beitrag von Feyrgas Mortes » 14.11.2017, 21:22

alchy hat geschrieben: ernsthaft? Kann ich mir aber nicht wirklich vorstellen.
Ok kann es nicht testen, aber ich habe da so meine theoretischen Zweifel. :shock:

Was kriegst du denn als Ausgaben?

Alchy

Würde es tadellos funktionieren, hätte ich wohl kaum meine Frage gestellt. :wink:
Was nicht geht bzw. schön währe wenn es funktioniert (wenn machbar), habe ich ja geschrieben^^
Die Variable "text" enthält, leider nur, den letzten Thermostat/HKT der foreach-Schleife und die SysVar bleibt leer. :cry:
Cash hat geschrieben:

Code: Alles auswählen

string text = text # "- " # item.Name() # " hat: " # batvalue.ToString(1) # " V Spannung" # "\r\n";
Nimm dort mal das string weg.

Ich weiß nicht ob es daran liegt aber wenn man in einen Script eine Variable neue deklariert wird der vorige Wert gelöscht. Steht auch so in der Doku. Weiß nicht ob das in einer Schleife auch gilt.

Noch ein anderer Hinweis: Am Anfang ist es vielleicht total spannend den Batteriestatus ablesen zu können aber nach längerer Nutzung? Am Anfang bekam ich täglich eine Mail darüber. Nach ein paar Monaten habe ich es deaktiviert. Im Bedarfsfall kann ich per Button mir die Pushnachricht schicken lassen aber der Bedarf ist bei mir eigentlich nie da. Ich warte bis ich irgendwann die Meldung bekomme das ich die Batterie tauschen soll und danach tausche ich - fertig. Die Warnmeldung kamen bisher immer sehr zeitig so das ich mich darauf verlasse und nicht selber kontrolliere.
Danke für den Tipp, aber hat nicht geholfen.
Eine Mail oder Push-Nachricht möchte ich gar nicht bekommen, will sie nur auf der Startseite der CCU2 angezeigt bekommen :wink:
I'm the REAL 'Master of Desaster' `;.;´

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Script: Batteriespannungen in Werteliste

Beitrag von alchy » 14.11.2017, 22:57

Entschuldige, wollte dir weder etwas einreden noch wollte ich dich stören.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
Feyrgas Mortes
Beiträge: 3
Registriert: 14.11.2017, 13:58
Wohnort: Mörfelden-Walldorf

Re: Script: Batteriespannungen in Werteliste

Beitrag von Feyrgas Mortes » 15.11.2017, 08:14

alchy hat geschrieben:Entschuldige, wollte dir weder etwas einreden noch wollte ich dich stören.

Alchy
Keine Angst, du störst weder noch redest du mir was ein :wink:
Gegenteil, ich bin sogar Dankbar um Kritik/Hilfe von euch :D
I'm the REAL 'Master of Desaster' `;.;´

dtp
Beiträge: 10660
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 321 Mal
Danksagung erhalten: 501 Mal

Re: Script: Batteriespannungen in Werteliste

Beitrag von dtp » 15.11.2017, 08:54

Cash hat geschrieben: Nimm dort mal das string weg.
@Feyrgas Mortes: In eine Schleife gehören keine Variablendeklarationen hinein. Besser und sauberer ist es, solche Deklarationen grundsätzlich an den Beginn eines Skripts zu stellen. Zudem enthält Dein Skript eine geschlossene, geschweifte Klammer, zu der es kein Gegenstück gibt. Das Skript kann so also gar nicht funktionieren.

Versuch's mal so:

Code: Alles auswählen

var BatDev = dom.GetObject("Batteriebetrieb"); 
var item; 
string itemID; string text = ""; string channel_name; string batvalue; 

! Durch alle angemeldeten Geräte laufen
foreach(itemID, BatDev.EnumUsedIDs()){
  !Gerätedetails & Schnittstelle holen
  item = dom.GetObject(itemID);
    channel_name = dom.GetObject(item.DPByHssDP("BATTERY_STATE"));
    if(channel_name){
      batvalue = dom.GetObject(channel_name).Value();
 
      ! Text zusammensetzen
      text = text#"Spannung an "#item.Name()#": "#batvalue.ToString(1)#" V\n";
  }
}
WriteLine(text);

(dom.GetObject(ID_SYSTEM_VARIABLES).Get("Batteriestatus")).State(text);
Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Script: Batteriespannungen in Werteliste

Beitrag von alchy » 15.11.2017, 09:46

Feyrgas Mortes hat geschrieben:will sie nur auf der Startseite der CCU2 angezeigt bekommen
Hab ich doch glatt oben vergessen. :oops:
Da das Script nun dank dtp zumindest augenscheinlich lauffähig ist, bitte die Variable so NICHT zur Startseite hinzufügen.
Den Grund dafür kannst du >> H I E R << nachlesen.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
klana
Beiträge: 1099
Registriert: 08.02.2015, 08:37
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 66 Mal
Danksagung erhalten: 27 Mal

Re: Script: Batteriespannungen in Werteliste

Beitrag von klana » 17.11.2017, 17:19

Hi,

das Thema interessiert mich auch.
Ich habe das Script von dtp ausprobiert und bekomme nur die HeizkörperThermostate und die Wandthermostate ausgegeben.
In Batteriebetrieben sind aber noch viel mehr (Fensterkontakte, usw.).
Warum werden die nicht angezeigt bzw müssen die Batteriestände hier irgend wie anders ausgelesen werden?

Gruß
Klana
Gruß Klana
Es ist nett, wichtig zu sein. Aber es ist wichtiger, nett zu sein.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Script: Batteriespannungen in Werteliste

Beitrag von alchy » 17.11.2017, 18:34

Nicht alle Geräte die Batteriebetrieben sind, bieten auch die Möglichkeit die Spannung auszugeben.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic allgemein“