Zeit Lust und Muse? auch noch zeitgleich?
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