Batteriestatus bestimmen/Restlaufzeit
Moderator: Co-Administratoren
-
- Beiträge: 169
- Registriert: 16.04.2019, 15:15
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 10 Mal
Batteriestatus bestimmen/Restlaufzeit
Moin zusammen,
ich möchte ein Script basteln, welches mir die aktuelle Spannung und den eingestellten Wert für "Low-Bat.-Schwelle" der Batterien von HmIP-Geräten auswirft. Ich habe da bisher nichts gefunden. Jemand eine Idee oder ein Muster?
Vielen Dank.
Stefan
ich möchte ein Script basteln, welches mir die aktuelle Spannung und den eingestellten Wert für "Low-Bat.-Schwelle" der Batterien von HmIP-Geräten auswirft. Ich habe da bisher nichts gefunden. Jemand eine Idee oder ein Muster?
Vielen Dank.
Stefan
Zuletzt geändert von Stefan0815 am 17.01.2021, 20:10, insgesamt 1-mal geändert.
Viele Grüße
Stefan
Stefan
-
- Beiträge: 169
- Registriert: 16.04.2019, 15:15
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 10 Mal
Re: Batteriestatus bestimmen
....sorry. Habe es selbst gefunden. Hier ein funktionierendes Beispiel von Black für Gerät "Absperrventil Taster":
Code: Alles auswählen
string stdErr=""; string stdOut="";
object oCHANNEL= dom.GetObject (ID_CHANNELS).Get ("Absperrventil Taster:0");
object oIFace= dom.GetObject (oCHANNEL.Interface () );
string sTCL= ^set p [xmlrpc ^ # oIFace.InterfaceUrl() # ^/ getParamset [list string \"^#oCHANNEL.Address ()#^\"] [list string \"MASTER\"]]; set r \"\"; ^;
sTCL= sTCL # "regexp {LOW_BAT_LIMIT ([\.0-9]*)} \$p matched sub1 ; append r \$sub1 \\t; ";
sTCL= sTCL # "puts \$r;";
system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'",&stdOut,&stdErr);
if (!stdErr) {
!- stdErr kein Leerstring: Fehler ist aufgetreten
!- Generierter Beispielcode für den Zugriff auf die ausgesuchten Parameter
real LOW_BAT_LIMIT= stdOut.StrValueByIndex ("\t",0).ToFloat ();
}
WriteLine ("Abstand bis Alarm: " # (channels.Get ("Absperrventil Taster:0").DPByHssDP ("OPERATING_VOLTAGE").Value()- LOW_BAT_LIMIT) # " V");
Viele Grüße
Stefan
Stefan
-
- Beiträge: 169
- Registriert: 16.04.2019, 15:15
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 10 Mal
Re: Batteriestatus bestimmen
...hier nun das erste Ergebnis für HmIP-Komponenten. Es wird eine Systemvariable "Batterielevel" vom Typ Zeichenkette benötigt. Dann kann man das Script täglich laufen lassen.
Ergebnis:
Dies ist die erste Version. Künftig wird die Liste noch sortiert und es soll auch eine Speicherung des Spannungsverlaufes geben, um eine Abschätzung der verbleibenden Laufzeit zu realisieren.
Ein besonderer Dank an Black memberlist.php?mode=viewprofile&u=12901. Ohne den Script Developer viewtopic.php?f=31&t=47049 wäre das nur schwer realisierbar.
Code: Alles auswählen
!- Batterielevel - V0.9 - bytelander
string device_str;
object device_obj;
object interface_obj;
string channel_str;
object channel_obj;
object channel_interface;
string stdErr="";
string stdOut="";
string output_txt="";
integer now = system.Date("%F %X").ToTime().ToInteger();
foreach(device_str, dom.GetObject(ID_DEVICES).EnumUsedIDs()){ !- durch alle Device
device_obj = dom.GetObject(device_str); !- Device-Object
interface_obj = dom.GetObject(device_obj.Interface());
if ((interface_obj.Name()=="HmIP-RF") && (device_obj.Name()!="HmIP-RCV-50")){ !- alle Device am Interface HmIP außer Virtuelle Fernbedienung der CCU3
foreach(channel_str, device_obj.Channels().EnumUsedIDs()){ !- durch alle Cannel
channel_obj = dom.GetObject(channel_str); !- Channel-Object
if (channel_obj.ChnNumber()==0) {
object channel_interface= dom.GetObject(channel_obj.Interface());
string sTCL= ^set p [xmlrpc ^ # channel_interface.InterfaceUrl() # ^/ getParamset [list string \"^#channel_obj.Address ()#^\"] [list string \"MASTER\"]]; set r \"\"; ^;
sTCL= sTCL # "regexp {LOW_BAT_LIMIT ([\.0-9]*)} \$p matched sub1 ; append r \$sub1 \\t; ";
sTCL= sTCL # "puts \$r;";
stdErr="";
stdOut="";
system.Exec ("/bin/sh -c 'echo \"load tclrpc.so; " # sTCL # "\" |tclsh'",&stdOut,&stdErr);
if (!stdErr) { !- stdErr kein Leerstring: Fehler ist aufgetreten
real low_bat_limit=stdOut.StrValueByIndex("\t",0).ToFloat();
if (dom.GetObject("HmIP-RF."+dom.GetObject(device_obj).Address()+":0.OPERATING_VOLTAGE").Type().ToString()!="object"){
real bat_voltage=dom.GetObject(device_obj.Name()+":"+channel_obj.ChnNumber().ToString()).DPByHssDP("OPERATING_VOLTAGE").Value().ToFloat();
}
else{
bat_voltage=0.0;
}
!- Ausgabe
output_txt=output_txt+device_obj.Name()+": ";
if (bat_voltage!=0.0){
output_txt=output_txt+(bat_voltage-low_bat_limit).ToString().Replace("00000","")+"V\t/\t";
output_txt=output_txt+"ist "+bat_voltage.ToString().Replace("00000","")+"V\t/\t";
}
output_txt=output_txt+"min "+low_bat_limit.ToString().Replace("00000","")+"V"+"\n";
}
}
}
} !- ENDE IF Interface-Type
} !- ENDE FOREACH alle Device
output_txt = output_txt.Trim();
output_txt = output_txt + "\n\n" + "letzte Aktualisierung: " +now.ToTime().Format("%d.%m.%Y %H:%M:%S Uhr");
!- WriteLine(output_txt);
dom.GetObject("Batterielevel").State(output_txt);
Ein besonderer Dank an Black memberlist.php?mode=viewprofile&u=12901. Ohne den Script Developer viewtopic.php?f=31&t=47049 wäre das nur schwer realisierbar.
Viele Grüße
Stefan
Stefan
-
- Beiträge: 15
- Registriert: 11.02.2021, 08:10
- System: CCU
Re: Batteriestatus bestimmen/Restlaufzeit
Danke stefan0815 dieses Script ist toll.
Aber leider bringt es mir seit ein paar Tagen keine Ergebnisse mehr.
Woran könnt das liegen?
Aber leider bringt es mir seit ein paar Tagen keine Ergebnisse mehr.
Woran könnt das liegen?
- Baxxy
- Beiträge: 11064
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 634 Mal
- Danksagung erhalten: 2293 Mal
Re: Batteriestatus bestimmen/Restlaufzeit
Die Frage wäre natürlich was sich bei Dir geändert hat.
Du könntest mal testweise Zeile 30...
Code: Alles auswählen
real bat_voltage=dom.GetObject(device_obj.Name()+":"+channel_obj.ChnNumber().ToString()).DPByHssDP("OPERATING_VOLTAGE").Value().ToFloat();
Code: Alles auswählen
real bat_voltage = dom.GetObject("HmIP-RF."# dom.GetObject(device_obj).Address() #":0.OPERATING_VOLTAGE").Value();
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
Re: Batteriestatus bestimmen/Restlaufzeit
Hallo Stefan,
ich möchte dein Skript in mein Programm kopieren, es wird aber nicht gespeichert!!
Habe schon mehrere Skripte aus dem Forum in meine Programme reinkopiert, bisher kein Problem.
Was kann das sein?
Danke dir Rüdiger
ich möchte dein Skript in mein Programm kopieren, es wird aber nicht gespeichert!!
Habe schon mehrere Skripte aus dem Forum in meine Programme reinkopiert, bisher kein Problem.
Was kann das sein?
Danke dir Rüdiger
-
- Beiträge: 9839
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 711 Mal
- Danksagung erhalten: 1666 Mal
Re: Batteriestatus bestimmen/Restlaufzeit
Das liegt am ^
Die original CCU Firmware kann das Zeichen nicht speichern.
Entweder auf RaspberryMatic umsteigen. die CCU patchen oder einen alternativen Editor wie Blacks SDV nutzen.
Evt. könnte hier auch der Trick funktionieren das Zeichen in einer Systemvariablen abzulegen, die SV im Skript auszulesen und in den String mit einzubauen. Bisschen Fummelsarbeit.
Die original CCU Firmware kann das Zeichen nicht speichern.
Entweder auf RaspberryMatic umsteigen. die CCU patchen oder einen alternativen Editor wie Blacks SDV nutzen.
Evt. könnte hier auch der Trick funktionieren das Zeichen in einer Systemvariablen abzulegen, die SV im Skript auszulesen und in den String mit einzubauen. Bisschen Fummelsarbeit.
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 +++
Re: Batteriestatus bestimmen/Restlaufzeit
Danke dir Michael,
aber das ist für mich nee Nummer zu groß:-(
Gruß Rüdiger
aber das ist für mich nee Nummer zu groß:-(
Gruß Rüdiger
- klana
- Beiträge: 1126
- Registriert: 08.02.2015, 08:37
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 77 Mal
- Danksagung erhalten: 32 Mal
Re: Batteriestatus bestimmen
Hallo Stefan0815,Stefan0815 hat geschrieben: ↑17.01.2021, 20:03...
Dies ist die erste Version. Künftig wird die Liste noch sortiert und es soll auch eine Speicherung des Spannungsverlaufes geben, um eine Abschätzung der verbleibenden Laufzeit zu realisieren.
...
hast du vielleicht deine "künftig" Vorhaben schon umgesetzt?
Gruß
Klana
Gruß Klana
no more signature
no more signature
-
- Beiträge: 169
- Registriert: 16.04.2019, 15:15
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 10 Mal