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.

Homematic Nagios

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.