Script: Bilder von Überwachungskamera per Telegram

Aus aktuellem Anlass und weil es immer wieder nachgefragt wird habe ich mal in meinem ioBroker-Notizbuch gestöbert und ein „altes“ Script (hat mir schon über 4000 Bilder geschickt) ausgegraben und etwas hübsch gemacht.

Im Script geht es darum, dass mein ioBroker mir beim Auslösen des Bewegungsmelders im Vorgarten ein Bild per Telegram-Messenger schickt, im Abstand von jeweils 3 Sekunden noch zwei weitere Bilder aufnimmt und auf Nachfrage ebenfalls zusendet.

Für dieses Tutorial habe ich das Script dann noch etwas verfeinert und die Möglichkeit zum Deaktivieren der Benachrichtigung und einen anpassbaren Zeitintervall für die Aufnahme der zusätzlichen Bilder hinzugefügt.

Im Folgenden will ich nun kurz beschreiben wie Ihr mein Script einsetzen könnt und die einzelnen Parameter konfiguriert. Zuerst klären wir aber mal die Vorraussetzungen.

Voraussetzungen

Ich werde versuchen das Tutorial nach Möglichkeit vollständig “copy-and-paste-fähig” zu schreiben, trotzdem solltet ihr nach Möglichkeit schon etwas ioBroker-Erfahrung mitbringen. Ich beziehe mich natürlich auch hier wieder auf meine eigene ioBroker-Umgebung (ioBroker unter Docker auf der Synology DiskStation), was allerdings nicht bedeutet, dass dieses Tutorial nicht 1:1 auch auf anderen Systemen umgesetzt werden kann. Außerdem setze ich folgendes voraus:

  • eingerichtete IP-Kamera und Pfad zum Kamerabild (Standbild)
  • Bewegungsmelder und/ oder anderer Auslöser
  • funktionsfähige ioBroker-Installation
  • installierter und konfigurierter Javascript-Adapter (mehr Infos)
  • installierter und konfigurierter Telegram-Adapter (inkl. Bot-Einrichtung!) (mehr Infos)
  • installierter und konfigurierter Text2command-Adapter (mehr Infos)

Konfiguration Telegram-Adapter

Wenn ihr bisher eventuell den Telegram-Adapter nur zum Senden von Benachrichtigungen genutzt habt, müsst ihr ggf. noch eine Einstellung anpassen. Dies ist die Verknüpfung des Adapters mit dem Text2command-Adapter.

Zu finden ist die Option in den Einstellungen des Telegram Adapters unter „NACHRICHTEN > Text2Command-Instanz“. Hier bitte die Text2Command-Instanz, die ihr verwenden wollt auswählen und speichern.

Javascript anlegen und konfigurieren

Als nächstes einfach ein neues Javascript unter “Scripte” anlegen und die Zeilen aus dem Script hinter diesem Link hinein kopieren:

https://github.com/buanet/tutorials/blob/master/script-bilder-von-ueberwachungskamera-per-telegram/script.js

Die zu konfigurierenden Parameter im Script sollten eigentlich ausreichend kommentiert sein, sodass ich darauf hier wohl nicht weiter eingehen muss.

Hinweis: Solltet ihr das Verzeichnis für die Speicherung der Kameraaufnahmen übernehmen, so müsst ihr den Ordner vor der Inbetriebnahme noch anlegen. Dies geht am einfachsten über die Konsole (im Docker-Container) über den Befehl:
mkdir -p /opt/iobroker/temp/cam/

Konfiguration der Steuerbefehle im Text2Command-Adapter

Wenn ihr soweit alles richtig gemacht habt, dann sollte das Script euch nun bereits bei automatischer Auslösung das erste aufgenommene Bild zusenden. Damit Ihr aber z.B. weitere Bilder abfragen könnt, müssen noch ein paar Schlüsselworte und Aktionen im Text2Command-Adapter konfigurieren.

Dazu öffnet einfach die Adapter-Website und konfiguriert folgende Aktionen:

Im Einzelnen bildet das dann folgende Funktionen ab:

Mehr Bilder
Triggerworte: mehr bilder
Variablen-ID: javascript.0.notify.telegram.cam.trigger_more_img
Wert: true
Antwort: Geht los./Kommen sofort./OK.
Benachrichtigungen aktivieren
Triggerworte: kamera benachrichtigung einschalten/kamera benachrichtigung ein/kamera benachrichtigung aktivieren
Variablen-ID: javascript.0.notify.telegram.cam.disable
Wert: false
Antwort: Kamera Haustür: Benachrichtigung aktiv!
Benachrichtigungen deaktivieren
Triggerworte: kamera benachrichtigung ausschalten/kamera benachrichtigung aus/kamera benachrichtigung deaktivieren
Variablen-ID: javascript.0.notify.telegram.cam.disable
Wert: true
Antwort: Kamera Haustür: Benachrichtigung inaktiv!
Manuelle Auslösung
Triggerworte: kamera
Variablen-ID: javascript.0.notify.telegram.cam.trigger_manu
Wert: true
Antwort: Geht los./Kommt sofort./OK.

Von nun an sollte euch das Script bei jeder Auslösung ein Bild zusenden. Mit “Mehr Bilder” könnt ihr die anderen beiden Bilder abrufen. Mit dem Schlüsselwort “Kamera” löst ihr das Script manuell aus.
Über das Senden von z.B. “Kamera Benachrichtigung aus” oder “Kamera Benachrichtigung ein” könnt ihr das automatische zusenden ein- und ausschalten.
Natürlich könnt ihr die Schlüsselworte/ -phrasen nach Belieben gestalten. 🙂

Ich hoffe ihr könnt mit meinem kurzen Tutorial etwas anfangen. Bei Fragen und Anregungen zum Tutorial freue ich mich auf eure Kommentare. Bitte berücksichtigt, dass ich keinen individuellen Support per E-Mail leisten kann. Nutzt also bitte die öffentlichen Kanäle wie Kommentare, Foren oder Social Media. Gerne könnt ihr mich bei Bedarf auch per E-Mail oder Direktnachricht auf einen Post/ Thread/ Kommentar aufmerksam machen. Danke.

MfG,
André

About the author: André

André
Familienvater und bekennender Technik-Nerd. Beruflich unterwegs als Fachinformatiker für Systemintegration bei einem deutschen IT-Dienstleister. In der Freizeit begeisterter "Home-Automatisierer" bzw. "Smarthome-Bastler" und (zumindest bei schönem Wetter) gerne mit der Familie in verschiedenen Outdooraktivitäten unterwegs.
Abonnieren
Benachrichtige mich zu:
guest
23 Kommentare
Inline Feedbacks
View all comments
Oliver

Du hast hier mehrere Benutzer auf dem selben Bot. Wie hast du das hingekriegt? Sobald sich meine Frau anmeldet werde ich raus geschmissen und umgekehrt. Was könnte die Ursache sein?
Danke für die Hilfe

Murawski

Hi, ich habe 2 Fragen dazu 🙂

1) hat es schon einer hinbekommen eine kurze Video Sequenz zu erstellen anstatt ein Bild ?
2) kann man eine Verzögerung mit einbauen ? Also der Trigger kommt aber das Foto wird erst nach zum Beispiel 5 sekunden erstellt ?

Uwe

Würde gerne statt Bildern ein kurzes Video (Stream) erstellen und senden.

Stefan

Hallo, hab alles benötigte am laufen aber irgendwie will dein skript nicht laufen.

13:24:40.003 info javascript.0 (8602) Stop script script.js.Klingel.Bild_beim_klingeln_Bild_senden
13:24:40.106 info javascript.0 (8602) Start javascript script.js.Klingel.Bild_beim_klingeln_Bild_senden
13:24:40.106 error javascript.0 (8602) script.js.Klingel.Bild_beim_klingeln_Bild_senden compile failed: at script.js.Klingel.Bild_beim_klingeln_Bild_senden:12

ich hab leider auch keine Ahnung was ich falsch mache.

Hans

Hi, vielen Dank für die Funktion. Das erste Bild kommt perfekt an, bei „mehr Bilder“ kommt im Log aber nur: Object “ javascript.0.notify.telegram.cam.trigger_more_img“ does not exist!
Kann mir jemand helfen?

Anni

Hallo, großes Lob für diese gute Arbeit ! Tolle Idee und tolle Ausführung. Genau so etwas habe ich gesucht. Die Trigger-Objekte wurden bei mir zwar nicht durch das Skript angelegt, aber nach manueller Anlage läuft es prima. Ein kleines Problem habe ich aber noch: Wird der automatische Trigger ausgelöst, wird ein Bild versandt und Telegramm verbleibt in einem Dialogmodus. Dort wird dann kein weiteres Bild angezeigt, wenn der Trigger erneut anschlägt. Erst nach Klick auf „Danke“ ist Telegramm wieder bereit neue Bilder anzuzeigen. Da ich ja nicht immer Zeit habe, jedes Bild zu „bestätigen“ wäre es toll, wenn die Bilder… Mehr lesen »

Marc

Hi,
echt super gemacht!
Nachdem ich dem Ordner die passenden Rechte geben hatte und Text2Command auf den 2 Telegram Adapter gelegt hatte, hat das Script sofort und ohne Fehler funktioniert!
Danke für die Arbeit! 😉

Thomas

Vielen Dank für das Script! Bei mir (Dahua IP Cam’s) wurden leere Dateien angelegt. Per URL im Browser ging es zwar mit user und pw in der URL aber offensichtlich in request.get nicht. Meine Lösung (Fehlerbehandlung fehlt), vielleicht nützt es ja noch jemandem:

var USER = ‚admin‘;
var PASS = ’secretpassword‘;

request(cam_img , function (error, response, body) {
if ((error) || (response.statusCode !== 200)) {
// self.emit(„error“, ‚ERROR ON SNAPSHOT‘);
}
})
.auth(USER,PASS,false).pipe(fs.createWriteStream(img_path + ‚cam1_1.jpg‘));

Gruss, Thomas

Lucas

Hey,
vielen dank für die Anleitung.
Leider bin ich mit google und probieren nicht so wirklich weiter gekommen, aber gibt es auch eine Möglichkeit als Pfad die Raspberry Cam direkt zu integrieren?
Vielen Dank für eine Antwort.
Gruß Lucas

Alex

Nabend, habe mal etwas rumexperimentiert und ich benötigte beim auto trigger noch eine funktion die true wieder auf false setzt. habe es so gelöst: // trigger_auto
on(trigger_auto, function(dp) {
stateTrigger_auto = dp.newState.val;
stateDisable = getState(disable).val;
if (stateTrigger_auto === true && stateDisable === false) {
saveImage();
setStateDelayed( trigger_auto, false, true, parseInt(15000, 10), false);
}
});

Hoffe ist alles richtig funzt auf jeden fall