Nachdem die Hardware erledigt ist, geht es an die Software. 

Wir benötigen den Türkontakt irgendwie in ioBroker. Bei mir läuft das ganze über Zigbee mit dem deConz-Adapter. Wie ihr den Türkontakt einbinden müsst, hängt natürlich von eurem Protokoll ab.

Um die Nachricht auf das Handy zu bekommen, verwende ich den Telegram Messenger, dafür gibt es in ioBroker auch einen Adapter. 

Kurz erklärt: Ihr installiert Telegram auf dem Handy, dann sucht ihr nach „BotFather“, über den ihr einen neuen Bot anlegt und am Ende einen Api-Token erhaltet. Dazu gibt es jede Menge guter Anleitungen im Netz, ich erkläre das jetzt nicht ausführlich. Schaut einfach zum Beispiel hier. ( Link ). Diesen müsst ihr dann im der Telegram-Config in ioBroker eintragen.

Übrigens sollte ihr zwecks Sicherheit auch ein Kennwort vergeben.

Grundsätzlich brauchen wir jetzt eigentlich nur noch ein Script, das uns verrät, wenn jemand an der Türe klingelt. Vor meiner Türe hängt noch eine Kamera. In meinem Fall eine Steinel L600. Habt ihr noch die Möglichkeit, auf das Kamera-Bild zuzugreifen, kann ioBroker auch das Kamerabild per Telegram schicken. Darauf wollte ich hinaus. 

Auf den Kamera-Snaphot (nicht Stream) kommt ihr bei der Steinel über den Link:

http://xxx.xxx.xxx.xxx/webcapture.jpg?command=snap&channel=1

Jetzt müssen wir unserem Script nur noch beibringen, dass es auf den Tür-/Fensterkontakt in der Innenstation reagieren soll und uns per Telegram eine Nachricht sendet. Ich hab’s nicht so mit Blockly, deswegen schreibe ich meine Scripte per Hand in Javascript.

var request = require('request');
var fs = require('fs');


function sendImage() {
  request.get({url: 'http://xxx.xxx.xxx.xxx/webcapture.jpg?command=snap&channel=1', encoding: 'binary'}, function (err, response, body) {
    fs.writeFile("/tmp/snapshot.jpg", body, 'binary', function(err) {
      if (err) {
        //console.error(err);
      } else {
        sendTo('telegram.0', '/tmp/snapshot.jpg');
      }
    });
  });
}

on({id: 'deconz.0.Sensors.13.open', change: 'any'}, function (obj) {
  if (obj.newState.val === false || obj.newState.val === 'false'){
    sendTo('telegram.0', 'Türklingel wurde betätigt!');
    sendImage();
  }
});

Eigentlich ganz simple… Wir reagieren auf jede Statusänderung unseres Tür-/Fensterkontaktes deconz.0.Sensors.13.open, Wenn der Status = falsch (Kontakt offen ist falsch, also ist der Kontakt geschlossen), dann sende Telegram eine Nachricht und führe die Funktion sendImage aus.

on({id: 'deconz.0.Sensors.13.open', change: 'any'}, function (obj) {
  if (obj.newState.val === false || obj.newState.val === 'false'){
    sendTo('telegram.0', 'Türklingel wurde betätigt!');
    sendImage();

In sendImage holen wir uns das Kamerabild und Speichern es lokal.

request.get({url: 'http://xxx.xxx.xxx.xxx/webcapture.jpg?command=snap&channel=1', encoding: 'binary'}, function (err, response, body) {
    fs.writeFile("/tmp/snapshot.jpg", body, 'binary', function(err) {

War kein Fehler, sende uns das Bild per Telegram.

sendTo('telegram.0', '/tmp/snapshot.jpg');

Mehr ist es nicht. Im Messenger sieht das Ganze dann so aus: