t_logo

Projekte, Webserver

Über Telegram Messenger Raspberry Pi steuern

In diesem Tutorial wird das automatische Ausführen von Skripten auf Textbefehle via Telegram gezeigt, nachdem im vorherigen Tutorial die Installation auf dem Raspberry behandelt wurde. Dadurch kannst du bspw. den Status deines Pi’s von unterwegs mühelos abfragen oder Aktionen von der Ferne einfach über deinen Messenger ausführen.



Vorbereitung

Zunächst erstelle ich ein Skript, das meine Aktionen ausführt, bspw. möchte ich mein Pi herunterfahren, neustarten und die Uptime ausgeben können. Ich bevorzuge Python, aber natürlich ist jedes andere Skript auch möglich (z.B. bash).
Ich nenne mein Skript tg_actions.py.

sudo nano /home/pi/tg/tg_actions.py

Damit verschiedene Aktionen mit einem Skript ausführbar sein sollen, benutze ich Kommandozeilenargumente, sodass z.B. sudo python /home/pi/tg/tg_actions.py argument erkannt wird.

Die Liste ist beliebig erweiterbar, bspw. könnten auch die GPIO Pins ausgelesen werden

Telegram einrichten

Damit Telegram automatisch auf verschiedene Interaktionen (Empfangen von Texten/Bildern/etc.) reagieren kann, kann man ein Lua-Skript erstellen. Ein Beispielskript ist im Telegram Verzeichnis unter test.lua vorhanden. Ich werde diese Datei bearbeiten, da sie bereits vorgefertigte Funktionen zum Empfangen etc. hat.

sudo nano /home/pi/tg/test.lua

Da ich vorerst nur auf Textnachrichten reagieren möchte ist die Funktion on_msg_receive (msg) zu bearbeiten:

In den Zeilen 15, 22, 30, 36 und 39 rufe ich ein weiteres Skript auf. Dies ist nicht unbedingt notwendig; den alternativen Befehl habe ich in Zeile 14 geschrieben. Wer dennoch eine Antwort über ein Zusatzskript senden möchte, kann sich ein solches erstellen:

sudo nano ~/tg/send_script

Der Inhalt ist:

Damit beide Skripte entsprechende Rechte haben, vergeben wir diese:

sudo chmod +x ~/tg/send_script
sudo chmod +x ~/tg/tg_actions.py

Sollte dieses Skript bei jemandem nicht funktionieren, hat tazzie eine Alternative vorgestellt.

Achtung: Wichtig ist, dass die Nummer(n) der Sender mittels add_contact eingespeichert wurden, sonst kann keine automatische Antwort erfolgen.

Einige User berichten, dass es das lua Skript folgenden Fehler wirft: lua: /usr/share/lua/5.2/lgi/namespace.lua:149: Typelib file for namespace 'Notify' (any version) not found
Sollte das der Fall sein, muss der innere Teil von

-- Notification code {{{
...
-- }}}

aus der test.lua gelöscht werden.

 

Telegram starten

Das erstellte Skript muss nun mit dem Messenger gestartet werden, sodass es auf Nachrichten reagieren kann. Damit es im Hintergrund läuft kannst du es so starten:

screen -dmS TelegramCLI ~/tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-server.pub

Sollte ein Fehler erscheinen, musst du noch screen installieren, falls noch nicht getan:

sudo apt-get install screen

Hier mal ein Verlauf mit meinem Raspberry Pi.

 

Um es automatisch starten zu lassen, folge diesem Tutorial oder benutze Crontab:

crontab -e

An das Ende der Datei schreibst du folgende Zeile:

@reboot sleep 60 && screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub

 

Für die, die alles im Lua Skript machen wollen, gibt es eine schöne Lua GPIO Erweiterung.



, , , , , , ,


286 Kommentare

  1. tazzie sagt:

    Hallo !!!

    Hat sich seit der letzten Version was geändert ?
    Das bash-script funktioniert bei mir leider nicht.

    Git es eine Möglichkeit per Python eine Nachricht zu senden ?

    • Admin sagt:

      Hi,
      hast du schon mit einer älteren Version versucht (auf Github manuell downloadbar)?
      Wenn das Bash Skript funktioniert, ist es möglich in Python dieses einzubinden und so auch über Python Nachrichten zu senden.

    • tazzie sagt:

      Hallo …. gerade mal geschaut aber leider keine alte Version gefunden. Vielleicht muß ich doch warten bis das Parameter -e implementiert wird oder irgendwo eine für die aktuelle Version funktionierende Möglichkeit auftaucht (vielleicht funktioniert es aber auch nur bei mir wieder nicht 🙁 ….)
      Aber danke erstmal

    • Admin sagt:

      Hallo,
      hast du das vorherige Tutorial durchlaufen? Hat dort alles geklappt?
      Was für eine Fehlermeldung bekommst du denn, wenn du das Skript startest?

    • tazzie sagt:

      Hallo !
      Das telegram-cli ansich funktioniert, d.h. ich kann manuell Nachrichten versenden.
      Nun muss ich aber gleich noch bemerken, dass ich Liniux-Laie bin.
      Meine Verfahrensweise:

      #!/bin/bash
      /home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub <[warn] Epoll ADD(1) on fd 0 failed. Old events were 0; read change was 1 (add); write change was 0 (none): Operation not permitted
      >

      und das war´s dann.

      Gruß tazzie

    • Admin sagt:

      Hallo,
      sind die Pfade richtig? Bzw. hast du in der Zwischenzeit deine Nummer geändert oder sonstige Einstellungen verändert? TG speichert das alles in einem versteckten Ordner, was zu Komplikationen führen kann.

      Versuch mal in Zeile 3 anstatt deines Codes, diesen:
      msg $1 $2
      Und starte anschließend mit sudo bash new1.sh

  2. tazzie sagt:

    Hallo !!

    Nein, eigentlich habe ich nichts geändert.
    Die Ordner stimmen auch, ich kann ja beim direkten starten von ./telegram-cli auch Nachrichten versenden.
    Ich habe jetzt nochmal versucht wie du empfohlen hast, das Script wieder in msg $1 $2 geändert.
    Ich denke mal jetzt habe ich auch so ziemlich jede Kombination durch.
    Könnte es vielleicht doch an dem STDIN liegen ? Irgendwo im Netzt hatte ich auch schonmal eine Variante mit EOF gesehen. Habe es getestet, aber geht leider auch nicht.
    Hast du denn die aktuelle Version von Telegram (V1.0.3) ?
    Gruß tazzie

    • Admin sagt:

      Ich habe das Tutorial für Version 1.0 geschrieben, aber es sollte auch für die aktuelle funktionieren.
      Funktioniert bei dir das .lua Skript? Dort habe ich eine alternative Methode angegeben ( send_msg (msg.from.print_name, res) ).
      Ansonsten könntest du, wenn du über ./telegram-cli direkt versenden kannst, die Eingabe natürlich auch über ein Python Skript weiter geben.

      Die Pfade und Dateinamen stimmen aber alle?

    • tazzie sagt:

      Hallo !

      mh..da stehe ich jetzt etwas „auf dem Schlauch“ ?!

      Ich habe mich jetzt auf GitHub Seite nochmal umgesehen unter den Issues….dort habe ich eine Möglichkeit gefunden.

      Version:

      eine Bash-Datei erstellt mit (telegramsenden.sh):

      #!/bin/bash
      (echo "msg user#12345678 $1"; echo "quit") | /home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W

      (die Nummer nach „user#“ muss natürlich stimmen ! aus user_info + Kontaktname !)

      eine Python-Datei erstellt mit (testpython.py):

      #!usr/bin/env
      import os
      os.system("bash /home/pi/telegramsenden.sh Test")

      Aufruf zum testen im Raspberry:

      python testpython.py

      dann geht die Nachricht auch raus.

      Vielleicht ein „unsauberer“ Weg, aber wenn es klappt 😉

      Eventuell hilft es ja anderen weiter.

      Vielen Dank nochmals.

      Weitere Vorschläge natürlich Willkommen !!!!

    • Admin sagt:

      Danke für das posten, vielleicht hilft es anderen die das selbe Problem haben 🙂

    • Gerald sagt:

      Das Beispiel funktioniert auch bei mir.
      Mein Programm muß ich wegen der GPIO-Nutzung allerdings mit sudo starten.
      Damit ändert sich der Pfad von
      I: config dir=[/home/pi/.config/telegram-cli]
      in
      I: config dir=[/root/.telegram-cli]
      Telephone number (with ‚+‘ sign): *** Can not send code

      Gibt es auch mit sudo eine Möglichkeit, oder muß ich mein Programm auf wiringPi umstellen?

    • Felix sagt:

      Wenn sich der Config Ordner ändert könntest du die telegram_CLI mit sudo starten und deinen Account einrichten. Dann sollten die Einstellungen auch dort gespeichert sein (Achtung: [noch] nicht getestet).
      Ansonsten kannst du (ohne sudo) Telegram starten und aus der lua-Datei ein (Bash-)Skript aufrufen, welches wiederum deinen eigentlichen Code mit sudo aufruft.

    • Gerald sagt:

      danke für den Tipp, das hat funktioniert !
      sudo bin/telegram-cli -k tg-server.pub
      hier wird noch einmal die Telefonnummer eingegeben
      sudo python telegramsenden.py
      sendet dann die Nachricht über telegramsenden.sh

  3. APFMH sagt:

    So, bin auch hier deiner Anleitung gefolgt.
    Mit dem Befehl lässt sich direkt aus der Konsole eine Nachricht verschicken:
    pi@raspberrypi ~ $ echo ‚msg user#XXXX blubb‘ |./tg/bin/telegram-cli -k tg/tg-server.pub

    Jetzt bin ich dabei das Lua Skript mit dem Antworten auf ein bestimmten Befehl einzurichten:

    pi@raspberrypi ~ $ ./tg/bin/telegram-cli /tg/telegram -s ~/tg/test.lua -k tg/tg-server.pub
    Telegram-cli version 1.0.6, Copyright (C) 2013-2014 Vitaly Valtman
    Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show_license' for details.
    I: config dir=[/home/pi/.telegram-cli]
    HI, this is lua script
     *** lua: /home/pi/tg/test.lua:60: module 'lgi' not found:
    	no field package.preload['lgi']
    	no file '/usr/local/share/lua/5.2/lgi.lua'
    	no file '/usr/local/share/lua/5.2/lgi/init.lua'
    	no file '/usr/local/lib/lua/5.2/lgi.lua'
    	no file '/usr/local/lib/lua/5.2/lgi/init.lua'
    	no file './lgi.lua'
    	no file '/usr/share/lua/5.2/lgi.lua'
    	no file '/usr/share/lua/5.2/lgi/init.lua'
    	no file './lgi.lua'
    	no file '/usr/local/lib/lua/5.2/lgi.so'
    	no file '/usr/lib/arm-linux-gnueabihf/lua/5.2/lgi.so'
    	no file '/usr/lib/lua/5.2/lgi.so'
    	no file '/usr/local/lib/lua/5.2/loadall.so'
    	no file './lgi.so'
    pi@raspberrypi ~ $

    Noch tut sich da gar nichts. Irgendwas am test.lua scheint nicht zu passen, habe es nach der Anleitung oben angepasst.

    Gruß und schon mal danke für die Hilfe.

    • Admin sagt:

      Hi,
      also das Problem scheint an der Lua Version zu liegen (5.2), hier hat jemand ein ähnliches Problem und konnte es lösen, in dem er die lua Version 5.1 installierte.

      Versuch es mal damit:
      sudo apt-get install lua5.1 liblua5.1-0-dev

    • APFMH sagt:

      Da stand auch das man das ganze mit folgendem Befehl beheben kann:
      sudo apt-get install lua-lgi

      Die Fehlermeldung ist jetzt weg, dafür habe ich eine neue:
      pi@raspberrypi ~ $ ./tg/bin/telegram-cli /tg/telegram -s ~/tg/test.lua -k tg/tg-server.pub
      Telegram-cli version 1.0.6, Copyright (C) 2013-2014 Vitaly Valtman
      Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license‘.
      This is free software, and you are welcome to redistribute it
      under certain conditions; type `show_license‘ for details.
      I: config dir=[/home/pi/.telegram-cli]
      HI, this is lua script
      *** lua: /usr/share/lua/5.2/lgi/init.lua:51: Typelib file for namespace ‚GLib‘, version ‚2.0‘ not found
      pi@raspberrypi ~ $

    • Admin sagt:

      lass mal den Punkt und das Slash weg und schreib stattdessen, /home/pi/tg/..
      Der Fehler ist wahrscheinlich wegen dem falschen Pfad: (I: config dir=[/home/pi/.telegram-cli])

    • APFMH sagt:

      Keine Änderung. 🙁
      pi@raspberrypi ~ $ /home/pi/tg/bin/telegram-cli /home/pi/tg/telegram -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub
      Telegram-cli version 1.0.6, Copyright (C) 2013-2014 Vitaly Valtman
      Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license‘.
      This is free software, and you are welcome to redistribute it
      under certain conditions; type `show_license‘ for details.
      I: config dir=[/home/pi/.telegram-cli]
      HI, this is lua script
      *** lua: /usr/share/lua/5.2/lgi/init.lua:51: Typelib file for namespace ‚GLib‘, version ‚2.0‘ not found
      pi@raspberrypi ~ $

    • Admin sagt:

      Hmm, vermutlich gibt es ein/mehrer Funktionen in der vorherigen Version nicht, die gebraucht werden.
      Ich werde mich nochmal erkundigen, woran das liegen kann. In der Zwischenzeit kannst du dein Problem ja dem Entwickler posten: https://github.com/vysheng/tg/issues

  4. APFMH sagt:

    Habe das ganze mal beim Entwickler gemeldet, siehe hier:
    https://github.com/vysheng/tg/issues/299

    • APFMH sagt:

      Hast du eine Ahnung, was der Entwickler gerade von mir hören möchte?

    • Admin sagt:

      Schreib ihm doch, dass du mit der ursprünglichen lua Version Probleme hattest und daher eine andere installiert hast, wonach der Fehler jetzt geworfen wird.

    • SNert sagt:

      Hallo APFMH,

      hast du das Problem gelöst bekommen?
      Ich habe gerade das selbe. Komme einfach nicht weiter.

  5. Nils sagt:

    Super Anleitung das einzige was nicht möchte ist der Uptime Befehl der nicht möchte, bei den anderen Befehlen kommen zwar Fehler z.b. beim shutdown:

    [15:33] xxxxx >>> Shoutdown
    >
    Broadcast message from root@raspberrypi (pts/0) (Tue Oct 28 15:34:38 2014):
    The system is going down to maintenance mode NOW!
    ./send_script: Zeile 2: Syntaxfehler beim unerwarteten Wort `newline‘
    ./send_script: Zeile 2: `/root/tg/bin/telegram-cli -k /root/tg/tg-server.pub<'

    nehme ich das "<"weg geht es gar nicht erst.

    Hat jemand zufällig die Lösung für das Problem?

    Gruß Nils

    • Admin sagt:

      Dankeschön 🙂
      was mir auffällt: der Befehl heißt shutdown (ohne ou)
      ich werde mir die neue Version gleich mal ansehen und schauen, woran es liegen könnte.

      LG
      Felix

    • Nils sagt:

      Ja der Befehl shutdown wurde auch von mir so an und eingeben in der Cli erscheint er halt so.

      Funktionieren tut er aber wie er soll nur halt der Uptime nicht.

    • Admin sagt:

      Also ich habe es gerade nochmal mit der neuen Version getestet, aber bei mir gibt es keinen Fehler. Hast du das Skript eins zu eins kopiert?

    • Nils sagt:

      ja deswegen verwundert es mich ja, ich werde das noch einmal versuchen und schauen Feedback folgt.

      Lg

      Nils

  6. Nils sagt:

    Also gleiche Vorgehensweise und wieder Funktioniert der eine Befehl und mein Pi antwortet mir auch nicht so wie es deiner machen tut.

    Hast du da ne Lösung parat kann dir auch sonst mal die Dateien als Inhalt anhängen.

    Lg Nils

    • Admin sagt:

      ja das wäre gut, wenn du das Skript als Datei mal anhängen könntest, dann teste ich es mal und geb dir Bescheid.

  7. Nils sagt:

    send script

    #!/bin/bash
    /root/tg/bin/telegram-cli -k /root/tg/tg-server.pub<
    msg $1 $2
    quit
    STDIN

    test.lua

    started = 0
    our_id = 0
    
    function vardump(value, depth, key)
      local linePrefix = ""
      local spaces = ""
      
      if key ~= nil then
        linePrefix = "["..key.."] = "
      end
      
      if depth == nil then
        depth = 0
      else
        depth = depth + 1
        for i=1, depth do spaces = spaces .. "  " end
      end
      
      if type(value) == 'table' then
        mTable = getmetatable(value)
        if mTable == nil then
          print(spaces ..linePrefix.."(table) ")
        else
          print(spaces .."(metatable) ")
            value = mTable
        end		
        for tableKey, tableValue in pairs(value) do
          vardump(tableValue, depth, tableKey)
        end
      elseif type(value)	== 'function' or 
          type(value)	== 'thread' or 
          type(value)	== 'userdata' or
          value		== nil
      then
        print(spaces..tostring(value))
      else
        print(spaces..linePrefix.."("..type(value)..") "..tostring(value))
      end
    end
    
    print ("HI, this is lua script")
    
    function ok_cb(extra, success, result)
    end
    
    function on_msg_receive (msg)
      if started == 0 then
        return
      end
      if msg.out then
        return
      end
      do_notify (get_title (msg.from, msg.to), msg.text)
    
      if (msg.text == 'ping') then
        if (msg.to.id == our_id) then
          send_msg (msg.from.print_name, 'pong', ok_cb, false)
        else
          send_msg (msg.to.print_name, 'pong', ok_cb, false)
        end
        return
      end
      if (msg.text == 'PING') then
        if (msg.to.id == our_id) then
          fwd_msg (msg.from.print_name, msg.id)
        else
          fwd_msg (msg.to.print_name, msg.id)
        end
        return
      end
    end
    
    function on_our_id (id)
      our_id = id
    end
    
    function on_user_update (user, what)
      --vardump (user)
    end
    
    function on_chat_update (chat, what)
      --vardump (chat)
    end
    
    function on_secret_chat_update (schat, what)
      --vardump (schat)
    end
    
    function on_get_difference_end ()
    end
    
    function cron()
      -- do something
      postpone (cron, false, 1.0)
    end
    
    function on_binlog_replay_end ()
      started = 1
      postpone (cron, false, 1.0)
    end
    
    function on_msg_receive (msg)
      --Damit der "Gelesen Haken" erscheint
      mark_read (msg.from.print_name)
     
      if (msg.from.phone == nil) then return end
     
      --Ggf. nur eine Rufnummer zulassen:
      if (msg.from.phone ~= '49176xxxxxxx' ) then
        os.execute("./script user#".. msg.from.id .." 'Ungültige Nr.'")
        return
      end
     
      if (string.lower(msg.text) == 'uptime') then
        local handle = io.popen("python ~/tg_actions.py uptime")
        local res = handle:read("*a")
        handle:close()
        os.execute("./send_script user#".. msg.from.id .." '"..res.."'")
        --Alternativ:
        --send_msg (msg.from.print_name, res)
        return
     
      elseif (string.lower(msg.text) == 'shutdown') then
        local handle = io.popen("sudo python ~/tg_actions.py shutdown")
        local res = handle:read("*a")
        handle:close()
        os.execute("./send_script user#"..msg.from.id.." '"..res.."'")
        return
     
      elseif (string.lower(msg.text) == 'reboot') then
        local handle = io.popen("sudo python ~/tg_actions.py reboot")
        local res = handle:read("*a")
        handle:close()
        os.execute("./send_script user#".. msg.from.id .." '"..res.."'")
        return
      else
        os.execute("./send_script user#".. msg.from.id .." 'Fehler' ")
      end
     
    end
    
    tg_actions.py
    #!/usr/bin/python
     
    import sys
    import os
    from datetime import timedelta
     
    if sys.argv[1] == "shutdown":
            print "Das System wird heruntergefahren"
            os.system("shutdown now")
    elif sys.argv[1] == "reboot":
            print "Das System wird neugestartet"
            os.system("shutdown -r now")
    elif sys.argv[1] == "uptime":
            with open('/proc/uptime', 'r') as f:
                uptime_seconds = float(f.readline().split()[0])
                uptime_string = str(timedelta(seconds = uptime_seconds))
            print(uptime_string[:-7])
    #else:
            #falls kein Argument zutrifft

    Die Nummer hab ich aus Sicherheitsgründen verfremdet.

    Lg Nils

    • Admin sagt:

      ok also einen Fehler habe ich gefunden: Die neuste Version lässt keine Nummereingabe mehr zu, d.h. man kann nur noch an hinzugefügte Kontakte schreiben (lassen).
      Ich werde schauen wie man das am besten einbaut und aktualisiere den Post dann.

      Edit: Ich habe alle Skripte angepasst. Nun sollte es funktionieren.
      Wichtig ist, dass du deine Nummer als Kontakt eingespeichert hast.

  8. Nils sagt:

    hmm eigentlich hatte ich mich selbst bzw die Nummer vorher als Kontakt aufgenommen.
    Naja vielleicht hab ich beim Aufnehmen einen Fehler gemacht .
    Kann ja noch noch einmal versuchen den Kontakt aufzunehmen und dir dann ein Feedback schreiben.

    Lg Nils

    • Admin sagt:

      ich habe die Skripte alle überarbeitet und angepasst, also falls du das vorherige benutzt, aktualisiere es mal auf die neue Version.

  9. Andreas sagt:

    Das doofe an dem send_script ist, dass eine neue Instanz von telegram-cli mit der gleichen Config gestartet wird. Das mag der gar net. Dann kriegt die alte Instanz nämlich keine Updates mehr. Also lieber direkt über lua antworten (vermutlich) oder eben ein zweites Profil mit anderer Authentifizierung anlegen.

  10. Andreas sagt:

    Und für Nachrichten senden sieht der Befehl mittlerweile auch anders aus, nämlich

    send_msg (msg.from.print_name, ‚text‘, ok_cb, false)

  11. Andi sagt:

    Hallo zusammen,
    folgendes musste ich änderm bis es lief:

    if (msg.from.phone ~= ‚49176xxxxxxxx‘ ) then
    os.execute(„./send_script „.. msg.from.print_name ..“ ‚Ungültige Nr.'“) —> in

    if (msg.from.print_name ~= ‚Kontakt Name‘ ) then
    os.execute(„./send_script „.. msg.from.print_name ..“ ‚Ungueltige Nr.'“) / Umlaute kann telegram nicht versenden
    ———————————————————–
    local handle = io.popen(„python ~/tg_actions.py uptime“) —->
    local handle = io.popen(„sudo python tg_actions.py uptime“)

    Des Weiteren kann ich aus dem Handynetz noch keine Nachrichten empfangen, ich muss noch ein Port am Router freigeben. Weiss aber noch nicht welcher. Könnt Ihr mir hier weiter helfen ?

    Gruß
    Andi

  12. Tom sagt:

    Hallo ich habe die scripte vo oben übernommen und ich bekomme häckchen auf dem Handy also der pi scheint nachrichten zu bekommen problem ist er antowrtet nicht und in der tg-CLI kann ich mit „msg Tom Test “ kein nahcrichten eingang auf dem handy sehen.

    beim start(„./tg/bin/telegram-cli /tg/telegram -s ~/tg/test.lua -k tg/tg-server.pub“) kommt folgendes:
    ./tg/bin/telegram-cli /tg/telegram -s ~/tg/test.lua -k tg/tg-server.pub
    change_user_group: can’t find the user telegramd to switch to
    Telegram-cli version 1.1.1, Copyright (C) 2013-2014 Vitaly Valtman
    Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license‘.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show_license‘ for details.
    I: config dir=[/root/.telegram-cli]
    *** lua: attempt to call a nil value
    *** lua: attempt to call a nil value
    *** lua: attempt to call a nil value

    Woran kann es liegen ? zu beginn konnte ich noch nachrichten senden jetzt nicht mehr?
    Bitte Hilfe
    DANKE
    Tom

    • Felix sagt:

      Hi,
      erstmal ist der Aufruf nicht ganz richtig. Es müsste heißen: “./tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-server.pub” (Falls der Ordner tg/ im Homeverzeichnis ist)
      Die Fehlermeldung sagt nur, dass (3 mal) eine Variable, die aufgerufen wurde nicht gefunden wurde/nicht existiert.
      Hast du „Tom“ als Kontakt hinzugefügt?

    • Tom sagt:

      Dnke für die atwort.

      Ja meine Nummer ist gespeichert wenn ich in die CLI wechsel sehe ich auch Tom is online,is typing…

      Hast du eine Idee welche variablen nicht gefunden werden?

    • Felix sagt:

      Hast du etwas an dem Skript geändert? Wenn ja müsste ich da mal rüber schauen. Möglich ist aber auch, dass durch den falschen Aufruf der Fehler zustande kommt, was ich aber weniger glaube. Du kannst es dennoch mal ausprobieren.

      LG
      Felix

    • tom sagt:

      Das wäre sehr nett ich schicke heute nachmittag mal das ganze lua script und den screenbefehl villeicht findestdu den fehler;)

  13. Tom sagt:

    Danke 😀
    ich habe de befehl geändert läuft jetzt wieder ein stüclk weiter
    leider kommt jetzt diese Meldung
    pi@MyHimbeere ~ $ ./tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-server.pub

    Fehler:
    *** lua: /home/pi/tg/test.lua:210: unexpected symbol near char(226)

    Im test.lua Script steht an der stelle folgendes:

    if (msg.from.phone ~= ‚4912345678910‘ ) then

    os.execute(„./send_script user#“.. msg.from.id ..“ ‚Ungueltige Nr.'“)

    return

    end

    if (string.lower(msg.text) == ‚uptime‘) then

    wo durch ist der fehler begründet?:D
    Danke für die Hilfe
    Tom

    • Felix sagt:

      Die Version hat sich ja u.a. geändert, es heißt nun if ( msg.from.print_name ~= 'Kontakt Name') then ...
      Aber schick am besten das ganze Skript, dann kann ich mir das mal genauer ansehen.

    • Tom sagt:

      ...

      und aufgerufen wird telegram mit
      screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k home/pi/tg/tg-server.pub

    • Tom sagt:

      aber wenn ich in den Screen wechsel kommt:
      *** lua: attempt to call a nil value
      *** lua: attempt to call a nil value
      und das
      sh: 1: ./send_script: not found
      warum wird das nicht gefunde?:D

    • Felix sagt:

      Ist das send_script im selben Ordner (~/tg/) ?

    • Felix sagt:

      Die wichgitste Zeile ist diese:
      if msg.from.print_name ~= 'Kontakt Name' then
      Man kann nicht mehr auf die Nummer prüfen, sondern nur noch auf den Name (aus der Kontaktliste).

      PS: Habe deinen Code mal gekürzt.

  14. Micha sagt:

    Hallo,

    habe alles nach der Anleitung gemacht. Aber ich bekomme nur einen Haken wenn ich den pi per Telegram anspreche. Das bedeutet doch das die Nachricht gesendet wurde, aber nicht gelesen. oder?

    Der Pi reagiert auch auf keinen Befehl.
    Ich kann mir aber manuel von dem Pi aus schreiben.

    Was mache ich verkehrt???

    lg

    • Felix sagt:

      Ich werde mir das demnächst anschauen. Anscheinend wurde die telegram-cli Bibliothek wieder verändert.

    • Micha sagt:

      Danke.

      Freut mich!

      Toller support

    • Felix sagt:

      Hi Micha,
      ich hatte die letzten Tage viel zu tun, daher erst jetzt die Antwort:
      Ich habe die neuste Version des Messengers gerade nochmal auf einem blanken RaspianOS getestet und die Skripte an bestimmten Stellen angepasst. Kannst du es nochmal von Anfang versuchen (habe auch die Pfade angepasst, sodass nun alle Skripte im ~/tg/ Ordner sind) und mir Rückmeldung geben?

      LG Felix

  15. Mike sagt:

    Hey,

    irgendwie funktioniert das crontab nicht.

    @reboot screen -dmS TelegramCLI ~/tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-server.pub

    In der Konsole und ohne @reboot funktioniert der befehl aber

    gruss

    • Felix sagt:

      Hi,
      du kannst es mal damit probieren, das muss auf jeden Fall klappen: Link

    • tom sagt:

      Kann mir bitte einmal jemand die drei aktuelle Versionen der Skripte geben ich bekomm das mit den oberen nicht hin 🙁
      DANKE

    • Felix sagt:

      Hi Tom,
      ich habe es soeben getestet und alles aktualisiert (sollte nun wieder alles mit der neuen Version kompatibel sein).

    • tom sagt:

      Ok das ist sehr Nett von dir!:D
      Werde ich gleich am Wochenende ausprobieren 😀
      Und mich dann nochmal mit einem statusbericht melden!:D
      Vielen Dank
      Tom

    • Felix sagt:

      Alles klar, wir werden das Problem schon finden 🙂

    • Mike sagt:

      danke, aber meine Fähigkeiten reichen glaube nicht aus um aus

      @reboot screen -dmS TelegramCLI ~/tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-server.pub

      ein script in der Art zu bauen.

      Fehlermeldung:

      update-rc.d: using dependency based boot sequencing
      insserv: warning: script 'telegram' missing LSB tags and overrides
      insserv: There is a loop between service watchdog and telegram if stopped
      insserv:  loop involving service telegram at depth 2
      insserv:  loop involving service watchdog at depth 1
      insserv: Stopping telegram depends on watchdog and therefore on system facility `$all' which can not be true!
      insserv: exiting now without changing boot order!
      update-rc.d: error: insserv rejected the script header
    • Felix sagt:

      Schau mal das Tutorial hinter dem Link, den ich dir geschrieben habe. Dort habe im am Bsp von noip ein Skript erstellt. Du brauchst das lediglich deinen Wünschen anzupassen. In deinem Fall müsstest du im Skript den Befehl /usr/local/bin/noip2 durch screen -dmS TelegramCLI ~/tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-server.pub ersetzen. Den Teil unter stop) kannst du weglassen. Ansonsten musst du nur die Namen anpassen.
      Das bekommst du hin 🙂

    • Mike sagt:

      😉

      Per /etc/init.d/telegram start wird aber kein neuer screen geöffnet. und nach sudo update-rc.d kommen die selben fehler wie eben.

  16. Mike sagt:
    #! /bin/sh
    
    case "$1" in
      start)
        echo "Telegram wird gestartet"
        # Starte Programm
        screen -dmS TelegramCLI ~/tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-s$
        ;;
      stop)
      *)
        echo "Benutzt: /etc/init.d/telegram {start|stop}"
        exit 1
        ;;
    esac
    
    exit 0
    • Felix sagt:
      #! /bin/sh
      # Skriptname: /etc/init.d/TelegramCLI
      
      case "$1" in
        start)
          echo "TelegramCLI wird gestartet"
          # Starte Programm
          screen -S TelegramCLI bash -c 'sleep 5; /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub'
          ;;
      esac
      
      exit 0

      Das funktioniert bei mir ohne Probleme. Wenn du es testen willst, starte es am besten nicht im Hintergrund (nimm statt -dmS lediglich -S als Parameter und starte mit sudo /etc/init.d/TelegramCLI start. Falls Fehler auftreten sollten, wirst du diese im Screen angezeigt bekommen. Wenn alles klappt, setze wieder die Parameter -dmS und folge den nächsten Schritten in dem Tutorial.

    • Mike sagt:

      Danke!

      Das starten per Start-Befehl funktioniert.

      Allerdings tritt der selbe Fehler auf wie vorher sobald ich den update Befehl ausführe.

      pi@raspberrypi ~ $ sudo update-rc.d telegram defaults
      update-rc.d: using dependency based boot sequencing
      insserv: warning: script 'telegram' missing LSB tags and overrides
      insserv: There is a loop between service watchdog and telegram if stopped
      insserv:  loop involving service telegram at depth 2
      insserv:  loop involving service watchdog at depth 1
      insserv: Stopping telegram depends on watchdog and therefore on system facility `$all' which can not be true!
      insserv: exiting now without changing boot order!
      update-rc.d: error: insserv rejected the script header
    • Felix sagt:

      ich hatte so einen Fehler selbst noch nicht, habe aber ein wenig für dich gesucht und Stimmen gefunden, die sagen, dass man den Fehler damit beheben könne:
      insserv /etc/init.d/telegram -d
      Vielleicht kannst du das nochmal probieren?

    • Mike sagt:

      Irgendwie ist der Wurm drinne

      pi@raspberrypi:~$  insserv /etc/init.d/telegram -d
      insserv: warning: script 'telegram' missing LSB tags and overrides
      insserv: There is a loop between service watchdog and telegram if stopped
      insserv:  loop involving service telegram at depth 2
      insserv:  loop involving service watchdog at depth 1
      insserv: Stopping telegram depends on watchdog and therefore on system facility `$all' which can not be true!
      insserv: exiting now without changing boot order!
    • Felix sagt:

      versuch mal diesen Teil an den Anfang der Datei zu schreiben:

      #! /bin/sh
      ### BEGIN INIT INFO
      # Provides:          telegram
      # Required-Start:    $local_fs 
      # Required-Stop:     $local_fs
      # Default-Start:     2 3 4 5
      # Default-Stop:      0 1 6
      # Short-Description: telegram
      ### END INIT INFO
      
      case "$" in
        start)
          echo "Telegram wird gestartet"
          # Starte Programm
          screen -S TelegramCLI bash -c 'sleep 5; /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub'
          ;;
        stop)
          ;;
        *)
          echo "Benutzt: /etc/init.d/telegram {start|stop}"
          exit 1
          ;;
      esac
      
      exit 0
  17. Mike sagt:

    Danke,

    soweit so gut.

    Nur starte ich jetzt das script per start befehl kommt dies


    I: config dir=[/root/.telegram-cli]
    HI, this is lua script
    Telephone number (with ‚+‘ sign):

    sieht so aus als würden die login daten fehlen

    • Felix sagt:

      Sehr gut, dann ist das Skript nun fehlerfrei. Du musst dich leider nochmal mit deiner Telefonnummer anmelden und dir die SMS zusenden lassen. Danach funktioniert es.
      Achja, vergiss nicht, wenn das Skript in den Autostart soll, den Parameter -dmS anstelle -S zu setzen (nachdem du alles eingestellt hast).

      LG Felix

  18. Mike sagt:

    Hi,

    Per startbefehl geht jetzt alles aber nach wie vor wird es nicht beim reboot geladen.

    ich verzweifel langsam

  19. Mike sagt:

    Ich kann mir nur vorstellen das der beim Boot wiederfinden Telefonnummer und Code haben will… Wieso weiß ich allerdings auch nicht… Wie bekomme ich telegram komplett gelöscht? Evtl mal neu installieren?

    • Felix sagt:

      mit sudo rm -r ~/tg/ bekommst du den Ordner gelöscht, es gibt allerdings noch einen weiteren versteckten Ordner, in dem Einstellungen gespeichert werden (ich weiß gerade nicht wie dieser in der neuen Version heißt, müsstest du mal auf der GitHub Seite nachschauen).

  20. Mike sagt:

    hi,

    ist es möglich den bootvorgang in eine datei umzuleiten? ich erreiche den Pi nur per ssh und der steht nicht in meiner nähe.

    irgendwas muss der pi beim booten doch ausspucken wenn der das script starten will

    • Felix sagt:

      Hi,
      den Bootvorgang „umleiten“ geht nicht, dafür aber sobald gebootet wurde z.B. über Crontab (http://wiki.ubuntuusers.de/Cron) etwas starten.
      Mich wundert es ein wenig, warum bei dir die vorher von mir vorgestellte Methode nicht klappt, bei meinem Pi läuft das reibungslos.

  21. Tom sagt:

    Hallo,
    Dankeschön für den Super Support hier!:D
    es funktioniert alles so wie gewollt!:
    eine Frage habe ich trotzdem noch habt ihr eine idee warum der pi mir einigezeit später nochmal die kompletten antworten der letzten nachrichten schickt ?
    das wäre das einizge!

    Vielen Dank
    Tom

    • Felix sagt:

      Hi Tom,
      freut mich, dass es nun klappt 🙂
      Ich denke, das müsste wenn dann an dem TelegramCLI liegen. Ggf. fragst du im GitHub Forum nach, wenn das öfter passiert.

      LG Felix

  22. Thorsten sagt:

    Hallo Leute,

    bin am verzweifeln. Bekomm das lua script nicht zum laufen.
    Bekomm immer die Meldung, dass es die Option -s nicht gibt:

    pi@raspberrypi ~ $ ~/tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-server.pub
    /home/pi/tg/bin/telegram-cli: invalid option -- 's'
    telegram-cli Usage
      -u                  specify username (would not be asked during authorization)
      -k                  specify location of public key (possible multiple entries)
      -v                  increase verbosity (0-ERROR 1-WARNIN 2-NOTICE 3+-DEBUG-levels)
      -N                  message num mode
      -c                  config file name
      -p                  use specified profile
      -l                  log level
      -f                  during authorization fetch all messages since registration
      -E                  disable auto accept of encrypted chats
      -W                  send dialog_list query and wait for answer before reading input
      -C                  disable color output
      -R                  disable readline
      -d                  daemon mode
      -L        log file name
      -U       change uid after start
      -G      change gid after start
      -D                  disable output
      -P            port to listen for input commands
      -S     unix socket to create
      -e        make commands end exit
      -I                  use user and chat IDs in updates instead of names

    Könnt ihr mir weiter helfen?
    Danke schon im Voraus.
    Gruß
    Thorsten

    • Felix sagt:

      Hi Thorsten,
      das ist sehr komisch, ich habe deinen Befehl 1:1 bei mir kopiert und es funktioniert wunderbar.
      Hast du irgendetwas (ungewöhnliches) isntalliert bzw. es mal auf einem leeren Image versucht? Eventuell ist bei der Installation etwas schief gelaufen.

      LG Felix

  23. Thorsten sagt:

    Hallo Felix,
    danke für die schnelle Antwort.
    Das habe ich mir beim 1. mal auch gedacht. Habe dann ein komplett neues Image aufgezogen und nur die für Telegram notwendigen Packages nachinstalliert. Wieder das selbe…

    Viele Grüße
    Thorsten

    • Felix sagt:

      Also ich bin mir ziemlich sicher, dass da bei deiner Version etwas nicht stimmt. Bei mir zeigt es in der Hilfe den Parameter auch an:

      pi@raspberrypi ~ $ ~/tg/bin/telegram-cli -h
      ...
        -E                  disable auto accept of encrypted chats
        -s                  lua script file
        -W                  send dialog_list query and wait for answer before reading input
      ...
  24. Thorsten sagt:

    ok. Echt komisch.
    Dann fang ich nochmal von ganz vorne an…
    Evtl. bringts ja was.

    Vielen Dank.

    • Felix sagt:

      Benutzt du Raspbian oder ein anderes OS? Ggf. kannst du auch mal ein anderes Release des Clients auf Github ziehen.

  25. Thorsten sagt:

    Benutze Raspbian.
    Probiers gerade nochmal. „make“ läuft gerade…
    Stimmt, das ist ne gute Idee. Falls es wieder nicht geht, such ich auf github nen anderes Release und teste nochmal.
    Danke

  26. Thorsten sagt:

    Hallo Felix,

    hab alles nochmal neu installiert.
    Jetzt läuft es.
    Super. Vielen Dank.
    Gruß
    Thorsten

    • Felix sagt:

      Hi Thorsten,
      freut mich das zu hören 🙂 Sollten noch Probleme auftreten, einfach nachfragen.

      LG Felix

  27. Mike sagt:

    Hi,

    Ich mal wieder.

    Ich habe mal ein wenig rumgespielt und mir ist dabei folgendes Aufgefallen:

    starte ich Telegram so


    crontab -e

    und füge folgende Zeile ein


    # m h dom mon dow command
    58 23 * * * screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub

    funktioniert es.
    Aber per @reboot nach wie vor nicht. Hab zwei Vermutungen.
    Liegt es an dem Benutzer der beim reboot den Befehl ausführt?
    Oder, das andere Dienste die für Telegram benötigt werden noch nicht geladen sind?

    lg

    • Felix sagt:

      Hi Mike,
      danke für die Infos. Ich werde das mal übernehmen, falls andere das selbe Problem haben.
      Es könnte an beiden deiner Vermutungen liegen. Wobei ich nicht genau sagen kann, welche Dienste die TelegramCLI benötigt, dafür müsste ich erst den ganzen Code analysieren.

  28. Mike sagt:

    Hi,

    ich mal wieder.
    Konnte es natürlich nicht lassen und habe das Problem gelöst.

    Problem ist glaube erstens das screen nicht geladen ist wenn crontab ausgeführt wird. Ausserderm verbindet sich der Pi mittels wicd mit dem Wlan. Dies wird anhand de Bootscreens auch recht spät gestartet.

    Deshalb habe ich erfolgreich folgendes versucht:

    crontab -e

    @reboot sleep 60 && screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub

    hat lange gedauert 😉

    lg

    • Felix sagt:

      Hi Mike,
      sehr schön, so etwas hatte ich mir bei meinem Code schon gedacht, aber ein sleep 5; reichte aus, wahrscheinlich da diese Skripte erst um einiges nach den crontabs ausgeführt werden.
      Naja, hauptsache es klappt nun bei dir 🙂

      LG Felix

  29. Tim sagt:

    Hey Leute,
    ich versuche schon die ganze Zeit hinzubekommen, dass mein Raspberry eine automatische Antwort schickt!
    Ich kann mir über die Konsole manuell Nachrichten aufs Handy schicken, aber irgendwie komme ich mit dem letzten Teil des Tutorials nicht ganz klar, will so kurz vor dem Ziel aber auch nicht aufgeben!
    Was muss ich denn da genau an dem Skript aus dem Tutorial ändern, damit das bei mir genauso läuft mit Uptime & Reboot?
    Wenn ich wie oben unter „Telegram starten“ verfahre, dann passiert gar nichts. Wie sollte das denn aussehen?
    Ihr könnt auch gerne Screenshots schicken (mba2015@hmamail.com)!

    Danke schon mal!

  30. Daniel sagt:

    Hallo,
    Ich habe bei mir Telegram nach dieser Anleitung 1:1 eingerichtet und es funktioniert fast perfekt. Das Script antwortet schön wenn es angeschrieben wird, ich kann Nachrichten über die Konsole verschicken etc.
    Ich hatte jedoch ein Problem. Ich starte Telegram mit
    screen -dmS Telegram /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub
    Dies kann ich händisch über eine start_telegram.sh machen, passiert aber auch in der crontab beim start und läuft fehlerfrei.

    Gehe ich jetzt hin und schicke mit dem Script send_t.sh:
    /home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -e "msg $1 $2"
    eine Nachricht ./send_t.sh user#1234567 Hallo über die Konsole, dann kommt diese Nachricht an, gleichzeitig bleibt aber der beim booten ausgeführte screen Prozess der im Hintergrund läuft wohl hängen. D.h. sobald ich eine Nachricht über die Konsole verschickt habe, antwortet das LUA Script nicht mehr auf Nachrichten.
    Mittlerweil bin ich auf die Idee gekommen, das im screen ja schon eine Instanz läuft und für das verschicken eiegntlich ja garkeine neue Instanz gebraucht würde. Nach einigem Studium von man screen ist es tatsächlich möglich Befehle an ein detachtes Fenster zu schicken.
    Der Befehl für eine Nachricht per Telegram in der Konsole zu verschicken lautet:
    screen -S Telegram -X stuff "msg user#123456 Test $(printf \\r)"
    Mit -S wird das detachte Fenster angesprochen (Name hängt davon ab wie screen -S beim starten aufgerufen wird). -X stuff sended Keystrokes an das entfernte Fenster, da nach der Nachricht noch Return gedrückt werden muss, muss hinten noch das $(printf \\r) dran.
    Eine entsprechende send_t.sh wäre dann:
    #!/bin/sh
    screen -S Telegram -X stuff "msg user#123456 $1 $(printf \\r)"

    Um die Nachricht zu senden: ./send_t.sh Test

    Ich hoffe, dass hilft jemandem weiter, mich hat es einige Nerven gekostet.

  31. Daniel sagt:

    Ein 2. Weg ist mir jetzt noch aufgefallen, dürfte sein wenn man Telegram mit der -P Option startet damit er auf einen Port lauscht, das müsste dann etwa so aussehen:
    screen -dmS Telegram /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub -P 54321
    Telegram lauscht dann auf dem festgelegten Port nach einkommenden Befehlen, welche man mit netcat hinschicken kann, z.B.:
    echo "msg user#123456 Test" | nc.traditional -w 1 127.0.0.1 54321
    Eine send_t.sh würde dann entsprechend aussehen:
    #!/bin/sh
    echo "msg user#123456 $1" | nc.traditional -w 1 127.0.0.1 54321

    und der entsprechende Aufruf halt eben mit
    ./send_t.sh Test

    Um die send Scripte überall verfügbar zu machen, kann man sie natürlich in /usr/local/bin ablegen.

    Ich habe Variante 2 jetzt nicht ausprobiert, aber eigentlich müsste es funktionieren.

  32. Christoph sagt:

    Hallo,
    Gibt es eine Möglichkeit das der Pi über Python automatisch antwortet??

  33. stefan sagt:

    hallo ich wollte fragen wie ich in das script noch befhle hinzufügen kann und wie ich gpios damit steuern kann?
    danke für jede antwort die mir weiterhilft

    • Felix sagt:

      Ja natürlich kannst du das.
      Wie du die das Skript bearbeitest steht ja bereits im Tutorial. Die GPIO steuern könntest du z.B. indem du ein Python Skript (oder in der Sprache deiner Wahl) aufrufst, mit dem du die GPIO ausliest/ansprichst.

  34. Stefan sagt:

    Ich habs probiert aber irgendwie funktioniert es nicht kannst du mir ein Beispiel geben ich weiß nicht weiter

    • Felix sagt:

      Naja, schau dir doch mal das verwendete lua Skript an, da rufe ich bereits ein anderes bash Skript auf (Zeile 36, 39).

      os.execute("/home/pi/tg/send_script ".. msg.from.print_name .." 'Fehler' ")

      ein Python Skript kannst du z.B. mittels

      os.execute("python /pfad/python_skript.py")

      aufrufen. Und wie du mittels Python die GPIO steuern kannst, habe ich in anderen Tutorials (z.B. hier) geschrieben.
      Du kannst dem Skript auch Parameter übergeben, welche es dann auswertet bzw. verwendet.

  35. stefan sagt:

    hey sorry das ich noch mal schreibe aber ich hab jetzt alles versucht aber ich bekomme es nicht hin ein neuen befehl hinzufügen der funktionier. in telegram kommt dann meistens ein fehler oder garnix. ich möchte die gpios über shell steuern

    • Felix sagt:

      Also mir fällt auf, dass du die Endung vergessen hast. Außerdem sind in Python die Einrückungen wichtig, die du nicht alle gleich gesetzt hast (Zeile 20).
      Wenn du tg_actions.py nicht brauchst ruf im lua Skript doch dein tor1auf.py direkt auf.

    • Stefan sagt:

      Danke erstmal für die schnelle Antwort und ich will ja das Python Skript weil ich ja eine Antwort gesendet haben möchte. Und das tor1auf.sh lässt sich nicht direkt aus der lua starten .

    • Stefan sagt:

      Und wenn ich indem tg_actions.py einen neuen Befehl hinzufüge dann funktionieren die anderen nicht mehr.

  36. Johannes sagt:

    Guten Abend,
    zuerst möchte ich ein Lob los werden. Die Seite hier ist klasse und euer aktiver Support erleichtert uns „Neuen“ das Programmieren.

    Da ich jetzt nach einigen Tagen die Funktion der Scripts herstellen konnte, hängt es leider bei mir noch beim Autostart.
    Bei crontab -e fährt mein Pi in eine Reboot-Schleife. Hab das ganze dann wieder entfernt aus crontab.
    Beim Autostartscript kommt folgende Meldung und es wird nicht ausgeführt nach einem Neustart:

    update-rc.d: using dependency based boot sequencing
    insserv: warning: script ‚K01autostarttg‘ missing LSB tags and overrides
    insserv: warning: script ‚autostarttg‘ missing LSB tags and overrides

    Aus dem Chat mit Mike hab ich das Script angepasst:

    #! /bin/sh
    ###BEGIN INIT INFO
    # Provides: telegram-cli
    # Required-Start: $local_fs
    # Required-Stop: $local_fs
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: telegram cli
    # Description: telegram cli
    ### END INIT INFO
    
    
    #actions
    case "$" in
     start)
            echo "Telegram wird gestartet"
            # Starte Program
            screen -dmS Telegram-CLI bash -c 'sleep 5; /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub'
            ;;
     stop)
            ;;
     *)
            echo "Benutzt: /etc/init.d/autostarttg {start|stop}"
            exit 1
            ;;
    esac
    
    exit 0

    Wahrscheinlich ist es ein Anfängerfehler^^…. naja mal sehen.

    Eine andere Frage noch: muss ich für neue Funktionen nur das py-script erweitern oder auch das lua script anpassen? (Py-Script = Funktion, lua-Script = Rückmeldung?)

    Vielen Dank schonmal!
    Mit freundlichen Grüßen Johannes

    • Felix sagt:

      Erst einmal vielen Dank für das Lob 🙂
      Ich nehme an dein Start Skript heißt nicht telegram-cli? Schreib mal in # Provides: und # Short-Description: den Namen des Skripts (autostarttg ?).
      Zu deiner zweiten Frage: Du kannst beides. Manche Funktionen sind in lua mMn. nicht so schön umsetzbar, daher greife ich lieber auf andere Sprachen wie python oder bash zurück. Wenn du es direkt in lua umsetzen kannst sparst du dir die Rückmeldung des Skripts.

  37. Johannes sagt:

    Vielen Dank für die schnelle Rückmeldung!
    Ja das Script heißt autostarttg. Hab es jetzt ausprobiert und noch etwas anderes probiert, jedoch kommt die Fehlermeldung immer noch. Somit kommt Telegram nicht in den Autostart bei meinem RPi2…

    Die einzige Alternative ist ja über crontab -e und den entsprechenden Befehl am Ende einzufügen!? oder sehe ich das falsch?

  38. Stefan sagt:

    Danke erstmal für die schnelle Antwort und ich will ja das Python Skript weil ich ja eine Antwort gesendet haben möchte. Und das tor1auf.sh lässt sich nicht direkt aus der lua starten . Und wenn ich indem tg_actions.py einen neuen Befehl hinzufüge dann funktionieren die anderen nicht mehr.

    • Felix sagt:

      Was genau funktioniert am Python Skript nicht mehr? Ein beliebter Fehler sind die Einrückungen (Python macht einen Unterschied zwischen Tab und [mehreren] Leerzeichen).
      Bitte immer die Fehlermeldungen posten, so kann besser geholfen werden.

    • Stefan sagt:

      Es funktioniert dann alle anderen Befehle nicht mehr

    • Felix sagt:

      Welche Fehlermeldung bekommst du?

  39. Stefan sagt:

    Wo kann ich die auslesen

  40. stefan sagt:

    hey ich bins wieder meine python skript geht aber die lua führt es nicht aus

  41. Jan sagt:

    Hallo,
    Erstmal großes Lob, denn es hat alles beim zweiten Versuch funktioniert 😛
    Der Pi antwortet schön und und und.

    Doch hab ich noch eine für mich interessante Frage:
    Wie kann ich vom Pi selbständig eine Nachricht ausschicken?
    Dazu folgendes Szenario: Ein Sensor soll stetig die Temperatur im Raum überwachen, wird eine bestimmte Grenze über bzw. unterschritten soll ich benarchitigt werden.

    Ich werd leider aus der tg-Dokumentation nicht sonderlich schlau und auch wenn ich es über das bash-skript Versuche (was ich im moment speziell aus Python heraus starte) passiert lediglich, dass tg ausgeführt wird, darauf ein bisschen nix tut und sich schließlich beendet.

    Hoffe mir kann da geholfen werden. 🙂

    Lg Jan

    • Felix sagt:

      Also wenn du etwas dauerhaft misst, ist ja entweder ein Skript am werkeln (z.B. eine Endlosschleife, die alle x Sekunden den Sensor abruft). In jenes Skript kannst du ganz einfach einen Aufruf der telegram-cli mit deiner Nachricht einbauen (was aufgerufen wird, sobald die Temperatur erreicht wurde). Wenn du ein bash Skript aufrufst (welches tg ausführt), solltest du darauf achten, dass du auch alle Parameter (richtig) übergeben hast. Am besten schrittweise loggen was ankommt.
      LG Felix

  42. Jan sagt:

    Vielen Dank erstmal für die schnelle Antwort 🙂

    Um einfach mal nur nen Beispiel unabhägig von sensorik zu machen:

    #test.py
    import os

    os.system(‚~/tg/bin/telegram-cli -k ~/tg/tg-server.pub -W -e „msg Chef Hallo“ ‚)
    #test.py-ende
    Und soweid wie ich es verstanden hab, sollte er ja er daraus eine Nachricht senden, tut jedoch nix in der routine.

    • Felix sagt:

      Dann wird der Befehl ~/tg/bin/telegram-cli -k ~/tg/tg-server.pub -W -e “msg Chef Hallo” auch in der Konsole nicht funktionieren. Hast du das bereits getestet?

    • Jan sagt:

      Ja hab ich. Der tut folgich auch nichts.

    • Jan sagt:

      starte ich den cli ohne parameter und will mir eine nachricht schreiben passiert ebenfalls nichts. erst wenn ich dem pi schreibe, kann ich mir erfolgreich zurück schreiben. noch so als zusatz info

    • Felix sagt:

      Gut, dann ist das Problem ja erkannt.
      Kannst du die (nicht) funktionierenden Befehle posten?

    • Jan sagt:

      In Telegram selbst betrifft ist dann wohl alle Funktionen, denn solange keine Kommunikation von einem mobilen Gerät aus gestartet wurde, laufen die Befehle des Pis ins leere.

    • Maik sagt:

      Hallo, ich habe das selbe Problem und komme hier absolut nicht weiter. Ich will einen Infrarotsensor auslesen, der mir eine Nachricht über Telegram schickt wenn er Bewegung registriert. Dass mit dem Bild etc. klappt schon. Nur dass mir eine Nachricht beim auslösen geschickt wird fehlt noch. Eure Erklärungen versteh ich leider überhaupt nicht. Kann mal jemand ein Beispiel schicken? Besten Dank! Und nochmals ein dickes Lob für die Mühe die man sich hier gemacht hat auch mir unwissenden etwas beizubringen

    • Felix sagt:

      Was verstehst du genau nicht? Dort, wo das Bewegungsereignis wahrgenommen wird (callback, etc.) musst du die telegram-cli aufrufen und an einen Kontakt (dich) eine Nachricht senden.
      Mit welcher Sprache hast du es geschrieben? Du kannst ja ein paar Teile posten, dann kann man sicherlich besser helfen.
      LG Felix

  43. Stefan sagt:

    Ich habe das selbe Problem

    Und ich wollte noch fragen ob man in die test.lua zwei Kontakte schreiben kann das beide die befele nutzen können

    • Felix sagt:

      Welches Problem hast du genau?
      Ja natürlich kannst du an zwei (vordefinierte) Kontakte schreiben.

    • Stefan sagt:

      Ich kann wie bei jan erst etwas vom pi senden wenn ich dem pi geschrieben habe

      Wie kann ich eine zweiten Kontakt vorgeben

    • Felix sagt:

      Hast du dich als Kontakt vorher eingespeichert?

    • Stefan sagt:

      Ja das habe ich

    • Jan sagt:

      Hallo nochmals. Ich hab mich nochmal ein bisschen mit TG aus einander gesetzt. Wenn man das ganze mit -W linkt wird ne Query genommen auf input gewartet und auf diesen dann geantwortet. -e Führt lediglich einen Befehl aus und beendet sich danach.
      Wenn ich es jetzt richtig verstanden hab, muss man in LUA ein eigenes skript zum senden von Nachrichten verfassen und es geht nicht auf diesem einfachen Weg =/.

      Lg Jan

  44. Jannis Klee sagt:

    Hey Admin, wie du auch immer heißt xD

    Ich hab ein Problem mit meinem TG

    wie gesagt der Fehler von oben den du schon beschrieben hast in der Anleitung..
    das mit Notify..

    Hab da mal ne Frage

    also in meiner namespace.lua findet sich kein

    -- Notification code {{{
    ...
    -- }}}

    irgendwie nicht…
    Hier meine Namespace lua: http://pastebin.com/CAEGM0df

    wenn ich irgendwas komplett falsch verstanden habe dann informiere mich bitte… bin hier am verzweifeln

    • Felix sagt:

      Wieso postest du die namespace lua? Ich bearbeite die test.lua Datei. Schau mal, ob es in der nicht wie beschrieben aussieht.
      PS: Ich heiße Felix 😉

    • Jannis Klee sagt:

      oh sry da steht ja Felix ich dachte da steht Admin sagt… xD

      Sorry

      Ich teste es gerade und ja, ich habe es gefunden -.- ich vollidiot 😀

      LG Jannis

  45. Dirk sagt:

    Hallo Felix,
    erst einmal auch von mir ein herzlicher Dank für dieses tolle Tutorial – Klasse!
    Ich habe mich bemüht, Deinen Anweisungen zu folgen, dabei habe ich folgenden Status:
    Wenn ich eine Nachricht an Telegram sende läuft das test.lua an, und die Befehle „shutdown“ bzw. „reboot“ werden an das python-skript übergeben und dort ausgeführt: Der RPI fährt herunter bzw. wird neugestartet. D.h. für mich, dass das python-skript grundsätzlich funktioniert. Auch der cron job läuft einwandfrei mit „@reboot sleep 20 && screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -s /home/pi/tg/test.lua“ so dass Telegram nach einem reboot auch wieder automatisch anläuft. Mein Problem – so ich das ganze verstehe – ist, dass das python script keine Rückmeldung an Telegram gibt. So scheint z.B. beim Befehl „uptime“ nichts zu passieren. Auch die Antworten wie bei Dir, z.B. auf „Reboot“ folgt „Das System wird neu gestartet“, werden bei mir am Absender nicht angezeigt, also Telegram sendet irgendwie nicht zurück. Was mache ich da denn wohl falsch? Über deine Hilfe würd ich mich sehr freuen! Gruß Dirk

    • Felix sagt:

      Hallo Dirk,
      vor dem Neustart bekommst du aber Rückmeldung?
      Bist du dir ganz sicher, dass es nach dem Reboot auch geladen wurde?
      Achja und als Kontakt hast du dich eingespeichert? In den neueren Version kann man nur noch an Kontakte Nachrichten senden (das war zu dem Zeitpunkt, als ich das Tutorial geschrieben habe nicht so). Und welche Änderungen hast du noch an den Skripten vorgenommen?
      LG Felix

  46. Dirk sagt:

    Hallo Felix, vielen Dank für Deine schnelle Reaktion!
    Nein – auch vor dem reboot bekomme ich leider keine nachricht auf mein Handy.

    Was bitte soll nach dem Reboot geladen sein (sorry für meine blöde Frage)?
    Ich denke, mich selbst (also meine Handy) sauber in Telegram auf dem RPIin den Kontakten angelegt zu haben – sonst könnte ich doch keine Nachrichten auswerten, richtig? Danke dir für Deine Bemühungen!

    • Felix sagt:

      Wenn der Pi startet und du eine Nachricht schickst, werden dann beide Haken gesetzt oder nur einer? Falls nur einer kam die Nachricht noch nicht an und (wahrscheinlich) wurde das Skript zum auswerten nach dem reboot nicht gestartet.

  47. Dirk sagt:

    …es werden beide Haken gesetzt – d.h. für mich, dass das test.lua auch läuft. Es wird ja auch die tg_actions.py aufgerufen – nur eben keine Antworten an den Sender (in diesem Fall also mein Smartphone) zurückgesendet.

    Um ganz sicher zu gehen installiere ich den RPI & Telegram nochmal neu. Make läuft gerade durch, ich versuche dann nochmalexakt 1:1 Deine drei files zu übernehmen (bis auf die Kontaktdaten natürlich…).
    Ich melde mich wieder, Gruß Dirk

  48. Dirk sagt:

    Hallo Felix,

    wie geschrieben – ich habe mein System komplett neu aufgesetzt und Telegram installiert. Nach Eingabe der persönlichen Daten und Bestätigung des SMS-Code lief ea auch sauber. Ich habe dann mich selbst (bzw. natürlich mein Smart-Phone) als Kontakt angelegt. Wenn ich nach home/pi/tg wechsel und dort dann „bin/telegram-cli“ eingebe kann ich auch Telegram wieder starten. Was mir nebenbei auffällt – wenn ich auf meinem Smartphone in Telegram etwas schreibe wird mir auf dem rpi in Telegram nicht angezeigt „User Dirk xxxx schreibt gerade“ (oder so ähnlich). Nachdem ich den beiden files „send_script.sh“ und „tg_actions.py“ wie beschrieben die Rechte vergeben habe und über crontab -e wie beschrieben den Autostart angegeben habe habe ich den rpi neu gestartet. Leider reagiert Telegram nach einem Neustart dann nicht automatisch. Wenn ich wie geschrieben Telegram manuell aufrufe läuft es. Die test.lua, send_script.sh sowie tg_actions.py zeigen ab leider keine Wirkung. Wie kann ich denn vielleicht einzeln diese Datei „aufrufen“ um zu prüfen, ob die denn wenigsten laufen. Ich bekomme also zur Zeit leider keine Reaktion. Ach ja nochwas , nun werden auch nicht mehr die zwei Haken angezeigt, also irgendwie scheint da irgendetwas nicht mit geladen zu sein. Für deine weitere Hilfe schon mal vielen Dank! Gruß Dirk

    • Felix sagt:

      Gut, dann ist schon mal klar, dass das Skript nach dem Neustart nicht aufgerufen wird. An was das genau liegt, kann ich dir aber aus der Ferne leider auch nicht sagen.
      Bzgl. des Status „xy schreibt…“, ich glaube das ist nicht dabei (bzw. war es nicht, als ich es ausprobiert habe). Solange die Nachricht ankommt sollte das aber nicht weiter schlimm sein, denke ich.

  49. Dirk sagt:

    Nachtrag: wenn ich „python tg_actions.py reboot“ ausführe wird in der Kommandozeile ausgegeben:
    Das System wird neu gestartet
    shutdown: you must be root to do that!
    Usage: ….und dann einige Zeilen mit Parametern für shutdown

    • Felix sagt:

      Benutze sudo shutdown now, bzw. alles was root Rechte braucht musst du mit sudo starten.

    • Dirk sagt:

      ..Wasserstandsmeldung….
      Nachdem ich den Teil mit {{Notifikation}} aus der Datei entfernt habe kam zum ersten Mal eine Antwort auf mein Smart-Phone!: Nach Absenden des Befahls „Reboot“ wurde korioserweise „Fehler“ zurückgesendet – seit dem startet der Raspberry Pi automatisch alle 2 Minuten…..

      ich schaffe das, ich schaffe dass, ich schaffe dass,…. also alles von vorne: neues „Wheezy“-Image installieren und weiter gehts -follow up folgt…..

    • Dirk sagt:

      …jetziger Stand: Telegram läuft nach reboot automatisch durch den cronjob an und reagiert zumindest auf den Befehl „Reboot“ (bestätigt durch zwei Haken) – aber ohne vorher eine Meldung wie „Das System wird neu gestartet“ zu senden ;-( ..mich verlässt langsam der Mut… Hast Du vielleicht noch eine Idee? Danke

    • Felix sagt:

      Speziell darauf vermute ich, dass der Prozess zum senden der Antwort durch den reboot bereits gekillt wurde und du daher keine Antwort bekommst. Du kannst z.B. den Teil, der den Neustart auslöst auskommentieren und schauen, ob dann eine Antwort zurück gesendet wird.

    • Dirk sagt:

      Also, alle drei Befehle werden von der test.lua erkannt und an die tg_actions.py weitergeleitet. Irgendwie scheint der Aufruf der send_script.sh aber nicht zu funktionieren, denn es kommt keine Antwort zurück. Jetzt verlässt mich mein Latein…..

  50. Dirk sagt:

    ..danke, ich habe das tg_actions.py angepasst. Direktes Ausführen in der Kommandozeile (im Pfad tg) funktioniert nun mit „python tg_actions.py reboot“. Aber leider nicht der ganze Rest….

    Wie kann ich prüfen, ob wenigstens die lua.test lauffähig ist?

    • Felix sagt:

      Was genau meinst du mit lauffähig? Du gibst beim Startbefehl ja die .lua Datei mit an, die dann auf Eingaben reagieren kann. Du müsstest also alle deine Fälle manuell, indem du den entsprechenden Befehl per Telegram schickst, testen.
      Falls du die Syntax meinst: Du solltest eine Fehlermeldung mit Zeilennummer etc. bekommen, falls etwas nicht stimmt.

  51. Dirk sagt:

    So, langsam komme ich der ganzen Thematik näher, es stellen sich erste Erfolge ein. Ich habe aus den gesammelten Werken an FAQ hier grundsätzlich lauffähige Programme bekommen. Dein letzter Tipp, den Teil in der tg_actions.py auszukomentieren hat funktioniert, ich bekomme eine Antwort. Das ist der gute Teil der Nachricht.
    Nun der schlechte Teil: wenn ich den Befehl wieder zulasse, rebootet der Raspberry Pi nach dem ersten Ausführen von Telegram in einer ENDLOS-Schleife! D.H. so geht es (zumindest bei mir) nicht und zu allem Übel komme ich nun nicht mehr auf den RPI und darf wieder einmal von vorne anfangen und das System neu aufsetzten…..Keine Ahnung warum, aber das mit dem Reboot muss ich anders lösen….
    Vielleicht bekomme ich ja auch irgenwann mal das Ganze zum laufen – es haben ja schliesslich auch ein paar User vor mir geschafft 😉

    • Felix sagt:

      Hi Dirk,
      so einfach sollte der Pi nicht ohne Grund neustarten. Hast du evtl. etwas in den Autostart (oder cron) geschrieben, dass deinen Pi neustarten lässt? Oder wird der Teil des lua Skripts direkt nach Start aufgerufen (z.B. indem davor keine Abfrage nach dem gesendeten Befehl gemacht wurde)?

    • Dirk sagt:

      ..ich habe durch crontab -e ausschliesslich die von Dir vorgegebene Änderung eingefügt:
      @reboot sleep 60 && screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub

    • Felix sagt:

      ok, das ist nicht der Auslöser. Hiermit wird einfach 60 Sekunden nach Start telegram-cli mit den entsprechenden Parametern gestartet.
      Startet dein Pi denn direkt neu, oder erst nach einer Minute? Dann muss es nämlich an der lua Datei liegen.

    • Dirk sagt:

      ich stelle mir auch zu folgendem Code-Teil :

       elseif (string.lower(msg.text) == 'reboot') then
          local handle = io.popen("sudo python /home/pi/tg/tg_actions.py reboot")
          local res = handle:read("*a")
          handle:close()
          os.execute("/home/pi/tg/send_script ".. msg.from.print_name .." '"..res.."' ")
          return

      auch die Frage, warum erst die tg_actions.py ausgeführt werden soll und dann das send_script?
      wenn die tg_actions.py „zündet“ (reboot) ist doch egentlich klar, dass dann keine Message mehr rausgehen kann, oder?

  52. Dirk sagt:

    …mein RPI startet ziemlich genau nach der im crontab eingestellten Zeit, ändere ich die z.B. von 60 auf 20 started der RPI in einer permanenten Schleife auch nach 20 Sekunden. Vielleicht sollte ich mal eine deutlich längere Zeit als 60 wählen?

    • Felix sagt:

      Du kannst zwei Dinge versuchen: Lösche einmal den && screen ... Teil (oder durch ein print etc. ersetzen) und einmal die komplette Zeile. Falls er nach dem ersten Versuch immer noch neustartet liegt es nicht an Telegram.

    • Dirk sagt:

      ..das werde ich probieren und mich melden. Immer wieder Danke für deine Geduld!
      -> make läuft gerade wieder durch, dauert bei mir immer ziemlich genau 45 Minuten…

    • Felix sagt:

      Sobald du mit der Einrichtung fertig bist, würde es sich evtl. anbieten ein Backup des Images mit Win32DiskImager zu machen, falls das schneller geht.

    • Dirk sagt:

      danke für die Info – genauso (mit dem Win32DiskImager) ziehe ich das Image immer auf die SD-Karte – Ich habe da ja nun einige Übung 😉
      Make läuft gerade – follow up folgt!

    • Felix sagt:

      Ich meinte damit, dass du (nach make und telegram Einrichtung) das Image speichern kannst. Dann sparst du dir das erneute Einrichten.

    • Dirk sagt:

      POSITIVE Zwischenbilanz!
      Jetzt stellen sich dauerhafte Erfolge bei mir ein – endlich! Bevor ich meinen bescheidenen Code wenn gewünscht hier zeige bzw. über pastebin verlinke habe ich eine weitere Frage bzw. Anmerkung:
      Wenn ich eine ankommende Nachricht direkt in der test.lua auswerte und mit einer Antwort (aus der test.lua heraus) belege geht das blitzartig (deutlich unter 1 Sekunde). Ich erkenne dass am sofort gesetzten zweiten Haken sowie die unmittelbar danch aufpoppende Antwort im Telgram-Messenger auf meinem Smartphone.
      Leite ich jedoch den empfangenen Befehl an die tg_actions.py zur weiteren Verarbeitung weiter wird der zweite Haken erst nach ein paar Sekunden angezeigt – entsprechend „träge“ ist auch die Reaktion durch das tg_action.py script, unabhängig davon, was dort „zusammengebraut“ wird.
      Egal also, ob ich „reboot“, „shutdown“ oder „uptime“ eingebe – alle reaktionen dazu kommen grundsätzlich erst ein paar Sekunden später. Nicht das mich das jetzt (bei meinen beabsichtigten Ideen) stören würde, es fällt mir halt nur auf.
      Unabhängig davon nochmals mein herzliches Dankeschön an Dich,Felix, für Deine ausgesprochen flotten Reaktionen und Deine Geduld, auch Anfängerfragen und -Probleme hier zu behandeln! Erstklassiges Tutorial und Betreuung!

  53. Dirk sagt:

    Ahhaa- wieder etwas dazugelernt, danke. Das gucke ich mir mal näher an!

  54. Dirk sagt:

    Hallo Felix,
    mein lua Script läuft soweit und ich beginne langsam, die Zusammenhänge zu verstehen. Ich stehe vor einem weiteren Problem, für das ich leider keinen Ansatzpunkt habe:
    Wenn Telegram auf meinem PI von einer bis dato unbekannten und somit nicht zuordbaren Telefonnummer kontaktiert wird möchte ich gerne mit Hilfe des lua-scriptes diese Nummer extrahieren und an eine DRITTE Nummer (nämlich dem Telegram-Account von meinem Smartphone) senden. Von dort möchte ich dann via Telegram einen Befehl an den Pi senden, der dann auch über das lua-script (oder der tg_actions.py) diese bis dato unbekannte Telefonnummer mit einem dann von mir zu vergebenen Namen in den Telegram-Kontakten neu anlegt. Beispiel: „legeuseran>LieschenMueller<+49175123456" In der test.lua würde ich diese dann von meinem Smartphone empfangene NAchricht in ihre Bestandteile zerlegen und den Befehl zum Anlegen des neuen Kontaketes geben wollen – wenn das geht…
    Ich möchte mich also nicht auf den PI aufloggen müssen, um dort erst den neuen Kontakt anlegen zu können. Ich kann zwar mit beispielsweise "Empfänger_ID = msg.from.id" die id des Absenders auslesen. Aber damit komme ich immer noch nicht an die Telefonnummer ran. Siehst Du eine Chance, wie man das realisieren kann? Gruß Dirk

    • Felix sagt:

      Hi Dirk,
      soweit ich das sehe, kannst du die Nummer nicht direkt auslesen, zumindest in der Telegram App. Seit neustem gibt es ja Benutzernamen, nach denen man auch suchen kann. Die Nummer wird dadurch aber nicht offenbart (soweit ich mich nicht irre).
      Falls du die Nummer kennst oder es doch eine Möglichkeit geben sollte, kannst du mit add_contact den neuen Nutzer in der lua File hinzufügen, indem du die Befehl-Cases durchgehst.

    • Dirk sagt:

      danke – ich habe befürchtet, dass man zum Auslesen einer neuen Nummer immer direkt an den Pi muss – schade. Dennoch Danke für die Info hierzu, gute Nacht!

    • Felix sagt:

      Ich bin mir nicht mal sicher, ob man die Nummer am Pi auslesen kann (ist ja im Endeffekt auch nur ein Client wie die App auch). Das dient wohl dazu, dass man nicht die Privaten Nummern von anderen Nutzern abgreifen kann.

  55. Dirk sagt:

    Dann versuche ich das anders zu lösen und habe dazu eine weitere Frage. Folgender Code:
    ————–
    if msg.from.print_name ~= ‚Dirk_xxx‘ then
    os.execute(„/home/pi/tg/send_script „.. msg.from.print_name ..“ ‚Ihre Anfrage wird an den Pi-Admin weitergeleitet.'“)
    os.execute(„/home/pi/tg/send_script „.. ‚Dirk_xxx‘ ..“ ‚Nachricht an PI von unbekannt:'“)
    os.execute(„/home/pi/tg/send_script „.. ‚Dirk_xxx‘ .. msg.text)
    return
    end
    ————-
    funktioniert bis auf Zeile 4 (der 3. os.exceute-Befehl) – dort gibt es keine Reaktion. Frage daher, was ich wohl falsch mache, um eine auf dem Pi erhaltene Nachricht an einen bekannten Acount (in diesem Fall Dirk_xxx) weiterzuleiten.

    Der reine Lua-Befehl „fwd_msg (‚Dirk_xxx‘, msg, ok_cb, false) zeigt als Alternative leider auch keine Wirkung….

    • Felix sagt:

      Wieso nimmst du keine Hochkommata (oder wurde das autoformatiert)?
      Ist Versuch es mal mit

      os.execute("/home/pi/tg/send_script ".. "Dirk_xxx" .. "'".. msg.text .."'")
    • Dirk sagt:

      Danke ! Du hast mich auf die richtige Fährte gebracht (aber Dein Code hat leider bei mir nicht funktioniert):
      1. Korrekt, die Hochkommata waren ein Autoformat-Fehler hier in meiner Online-Formulareingabe.
      2. Es fehlte ein LEERZEICHEN VOR dem Anfangs-Hochkommata von msg.text!
      os.execute(„/home/pi/tg/send_script „.. „Dirk_xxx“ ..“ ‚“.. msg.text ..“‚“)

      ich hoffe, das es jetzt bei der Formatierung hier richtig rüberkommt. Bei jedenfalls funktioniert der Code.

      Unabhängig davon zwei weitere Bemerkungen:
      1. Auch der alternative Code
      ———-
      send_msg (‚Dirk_xxx‘, msg.text, ok_cb, false)
      ———-
      funktioniert, um die erhaltene Nachricht an einen vorher angelegten Kontakt WEITERZULEITEN. Dies ist mir mit der lua-Funktion „fwd_msg“ nicht gelungen – warum auc h immer.
      2. Wenn mehrere „send_msg“-Befehle hintereinander im lua-script ausgeführt werden kann nicht sichergestellt werden, dass diese Befehle immer in der gleichen Reihenfolge ausgeführt werden. Warum auch immer, ich kann dieses Phänomen nicht erklären, aber auf meinem PI ist das einfach so.
      Felix, nochmals vielen herzlichen Dank für Deine hervorragende Unterstützung hier!

  56. Dirk sagt:

    Frage zu einer weiteren Hürde (für mich):
    Ich suche nach einer Möglichkeit, dass die test.lua (aus bestimmten Grund die test.lua ) eigenständig Nachrichten versendet, ohne von aussen über eine telegram-message dazu angetriggert worden zu sein. Quasi eigenmotiviert.

    In welche Funktion in der test.lua packe ich das rein (function cron?). Ich möchte mich nach Möglichkeit nicht mit dem telegeram-bot auseinander setzen müssen. Danke schon mal!

  57. Stefan sagt:

    Hallo ich wollte mal fragen was es sein kann wenn sich Telegramm auf dem pi immer aufhängt

  58. Thomas sagt:

    Servus erst mal Riesen Lob für das Tutorial ist echt klasse !

    Nur frag ich mich wie ich Telegramm im Terminal öffnen kann ??

    • Felix sagt:

      Hallo Thomas,
      einfach ins Verzeichnis wechseln und die telegram-cli über die Konsole ohne zusätzliche Befehle (ggf. mit Ausnahme der key file) starten.
      LG Felix

  59. Endi sagt:

    Hi,

    ich hätte eine Frage und zwar:

    Wenn ich das send_script über einen python Code aufrufe,

    subprocess.check_call([‚/path/send_script/‘ + ‚Receiver‘ + ‚“Hello“‚])

    dann führt er Telegram als root aus und will dass ich eine Telefonnummer angebe, mich also nochmal anmelde ( mit root). Gibt es eine Möglichkeit dies als bestimmten User auszuführen ( su user davor habe ich probiert, ohne Erfolg)?

    Würde mich über jede Hilfe oder andere Lösungsansätze freuen.

    Zusatzinformaton: Das anmelden über root mit der gleichen Telefonnummer funktionert zwar, ist in meinen Augen aber nicht so elegant, zudem, weil es dann zusätzlich eine Fehlermeldung mit sich bringt:

    change_user_group: can’t find the user telegramd to switch to

    • Endi sagt:

      Lösung gefunden:

      Im Bash Script ein einfaches sudo su -c command user.
      Also:

      #!/bin/bash
      /home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -e „msg $1 $2″

      Zu:

      #!/bin/bash
      sudo su -c “ /home/pi/tg/bin/telegram-cli -k /home/pi/tg/tg-server.pub -W -e \“msg $1 $2\““ pi

      (Für pi den gewünschten User eintragen)

      Bei Python dann beachten:

      subprocess.check_call([‘/path/send_script/’ + ‘Receiver’ + ‘”Hello”‘])

      Zu:

      subprocess.check_call([‘/path/send_script/’ + ‘Receiver’ + ‘ \’Hello\‘ ‘])

  60. Fillip sagt:

    Hallo,

    ich hatte versucht die tg_actions.py anzupassen, das bei einem Befehl ein Skript gestartet wird und zwar so,

    elif sys.argv[1] == „Standheizung“:
    print „Standheizung wird gestartet“
    os.system(„/home/pi/shz/shz_on.sh“)

    Jedoch wird mir im Telegram immer nur die Rückmeldung „Fehler “ geliefert…
    Der Befehl Standheizung soll halt ein Skript startet auf dem Pi

    • Felix sagt:

      Kannst du dein ganzes Skript auf http://pastebin.com/ kopieren und hier verlinken? Denke nämlich, dass es an einer anderen Stelle hakt.
      Funktionieren andere Befehle?

    • Fillip sagt:

      Hallo Felix,

      hier http://pastebin.com/TMuzdu1y habe ich es mal hochgeladen.

      Ich habe auch mal probiert die test.lua anzupassen, leider auch ohne erfolg…
      http://pastebin.com/azrVE0sB

    • Felix sagt:

      Folgende Zeile:

      elseif (string.lower(msg.text) == 'Standheizung') then

      Schreib ’standheizung‘ klein, sonst wird es nie klappen (string.lower).
      LG Felix

    • Fillip sagt:

      Ach ja, andere Befehle wie uptime oder reboot funktionieren…

    • Fillip sagt:

      Müssen denn die Befehle in der tg_actions.py und test.lua angegeben werden, oder reicht es die tg_actions.py zu „erweitern“?

      Und ich kann mittels dem Befhel „echo $(echo „scale=3; $(grep ‚t=‘ /sys/bus/w1/devices/w1_bus_master1/28-0004773ee8ff/w1_slave | awk -F ‚t=‘ ‚{print $2}‘) / 1000″ | bc -l) °C“ die Temperatur vom DS18B20 in der Konsole abfragen, wie kann ich das ganze denn realisieren dass mir dieser in Telegram auf Nachfrag (bsp. Temperatur) gesendet wird?

    • Felix sagt:

      Du kannst die tg_actions.py auch erweitern, ohne ein weiteres Skript aufzurufen, das ist ganz dir überlassen. Mittels Python (os.system()) kannst du bash Befehle angeben, also sollte es eigentlich klappen.

  61. Damian97 sagt:

    Heii
    Hätte 3 Kurze Fragen:
    Wie geht das mit den GPIO ansteuern?
    Kann man auch machen, dass wenn ein an den GPIO befestigter Schalter betätigt wird, das Raspberry von sich aus eine Nachricht verschickt?
    Kann man machen, dass Telegram direkt nach dem Auf starten automatisch geöffnet wird?
    Gruss Damian97

  62. Damian97 sagt:

    Guten Abend
    Ich hätte noch 2 Fragen.
    Frage 1:
    Ich möchte, das wenn ich dem Raspberry die Nachricht “Ein” schicke, ein Python scribt ausgeführt wird welches einen GPIO ansteuert.
    Das python scribt ist bereits erstellt und funktioniert. Aber was muss im Lua scribt stehen?

    Frage 2
    Ich möchte, dass wenn der GPIO Pin 5(input) von 0 auf 1 wechselt, mir das Raspberry eine Nachricht sendet.
    Wie soll ich da vorgehen?

    Tut mir leid ich bin ein blutiger Anfänger, brauche das aber für ein Schulprojekt.
    Währe froh um schnelle Antwort
    Gruss Damian97

    • Felix sagt:

      Schaut dir das Skript noch mal an. Mit os.execute kannst du dein Python Skript aus der Lua Datei starten.
      Bzgl. deiner zweiten Frage: Du musst telegram vom Python Skript aus aufrufen und deine Nachricht + Empfänger angeben. Auch da solltest du dir das Beispiel nochmal ansehen, denn beides ist bereits aufgeührt.
      LG Felix

    • Damian97 sagt:

      Ok, danke viel mal für die Antwort.
      Tut mir leid für die dummen Fragen. Bin echt völliger Neuling und zur Zeit gerade recht im Stress. Das ganze will einfach irgendwie nicht funktionieren…

    • Felix sagt:

      Was funktioniert denn genau nicht? Poste deinen Code doch mal auf http://pastebin.com/ und verlink ihn hier.

  63. DAMIAN97 sagt:

    Bekomme immer wenn ich den befehl sende diese meldung.
    *** lua: /home/pi/tg/test.lua:55: attempt to call global ‚get_title‘ (a nil value)

  64. Damian97 sagt:

    Habe im moment noch genau dein scribt. Noch nichts geändert.

  65. Damian97 sagt:

    Heii
    Soweit funktioniert es jetzt. Ich habe ein Bisschen probiert. Allerdings was ich immer noch nicht ganz begreife, ist wie man von einem GPIO angesteuert eine Nachricht senden kann. Könntest du mir da evtl. noch kurz ein Beispiel machen.
    Danke viel mal für die Zeit die du Investierst!
    Gruss Damian97

    • Felix sagt:

      Du hast ein Skript, welches nur die GPIOs überwacht (z.B. mit einer Endlos-Schleife oder Triggers). Sobald eine Veränderung wahrgenommen wird, startest du ein zweites Skript (dein Telegram Skript) bzw. einfach einen Befehl und übergibst den Text, der gesendet werden soll.

  66. Damian97 sagt:

    wie könnte dieses skribt z:B aussehen? Das welches die GPIO überwacht

  67. Mick sagt:

    Mahlzeit,

    erstmal vielen Dank für das tolle Tut. Habe Telegram auf einem pi2 (wheezy) stabil zum Laufen bekommen und div. Antworten/Skripte integriert. Nun habe ich ein kleines Bash-Skript erstellt, welches eine kleine weckfunktion zur verfügung stellt. Sende ich also /wecker per telegram erhalte ich zu einer fest eingestellten Uhrzeit eine Erinnerung geschickt. Nun würde ich dies gern etwas flexibler gestalten in dem ich die Uhrzeit mit übergeben möchte…
    Beispielbefehl, welche per Telegram geschickt wird: /wecker 10:15

    Hat jemand eine Idee, wie ich die Uhrzeit 10:15 an das Lua-Script übergeben kann? Wie ich die Variable dann in die Bash bekomme, wüsste ich.

  68. MICK sagt:

    Hallo Felix,

    vielen Dank für deine Hilfe. Ich komme leider mit dem string.sub() überhaupt nicht zurecht. Im Lua Skript kann ich den gesendeten Command folgendermaßen aufnehmen:

    print(„Test: „..msg.text) –> Ausgabe: Test2: /wecker 13:15

    Kannst du mir dabei behiflich sein, den o.g. String so zu zerlegen, dass nur noch die Uhrzeit 13:15 über bleibt?

    Grüße M.

    • Felix sagt:

      Du kannst dir auch mal diesen Link ansehen: http://lua-users.org/wiki/SplitJoin
      Damit würde ich msg.text anhand der Leerzeichen aufteilen und dann eben überprüfen, ob der erste Teil gleich "/wecker" ist und falls ja, den zweiten Teil nochmals splitten (diesmal anhand des Doppelpunktes) und schon hast du Stunde und Minute. Natürlich solltest du noch ein paar sicherheitsrelevante Abfragen machen (was wenn etwas anderes statt einer Uhrzeit angegeben wurde, etc.).

  69. Mick sagt:

    Hallo Felix,

    zusätzliche Abfragen werden nicht benötigt, da ich am Anfang des Lua-Skriptes bereits einen Filter eingebaut habe, der ausschließlich meinen Absender zulässt. Werd mir das heut abend mal in Ruhe anschauen, vielleicht kommt ich so weite. Vielen Dank schon mal an dieser Stelle.

    • Felix sagt:

      Zusätzliche Abfragen im Sinne von, dass du dich auch vertippen kannst – ein Punkt statt Doppelpunkt, ein Buchstabe statt einer Zahl etc. Aber das ist nicht all zu schwer umzusetzen.

  70. Mick sagt:

    Leider komme ich mit Lua noch nicht wirklich zurecht… Wenn ich das Test-Skript mit dem folgenden Inhalt starte, erhalte ich schonmal den 1. Teil, kannst du mir helfen an die Uhrzeit zu kommen?

    #!/usr/local/bin/lua
    --Aufruf mit lua /home/pi/skripte/test.lua
    str, sep = "/wecker 13:15"," "
    fields = {}
    str:gsub("([^"..sep.."]*)"..sep, function(c) table.insert(fields, c) end)
    for i,v in ipairs(fields) do
    print (v)
    end
  71. Mick sagt:

    Hallo Felix,

    ich denke ich konnte das Problem mit dem String lösen… Nun noch eine Kleinigkeit, vielleicht kannst du mir dort auch helfen?

    Damit ich auf unterschiedliche Commands reagieren kann, starte ich für jeden Command vorher mit der folgenden Abfrage:

    if (msg.text == '/wecker' or msg.text == '/Wecker') then
    .....

    Der Command löst nur aus, wenn lediglich nur /wecker per Telegram gesendet wird. Wie baue ich nach /wecker noch einen Platzhalter ála * ein, sodass auch auf /wecker 12:14 reagiert wird??

    • Felix sagt:

      Dafür habe ich dir doch substring/split als Rat gegeben. Du vergleichst hier auf genau diesen String. Wenn du den String splittest kannst du schauen, ob der erste Teil gleich "/wecker" ist.

  72. Mick sagt:

    Stimmt, das wäre auch ein Weg gewesen. Konnte es nun aber auch folgendermaßen lösen:

    if (msg.text ~= '/wecker' or msg.text ~= '/Wecker') then
    .....

    Also statt „==“ lieber „~=“ verwenden und schon werden nachfolgende Command mit durchgelassen. Vielen Dank für deine inputs und einen schönen 4. Advent.

    LG M.

    • Felix sagt:

      Hallo Mick,
      ich dachte du willst die Uhrzeit auch mit auslesen? Daher würde ich einfach einmal den String aufteilen und dann vergleichen. Aber es führen mehrere Wege nach Rom 🙂
      LG Felix

  73. kluski sagt:

    Hy Felix,
    danke für das Tutorial. Alles läuft super will demnächst noch eigene Projekte damit realisieren. Davor wollte ich gern wissen, ob ich etwas falsch gemacht habe. Eine Rückmeldung dauert lange (min. 8 Sek bis 10 Sek), ist das normal oder habe ich etwas übersehen?
    Danke im voraus.
    Kluski

    • Felix sagt:

      Hast du den Code 1:1 so umgesetzt oder Modifikationen durchgeführt? Ich musste aber auch vereinzelt länger auf die Rückmeldung warten, normalerweise ging es aber flott.

  74. Kalla sagt:

    Hallo zusammen,
    bei mir hat es gut 1 Jahr funktioniert. Seit neues stürzt Telegram-cli auf dem Respberry ab, wenn ich ein Befehl sende der nicht unterstützt wird. Fehler wird zurückgesendet.

    Des Weiteren habe ich noch telegram-cli 1.1 installiert. Es gibt aber schon V1.3 wie kann ich updaten ?

    Gruß
    Kalla

  75. Jonas sagt:

    Hallo,
    Ich habe ein Problem. Undzwar hatte ich alles genauso gemacht wie im tutorial. Als erstes wurde wenn ich etwas geschrieben habe „Ungültige Nr.“ geschickt. Das habe ich gefixt indem ich bei der test.lua statt Kontakt Name meinen Kontakt reingeschrieben habe. Allerdings schickt der raspi nun keine Nachricht mehr wenn ich z.b. uptime schreibe. Was kann ich machen?

    • Felix sagt:

      Hast du den Kontakt und dessen Nummer mit Telegram gespeichert/hinzugefügt?

    • Jonas sagt:

      Ja ich habe den Kontakt eingetragen als ich in dieser Telegramkonsole war.

    • Felix sagt:

      Ich denke, dass bei der Abfrage etwas nicht klappt. Du kannst ja mal die Schritte loggen, um rauszufinden, woran es liegt. Ich denke wie gesagt, dass der Kontakt falsch eingetragen ist oder die Abfrage nicht das korrekte Ergebnis liefert.

    • Jonas sagt:

      1. Was ist loggen?
      2. Wenn ich was schreibe und die Telegramkonsole geöffnet ist, steht da auch mein Name aber ich versuche jetzt noch einmal den Kontakt einzugeben

    • Felix sagt:

      Poste mal deinen Code auf Pastebin oder so und verlinke ihn. http://pastebin.com/
      Wie weit kennst du dich mit der Programmierung aus? Loggen tut man an bestimmten Punkten, um z.B. Fehler zu suchen.

    • Jonas sagt:

      Ich bin leider noch beim Anfang vom Programmieren, aber sah dieses Projekt als sehr nützlich.

      test.lua:
      http://pastebin.com/5n0JZdf6

      tg_actions.py:
      http://pastebin.com/7diyavA6

      send_script:
      http://pastebin.com/H2bi8xkn

    • Felix sagt:

      Füge mal in Zeile 90 so etwas ein wie:

      print ("Uptime abgefragt")

      Vor anderen Zeilen kannst ähnliche Prints anbringen und damit schauen, was ausgeführt wird. Erscheint es nicht in der Konsole, wird es nicht ausgeführt.

    • Jonas sagt:

      Ok es wird nicht ausgeführt. In der Konsole steht:
      [19:22] Ich >>> uptime

    • Felix sagt:

      Dann wird der Kontakt(name) wohl nicht stimmen, nehme ich an. Speicher den kontakt ggf. mal ohne Leerzeichen und nur klein geschrieben, etc.

    • Jonas sagt:

      Kleingeschrieben:
      > add_contact +4912345678910 mein name
      mein name
      User mein name is typing
      [15:00] mein name >>> hi
      User mein name online (was online [2016/01/31 15:05:16])

      Zusammengeschrieben:
      > add_contact +4912345678910 meinname
      FAIL: 38: can not parse string arg #2

      (Ich habe eigentlich meinen richtigen Namen hingeschrieben den ich auch bei Telegram verwende)
      Es hat sich leider nichts verändert…

    • Felix sagt:

      Hast du die Nummer gelöscht, bevor du sie wieder hinzugefügt hast? Ansonsten würde ich mal im Forum nachfragen: https://github.com/vysheng/tg/issues

  76. Marco sagt:

    bekomme beim ausführen der Python datei folgenden fehler:
    pi@raspberrypi:~ $ sudo python /home/pi/tg/tg_actions.py
    File „/home/pi/tg/tg_actions.py“, line 9
    print „Das System wird heruntergefahren“
    ^
    IndentationError: expected an indented block

    • Felix sagt:

      Du verwendest Tabs und Leerzeichen. Das ist für den Compiler aber nicht das selbe. Wenn du in der Zeile vorher z.B. 4 Leerzeichen verwendest, muss dies auch in der nächsten Zeile so sein und kein Tab (vorausgesetzt sie sollen in einer Ebene sein).

  77. Jan-Eric sagt:

    Hallo 😀 ka ob mein erster Kommentar hier gelandet ist, scheinbar nicht, zumindest ist er hier nicht zu sehen… Vorab erstmal Hammer Tutorials super erklärt und nachvollziehbar. Dennoch habe ich bei mir ein kleines Problemchen : wenn ich dem Pi die Befehle wie shutdown usw sende, passiert einfach garnichts, die Nachricht kommt zwar an, aber der Pi schaltet sich dann nicht aus oder sonst irgendwas. Ich habe alles 1:1 wie in deinen Tuts gemacht dennoch geht es nicht, kannst du mir da vlt iwi helfen?

  78. Paulner sagt:

    Hallo,
    ein super Tutorial, nur leider mag mein Pi nicht mal einen gelesen Haken setzen, woran liegt das? Mein Quelltext ist auszugsweise der hier:

    function on_msg_receive (msg)
      if started == 0 then
        return
      end
      if msg.out then
        return
      end
    
      if msg.text then
      mark_read(msg.from.print_name, ok_cb, false)
      end
    • Felix sagt:

      Kommt deine Nachricht denn auf dem Pi an? Du kannst das z.B. mit einem Log auf der Konsole überprüfen.

    • Paulner sagt:

      Ja, es kommt an.

    • Felix sagt:

      Wie hast du das getestet? Schreib mal ein print("angekommen") bevor der Gelesen Haken eigentlich gesetzt werden sollte (im Code). Wird das „angekommen“ auf der Konsole ausgegeben (starte es nicht im Hintergrund sondern direkt), so weißt du, dass der Pi die Nachricht erhalten hat.

    • Paulner sagt:

      Also ich sehe alle Nachrichten und wenn ich mit meinem Handy online bin, aber mein Pi reagiert auf kein Kommando bzw. schickt auch keinen ‚gelesen‘ Haken…

  79. Paulner sagt:

    Ich beschäftige mich mit dem Pi und Linux erst seit ein paar Tagen; wie rufe ich den Log auf?

  80. Paulner sagt:

    Also ich hab es so gestartet:
    screen -S TelegramCLI ~/tg/bin/telegram-cli ~/tg/test.lua -k ~/tg/tg-server.pub
    Und es zeigt mit nur die Nachrichten, die der Pi empfängt an

    • Felix sagt:

      Du musst rausfinden, warum er nicht an den Punkt gelangt, an dem der Haken gesetzt wird. Wenn die Nachrichten empfangen werden, kannst du Schritt für Schritt Logs setzen und schauen was wird ausgeführt und was nicht. Btw: Ich würde nicht screen verwenden, wenn du debugst, da du den Output ja live sehen willst (einfach telegram-cli inkl. Parameter aus der Konsole aufrufen).
      LG Felix

  81. Alex sagt:

    richtig gutes Tutorial
    bei mir klappt soweit alles Einwandfrei

    allerdings würde ich jetzt gerne auch auf mehrere Nachrichten hintereinander reagieren.

    heißt Wenn ich zum Beispiel „reboot“ schreibe soll erst als Antwort „Willst du wirklich neu starten?“ kommen und wenn ich darauf dann „ja“ schreibe soll der Pi rebootet werden wenn ich „nein“ schreibe soll als Antwort „reboot abgebrochen“ kommen und dann sollen wieder die Standard-Befehle erkannt werden also auf ein erneutes „nein“ würde wieder „Fehler“ zurückkommen..

    Geht das irgendwie und wenn ja wie

    LG Alex

    • Felix sagt:

      Ja, das geht 🙂 Ich würde dazu z.B. den letzten ausgeführten Befehl irgendwo (z.B. in einer Textdatei) speichern. Du prüfst bei einer Eingabe dann, ob ein vorheriger Befehl gespeichert wurde. Falls ja überprüfst du die neue Eingabe (ja/nein/else) und reagierst darauf (am Ende solltest du die Datei leeren). Falls nicht überprüfst du die Eingabe ganz normal auf die bisherigen Befehle (reboot/shutdown/uptime/etc) und speicherst ggf. den Befehl in der Datei, falls darauf im nächsten Schritt reagiert werden soll.
      LG Felix

  82. Raphael Schib sagt:

    Guten Morgen Felix
    Zuerst mal ein grosses Kompliment, einfach ein super Tutorial! Es klappt wirklich alles bestens.
    Nun möchte ich aber, dass mir nicht nur eine Zeile als Antwort zurück geschrieben wird sondern ganze Dokumente. Ich habe mal ein bisschen mit file.readlines herum probiert, jedoch bekam ich immer nur die erste Zeile ans Antwort.
    Hättest du hier eine Idee?

    Danke und liebe Grüsse aus der Schweiz.
    Raphael

    • Felix sagt:

      Hi Raphael,
      hast du mal versucht das Dokument in eine Variable zu lesen und mit \n (Backslash und dann n) statt jedem Zeilenumbruch zu setzen? Eventuell kannst du dann den ganzen String inkl. Zeilenumbrüche versenden.

    • Raphael Schib sagt:

      Hallo Felix
      Danke für deine schnelle Antwort.
      Ja das habe ich eben auch schon probiert und zwar so:
      file = open(‚./test‘, ‚r‘)
      print file.readlines()
      file.closed

      [‚hallo wie \n‘, ’sdfsaf\n‘, ‚dsfsdf\n‘, ‚dssaf\n‘]

      Als Nachricht bekomme ich nur „[hallo“ 🙂

      Mit freundlichen Grüßen
      Raphael

    • Felix sagt:

      Ich meinte es als einen kompletten String, also z.B: 'hallo wie \nsdfsaf\ndsfsdf\ndssaf\n'

    • Raphael Schib sagt:

      Habe heraus gefunden was das Problem war. Und zwar das Leerzeichen das Problem 🙂

  83. Fabian sagt:

    Hallo,
    kann mir jemand bitte helfen?
    Ich habe heute meinen pi 3 bekommen und habe noch nicht viel Ahnung^^ .Kann mir jemand bitte sagen was daran faklsch ist/ich verändern muss? Es kommen 2 Hacken, aber keine Nachricht zurück

    function on_msg_receive (msg)
    if started == 0 then
    return
    end
    if msg.out then
    return
    end
    --Damit der "Gelesen Haken" erscheint
    if msg.text then
    mark_read (msg.from.print_name, ok_cb, false)
    end
    
    --Ggf. nur eine Rufnummer zulassen:
    if msg.from.print_name ~= 'Vorname Nachname' then
    return
    end
    if (string.lower(msg.text) == 'uptime') then
    local handle = io.popen("sudo python /home/pi/tg/tg_actions.py uptime")
    local res = handle:read("*a")
    handle:close()
    return
    elseif (string.lower(msg.text) == 'shutdown') then
    local handle = io.popen("sudo python /home/pi/tg/tg_actions.py shutdown")
    local res = handle:read("*a")
    handle:close()
    return
    elseif (string.lower(msg.text) == 'reboot') then
    local handle = io.popen("sudo python /home/pi/tg/tg_actions.py reboot")
    local res = handle:read("*a")
    handle:close()
    return
    else
    end
    
    end

    Danke schon mal 🙂

  84. Fabian sagt:

    http://pastebin.com/ha8QQ3yY
    http://pastebin.com/ddeHrLSx
    Das sind die beiden Dateien, die ich habe.
    Danke für die Antwort:)

    • Felix sagt:

      Also du hast den Namen nicht angepasst (Zeile 15, zweite Datei) oder hast du deine eigene Nummer als „Vorname Nachname“ eingespeichert?

    • Fabian sagt:

      Doch, ich wollte nur meinen Namen hier nicht öffentlich posten^^
      und sonst stimmt alles ? ich komme da echt nicht weiter :/

    • Felix sagt:

      Hast du auch versucht schrittweise zu debuggen? Sprich z.B. logs zu setzen und zu schauen, bis wohin es ausgeführt wird?

    • Fabian sagt:

      wie debuggt man etwas den ? welche logs muss man setzten? wie gesagt ich bin ganz neu im bereich raspberry:)

  85. Jens sagt:

    Ich hänge auch genau an dieser Stelle fest:
    if msg.from.print_name ~= 'Jens Nachname' then...
    Das ist immer war, auch wenn Jens Nachname was schickt. Jens Nachname ist als einziger Eintrag in den Kontakten drin.

    Ich habe zwei Clients laufen. Einen auf Android auf meinen Namen „Jens Nachname“.
    Der andere ist telegram-cli auf Ubuntu für den User „Manfred Nachname“.
    Die können sich prima unterhalten.

    Das lua Skript läuft (natürlich bei telegram-cli für Manfred Nachname), kommt aber über die Abfrage oben nie weiter. Die Abfrage ist immer wahr 🙁

    Außerdem möchte ich sowieso lieber die ID statt des Namens abfragen. Ich habe es auf Verdacht versucht mit
    if msg.from.id ~= ‚215836652‘ then
    oder auch
    if msg.from.id ~= 215836652 then
    -> Kein Fehler aber auch keine Verbesserung.

    Auch mit dem Usernamen (der mit @ beginnt) habe ich es versucht. Mit und ohne vorangestelltes @. Immer ohne Erfolg.

    Frage 1: Wie geht überhaupt eine funktionieren Abfrage?
    Frage 2: Wie geht es über die ID? (Denn der Displayname ist nicht sicher)

    • Felix sagt:

      Hast du mal alle diese Werte ausgeben lassen (msg.from.print_name usw. per print ausgeben)? Am besten ganz am Anfang der FUnktion, sodass es erst einmal für jeden User angezeigt wird. So kannst du die Details (Name, User, etc.) desjenigen finden, welcher dir eine Nachricht geschrieben hat (z.B. du selbst).

  86. Jens sagt:

    Puh, teilweise etwas herausgefunden:

    Antwort zu 1: Die Abfrage muss lauten
    if msg.from.print_name ~= ‚Jens_Nachname‘ then…

    Entscheidend ist der Unterstrich statt eines Leerzeichens. Wurde diese Falle irgendwo erwähnt? Ist mir nicht aufgefallen.

    Frage 2 interessiert mich aber weiterhin.

  87. Rudik sagt:

    Hallo, ist es möglich, dass telegram die nachrichten in einem gesichertem chat versendet. sprich secure_chat?

  88. Rudik sagt:

    Ein anderes Problem ist, dass ich telegram ansteuern kann, uptime, shutdown und reboot funktionieren perfekt…jedoch schafft es das system nicht die nachricht vorher als gelesen zu markieren, was dazu führt, dass reboot und shutdown nach einem neustart sofort wieder ausgeführt werden. sprich ich habe eine schleife drin 🙁 ist es möglich einen sleep befehl einzubauen, dass telegram 20 sekunden wartet, bevor der befehlt ausgeführt wird?

  89. Rudik sagt:

    Ok, das mit der Sleep funktion klappt, jedoch markiert er die nachricht nicht als gelesen, und wenn ich telegram neu öffne, führt er den befehl erneut aus. also immernoch in der loop schleife ;(
    @Felix: Hast du dich schon mal mit dem telepot beschäftigt? (http://www.instructables.com/id/Set-up-Telegram-Bot-on-Raspberry-Pi/?ALLSTEPS)

    • Felix sagt:

      Das Problem was ich damals in den Telegram Bots gesehen habe, ist dass sie für Jedermann zugänglich sind. Ich emppfand das als nicht unbedingt gewünscht. Wenn es allerdings Anklang findet, könnte ich darüber bestimmt etwas schreiben.

  90. Dan sagt:

    Also ich verzweifle an deinem Python Script 🙁

    Ich bekomme die ganze Zeit diesen Fehler:

    File „tg_actions.py“, line 15
    uptime_seconds = float(f.readline().split()[0])
    ^
    IndentationError: expected an indented block

    Ich habe bereits geprüft auf Spaces oder Tabs, es sind immer 4, genau dort wo sie hingehören. Habe das Script sogar noch mal händisch geschrieben, es funzt einfach nicht bei mir 🙁

    Hast du noch irgend eine Idee ?

  91. Dan sagt:

    Sobald ich den Part mit der Uptime auskommentiere funktioniert das Script tadellos, sehr merkwürdig.

  92. Dietmar sagt:

    Hallo Felix,
    🙂 good work 🙂 schönes Tut 🙂 Respekt !!!
    Wie bringe ich Telegram dazu, seine Console-Ausgaben zu loggen ?
    Aufruf … -L /tmp/Telegram.log (oder /var/log/Telegram.log) -l 1 (oder -l 5)
    erzeugt keine der Files ! Die Scripts laufen, Frage/Antwort-Spiel funktioniert.
    Ich hätte gerne das ALLES (User xxx online; User xxx marked; …) in einer LOG-Datei gespeichert wird. Was mich verwirrt, das er gar keine LOG anlegt. Auf vysheng nichts hilfreiches gefunden (mein english ist nur rudimentär).
    Gruß Dietmar

    • Felix sagt:

      Hallo Dietmar,
      ausloggen habe ich nie explizit gebraucht, es reichte wenn ich die config Files gelöscht habe.
      Bzgl loggen: Mit den Shellbefehl echo "Test test" >> /pfad/datei.txt kannst du loggen. Statt echo könntest du auch jeden anderen Befehl nutzen, siehe hier.

  93. Dietmar sagt:

    Danke Felix !

    Ich habe soeben bei vysheng/tg ein issue erstellt.
    Schaun mer ma ob die entwickler mich verstehen und ich dann die antwort 🙂
    (me and english – a never ending story 🙂

  94. Christian sagt:

    Moin,

    tolles Tutorial, trotz meiner wenigen Kenntnisse habe ich es relativ gut zum laufen bekommen.
    Bis auf den Autostart läuft es auch soweit ganz gut, das Problem liegt dabei nicht unbedingt in der Einbindung im Autostart, sondern eher an der Verarbeitung der Nachrichten. Wenn ich dem System einen Reboot oder Shutdown Befehl sende, bleiben die Nachrichten ungelesen und es kommt auch keine Antwort vom Raspberry zurück, der Befehl wird stumpf ausgeführt. Nach dem Neustart wenn ich die Skripte wieder starte wird der letzte Befehl solange immer wieder bearbeitet, bis das System irgendwann mal einen neuen Befehl oder einen Text, den es nicht zuordnen kann als letzte Message hat.

    Ich hoffe das war so halbwegs verständlich 🙂 und hoffentlich hat jemand eine Idee wie ich es hinbekomme, dass der Raspberry eine Antwort auf den Befehl gibt, bevor er ausgeführt wird.

    Gruß Christian

  95. Marcel sagt:

    Hallo,

    damit dies funktioniert und du auch eine Antwort bekommst, könntest du die „tg_actions.py“ bearbeiten mit einer Verzögerung von 1 min. bei den Befehlen „shutdown“ und „reboot“.
    ——
    #!/usr/bin/python

    import sys
    import os
    from datetime import timedelta

    if sys.argv[1] == „shutdown“:
    print „Das System wird in 1 min. heruntergefahren“
    os.system(„shutdown -h 1“)
    elif sys.argv[1] == „reboot“:
    print „Das System wird in 1 min. neugestartet“
    os.system(„shutdown -r 1“)
    elif sys.argv[1] == „uptime“:
    with open(‚/proc/uptime‘, ‚r‘) as f:
    uptime_seconds = float(f.readline().split()[0])
    uptime_string = str(timedelta(seconds = uptime_seconds))
    print(uptime_string[:-7])
    #else:
    #falls kein Argument zutrifft
    ——
    So sollte es funktionieren….

    Lg, Marcel

  96. Alex A. sagt:

    Hallo, hab’s endlich geschafft das alles Funktioniert. Natürlich Dank dieser Super Anleitung. Ich würde gerne in der test.lua einen URL Aufruf ausführen. Kann mir bitte jemand helfen.
    So etwas habe ich vor:

    if (msg.text == ‚Out1‘ or msg.text == ‚out1‘) then
    send_url (192.168.xxx.xxx/ausgang1_setzen)
    return
    end

    MfG Alex

    • Alex A. sagt:

      Hallo Felix,

      danke aber ich verstehe nur Bahnhof. Aber so habe ich es gelöst und funktioniert.

          os.execute('wget -O /dev/null "http://192.168.xxx.xxx:xx/control/trigger_event?event_name=OnDTMF_%22%23%22&event_source=doorpi.sipphone.linphone_lib.CallBacks"')

      Jetzt brauche ichs genau anders rum. Was muß ich z.B. im Browser eintippen damit ich eine Nachricht senden kann?
      Oder ist das nicht möglich?

      IPvomRasspberryPimitTelegram_cli:Port/?msg Vorname_Name „Hallo!“

      LG, Alex

    • Felix sagt:

      Du könntest eine PHP Seite erstellen und exec nutzen, um ein Skript (z.B: Telegram Send Skript) zu starten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!