Von der Beere eine Nachricht über Telegramm senden - bei Ereignis

  • Hallo,

    ich kann vom Handy eine Anfrage senden "/time" und bekomme die Antwort von der Beere mit der aktuellen Zeit.


    Nun habe ich versucht, ohne die Anfrage vom Handy was zu senden, aber es klappt leider nicht.

    versucht habe ich es so:

    Code
    import telepot
    bot = telepot.Bot('467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg')
    userlist = (10,50)
    for userID in userlist:
        bot.sendMessage(userID, 'Das ist die Nachricht')

    was ich nicht raus bekomme, ist die ID, die zum versenden an das Handy gebraucht wird. Die o.g. Eintragung "

    Code
    userlist = (10,50)

    wird sicherlich bei mir nicht passen.

    Hat jemand eine Idee, wie ich das Problem löse? oder auch einen anderen Weg?

    Ich möchte bei eintreten eines Ereignisses, wie zB. Temperatur zu hoch (gemessen mit DS18b20) eine Nachricht über Telegram haben.:blush:

    Ja und sorry, wenn ich die ersten Fragen im falschen Thread geschrieben habe.

    Gruß und danke fürs lesen :)

    Ich habe eine Raspi Beere 3 und freue mich, dass sie läuft. Ich programmiere gern und freue mich wenn es auch funktioniert. Aber grundsätzlich hab ich keine Ahnung davon :conf:

    Bitte löscht nie dieses Forum! Hier steht alles drin was ich mir merken muss!

  • Von der Beere eine Nachricht über Telegramm senden - bei Ereignis? Schau mal ob du hier fündig wirst!

  • def handle(msg):
    chat_id = msg['chat']['id']

    Diese Zeile sorgt dafür, dass im funktionierenden Code die Chatid von deinem Handy bekannt ist.

    Somit erweitern wir das ganze mit einem print() in der Funktion, dann wird dir am terminal wo du den Telegram bot startest deine ID Ausgeben.

    Anschließend könntest du deine Chat id entweder Hardcoded in deinem 2. Codeblock hinterlegen, oder aber du verwaltetst die ID s über eine DB o.ä.

    Python
    def handle(msg):
        chat_id = msg['chat']['id']
        print("Chat-ID: {}".format(chat_id))
  • Danke Hofei,

    das Ergebnis sieht etwa so aus.

    print("Chat-ID: {}".format(chat_id)) = 545355354

    Wenn ich aber den Code ansehe, wo die Liste der ID's ( "userlist = (10,50)" ) einzugeben ist, habe ich Zweifel.

    DB=Datenbank? habe nur txt,csv oder andere Dateien...

    Ich habe eine Raspi Beere 3 und freue mich, dass sie läuft. Ich programmiere gern und freue mich wenn es auch funktioniert. Aber grundsätzlich hab ich keine Ahnung davon :conf:

    Bitte löscht nie dieses Forum! Hier steht alles drin was ich mir merken muss!

  • Also zum testen dass du (also genau ein Gerät) die Nachricht erhält würde dann das ganze so aussehen:

    Python
    import telepot
    bot = telepot.Bot('467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg')
    chat_id = "deine chat_id" #ohne ""
    bot.sendMessage(chat_id, 'Das ist die Nachricht')

    Sobald du dies ausführst müsstest du eine Nachricht mit dem Inhalt "Das ist die Nachricht" auf dein Handy erhalten.

    Wiederrum würd ich dir empfehlen deine Chat_ID im oberen Post unkenntlich zu machen. Genauso wie ich hoffe dass der Token ein Fake ist!

    Sorry für die Abkürzung DB = Datenbank ja. Je nachdem was du vor hast benötigst soetwas - oder eben auch nicht ;) auch in einer txt oder csv und vielen mehr könnte man die Informationen bzgl chat id etc. ablegen ja.

  • Code
    import telepot
    bot = telepot.Bot('467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg')
    chat_id = 545355354
    bot.sendMessage(chat_id, 'Das ist die Nachricht')

    so habe ich es probiert und es tut sich nix. :helpnew:

    PS: alle ID's sind erfundene Zusammenstellungen! also nicht ausprobieren :shy:

    Ich habe eine Raspi Beere 3 und freue mich, dass sie läuft. Ich programmiere gern und freue mich wenn es auch funktioniert. Aber grundsätzlich hab ich keine Ahnung davon :conf:

    Bitte löscht nie dieses Forum! Hier steht alles drin was ich mir merken muss!

  • also nochmals etwas abgewandelt:

    Python
    import telepot
    import sys
    
    TOKEN = sys.argv[1]
    chat_id = sys.argv[2]
    bot = telepot.Bot(TOKEN)
    bot.sendMessage(chat_id, 'Das ist die Nachricht')

    Funktioniert zu 100% da selbst gerade für dich getestest.

    hier musst du aber schon den Token und chat_id bei skript start als parameter übergeben!

    wobei dennoch somit auch das obere Beispiel funktionieren müsste! aber halt in der Form nicht getestet ;)

  • ich scheitere wohl an den Parametern...

    Token = 467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg ergibt:

      File "send.py", line 3

        TOKEN = 467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg

                         ^

    SyntaxError: invalid syntax


    Token = '467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg' ergibt:

    Traceback (most recent call last):

      File "send.py", line 6, in <module>

        TOKEN = sys.argv[1]

    IndexError: list index out of range


    ich glaube, ich habe noch nicht erwaehnt, dass ich erst seit wenigen Tagen mit Python was mache.:conf:

    und was dann noch hinderlich ist, dass die kleine Beere so langsam ist.:mad_GREEN:

    Ich habe eine Raspi Beere 3 und freue mich, dass sie läuft. Ich programmiere gern und freue mich wenn es auch funktioniert. Aber grundsätzlich hab ich keine Ahnung davon :conf:

    Bitte löscht nie dieses Forum! Hier steht alles drin was ich mir merken muss!

  • Hofei hat doch geschrieben:

    hier musst du aber schon den Token und chat_id bei skript start als parameter übergeben!

    Das muss dann etwa so aussehen:

    Code
    python3 send.py "467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg" 1234

    Wenn 1234 deine chat_id ist.

    Token müsstest du im Code als str angeben, so wie oben geht es nicht. die Chat ID kann meines Erachtens ein int oder ein str sein. Die übergebenen Argumente also sys.argv[1:] sind immer vom typ str.

  • Code
    python3 send.py "467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg" 1234

    E R F O L G !

    das hat nun geklappt!!! :danke_ATDE:

    Ich hab da so Wissensmangel. Ich danke fuer die Geduld!!!

    Ich habe eine Raspi Beere 3 und freue mich, dass sie läuft. Ich programmiere gern und freue mich wenn es auch funktioniert. Aber grundsätzlich hab ich keine Ahnung davon :conf:

    Bitte löscht nie dieses Forum! Hier steht alles drin was ich mir merken muss!

  • Vorbereitung:

    Auf meinem Smartphone ist bereits Telegram eingerichtet, also habe ich die URL https://web.telegram.org angesurft und hab mich verknüpft.

    Dann den BotFather ansurfen https://telegram.me/botfather und mit /newbot einen neuen Bot einrichten - Anweisungen folgen.

    Nun der wichtigste Schritt:

    Ein Bot kann nicht mit jemandem sprechen sofern der User keinen Chat mit dem Bot initialisiert hat.

    Um das einzurichten surft man einfach https://telegram.me/<bot-username> an, wobei natürlich <bot-username> mit dem zuvor eingestellten ersetzt werden muss.

    Nicht vergessen /start zu senden bzw die Konversation auch wirklich zu starten und auch irgendwas abzusenden wie zB "hallo".

    Wenn diese Schritte vollzogen wurden hat man 2 wichtige Informationen:

    - TOKEN

    - Chat_ID

    Über den Token spricht man seinen Bot über die API an.

    Über die Chat_ID wiederum den Chat den man im Smartphone geöffnet hat.

    Wenn du nun eine Nachricht über den Bot in den Chat absetzen willst brauchst du eben diese 2 Infos.

    So wie es aussieht fehlt dir die chat_id und die wiederum kriegst du wie folgt heraus:

    Wichtig zu wissen ist dass der manuelle Aufruf über die API über folgende URL behandelt wird: https://api.telegram.org/bot<TOKEN>/

    <TOKEN> natürlich wieder ersetzen, zum Beispiel mit 467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg

    Dann sähe die URL so aus: https://api.telegram.org/bot467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg/

    Und nun kommt 'the magic'... Man kann sich die Informationen des Bots wie folgt abrufen: https://api.telegram.org/bot467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg/getUpdates

    Die Ausgabe ist im sog. JSON Format und könnte zB wie folgt aussehen:

    Code
    {"ok":true,"result":[{"update_id":652097874,
    "message":{"message_id":21,"from":{"id":359607774,"is_bot":false,"first_name":"Olaf","language_code":"de"},"chat":{"id":359607774,"first_name":"Olaf","type":"private"},"date":1518215124,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}

    Uns interessiert hierbei nur ein Eintrag und zwar "chat" sowie davon der "id" Eintrag: 359607774 Das ist unsere chat_id

    Mit diesen Infos funktioniert der Code aus Beitrag#5 problemlos ;)

  • Das hatte ich auch versucht...

    wenn ich das eingebe:

    https://api.telegram.org/bot467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg/getUpdates


    kommt:

    Code
    {"ok":true,"result":[]}

    Ich habe eine Raspi Beere 3 und freue mich, dass sie läuft. Ich programmiere gern und freue mich wenn es auch funktioniert. Aber grundsätzlich hab ich keine Ahnung davon :conf:

    Bitte löscht nie dieses Forum! Hier steht alles drin was ich mir merken muss!

  • Tja was soll ich sagen, dann hast du vermutlich dem Bot noch keine Nachricht ("hallo" o.ä.) gesendet - bei mir funktioniert das.

    /start reicht nicht sondern wirklich eine normale Textnachricht.

    Siehe dazu auch

    http://telepot.readthedocs.io/en/latest/#receive-messages

    Durchsuche Mail und falls Bestimmter Inhalt vorhanden sende Nachricht mittels Telegram/Schicke Nachricht nach reboot

  • und nun noch was...

    Mit diesen Infos funktioniert der Code aus Beitrag#5 problemlos ;)

    Ich habe vorhin die Datei bei Seite gelegt, die diesen Code hat, wie im Beitrag #5

    Code
    import telepot 
    bot = telepot.Bot('467899999:AAF9ACwx_YJZstKl_dxXPqFgwX1LoaX8Wtg') 
    chat_id = 545355354 
    bot.sendMessage(chat_id, 'Das ist die Nachricht')

    Jetzt, nachdem es, wie in Beitrag #9 beschrieben war, funktioniert hat, jetzt klappt es auch mit dem Code aus Beitrag #5. Warum kann ich nicht sagen, aber jetzt geht es.

    Ich wiederhole mich gern :)

    Vielen Dank fuer die Geduld und die Muehe!


    Zitat

    Funktioniert zu 100% da selbst gerade für dich getestest.


    Hofei - danke!

    Ich habe eine Raspi Beere 3 und freue mich, dass sie läuft. Ich programmiere gern und freue mich wenn es auch funktioniert. Aber grundsätzlich hab ich keine Ahnung davon :conf:

    Bitte löscht nie dieses Forum! Hier steht alles drin was ich mir merken muss!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!