Batterieabfrage Script für IP funktioniert nicht

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

UKu
Beiträge: 53
Registriert: 13.01.2019, 16:16

Batterieabfrage Script für IP funktioniert nicht

Beitrag von UKu » 14.01.2019, 18:42

Hi,

das mitgelieferte Script funktioniert mit den "alten" Heizkörperthermostaten ohne Probleme. Lediglich steht anstelle des "Operating Voltage" eben "Battery State". Ist ja auch ein bekanntes Script hier aus dem Forum. Aber...
Mit meinen IP Geräten (Aussensensor (Temp/Feucht), Fensterkontakt und Thermostat) funktioniert es leider nicht. Es wird nichts ausgegeben. Ich benutze es für die IP Komponeneten so wie es unten zu sehen ist. Sie sind alle dem Gewerk "Batteriebetrieb IP" zugeordnet.

Was stimmt daran nicht?

Vielen Dank schon mal im voraus!

Code: Alles auswählen

var BatDev = dom.GetObject("Batteriebetrieb IP");
    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("OPERATING_VOLTAGE"));
        if(channel_name){
          batvalue = dom.GetObject(channel_name).Value();
     
          ! Text zusammensetzen
          text = text#" "#item.Name()#": "#batvalue.ToString(1)#" V";
      }
    }
    WriteLine(text);

    (dom.GetObject(ID_SYSTEM_VARIABLES).Get("Batteriestatus IP")).State(text);
HM seit 2015, Mac, CCU3 3.47.15, XML-Api 1.2, CUx-D 2.3.4, Historian 2.2.3, Alexa, HUE 2.1.9 (Dots)

Bratmaxe
Beiträge: 1573
Registriert: 28.05.2015, 12:48
Wohnort: Willich
Hat sich bedankt: 4 Mal
Danksagung erhalten: 10 Mal

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von Bratmaxe » 15.01.2019, 09:39

Soweit ich mich erinnere ist der Datenpunkt bei HM-IP "LOW_BAT" und nicht "Operating_Voltage".
Oder willst du den aktuellen Batterielevel auslesen?

Gruß Carsten
Gruß Carsten

UKu
Beiträge: 53
Registriert: 13.01.2019, 16:16

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von UKu » 15.01.2019, 10:21

Hi,

ja ich will die aktuelle Voltzahl haben.

Mir ist diesbezüglich noch etwas aufgefallen. Wenn man sich im Historian die Gewerkezuordnung anschaut gibt es zwischen den "alten" und den IP Geräten einen Unterschied. Wenn bei allen Kanälen (alte und IP) in der WEB UI das Gewerk zugeordnet wird, so erscheint bei den IP Geräten (Thermostat, TFK, Sensor Aussen) überall das Gewerk nur nicht bei den Datenpunkten. Bei den alten Geräten erscheint auch bei den Datenpunkten das Gewerk. Kann es vielleicht damit zusammen hängen?
HM seit 2015, Mac, CCU3 3.47.15, XML-Api 1.2, CUx-D 2.3.4, Historian 2.2.3, Alexa, HUE 2.1.9 (Dots)

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

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von alchy » 15.01.2019, 19:11

So wird es reichlich schwierig für dich ein Ergebnis zu erzielen. EQ-3 ist da nicht so konsequent.

Während der Datenpunkt BATTERY_STATE bei BidCos-RF (wenn überhaupt vorhanden, denn die meisten RF Batteriegeräte haben den ja nicht) in der Regel auf Kanal 2 liegt (z.B. HM-TC-IT-WM-W-EU) ist es bei HmIP-RF dann recht konsequent der Kanal 0.
Dafür haben dann auch viele nicht Batterie IP Geräte trotzdem den den OPERATING_VOLTAGE Datenpunkt.
Nun wirst du Schwierigkeiten haben, Gewerke und Räume usw. zur Vorselektierung zu verwenden.
Am einfachsten sollte es sein ohne Vorselektierung durch Gewerke o.ä. durch alle Datenpunkte zu rennen und die passenden dann auszufiltern.


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.

UKu
Beiträge: 53
Registriert: 13.01.2019, 16:16

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von UKu » 15.01.2019, 20:00

Vielen Dank Alchy für die Info. Ich dachte mir so etwas. Fragte aber lieber nochmal nach, da ich nicht so der Experte bin und bei Scripten auch Anfänger bin.

Hast Du zufällig einen Link zu so einem Script. Gibt es doch bestimmt schon hier. Ideal wäre natürlich das Selektieren der Datenpunkte "BATTERY_STATE" und "OPERATING_VOLTAGE" in einem Script.
HM seit 2015, Mac, CCU3 3.47.15, XML-Api 1.2, CUx-D 2.3.4, Historian 2.2.3, Alexa, HUE 2.1.9 (Dots)

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

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von alchy » 16.01.2019, 06:31

Ich wüsste nicht das es im Forum ein Script geben würde, vielleicht hab ich ja mal Lust auf einen 20Zeiler der die Geräte mit den Werten ausgibt.

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.

UKu
Beiträge: 53
Registriert: 13.01.2019, 16:16

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von UKu » 16.01.2019, 10:22

Moin Alchy,

ja das wäre toll. Mach mal wenn Du Zeit, Lust und Muse hast. Da wäre bestimmt nicht nur ich Dir dankbar.

Einen schönen Tag.
HM seit 2015, Mac, CCU3 3.47.15, XML-Api 1.2, CUx-D 2.3.4, Historian 2.2.3, Alexa, HUE 2.1.9 (Dots)

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

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von alchy » 16.01.2019, 14:30

Zeit Lust und Muse? auch noch zeitgleich? :mrgreen:

So sollte es auf die Schnelle funktionieren:
Das Script liest zu seiner Laufzeit die Batteriewerte der Sensorne RF & IP aus und speichert eine Liste in einer Systemvariable, falls vorhanden.

Code: Alles auswählen

! Batteriewerte aller Geräte ausgeben und in Systemvariable speichern
! v0.3 (c) by Alchy
var svout = "Name deiner Speichervariable"; ! Name der SystemVariablen Typ Zeichenkette wo gespeichert werden soll
! ++++++ Finger weg ++++++++++
string sDevId; string sChnId; string sDPId;string slist;integer count = 0;
foreach (sDevId, root.Devices().EnumUsedIDs()) {
        object oDevice = dom.GetObject(sDevId);
          foreach(sChnId, oDevice.Channels()) {
            object oChannel = dom.GetObject(sChnId);
             foreach(sDPId, oChannel.DPs().EnumUsedIDs()) {
               object oDP = dom.GetObject(sDPId);
				if(oDP.TypeName() == "HSSDP") { 
					if (  (oDP.HssType() == "BATTERY_STATE") ||  (oDP.HssType() == "OPERATING_VOLTAGE") && (!oDP.Value() == 0.0 ) ) 
						{
						count = count + 1 ;
						slist = slist#count#". "#oDevice.Name() #" Batteriespannung : "#oDP.Value().ToString(1)#" V \r\n";
						}
				}
			}
		}
}
 if ( (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(svout) ) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(svout).State(slist); WriteLine(slist #" \r\t in Variable: " #svout #" eingetragen");}else{WriteLine("\tAchtung: Variable: " #svout #" : für den Wert:\n"#slist #"\n\t nicht vorhanden");}
oder mit noch mehr sinnlosen Ausgaben:

Code: Alles auswählen

! Batteriewerte aller Geräte ausgeben und in Systemvariable speichern
! https://homematic-forum.de/forum/viewtopic.php?f=19&t=48398&p=485390#p485390
! v0.4 (c) by Alchy
var svout = "Name deiner Speichervariable"; ! Name der SystemVariablen Typ Zeichenkette wo gespeichert werden soll
! ++++++ Finger weg ++++++++++
string sDevId; string sChnId; string sDPId;string slist;integer count = 0; real rLast;string MasterValue = "unbekannt";
foreach (sDevId, root.Devices().EnumUsedIDs()) {
        object oDevice = dom.GetObject(sDevId);
          foreach(sChnId, oDevice.Channels()) {
            object oChannel = dom.GetObject(sChnId);
             foreach(sDPId, oChannel.DPs().EnumUsedIDs()) {
               object oDP = dom.GetObject(sDPId);
				if(oDP.TypeName() == "HSSDP") { 
                   if (  (oDP.HssType() == "BATTERY_STATE") ||  (oDP.HssType() == "OPERATING_VOLTAGE") && (!oDP.Value() == 0.0 ) ) {
				  
count = count + 1 ;
string MasterValue = "unbekannt";
if ( oDP.HssType() == "BATTERY_STATE")  { string MasterValueSet = xmlrpc.GetParamset(oChannel.Interface(), oDevice.Address(), "MASTER"); MasterValue =  MasterValueSet.Substr(MasterValueSet.Find("LOW_BAT_LIMIT") + 35, 8);}
if ( oDP.HssType() == "OPERATING_VOLTAGE") { string MasterValueSet = xmlrpc.GetParamset(oChannel.Interface(), oChannel.Address(), "MASTER"); MasterValue =  MasterValueSet.Substr(MasterValueSet.Find("LOW_BAT_LIMIT") + 35, 8);}
slist = slist #count #". "#oDevice.Name() #" - aktuelle Batteriespannung: "#oDP.Value().ToString(1)#"V - eingestelltes Limit: " #MasterValue.ToString(1) #"V - Differenz: "#(oDP.Value() - MasterValue.ToFloat() ).ToString(1)#"V\r\n";
				}
			}
		}
	}
}
if ( (dom.GetObject(ID_SYSTEM_VARIABLES)).Get(svout) ) { dom.GetObject(ID_SYSTEM_VARIABLES).Get(svout).State(slist); WriteLine(slist #" \r\t in Variable: " #svout #" eingetragen");}else{WriteLine("\tAchtung: Variable: " #svout #" : für den Wert:\n"#slist #"\n\t nicht vorhanden");}

Ist aber ein ziemlich sinnloses Unterfangen, da wie ich oben schrieb viele Batteriegeräte den Wert der Versorgungsspannung nicht bieten.
Außerdem ist es ja hoffentlich nur ein "Anzeigewunsch" Reagieren darauf ist doch eher Blödsinn. Da reagiere auf das Lowbat Flag mit Servicemeldung.

Alchy
Zuletzt geändert von alchy am 18.01.2019, 15:48, insgesamt 1-mal geändert.

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.

UKu
Beiträge: 53
Registriert: 13.01.2019, 16:16

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von UKu » 16.01.2019, 19:13

Hi Alchy,

super Danke, das Du Zeit und Lust hattest und die Muse Dich geküsst hat. :lol:

Ja, ich benutze es nur für Anzeigezwecke.

...und läuft! Vielen Dank. :P
HM seit 2015, Mac, CCU3 3.47.15, XML-Api 1.2, CUx-D 2.3.4, Historian 2.2.3, Alexa, HUE 2.1.9 (Dots)

UKu
Beiträge: 53
Registriert: 13.01.2019, 16:16

Re: Batterieabfrage Script für IP funktioniert nicht

Beitrag von UKu » 16.01.2019, 21:12

Lieber Alchy 8) ,

Gibt es noch die Möglichkeit einer alphabetischen Sortierung der Liste? Ich weiß, wünsch Dir was.... Aber ich kann ja mal fragen. :wink: Du als führender Scriptprofi.

Ich habe in meinem Script die Nummerrierung und die "Batteriespannung" aus der Anzeige gelöscht. Das brauch ich nicht. Gibt aber bestimmt Andere die es behalten wollen.
Hintergrund für die Sortierung ist, das ich einmal OG Geräte und einmal EG Geräte habe. Wäre toll wenn die alle sortiert untereinander stehen.


...vielleicht küsst Dich die Muse nochmal... :D
HM seit 2015, Mac, CCU3 3.47.15, XML-Api 1.2, CUx-D 2.3.4, Historian 2.2.3, Alexa, HUE 2.1.9 (Dots)

Antworten

Zurück zu „HomeMatic allgemein“