Telegram – Raspberry Pi Installation, Konfiguration und Beispiele

In dem Artikel möchte ich kurz beschreiben, wie man den Messenger Telegram auf einem Raspberry Pi installiert. Ich habe einige Projekte, bei denen die Kommunikation mit einem Raspberry ganz nützlich sein könnte/kann. Der Vorteil von Telegram gegenüber WhatsApp ist die öffentliche API (ApplikationInterface). Somit können Programmierer direkt auf die Funktionen des Service zugreifen. Durch die öffentliche API gibt es eine Vielzahl an Clients für die verschiedensten Betriebsysteme, die sich untereinander alle selbstständig synchronisieren. (mehrere Clients mit gleichem Account)

Ich habe mich für Telegram entschieden, weil meiner Meinung nach einer der größeren Vorteile der gut bedienbare Linux Client für die Kommandozeile ist. Das macht es für meine Projekte einfacher die entsprechenden Nachrichten zu versenden. Der nächste riesige Vorteil ist ein Lua Script, mit dem man auf verschiedene eingehende Nachrichten reagieren kann. Dazu später mehr.

Inhalt:

  1. Vorbereitung – Installation der benötigten Pakte
  2. Installation Telegram
  3. erster Test
  4. Fehlerbehebung
  5. Konfiguration
  6. Beispielcode für die Bash

1. Vorbereitung:

Die benötigten Pakete sollten entweder mit aptitude oder mit alt-get installiert werden. Zuerst das System auf den neuesten Stand bringen und danach die benötigten Pakete für Telegram installieren.

aptitude update && aptitude upgrade
aptitude install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make lua-lgi git

2. Installation Telegram:

Ich installiere bzw. lasse alle Sourcen bei mir ins gleiche Verzeichnis laden. /usr/local/src  Wenn Ihr dafür ein anderes benutzt, dann einfach in dieses wechseln. Nach dem git Kommando (download), wird configure und make ausgeführt. Das kann bis zu einer Stunde dauern.

cd /usr/local/src
git clone --recursive https://github.com/vysheng/tg.git && cd tg
./configure
make

3. erster Test

./bin/telegram-cli -v 3

Hier kommt die untere Fehlermeldung. Sollte dies bei euch nicht der Fall sein, dann einfach den Punkt überspringen.

4. Fehlerbehebung:

./bin/telegram-cli -v 3
change_user_group: can't find the user telegramd to switch to
Telegram-cli version 1.4.1, Copyright (C) 2013-2015 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.
Telegram-cli uses libtgl version 2.1.0
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
I: config dir=[/root/.telegram-cli]
> telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion `0' failed.
SIGNAL received

Eine schnelle Abhilfe für das Problem ist folgende Datei zu bearbeiten und die Zeilen 101 und 115 mit // zu kommentieren oder zu löschen.

joe tgl/mtproto-utils.c

Für Zeile 101 sollte das ganze dann so aussehen.

static unsigned long long BN2ull (TGLC_bn *b) {
  if (sizeof (unsigned long) == 8) {
    return TGLC_bn_get_word (b);
  } else if (sizeof (unsigned long long) == 8) {
//    assert (0); // As long as nobody ever uses this code, assume it is broken.
    unsigned long long tmp;
    /* Here be dragons, but it should be okay due to be64toh */
    TGLC_bn_bn2bin (b, (unsigned char *) &tmp);
    return be64toh (tmp);
  } else {
    assert (0);
  }
}

Danach muss wieder make ausgeführt werden, damit die Änderungen übernommen werden,

Jetzt kann wieder getestet werden.

./bin/telegram-cli -v 3
change_user_group: can't find the user telegramd to switch to
Telegram-cli version 1.4.1, Copyright (C) 2013-2015 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.
Telegram-cli uses libtgl version 2.1.0
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
I: config dir=[/root/.telegram-cli]
 *** 1470204339.219269 adjusting CLOCK_MONOTONIC delta to 2.256606
 *** 1470204339.251748 No such query
 *** 1470204339.272503 No such query
 *** 1470204339.305974 adjusting CLOCK_MONOTONIC delta to -2.274266
 *** 1470204339.509055 adjusting CLOCK_MONOTONIC delta to -2.467286
 *** 1470204339.536357 adjusting CLOCK_MONOTONIC delta to -3.829280
 *** 1470204339.935715 adjusting CLOCK_MONOTONIC delta to -4.819574
phone number: 

Wenn das alles so wie oben aussieht, kann man mit Ctrl-c das Programm abbrechen und die Files in die entsprechenden Verzeichnisse ins System kopieren. Das Verzeichnis in etc ist für den Pub-Key und das Botscript, welches ich später genauer beschreibe.

cp ./bin/telegram-cli /usr/local/bin/
mkdir /etc/telegram-cli
cp tg-server.pub /etc/telegram-cli/server.pub
cp test.lua /etc/telegram-cli/

5. Konfiguration:

Jetzt wird erneut das Programm gestartet. Dieses mal einfach mit diesem Kommando.

telegram-cli

Nach einer kurzen Weile kommt wieder die Frage nach der Telefonnummer. Ihr könnt jede x beliebige Telefonnummer verwenden. Ich habe zum Test erst mal meine Firmennummer genutzt. Später habe ich eine Simkarte benutzt, die eigentlich nur für Telefonate gedacht war. Man muss lediglich eine Handynummer angeben, an die der Freischaltcode gesendet werden kann. Die eigene Nummer würde ich nicht empfehlen, weil die Nachrichten dann sofort als gelesen markiert werden, wenn sie abgesendet wurden. So, wenn Ihr eine passende Simkarte habt, dann bitte die Telefonnummer ohne 00 oder + eingegeben. Wenn der SMS Code gekommen ist und ihr ihn eingegeben habt, sollte eine spitze Klammer zu sehen sein. Das ist erst mal gut.

Jetzt müssen wir erst mal einen Kontakt anlegen, um Nachrichten senden zu können. Mir ist es nicht gelungen an eine Telefonnummer Nachrichten zu schicken. Daher der Umweg über den Kontakt.

Kontakt anlegen
add_contact <Telefonnummer> <Vorname> <Nachname>
add_contact 01623512345 test ing

Ich habe es nicht hinbekommen, im Kommandozeilenclient einen Kontakt ohne Nachnamen anzulegen. Da kam immer die untere Fehlermeldung.

add_contact 01623512345 test 
FAIL: 38: can not parse string arg #2

Wenn ein Kontakt angelegt wurde, kann man Nachrichten, Files, Fotos, Videos usw. an diesen versenden. Entweder schreibt man direkt in dem Programm folgende Zeile um eine Nachricht zu senden. Wobei sich der <peer> aus Vorname_Nachname zusammensetzt. Oder man benutzt die Beispielsaufrufe für die Kommandozeile. Für ein Shellscript sind die unteren Aufrufe von Punkt 6 praktischer.

msg <peer> 'Nachrichtentext'

6. Beispielcode für die Bash:

telegram-cli -W -e "msg <peer> 'Nachrichtentext'"
telegram-cli -W -e "send_photo <peer> <Pfad zum Bild>"
telegram-cli -W -e "send_document <peer> <Pfad zum File>"

 

6 Kommentare zu „Telegram – Raspberry Pi Installation, Konfiguration und Beispiele“

  1. Ich habe leider deine Seite erst zu spät gefunden und den Anweisungen von DEM gefolgt. Als dann der oben beschriebene Fehler auftrat: telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion 0′ failed. habe ich das Problem gegooglet und Zeile 101 editiert (+ make). Ich bin nicht total unerfahren und habe alles mögliche probiert, aber es geht nicht. Was mich am meisten in den Wahnsinn treibt ist, wenn ich Unsinn in Zeile 101 schreibe dann spuckt make einen Fehler aus, aber wenn ich es lösche bekomme ich die gleiche Meldung:101: BN2ull: Assertion 0′ failed, aber in der Zeile 101 IST NIX. Habe schon überlegt, ob ich eine andere Kopie habe, weil ich noch einmal installiert habe, aber die Suche nach mtproto-utils.c zeigt nur die eine Datei. Für mich ergibt das keinen Sinn.

    1. Hallo Stefan,

      ich habe nach meine Anleitung noch einmal den Code bei Github ausgecheckt und make ausgeführt. Dieser läuft auf meinem Pi komplett durch (./configure && make) ohne die oben beschriebenen Anpassungen zu machen. Vielleicht ist im Code mittlerweile etwas angepasst worden. Versuch doch noch mal den aktuellen Code von Github. Du solltest vorher auch noch schauen, ob du vergessen hast ein Paket zu installieren. Ich habe lange kein Update gemacht. Zum Vergleich meinen aktuell eingesetzter Kernel.
      root@pi:/tmp/tg# uname -a
      Linux pi 4.0.8-v7+ #805 SMP PREEMPT Thu Jul 16 18:46:20 BST 2015 armv7l GNU/Linux

      1. Habe es nochmal komplett nach deiner Anleitung gemacht, es geht nicht allerdings ist mir diesmal aufgefallen, dass libpython-dev von apt-get nicht gefunden wird. Vermutlich liegt es daran.

        1. Die Abhängigkeiten müssen erfüllt sein. Vielleicht musst du nur 2.7 oder 3.4 oder so anhängen. Schau mal mit dpkg --list |grep -i python
          was für eine Pythonversion installiert ist. Kannst auch mit apt-get search lib-python nach Paketen suchen die installierbar sind.

  2. hallo, leider kein Erfolg, kann es Hilfe geben ? DANKE, ERROR suínd hier:
    gcc -I. -I. -I./tgl -g -O2 -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/lua5.2 -DHAVE_CONFIG_H -Wall -Werror -Wextra -Wno-missing-field-initializers -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter -fPIC -iquote ./tgl -c -MP -MD -MF dep/crypto/rsa_pem_openssl.d -MQ objs/crypto/rsa_pem_openssl.o -o objs/crypto/rsa_pem_opens sl.o tgl/crypto/rsa_pem_openssl.c
    tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_new’:
    tgl/crypto/rsa_pem_openssl.c:41:6: error: dereferencing pointer to incomplete type ‘RSA {aka struct rsa_st}’
    ret->e = unwrap_bn (TGLC_bn_new ());
    ^~
    tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_n’:
    tgl/crypto/rsa_pem_openssl.c:52:1: error: control reaches end of non-void function [-Werror=return-t ype]
    RSA_GETTER(n);
    ^~~~~~~~~~
    tgl/crypto/rsa_pem_openssl.c: In function ‘TGLC_rsa_e’:
    tgl/crypto/rsa_pem_openssl.c:53:1: error: control reaches end of non-void function [-Werror=return-t ype]
    RSA_GETTER(e);
    ^~~~~~~~~~
    cc1: all warnings being treated as errors
    Makefile.tgl:20: die Regel für Ziel „objs/crypto/rsa_pem_openssl.o“ scheiterte
    make: *** [objs/crypto/rsa_pem_openssl.o] Fehler 1

Kommentarfunktion geschlossen.