TCL Script für Batteriestatus

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
PeterF
Beiträge: 5
Registriert: 26.08.2016, 18:25

TCL Script für Batteriestatus

Beitrag von PeterF » 26.08.2016, 18:38

Hllo
Ich bin neu im Bereich Programmierung u TCL, Habe mir das Buch Hausautomation mit Homematic gekauft und Probier mich durch und hänge fest. Das Script scheint Fehlerfrei zu sein, aber ich kann kein passendes TCL Script finden. Kann mir jemand bitte helfen, im vorraus mal schönen Dank.

Hier das Script auf der Homematic

Code: Alles auswählen

var myAssembly = dom.GetObject("Batterie betrieben");

string itemID;
string text = "";
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 = "Prüfung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand folgender Batterien ist niedrig: \r\n\r\n" # text;
    MailText = MailText # "\r\nBitte tauschen Sie die Batterien zeitnah aus.";
 
    string stdout;
    string stderr;
    system.Exec("/etc/config/addons/email/email 06 ,"+MailText+"",&stdout,&stderr);
    dom.GetObject("Batt_Mldg").State(MailText);
}
    else
{ 
     string MailText;
      string sDate = system.Date("%d.%m.%Y");
     MailText = "Pruefung des Ladezustandes der Batterien vom " # sDate #".\r\n";
     MailText = MailText # " Der Ladezustand aller Batterien ist gut:\r\n\r\n" # text;
     string stdout;
    string stdout;
    string stderr;
    system.Exec("/etc/config/addons/email/email 06 ,"+MailText+"",&stdout,&stderr);
    dom.GetObject("Batt_Mldg").State(MailText);

}
jetzt brauch ich noch das TCL dazu

Danke
Zuletzt geändert von PeterF am 27.08.2016, 12:16, insgesamt 2-mal geändert.

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

Re: TCL Script für Batteriestatus

Beitrag von alchy » 26.08.2016, 23:36

Wenn du dieses Script so benutzen willst, musst du das Email Addon installieren oder auch >> H I E R <<

in den TCL Reiter musst du dann mindestens eine set Zeile eintragen die auf das Übergabeargument $argv 1 verweist,
also etwa so:

Code: Alles auswählen

set serviceliste [encoding convertfrom utf-8 [lindex $argv 1]]
in der Mailvorlage Nr.6 muss dann im Textfeld so etwas stehen.

Code: Alles auswählen

$serviceliste
Auch speichert das Script die Ausgabe desselben in der Systemvariablen Batt_Mldg (die du natürlich als Zeichenkettenvariable vorher auf der CCU anlegen musst !!!) .

was dir wiederum die Möglichkeit gibt, den Wert dieser Variable mittels des TCL Scriptes im Mailaddon auszulesen und in den Mailtext zu übernehmen, statt den oben beschriebenen Weg zu nehmen.

WENN du also in das Script so verwendest wie gepostet und im TCL Reiter dieses einträgst:

Code: Alles auswählen

set serviceliste [encoding convertfrom utf-8 [lindex $argv 1]]
load tclrega.so
array set values [rega_script {
var v1 = dom.GetObject("Batt_Mldg").Value(); 
} ]
set v1 [encoding convertfrom utf-8 $values(v1)]
und in der Mailvorlage Nr 6 folgendes einträgst

Code: Alles auswählen

Ausgabe des Batteriescriptes direkt:
$serviceliste

und über das Auslesen der Variable:
$v1
Und das Script dann ausführst, solltest du die Ausgabe des Scriptes doppelt erhalten.
Einmal mittels der direkten Übergabe und einmal durch Auslesen des Variableninhalts.

soweit dazu.

Summasummarum:
Das Script (woher ist das?) ohne es getestet zu haben, hat aber auf den ersten Blick einige Probleme.
So wird teilweise die falsche string concatenation verwendet usw. aber das nur rein technischer Hinweis.


Aber vor allem:

Natürlich musst du auch alle zu prüfenden Geräte zu den Favoriten, dem Gewerk ... Batterie betrieben hinzufügen, einer vergessen? na dann wird es auch nicht zur Meldung kommen :shock: .
Und
Es bedarf irgend eines Auslösers. Nehmen wir mal an, du benutzt dazu z.B. das Zeitmodul.
Also legst du ein Programm an, wenn täglich 18:00Uhr dann Script...
18:00 erhältst du somit eine Mail die dir mitteilt, das alles schick ist mit deinen Batterien.
Aber 18:05 melden mehrere Aktoren, das ihre Batterien zur Neige gehen. :shock:
O.K. du erfährst es den nächsten Tag, aber macht das Sinn?

Alchy

[EDIT]
und ich habe mir erlaubt, deinen Thread in ein passenderes Unterforum zu verschieben als "Informationen zum HomeMatic-Forum"
[/EDIT]

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.

PeterF
Beiträge: 5
Registriert: 26.08.2016, 18:25

Re: TCL Script für Batteriestatus

Beitrag von PeterF » 27.08.2016, 12:34

Hallo vorab vielen Dank
Das Script habe ich dem Buch Homematic Hausautomation abgeschrieben, ( hoffe keine Rechte zu verletzen )
Gewerk ist angelegt mit den Aktoren
Email ist installiert - bekomme auch ne Mail ( nach deinem Script ) wie folgt.
Ausgabe des Batteriescriptes direkt:
,Pruefung

und über das Auslesen der Variable:
null

Auslösen tue ich noch direkt um es eben zu Testen

Thx

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

Re: TCL Script für Batteriestatus

Beitrag von alchy » 27.08.2016, 13:24

PeterF hat geschrieben:Hallo vorab vielen Dank
Das Script habe ich dem Buch Homematic Hausautomation abgeschrieben, ( hoffe keine Rechte zu verletzen )
Ernsthaft :shock: . Hier geistern zig solcher Scripte rum, die auch funktiioonieren. Such mal im Forum z.B. nach v_lowbat
PeterF hat geschrieben: Gewerk ist angelegt mit den Aktoren
Email ist installiert - bekomme auch ne Mail ( nach deinem Script ) wie folgt.

Code: Alles auswählen

Ausgabe des Batteriescriptes direkt:
,Pruefung

und über das Auslesen der Variable:
null
Auslösen tue ich noch direkt um es eben zu Testen

Thx
,Pruefung
Die Meldung wird also abgeschnitten, da rächen sich auch schon die Fehler im Script.
Wie gesagt, habe dein Script nicht getestet und mir auch nicht näher angeschaut. Nur soweit es für die obige Anleitung nötig war. Bestehst du auf diese Version, oder schaust du nach Alternativen?

null erhältst du weil du nicht genau nach Anleitung vorgegangen bist. Schätzungsweise heisst deine Systemvariable nicht haargenau Batt_Mldg. Oder du hast den TCL Reiter anders?

Alchy
Zuletzt geändert von alchy am 27.08.2016, 23:02, insgesamt 1-mal geändert.
Grund: Falsches Quotetag korrigiert

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.

PeterF
Beiträge: 5
Registriert: 26.08.2016, 18:25

Re: TCL Script für Batteriestatus

Beitrag von PeterF » 27.08.2016, 14:19

Tcl Reiter und Batt_Mldg habe ich sicherheitshalber beides kopiert.
Bei den LOWBAT Skripten wird lt. dem schlauen Buch keine Heizthermostate abgefragt, deshalb habe ich ja auch versucht es damit um zu setzen.
Danke u Gruß

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

Re: TCL Script für Batteriestatus

Beitrag von alchy » 27.08.2016, 23:29

Ich bin mal theoretisch das Script durchgegangen und habe zumindest den Fehler der zum Abschneiden der Meldung geführt hat beseitigt.
Damit sollte zumindest die Meldung nicht mehr abgeschnitten werden nach dem ersten Wort.

Code: Alles auswählen

var myAssembly = dom.GetObject("Batterie betrieben");
string itemID;
string text = "";
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 = "Prüfung des Ladestandes der Batterien vom " # sDate # ".\r\n";
    MailText = MailText # "Der Ladezustand folgender Batterien ist niedrig: \r\n\r\n" # text;
    MailText = MailText # "\r\nBitte tauschen Sie die Batterien zeitnah aus.";
    dom.GetObject("Batt_Mldg").State(MailText);
    string stdout;
    string stderr;
    system.Exec("/etc/config/addons/email/email 06 '"#MailText#"'",&stdout,&stderr);
    
}
    else
{ 
    string MailText;
    string sDate = system.Date("%d.%m.%Y");
    MailText = "Pruefung des Ladezustandes 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);
    string stdout;
    string stderr;
    system.Exec("/etc/config/addons/email/email 06 '"#MailText#"'",&stdout,&stderr);
}
Wenn du den Code so wie ich ihn gepostet habe verwendest, dann bliebe noch die
Möglichkeit, das du noch ein weiteres Objekt (z.B. ein Programm oder ähnliches) Namens Batt_Mldg,
statt nur der einen Zeichenkettenvariable Namens Batt_Mldg in der CCU angelegt hast?
Wenn du mein Script benutzt hast schau bitte mal unter Status & Bedienung / Systemvariable nach wie der Inhalt der Variablen ausschaut und poste eventuell eine Bildschirmcopy davon.

WICHTIG. Diese Systemvariable NICHT auf der Startseite anzeigen lassen !!

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.

PeterF
Beiträge: 5
Registriert: 26.08.2016, 18:25

Re: TCL Script für Batteriestatus

Beitrag von PeterF » 28.08.2016, 15:17

Hmmh
jetzt hab ich es
Ich hätte eine Variable Batt_Mldg anlegen müssen ( und natürlich das TCL Script von Dir) und jetzt funzt es. Das war aus dem Buch für mich nicht klar das es diese variable auch braucht .Danke dir vielmals.
Meldung ist jetzt wie folgt

Ausgabe des Batteriescriptes direkt:
Pruefung des Ladezustandes der Batterien vom 28.08.2016.
Der Ladezustand aller Batterien ist gut:

- _Haustür: OK!
- Außenfühler: OK!
- Heizung Büro: OK!
- Heizung Esszimmer: OK!
- Heizung Flur: OK!
- Heizung Küche: OK!
- Heizung Partyraum: OK!
- Heizung Schlafzimmer: OK!
- Heizung Wohnzimmer: OK!
- Heizung-Bad: OK!
- HM-WDS30-OT2-SM LEQ1453846:5: OK!
- K_Badezimmer Fenster: OK!
- K_Balkontürkontakt: OK!
- K_Fenster Flur: OK!
- K_Kühlschrank Garage: OK!
- K_Schlafzimmer Fenster: OK!
- Rauchmelder Schlafzimmer OG: OK!


und über das Auslesen der Variable:
Pruefung des Ladezustandes der Batterien vom 28.08.2016.
Der Ladezustand aller Batterien ist gut:

- _Haustür: OK!
- Außenfühler: OK!
- Heizung Büro: OK!
- Heizung Esszimmer: OK!
- Heizung Flur: OK!
- Heizung Küche: OK!
- Heizung Partyraum: OK!
- Heizung Schlafzimmer: OK!
- Heizung Wohnzimmer: OK!
- Heizung-Bad: OK!
- HM-WDS30-OT2-SM LEQ1453846:5: OK!
- K_Badezimmer Fenster: OK!
- K_Balkontürkontakt: OK!
- K_Fenster Flur: OK!
- K_Kühlschrank Garage: OK!
- K_Schlafzimmer Fenster: OK!
- Rauchmelder Schlafzimmer OG: OK!

Danke nochmals

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

Re: TCL Script für Batteriestatus

Beitrag von alchy » 28.08.2016, 23:02

PeterF hat geschrieben:Hmmh
jetzt hab ich es
Ich hätte eine Variable Batt_Mldg anlegen müssen ( und natürlich das TCL Script von Dir) und jetzt funzt es. Das war aus dem Buch für mich nicht klar das es diese variable auch braucht .
Und wieso schreib ich dann eine Anleitung, wenn du nur dein Buch liest? :evil:
Hier steht es doch:
alchy hat geschrieben: Auch speichert das Script die Ausgabe desselben in der Systemvariablen Batt_Mldg (die du natürlich als Zeichenkettenvariable vorher auf der CCU anlegen musst !!!) .
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.

PeterF
Beiträge: 5
Registriert: 26.08.2016, 18:25

Re: TCL Script für Batteriestatus

Beitrag von PeterF » 29.08.2016, 16:42

War mein Fehler. Danke trotzdem

Antworten

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