Homematic Systemvariablen mit Icinga überwachen
Die Idee hört sich natürlich etwas übertrieben an aber wenn man eh schon Nagios/Icinga betreibt so fand ich es naheliegend dies auch zu Überwachung von “Zuständen” in der Hausautomation zu verwenden.
Natürlich kann man das auch ohne Icinga machen aber dieses Werkzeug bietet schon viele nützliche Dinge für Benachrichtigung und Eskalation an, die man manuell erst mal nachbauen muss. Leider gibt es dazu bisher kaum oder gar keine Dokumentation so das hier erst mal eine hohe Lernkurve existiert hat.
Nach einigen Versuchen bin auf den Ansatz gekommen die Homematic XML Api zu verwenden. Für Icinga gibt es ein Plugin namens check_http_xpath.pl. Die Voraussetzungen für das Script sind:
apt-get install libxml-xpath-perl
Als nächstes muss man herausbekommen wo sich die gesuchte Homematic Systemvariable befindet. Mit
http://deine.ccu2.de/config/xmlapi/sysvarlist.cgi
bekommt man die Systemvariablen
<systemVariable name="BadFensterWarnung" variable="0" value="false" value_list="" ise_id="1580" min="" max="" unit="" type="2" subtype="2" logged="true" visible="true" timestamp="1423994575" value_name_0="0" value_name_1="1"/>
Wichtig ist die Zahl hinter ise_id. Den Wert diese Variablen kann man dann mit
http://deine.ccu2.de/config/xmlapi/state.cgi?datapoint_id=1580
bekommen:
<state><datapoint ise_id="1580" value="true"/></state>
Jetzt muss man nur noch den richtigen XPath raten/rausbekommen… (dabei kann einem diese Seite helfen )
./check_http_xpath.pl -H deine.ccu2.de -u '/config/xmlapi/state.cgi?datapoint_id=1580' -c '/state/datapoint[@ise_id="1580"]/@value==true'
OK: value=true|/state/datapoint[@ise_id="1580"]/@value=true
oder
CRITICAL: value=false(!=true)|/state/datapoint[@ise_id="1580"]/@value=false
So jetzt gilt es das ganze in Icinga einzubauen
define command{
command_name check_hm_bad
command_line /bin/sh -c "/your/path/to/check_http_xpath.pl -H deine.ccu2.de -u '/config/xmlapi/state.cgi?datapoint_id=1580' -c '/state/datapoint[@ise_id="1580"]/@value==false'"
}
define service{
use homematic-notification
active_checks_enabled 1
passive_checks_enabled 0
is_volatile 1
check_command check_hm_bad
host_name homematic
service_description Badezimmer-Fenster
}
Als nächstes steht dann eine angemessene “Eskalation” der Benachrichtigung an.
Eigentlich könnte man Perl Programm auch direkt aufrufen aber dann kommt es irgendwie zu einem Konflikt mit dem Icinga internen Perl Interpreter und man bekommt diese Fehlermeldung:
*ePN check_http_xpath.pl: "Subroutine LWP::UserAgent::get_basic_credentials redefined at (eval 2) line 258,".
Mit dem “/bin/sh -c” davor klappt es dann.