Push-Nachrichten von DoorPi

  • In Verbindung mit meiner HomeMatic nutze ich den Push-Dienst Telegram, um mich zeitnah über Statusänderungen informieren zu lassen. Telegram hat den Vorteil, dass es nahezu für alle Betriebssysteme entsprechende Clients gibt. Dabei funktioniert Telegram im Wesentlichen wie z.B. WhatsApp, bietet aber zusätzlich so genannte Bots. Bots sind quasi virtuelle Teilnehmer, die über API-Keys angesteuert werden können, um Push-Nachrichten abzusenden. Dabei kann Telegram nicht nur mit Texten, sondern auch mit angehängten Dateien, wie z.B. Bildern, Tönen und Videos, umgehen.


    Das Einrichten eines Bots gestaltet sich recht einfach.


    Sofern man noch keinen Telegram-Account hat, läd man sich die Telegram-App oder das Telegram-Programm für sein OS herunter, gibt eine Telefonnummer an, an die die SMS mit dem Freischaltcode geschickt werden soll und schaltet sich einen Account frei.
    In der InApp-Suche gibt man dann einfach BotFather ein und startet anschließend mit


    Code
    1. /start

    einen Chat mit ihm.


    Über


    Code
    1. /newbot

    richtet man dann den Bot ein. Dazu fragt der Botfather nach einem Namen für den Bot (z.B. "DoorPi") und anschließend nach einem Usernamen, der immer auf "bot" oder "Bot" enden muss (z.B. "MeinDoorPiBot"). Das war's. Nun ist der Bot eingerichtet und man erhält vom BotFather eine Nachricht mit dem API-Schlüssel des Bots und mit einem Link (z.B. "telegram.me/MeinDoorPiBot").


    Damit der Bot Einem eine Nachricht schicken kann, muss man noch die chat_id des Empfängers, also von sich selbst, herausfinden. Dazu geht man zunächst in der App auf den vom BotFather gesenden Link, gibt entweder "/start" ein oder drückt unten auf den Start-Button und sendet eine kleine Nachricht an ihn (z.B. "Hallo Bot"). Im Anschluss startet man einen Browser und gibt folgendes ein:


    Code
    1. https://api.telegram.org/bot<API-Schlüssel des Bots>/getUpdates

    Achtung, die "<>" dienen lediglich der optischen Abgrenzung und sind folglich wegzulassen. Unter Linux wäre die Eingabe übrigens


    Code
    1. curl -s -X POST https://api.telegram.org/bot<API-Schlüssel des Bots>/getUpdates

    Nun sucht man in dem angezeigten String nach der ID des Chats. Diese steht in der Regel hinter "chat"; {"id":


    Soweit zu den Vorbereitungen.


    Um sich nun zum Beispiel von DoorPi eine Push-Nachricht schicken zu lassen, wenn dieser neu startet, erstellt man sich z.B. in dem Verzeichnis "/usr/local/etc/DoorPi/scripts" ein kleines Shell-Skript, nennen wir es mal "Startmeldung.sh", mit folgendem Inhalt:


    Code
    1. curl -s -k "https://api.telegram.org/bot<API-Schlüssel des Bots>/sendMessage" -d text="DoorPi gestartet" -d chat_id=<chatid>

    wobei "<API-Schlüssel des Bots>" der obige API-Key des Bots und "<chatid>" die ID des Chats sind.


    Beispiel:

    Code
    1. curl -s -k "https://api.telegram.org/bot12345678:SLSDJRtuDRTx39dSRe43455sSDFsiasdfS/sendMessage" -d text="DoorPi gestartet" -d chat_id=987654321

    Dem Shell-Skript abschließend noch mit


    Code
    1. sudo chmod 775 /usr/local/etc/DoorPi/scripts/Startmeldung.sh

    die entsprechenden Rechte zum Ausführen zuweisen.
    Um das Shellskript beim Start von DoorPi auszuführen, wird in der doorpi.ini folgender Eintrag ergänzt:


    Code
    1. [EVENT_OnStartup]
    2. 10 = sleep:1
    3. 20 = os_execute:/usr/local/etc/DoorPi/scripts/Startmeldung.sh

    Das war's. Viel Spaß beim Ausprobieren.


    Gruß,


    Thorsten

  • Ich mache im Zusammenhang mit meiner FHEM-Installation sowas ähnliches, allerdings benutze ich den Pushover Dienst.
    Damit kann man die Nachrichten fast genauso verschicken:


    Code
    1. curl -s -F token=XXXX user=XXXX title=$title message=$msg https://api.pushover.net/1/messages.json


    Das werde ich für den DoorPi auch nutzen. Es gibt da glaube ich noch einige weitere Dienste die sowas ähnliches machen.

  • Ja. Zum Beispiel Pushalot oder Prowl. Telegram bietet aber den Vorteil, dass man damit auch direkt Bilder versenden kann.


    Ich nutze z.B. in Verbindung mit dem DoorPi das RPi-Cam-Web-Interface. Einen Snapshot davon lasse ich mir beim Klingeln über das Shellskript "Klingelbild.sh" mit dem Inhalt


    Code
    1. wget -O /home/pi/Haustürklingel.jpg http://192.168.0.21:80/cam.jpg
    2. curl -s -k "https://api.telegram.org/bot<API-Schlüssel des Bots>/sendPhoto" -F chat_id=<chatid> -F photo="@/home/pi/Haustürklingel.jpg"


    in das Home-Verzeichnis von pi schieben und dann per Telegramm zusenden (nicht vergessen, die Rechte gemäß obiger Anleitung zu setzen).


    Der entsprechende Eintrag in der doorpi.ini lautet dann bei Nutzung von Pin 0 des PiFace-Moduls zur Erkennung der Klingelbetätigung:


    Code
    1. [EVENT_OnKeyPressed_onboardpins.0]
    2. 10 = os_execute:/usr/local/etc/DoorPi/scripts/Klingelbild.sh
    3. ...
    4. [onboardpins_InputPins]
    5. 0 = call:**610#611#612#613


    Gruß,


    Thorsten

  • Hi Thomas,


    das Problem ist, dass es zig Push-Dienste gibt und jeder irgendwie andere Parameter nutzt und Möglichkeiten bietet. Für die HomeMatic habe ich das hier mal für vier Dienste umgesetzt.


    Da erkennt man dann auch die Schwierigkeiten, wenn man es als integrierten Dienst anbieten möchte. Da aber die Konfiguration eigentlich kein Hexenwerk ist, würde ich es persönlich nicht direkt in DoorPi einbinden.


    Aber es ist natürlich letztlich Deine Entscheidung. :cool:


    Gruß,


    Thorsten

  • Hallo,


    ich fände es super wenn so eine Funktion von Haus aus dabei wäre!
    Habs mit dem programmieren nicht so :-(


    Das "Telegram" hört sich gut an, da es mit verschiedenen Formaten umgehen kann


    Grüße

    RaspberryPi B+, PiFace, Raspi NoIR Cam, USB-Sound, FritzBox 7390, FritzFon C4, Jessie, RPi-Cam Web-Interface, Telegram

  • Hallo,


    hab das gerade mal genau nach Anleitung eingerichtet...


    sehr geil!!!!


    DANKE!


    werd jetzt mal versuchen ob ich das auch hinbekomme...
    bei Klingelbetätigung ein Bild bzw. eine Bildfolge von 5 Bildern 500ms abstand wäre besser,
    aber das schaffe ich auf keinen Fall :-(

    RaspberryPi B+, PiFace, Raspi NoIR Cam, USB-Sound, FritzBox 7390, FritzFon C4, Jessie, RPi-Cam Web-Interface, Telegram


  • aber das schaffe ich auf keinen Fall :-(


    Na, aber...



    Wenn Du die Version von dtp nutzt, in der vorher ein Bild gemacht wird.

  • Ich fände eine Umsetzung, die zumindest kompatibel mit Telegram ist auch sehr interessant, da ich einer dieser völlig exotischen (und auch noch hochzufriedenen) Windows Phone (10) User bin. Ein Microsoft Surface benutze ich auch noch. Oftmals krankt es aber leider an der Verfügbarkeit von Apps auf dieser Plattform und Telegram ist zudem noch ein vielgenutzter Dienst der auch gepflegt wird.

  • Na, aber...



    Wenn Du die Version von dtp nutzt, in der vorher ein Bild gemacht wird.


    oke, doch so einfach... Danke
    aber eine Frage hätte ich..
    wieso 10, 11, 20, 21, ...
    und nicht 10, 11, 12, 13, ...


    /edit: und noch eine,
    geht das auch mit dem mjpg-streamer? den hab ich schon am laufen...

    RaspberryPi B+, PiFace, Raspi NoIR Cam, USB-Sound, FritzBox 7390, FritzFon C4, Jessie, RPi-Cam Web-Interface, Telegram

    Einmal editiert, zuletzt von j0j0182 ()

  • Du kannst die Nummer auch fortlaufend wählen...


    Zum Thema Integration in DoorPi


    Ich seh es genauso. Es gibt soviele verschiedene, alle einbinden ist viel Aufwand, und die Konfiguration von den Diensten ist wirklich ein Kinderspiel. Der eigentliche Aufwand ist das registrieren bei dem Dienst, dort alles einzurichten und herausfinden was die Token und User Id ist.
    Wenn das klar ist, braucht man nur noch ein einzeiliges Skript (siehe obige Beispiele), was man als Action ausführen muss.
    Vermutlich wär es sinnvoller, ein paar Tutorials die für jeden Dienst zeigen was gemacht werden muss. Wenn gewünscht kann ich für Pushover eins machen.



    Telegram ist wirklich ein sehr umfangreicher Push-Dienst. Hier mal ein Bild, wie's bei mir auf dem iPhone aussieht. Ich erhalte z.B. viele Statusinformationen über meine HomeMatic.


    Hehe, bei mir sieht es so ähnlich aus:
    [Blockierte Grafik: http://www.bernd-schubart.de/downloads/doorpi/IMG_3575.jpg]


    Ich glaube man kann bei Pushover auch ein Bild mitschicken, das werde ich gleich mal checken (hatte bis jetzt keine Notwendigkeit dies zu tun). Wenn nicht wär das ein echter Vorteil von Telegram.


  • Ich glaube man kann bei Pushover auch ein Bild mitschicken, das werde ich gleich mal checken (hatte bis jetzt keine Notwendigkeit dies zu tun). Wenn nicht wär das ein echter Vorteil von Telegram.


    Ich hatte Prowl, Pushover, Pushalot und Telegram installiert und getestet. Bilder kannst du meines Wissens nach nur direkt mit Telegram versenden. Die anderen Push-Dienste erlauben das leider (noch) nicht. Pushover bietet den Vorteil, dass man Texte in der App einfärben kann.


    Hier mal ein Beispiel für meine HomeMatic-Konfiguration:



    Telegram bietet aber die Vorteile, dass es komplett kostenlos ist, auf nahezu allen Plattformen läuft und auch eine ordentliche Verschlüsselung mitbringt. Ich hatte auch schon Kontakt mit den Leuten von Telegram, ob sie evtl. nicht mal die HTML-Tags für farbige Texte unterstützen wollen. Bisher gehen ja leider nur fett und kursiv markierte Texte. Sie denken drüber nach. ;)


    Bis dann,


    Thorsten
    [hr]
    Übrigens,


    möchte man eine Push-Nachricht per Telegram in fett gedruckten Buchstaben erhalten, wenn jemand an der Tür geklingelt hat, dann kann man dies mit folgendem String in einem entsprechenden Shell-Skript, nennen wir es zum Beispiel "Klingelnachricht.sh" erreichen:


    Code
    1. curl -s -k "https://api.telegram.org/bot<API-Schlüssel des Bots>/sendMessage" -d text="<b>Es hat an der Tuer geklingelt!</b>" -d chat_id=<chatid> -d parse_mode=html


    Das Skript dann noch in oben beschriebener Weise in die doorpi.ini einbinden:


    Code
    1. [EVENT_OnKeyPressed_onboardpins.0]
    2. 10 = os_execute:/usr/local/etc/DoorPi/scripts/Klingelnachricht.sh


    Wenn man bereits das obige Shellskript "Klingelbild.sh" verwendet, kann man die Kodezeile natürlich auch dort einbinden.


    Bis dann,


    Thorsten

  • Ja du hast Recht, Pushover kann scheinbar keine Bilder verschicken.


    Was geht ist, eine URL zu schicken, diese wird dann klickbar dargestellt und führt zu der entsprechenden Aktion, z.B. im Browser öffnen. Ich denke damit kann ich erstmal leben, da müsste ich mir nur was basteln dass z.B. Klingelbilder wo liegen wo sie zugreifbar sind. Das ist aber kein Problem da ich mein Smartphone so konfiguriert habe, dass bei Aufruf von bestimmten URLs automatisch eine VPN Verbindung aufgebaut wird.


    Also ich werde in jedem Fall erstmal bei Pushover bleiben, das wäre mir jetzt zu viel Aufwand alles auf was anderes umzustellen.


  • Also ich werde in jedem Fall erstmal bei Pushover bleiben, das wäre mir jetzt zu viel Aufwand alles auf was anderes umzustellen.


    Deswegen hatte ich für die HomeMatic das oben verlinkte zentrale Push-Nachrichten-Programm entwickelt. Ein Wechsel zu anderen Push-Diensten ist damit in recht kurzer Zeit erledigt. Für die vier erwähnten Push-Dienste ist es sogar nur noch das entsprechende Setzen einer einzigen Systemvariablen. Wenn mal ein Push-Dienst ausfällt, kann ich so innerhalb einer Sekunde alles auf einen anderen Push-Dienst "umleiten".


  • Hallo Thorsten,


    habe den mjpg-streamer durch das RPi Cam Web Interface ersetzt...


    aber wie bekomm ich da den automatischen Snapshot beim Klingeln hin???


    Grüße

    RaspberryPi B+, PiFace, Raspi NoIR Cam, USB-Sound, FritzBox 7390, FritzFon C4, Jessie, RPi-Cam Web-Interface, Telegram


  • habe den mjpg-streamer durch das RPi Cam Web Interface ersetzt...


    aber wie bekomm ich da den automatischen Snapshot beim Klingeln hin???


    Hab's selbst noch nicht getestet, aber es sollte eigentlich klappen mit dem Event


    Code
    1. 10 = take_snapshot:http://192.168.0.21:80/cam.jpg


    Wobei Du natürlich die IP-Adresse an Deine Gegebenheiten anpassen musst.


    Gruß,


    Thorsten

  • Oke, danke!


    das mit dem snapshot funktioniert...


    ... nur das mit dem versenden nicht...


    hier mal das, was in der /Klingelbild.sh steht


    wget -O /backup/record-video/Klingelbild.jpg http://192.168.183.34:9080/cam.jpg
    curl -s -k "https://api.telegram.org/botxxx/sendPhoto" -F chat_id=1xxx8 -F photo="@ /backup/record-video/Klingelbild.jpg"

    RaspberryPi B+, PiFace, Raspi NoIR Cam, USB-Sound, FritzBox 7390, FritzFon C4, Jessie, RPi-Cam Web-Interface, Telegram