NEWS
[Frage] Bild per telegram verschicken?
-
Würde mich auch interessieren
Gesendet von meinem HUAWEI CRR-L09 mit Tapatalk
-
Ich bin auch sehr interessiert.
Problemstellung:
Raspi mit Raspicam. Wenn es klingelt, soll mir iobroker ein Bild per Telegram schicken.
Es besteht ja offenbar die Möglichkeit, per Chatbefehl an Telegram mit einem Bild der Raspicam zu antworten:
https://www.hackster.io/idreams/control … &offset=54
Meine Idee jetzt:
Einen Raspi mit der Raspicam ausrüsten, telegram installieren und den Bot bereit machen auf Befehle zu lauschen (Raspicam Foto aufnehmen und absenden).
Mit iobroker könnte man dann den Befehl "!photo" als Nachricht an den Bot schicken der wiederum mit dem Foto antwortet.
-
Es gibt neue Version von Telegram.
` > To send photo, just send a path to file instead of text:sendTo('telegram', 'absolute/path/file.png') ```` `
-
Große Klasse, Bluefox!!! Der absolute Knüller!!!
Mein iobroker läuft im Raspi 3 Jessie. Dort habe ich eine Raspicam angeschlossen.
Meine Homematic Klingel sendet schon immer per Pushover eine Nachricht, dass es geklingelt hat (gut wenn man im Garten ist, reagiert binnen 1-2 Sekunden!)
Habe jetzt noch den Befehl angehängt, dass er über exec ein Foto von der Raspicam erzeugen soll (das dauert leider 6 Sekunden), dann 6 Sekunden wartet, und dann das Foto per Telegramm verschickt. Warte ich nicht, verschickt er das vorhandene alte Foto.
Das heißt, ich bekomme per Pushover die Nachricht, dass es geklingelt hat und 6 Sekunden später das Foto. Nicht schön mit der langen Zeit, aber besser als nichts.
Gibt es noch Vorschläge, den Code zu verbessern/verschönern? Oder wie man die Cam schneller dazu bekommt, ein Foto zu machen? Evtl. aus einem immer laufenden Stream etwas herausschneiden? Hat da jemand Erfahrung?
// Grupppe Klingel/Pushover var idKlingel = "hm-rpc.0.MEQ004xxxx.1.PRESS_SHORT"/*Klingelsensor.PRESS_SHORT*/; // Homematic Klingelsensor on({id: idKlingel, val: true}, function() { // on lauscht auf Klingelsignal sendTo("pushover", "Es hat geklingelt"); // Sende Pushovernachricht exec ("raspistill -o cam.jpg"); // Erzeuge Photo von Raspicam unter /opt/cam.jpg sendphoto(); // Rufe Funktion sendphoto auf }); function sendphoto() { // Warteschleife, 6 Sekunden, damit das Bild erzeugt wird setTimeout(waittime, 6000); } function waittime() { // Nach der Warteschleife, sende das Bild per Telegram sendTo('telegram', "/opt/cam.jpg") }
Auf jeden Fall total cool, Danke Bluefox!
-
Hallo,
ich bedanke mich auch für das Update. Läuft super, vielen Dank!
Gruß
Pix
-
Hi, ich würde auch gerne das beim Klingeln an der Haustür ein Bild von meiner IPcam auf Telegram geschickt wird. Wo muss ich denn die Befehle eintragen ? Telegram habe ich per Iobroker admin installiert und eingerichtet.
-
Das funktioniert per Javascript-Adapter. Installiere diesen zuerst. Dann gehst du auf den neuen Reiter "Scripte" und legst ein neues Script an.
Mein Code (siehe mein Beitrag zuvor) holt sich ein Bild von der Raspicam. Wie man einen IP-Cam-Livestream kurz mitschneidet, weiß ich ehrlich gesagt nicht.
Es geht dann hauptsächlich um die Zeile
exec ("raspistill -o cam.jpg") // Erzeuge Photo von Raspicam unter /opt/cam.jpg
Die musst du entsprechend anpassen. Deine IP Cam könnte zB eine Schnappschussfunktion haben, den man per Webseitenaufruf anstößt, zB
> [http://192.168.1.44:88/cgi-bin/CGIProxy … d=Passwort](http://192.168.1.44:88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=User&pwd=Passwort)
bei der Foscam FI9900EP (lt. http://forum.iobroker.net/viewtopic.php … lit=stream)Dann musst du herausfinden wie lange es dauert vom Schnappschussaufruf bis zum speichern des Bildes (in meinem Code die 6000 für 6 Sekunden durch eine entsprechende Wartezeit ersetzen) und das war es dann.
-
Um es mal zu testen habe ich folgendes in den Java Skript eingegeben. Leider bekomme ich keine Nachricht.
// Grupppe Klingel/Pushover var idKlingel = "hm-rpc.0.MEQ0277xx7.1.PRESS_SHORT"/*Klingelsensor.PRESS_SHORT*/; // Homematic Klingelsensor on({id: idKlingel, val: true}, function() { // on lauscht auf Klingelsignal sendTo('telegram', 'Es hat geklingelt'); // Sende Pushovernachricht });
-
Ist in Telegram ein Bot eingerichtet und hast du vom Handy aus mal nach dem Namen des Unterbots gesucht und ihm etwas geschrieben? Nur so wird er aktiviert..
Gesendet von iPad mit Tapatalk
-
Den Bot habe ich in meinem Handy eingerichtet (gestartet, Passwort vergeben) er hat mich auch schon begrüßt (Halo Michael) oder muss ich ihn sonst noch aktivieren ?
-
Über den Botfather hast du ja sicher nach der Anleitung einen iobroker Bot eingerichtet. Den musst du in der Suche in der Telegram App finden und kurz ansprechen.
Ansonsten ist der Teleam Adapter korrekt eingerichtet?
Gesendet von iPad mit Tapatalk
-
Den Bot habe ich auch gefunden und wenn ich nachrichten schreibe werden sie in iobroker.admin / Objekte /Telegram / communicate/ request … in rot angezeigt
Also eingerichtet ist er meiner Meinung. Nur funktioniert der Script nicht beim Klingeln
-
ich bin ein Stück weiter. Die Nachrichten kommen auf Telegram an.
(Mein Fehler war: ich hatte die Scripte unter Global abgelegt und nicht unter common)
jetzt ist das Problem mit den Bildern noch da. Ich bekomme die Bilder nicht gespeichert.
! ````
// Grupppe Klingel/Torfoto
! var idKlingel = "hm-rpc.0.MEQ004XXX.1.PRESS_SHORT"/Klingelsensor.PRESS_SHORT/;
! on({id: idKlingel, val: true}, function() {
exec ("wget --output-document image.jpg http://IP:port/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=Cam&pwd=Passwort");sendTo("telegram", "Es hat geklingelt"); // Sende Pushovernachricht sendphoto(); // Rufe Funktion sendphoto auf
});
! function waittime() { // Nach der Warteschleife, sende das Bild per Telegram
sendTo('telegram', "image.jpg");
} -
ich bin ein Stück weiter. Die Nachrichten kommen auf Telegram an.
(Mein Fehler war: ich hatte die Scripte unter Global abgelegt und nicht unter common)
jetzt ist das Problem mit den Bildern noch da. Ich bekomme die Bilder nicht gespeichert.
! ````
// Grupppe Klingel/Torfoto
! var idKlingel = "hm-rpc.0.MEQ004XXX.1.PRESS_SHORT"/Klingelsensor.PRESS_SHORT/;
! on({id: idKlingel, val: true}, function() {
exec ("wget --output-document image.jpg http://IP:port/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr=Cam&pwd=Passwort");sendTo("telegram", "Es hat geklingelt"); // Sende Pushovernachricht sendphoto(); // Rufe Funktion sendphoto auf
});
! function waittime() { // Nach der Warteschleife, sende das Bild per Telegram
sendTo('telegram', "image.jpg");
}
```` `
Es kann sein, dass image.jpg woanders gespeichert wird. Versuch mal absolute Pfade zu verwenden. -
Also ich hole mir meine Fotos per download von der Kamera:
var Download = require('download'); var dest = '/images/'; var foto_url0 = "http://camip:port/++image?cameraNum=0&width=1280&height=720&quality=50"; new Download({mode: '777'}).get(foto_url0).dest(dest).rename("cam0.jpg").run() setTimeout(function(){ sendTo('telegram.0', '/images/cam0.jpg'); }, 12000);
Gruss
-
Das geht aber nur, wenn man sich nicht an der Cam authentifizieren muss.
Gesendet von iPhone mit Tapatalk
-
Habe gestern den js-controller auf Version 0.8.10 hochgezogen, funktioniert es bei euch noch ein Bild zu Telegram zu senden?
on({time: {hour: 9, minute: 6}}, function() { sendTo('telegram', '/opt/iobroker/foto/kamerabild.jpeg'); log("Foto verschickt"); });
Im log steht noch "Foto verschickt" aber es kommt nichts mehr an. Text schicken geht ohne Probleme
-
Bei mir ging und geht es. Neustart gemacht?
Gesendet von iPhone mit Tapatalk
-
Hmm ok.
Javascript Instanz und Telegram Adapter schon neu gestartet. Ich versuche mal noch nen kompletten Neustart.
Edit: Nein, leider kein Erfolg.
Cubie jetzt komplett neu gestartet, bringt leider auch nix. Laut Log sollte es verschickt werden, Pfad und Bild sind auch vorhanden.
Keine Ahnung wieso es plötzlich nicht mehr geht. Jemand noch ne Idee wo/wie ich den Fehler suchen kann?
-
Hi,
nachdem ich ein wenig mit Cam Bildern und telegramm experimentiert habe, möchte ich Euch das Script gerne mal zur Verfügung stellen.
Damit versende ich über Telegramm im Falle einer Sensorauslösung Einzel oder bei Alarm auch alle Webcam Bilder.
Damit das funktioniert, sollte Eure instar Cam im Webbrowser über folgenden Aufruf ein Bild anzeigen:
http://ip-der-cam/tmpfs/snap.jpg?usr=admin&pwd=instar
Das Verschicken funktioniert über das speichern eines JPG Files in IOBroker, dazu wird die Funktion "download" verwendet.
Ich habe ein wenig gebraucht rauszufinden, dass es eine extra JavaScript Funktion ist, die erst über das iobroker Terminal vorher manuell installiert werden muss.
(bin halt noch nicht so geübt und Anfänger in Java)
Dazu im IOBorker die Tablasche Terminal aufmachen und das eingeben:
npm install download
Danach bei Script Einstellungen "download" mit reinnehmen:
Anschließend das Script übernehmen und ein wenig an Eure Cams anpassen.
Im Script noch die IPs der Webcam anpassen bzw. beim Versenden aller WebCams dann die Anzahl der Cam Aufrufe anpassen.
// Script: TelegramBild // Script: Bild und Text per Telegram verschicken, wenn ein Sensor auslöst // Script: 15.05.2016 // Autor: thomassch // Grundidee: http://forum.iobroker.net/viewtopic.php?f=21&t=2609&p=24557&hilit=telegram#p24557 // IPCams: Instar 5907HD / 6012HD var logging = true; var Download = require('download'); // Modul Download muss in Javascript-Einstellungen vorhanden sein var dest = '/images/'; var foto_urlFlur = "http://192.168.2.1/tmpfs/snap.jpg?usr=admin&pwd=instar"; // IP Webcam Snapshot Innen Flur var foto_urlGarage = "http://192.168.2.2/tmpfs/snap.jpg?usr=admin&pwd=instar"; // IP Webcam Snapshot Garage var foto_urlGarten = "http://192.168.2.3/tmpfs/snap.jpg?usr=admin&pwd=instar"; // IP Webcam Snapshot Kellertür var foto_urlWohn = "http://192.168.2.4/tmpfs/snap.jpg?usr=admin&pwd=instar"; // IP Webcam Snapshot Wohnzimmer var txtaction = "..."; // Telegram Text if (logging) log("TelegramBild - Script start", "info"); // Funktion zum Versenden einer Meldung und Bild über Telegramm // myObj : Auslöseobjekt // myText : wird im Telegramm als Objekttext (Klartext) angezeigt // txtTrue : wird bei auslösen = 1 im Telegram angezeigt // txtFalse: wird bei auslösen = 0 im Telegram angezeigt (hier nicht verwendet) // txtOrt : Übergabe der WebCam Adresse // txtBild : lokaler Name für das Bild dass dann versendet wird // EInzelbild verschicken function xaktionCam(myObj, myText, txtTrue, txtFalse, txtOrt, txtBild) { if (logging) log("TelegramBild.xaktionCam - start", "info"); if (myObj.newState.val === true) { txtaction = txtTrue; // erst mal Text var myTel = myText + " " + txtaction; if (logging) log("TelegramBild.xaktionCam - state = 1: " + myTel, "info"); setState("telegram.0.communicate.response", myTel); // dann Bild verschicken new Download({mode: '777'}).get(txtOrt).dest(dest).rename(txtBild+".jpg").run() setTimeout(function(){ sendTo('telegram.0', dest+txtBild+'.jpg'); if (logging) log("TelegramBild.xaktionCam - Bild versendet" + dest+txtBild+'.jpg', "info"); }, 6000); // 6 sek warten bevor man das JPG verschickt } } // Alle Cams aufnehmen und verschicken function xaktionCamAlle(myObj, myText) { if (logging) log("xaktionCamAlle - start", "info"); if (myObj.newState.val === true) { // erst mal Text var myTel = myText; if (logging) log("TelegramBild.xaktionCamAlle - state = 1: " + myTel, "info"); setState("telegram.0.communicate.response", myTel); // dann Bild verschicken new Download({mode: '777'}).get(foto_urlFlur).dest(dest).rename("BildAlarmFlur"+".jpg").run() new Download({mode: '777'}).get(foto_urlGarage).dest(dest).rename("BildAlarmGarage"+".jpg").run() new Download({mode: '777'}).get(foto_urlGarten).dest(dest).rename("BildAlarmGarten"+".jpg").run() new Download({mode: '777'}).get(foto_urlWohn).dest(dest).rename("BildAlarmWohnzimmer"+".jpg").run() setTimeout( function() { sendTo('telegram.0', dest+"BildAlarmFlur"+'.jpg'); sendTo('telegram.0', dest+"BildAlarmGarage"+'.jpg'); sendTo('telegram.0', dest+"BildAlarmGarten"+'.jpg'); sendTo('telegram.0', dest+"BildAlarmWohnzimmer"+'.jpg'); }, 20000); // 20 sek warten bevor man das JPG verschickt } } // Auslöser on({id: "hm-rpc.0.LEQ1469465.1.STATE", val: true}, function(obj) { xaktionCam(obj, "Die Innentür wurde " ,"geöffnet","" , foto_urlFlur , "BildFlur"); }); // Innentür on({id: "hm-rpc.0.MEQ0100446.1.MOTION", val: true}, function(obj) { xaktionCam(obj, "Garten Bewegungsmelder " ,"ausgelöst","" , foto_urlGarten, "BildGarten"); }); // Garten on({id: "hm-rpc.0.MEQ0656769.1.PRESS_SHORT", val: true}, function(obj) { xaktionCam(obj, "Klingelsensor " ,"es klingelt","" , foto_urlGarage, "BildKlingel"); }); // Klingelsensor on({id: "hm-rpc.0.MEQ0812040.1.STATE", val: true}, function(obj) { xaktionCam(obj, "Garagentor " ,"wird geöffnet","" , foto_urlGarage, "BildGaragentor"); }); // Garagentor on({id: "hm-rpc.0.MEQ1408344.1.STATE", val: true}, function(obj) { xaktionCam(obj, "Waschraum Tür " ,"wird geöffnet","" , foto_urlGarage, "BildWaschRaumTuer"); }); // Waschraumtüre // AlarmEreignis on({id: "hm-rega.0.3047", change:"ne"}, function(obj) { xaktionCamAlle(obj, "!!! xxxx Alarm","ausgelöst xxxx !!!"); }); on({id: "hm-rega.0.1790", change:"ne"}, function(obj) { xaktionCamAlle(obj, "!!! Voralarm","ausgelöst!!!"); });
Jetzt fehlt mir eigentlich noch folgende Funktion:
1. Ich würde gerne die aktuell gemachten Bilder und auch die letzten 10 Bilder speichern und auf einer Vis Seite anzeigen
2. Eventuell bei Alarm für 10 Minuten, alle 15 sek Bilder erstellen und die ablegen - allerdings dann nicht auf IOBroker, sondern z.B. auf die Dropbox oder lokale NAS bei mir
3. mit dem Telegram auch gleich einen Link auf die Vis Webseite schicken
Vielleicht weiß jemand wie ich mit Javascript das JPG das ich gespeichert habe, gleich mal kopieren kann auf ein lokales Netzlaufwerk ???
Gruss
Thomas