Batterieprüfung

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

michaelapp
Beiträge: 19
Registriert: 16.05.2018, 22:54

Batterieprüfung

Beitrag von michaelapp » 16.09.2018, 11:08

Hallo zusammen,

ich habe das folgend Skript ein wenig abgeändert und entsprechend in meine UCC3 implementiert.

Code: Alles auswählen

! Email mit Ergebnis des Batteriechecks
!
! In die Systemvariable Batt_Mldg (TEXT) wird eben-
! falls der Mailtext kopiert.
! Kann natuerlich entfallen ....
!---------------------------------------------------
!
! Achtung: Besser CuXD System.exec verwenden!!!
!---------------------------------------------------

var myAssembly = dom.GetObject("Batterie");
string itemID;
string text = "";
string s_subj ="Batteriemeldung";
integer counter = 0;
            
foreach(itemID, myAssembly.EnumUsedIDs()) {
    var item = dom.GetObject(itemID);
    var device = dom.GetObject(item.Device());
    var interface = dom.GetObject(item.Interface());
    string interface_name = interface.Name();
    string device_address = device.Address();
    device_address = device_address.StrValueByIndex(":", 0);
    boolean condition = false;   
    if (device.HssType().Find("HM-CC-RT-DN")>=0)
    {
       string channel_name = interface_name # "." # device_address # ":4.FAULT_REPORTING";
       var channel = dom.GetObject(channel_name); 
       if ( (channel.State() == 6) )
       {
           condition = true;
       }
       else
       {
           condition = false;
       }        
    }
    else
    {
       string channel_name = interface_name # "." # device_address # ":0.LOWBAT";
       var channel = dom.GetObject(channel_name);  
       if ( (channel.State() == true) && (channel.Value() == true) )
       {
          condition = true;
       }
       else
       {
          condition = false;
       }
    }
    
    if (condition == true) {
        text = text # "- " # item.Name() # ": Bitte austauschen!\r\n";
        counter = counter + 1;
    }
    else
    {
        text = text # "- " # item.Name() # ": OK!\r\n";
    }
}

if ( counter > 0 ) {
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand einer oder mehrerer Batterien ist niedrig: \r\n\r\n" # text;
    MailText = MailText # "\r\nBitte tauschen Sie die Batterien zeitnah aus.";

dom.GetObject("Batt_Mldg").State(MailText);
dom.GetObject("Batt_Mldg_Pushover").State(MailText);
}
else
{
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand aller Batterien ist gut: \r\n\r\n" # text;

dom.GetObject("Batt_Mldg").State(MailText);
dom.GetObject("Batt_Mldg_Pushover").State(MailText);
}
Das Ergebnis der Abfrage schreibe ich in eine Variable uns schicke Sie mir via Pushover.

Bei meinem HmIP-SAM Gerät habe ich die "Low-Bat.-Schwelle" auf 2.95 gelegt und im Systemprotokoll zeigt er mir folgendes:

Code: Alles auswählen

Konfigurationsdaten zur Übertragung: Nein, RSSI Gerät 190, Batterie OK, Gerätekommunikation OK, Konfigurationsdaten zur Übertragung: Nein, Dutycycle OK, Batterie leer, Gerätekommunikation OK, RSSI Gerät 196, Wert Betriebsspannung in V: Normal, Sensor OK, Betriebsspannung in V 2.80, Fehlercode 0
In die Variable trägt er mir "- HmIP-SAM 000F18A98C9180:1: OK!" ein, was ja nicht korrekt ist.

Hat mir jemand einen Tip wie ich das Skript umbauen muss damit er den HmIP-SAM korrekt abfragt?

Gruß
Michael
Zuletzt geändert von Roland M. am 16.09.2018, 14:07, insgesamt 1-mal geändert.
Grund: Thema verschoben

dondaik
Beiträge: 9027
Registriert: 16.01.2009, 19:48
Wohnort: Steingaden

Re: Batterieprüfung

Beitrag von dondaik » 16.09.2018, 11:14

dann verschiebe das thema besser .... oben steht: keine fragen !
-------
wer schreibfehler findet darf sie behalten.

michaelapp
Beiträge: 19
Registriert: 16.05.2018, 22:54

Re: Batterieprüfung

Beitrag von michaelapp » 16.09.2018, 11:21

Stimmt überlesen :-(

Wie kann ich den Beitrag verschieben?

michaelapp
Beiträge: 19
Registriert: 16.05.2018, 22:54

Re: Batterieprüfung

Beitrag von michaelapp » 17.09.2018, 20:54

Hallo zusammen,

hab jetzt mal leere Batterien in den HmIP-SAM eingelegt und im Systemprotokoll zeigt er auch "Batterie leer" an:

Code: Alles auswählen

Konfigurationsdaten zur Übertragung: Nein, RSSI Gerät 196, Batterie leer, Gerätekommunikation OK, Konfigurationsdaten zur Übertragung: Nein, Dutycycle OK, Batterie leer, Gerätekommunikation OK, RSSI Gerät 192, Wert Betriebsspannung in V: Normal, Sensor OK, Betriebsspannung in V 2.60, Fehlercode 0
Die Ausgabe im Skript sagt aber das die Batterie noch ok sind:
HM.jpg
HM.jpg (13.94 KiB) 359 mal betrachtet
Hat mir jemand nen Tip?

Hier noch mal mein Skript:

Code: Alles auswählen

! Email mit Ergebnis des Batteriechecks
!
! In die Systemvariable Batt_Mldg (TEXT) wird eben-
! falls der Mailtext kopiert.
! Kann natuerlich entfallen ....
!---------------------------------------------------
!
! Achtung: Besser CuXD System.exec verwenden!!!
!---------------------------------------------------

var myAssembly = dom.GetObject("Batterie");
string itemID;
string text = "";
string s_subj ="Batteriemeldung";
integer counter = 0;
            
foreach(itemID, myAssembly.EnumUsedIDs()) {
    var item = dom.GetObject(itemID);
    var device = dom.GetObject(item.Device());
    var interface = dom.GetObject(item.Interface());
    string interface_name = interface.Name();
    string device_address = device.Address();
    device_address = device_address.StrValueByIndex(":", 0);
    boolean condition = false;   
    if (device.HssType().Find("HM-CC-RT-DN")>=0)
    {
       string channel_name = interface_name # "." # device_address # ":4.FAULT_REPORTING";
       var channel = dom.GetObject(channel_name); 
       if ( (channel.State() == 6) )
       {
           condition = true;
       }
       else
       {
           condition = false;
       }        
    }
    else
    {
       string channel_name = interface_name # "." # device_address # ":0.LOWBAT";
       var channel = dom.GetObject(channel_name);  
       if ( (channel.State() == true) && (channel.Value() == true) )
       {
          condition = true;
       }
       else
       {
          condition = false;
       }
    }
    
    if (condition == true) {
        text = text # "- " # item.Name() # ": Bitte austauschen!\r\n";
        counter = counter + 1;
    }
    else
    {
        text = text # "- " # item.Name() # ": OK!\r\n";
    }
}

if ( counter > 0 ) {
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand einer oder mehrerer Batterien ist niedrig: \r\n\r\n" # text;
    MailText = MailText # "\r\nBitte tauschen Sie die Batterien zeitnah aus.";

dom.GetObject("Batt_Mldg").State(MailText);
dom.GetObject("Batt_Mldg_Pushover").State(MailText);
}
else
{
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand aller Batterien ist gut: \r\n\r\n" # text;

dom.GetObject("Batt_Mldg").State(MailText);
dom.GetObject("Batt_Mldg_Pushover").State(MailText);
}
Gruß
Michael

michaelapp
Beiträge: 19
Registriert: 16.05.2018, 22:54

Re: Batterieprüfung -> Wildcard Abfrage

Beitrag von michaelapp » 18.09.2018, 10:13

Hallo zusammen,

bin gestern Abend ein wenig weiter gekommen.

Bei den alten IP Homematic Komponenten lautet der Datenpunkt ":0.LOW_BAT", bei den nicht IP Komponenten ":0.LOWBAT".

In meinem Skript frage ich folgendes ab:

Code: Alles auswählen

string channel_name = interface_name # "." # device_address # ":0.LOWBAT";
Gibt es die Möglichkeit eine Wildcard zu nutzen als z.b. ":0.LOW*" ?

Gruß
Michael

Bratmaxe
Beiträge: 834
Registriert: 28.05.2015, 12:48
Wohnort: Willich

Re: Batterieprüfung

Beitrag von Bratmaxe » 18.09.2018, 10:36

Nein das geht nicht, du kannst aber einfach versuchen, den anderen Datenpunkt abzufragen, wenn der erste nicht vorhanden ist.

Ist ein Auszug aus meinem Skript, und soll nur verdeutlichen was du machen musst

Code: Alles auswählen

! Hier zuerst auf den Datenpunkt 0.LOWBAT abfragen und in channel speichern
! Wenn channel == null dann versuche den HmIP Datenpunkt
if(!channel)
{
	channel_name = interface_name # "." # device_address # ":0.LOW_BAT";
	channel = dom.GetObject(channel_name);
}
CCU2 mit 81 Hm Geräten und 3 HmIP Geräte.
Davon 4 Selbstbau Aktoren (AskSinPP)

michaelapp
Beiträge: 19
Registriert: 16.05.2018, 22:54

Re: Batterieprüfung

Beitrag von michaelapp » 18.09.2018, 18:36

Hallo Bratmaxe,

danke für den Tip.

Kannst Du mir unter Umständen helfen das in mein Skript einzubauen?

Gruß
Michael

Bratmaxe
Beiträge: 834
Registriert: 28.05.2015, 12:48
Wohnort: Willich

Re: Batterieprüfung

Beitrag von Bratmaxe » 19.09.2018, 10:31

ICh kann es gerne versuchen, musst du mal dein komplettes Skript posten (oder per PN schicken), dann kann ich es gerne mal versuchen.. :D
CCU2 mit 81 Hm Geräten und 3 HmIP Geräte.
Davon 4 Selbstbau Aktoren (AskSinPP)

michaelapp
Beiträge: 19
Registriert: 16.05.2018, 22:54

Re: Batterieprüfung

Beitrag von michaelapp » 19.09.2018, 10:51

Hallo Bratmaxe,

super danke Dir !

Hier mein komplettes Skript:

Code: Alles auswählen

! Email mit Ergebnis des Batteriechecks
!
! In die Systemvariable Batt_Mldg (TEXT) wird eben-
! falls der Mailtext kopiert.
! Kann natuerlich entfallen ....
!---------------------------------------------------
!
! Achtung: Besser CuXD System.exec verwenden!!!
!---------------------------------------------------

var myAssembly = dom.GetObject("Batterie");
string itemID;
string text = "";
string s_subj ="Batteriemeldung";
integer counter = 0;
            
foreach(itemID, myAssembly.EnumUsedIDs()) {
    var item = dom.GetObject(itemID);
    var device = dom.GetObject(item.Device());
    var interface = dom.GetObject(item.Interface());
    string interface_name = interface.Name();
    string device_address = device.Address();
    device_address = device_address.StrValueByIndex(":", 0);
    boolean condition = false;   
    if (device.HssType().Find("HM-CC-RT-DN")>=0)
    {
       string channel_name = interface_name # "." # device_address # ":4.FAULT_REPORTING";
       var channel = dom.GetObject(channel_name); 
       if ( (channel.State() == 6) )
       {
           condition = true;
       }
       else
       {
           condition = false;
       }        
    }
    else
    {
       string channel_name = interface_name # "." # device_address # ":0.LOWBAT";
       var channel = dom.GetObject(channel_name);  
       if ( (channel.State() == true) && (channel.Value() == true) )
       {
          condition = true;
       }
       else
       {
          condition = false;
       }
    }
    
    if (condition == true) {
        text = text # "- " # item.Name() # ": Bitte austauschen!\r\n";
        counter = counter + 1;
    }
    else
    {
        text = text # "- " # item.Name() # ": OK!\r\n";
    }
}

if ( counter > 0 ) {
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand einer oder mehrerer Batterien ist niedrig: \r\n\r\n" # text;
    MailText = MailText # "\r\nBitte tauschen Sie die Batterien zeitnah aus.";

dom.GetObject("Batt_Mldg").State(MailText);
dom.GetObject("Batt_Mldg_Pushover").State(MailText);
}
else
{
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand aller Batterien ist gut: \r\n\r\n" # text;

dom.GetObject("Batt_Mldg").State(MailText);
dom.GetObject("Batt_Mldg_Pushover").State(MailText);
}
Gruß
Michael

Bratmaxe
Beiträge: 834
Registriert: 28.05.2015, 12:48
Wohnort: Willich

Re: Batterieprüfung

Beitrag von Bratmaxe » 19.09.2018, 10:58

Versuch mal bitte damit:

Code: Alles auswählen

! Email mit Ergebnis des Batteriechecks
!
! In die Systemvariable Batt_Mldg (TEXT) wird eben-
! falls der Mailtext kopiert.
! Kann natuerlich entfallen ....
!---------------------------------------------------
!
! Achtung: Besser CuXD System.exec verwenden!!!
!---------------------------------------------------

var myAssembly = dom.GetObject("Batterie");
string itemID;
string text = "";
string s_subj ="Batteriemeldung";
integer counter = 0;
            
foreach(itemID, myAssembly.EnumUsedIDs()) {
    var item = dom.GetObject(itemID);
    var device = dom.GetObject(item.Device());
    var interface = dom.GetObject(item.Interface());
    string interface_name = interface.Name();
    string device_address = device.Address();
    device_address = device_address.StrValueByIndex(":", 0);
    boolean condition = false;   
    if (device.HssType().Find("HM-CC-RT-DN")>=0)
    {
       string channel_name = interface_name # "." # device_address # ":4.FAULT_REPORTING";
       var channel = dom.GetObject(channel_name); 
	   !Wenn channel nicht gefunden wurde, auch nicht versuchen darauf zu zu greifen
	   if (!channel){
			if ( (channel.State() == 6) ){ condition = true; }
			else{ condition = false; }
		}	   
    }
    else
    {
		string channel_name = interface_name # "." # device_address # ":0.LOWBAT";
		var channel = dom.GetObject(channel_name);  
		! Datenpunkt der klassischen Hm Geräte konnte nicht gefunden werden, verusche HmIP Datenpunkt abzurufen	   
		if (!channel) {
			channel_name = interface_name # "." # device_address # ":0.LOW_BAT";
			channel = dom.GetObject(channel_name);  
		}
	   
		!Wenn channel nicht gefunden wurde, auch nicht versuchen darauf zuzugreifen
		if (!channel){
			if ( (channel.State() == true) && (channel.Value() == true) ) {	condition = true; }
			else { condition = false;}
		}
    }
    
    if (condition == true) {
        text = text # "- " # item.Name() # ": Bitte austauschen!\r\n";
        counter = counter + 1;
    }
    else
    {
        text = text # "- " # item.Name() # ": OK!\r\n";
    }
}

if ( counter > 0 ) {
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand einer oder mehrerer Batterien ist niedrig: \r\n\r\n" # text;
    MailText = MailText # "\r\nBitte tauschen Sie die Batterien zeitnah aus.";

dom.GetObject("Batt_Mldg").State(MailText);
dom.GetObject("Batt_Mldg_Pushover").State(MailText);
}
else
{
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand aller Batterien ist gut: \r\n\r\n" # text;

dom.GetObject("Batt_Mldg").State(MailText);
dom.GetObject("Batt_Mldg_Pushover").State(MailText);
}
CCU2 mit 81 Hm Geräten und 3 HmIP Geräte.
Davon 4 Selbstbau Aktoren (AskSinPP)

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“