Raspberry Pi WhatsApp

In diesem Tutorial zeige ich euch wie ihr am Raspberry Pi WhatsApp verwenden könnt. Das geht relativ einfach und schafft eine fast unendliche Anzahl an Anwendungsfällen. Es ist nun möglich jederzeit Textnachrichten vom Raspberry Pi direkt aufs Handy zu schicken und noch besser: den Raspberry Pi über WhatsApp Textnachrichten zu steuern! Aber beginnen wir bei den Basics.

Raspberry Pi Whatsapp

Raspberry Pi WhatsApp

WhatsApp ist derzeit wohl der beliebteste Short Message Dienst für mobile Geräte. Die App hat in kürzester Zeit die bis dahin verwendete SMS abgelöst und lässt die Einnahmen daraus bei den Anbietern kräftig einbrechen. WhatsApp gelang zu einer dermaßen großen Popularität, dass Facebook vor nicht allzu langer Zeit den Dienst gekauft hat. Offenbar hat dieser Schritt dem Service nicht geschadet, nach wie vor wächst die Anzahl an Benutzer, obwohl es bessere und vor allem sichere Alternativen gibt.

Seit kurzem kann man über WhatsApp auch telefonieren. Ein Grund mehr für viele sich diese App zu installieren.

Installation vorbereiten

Wie immer bringen wir zuerst unser System auf den neuesten Stand:

Nun installieren wir alle nötigen Bibliotheken. Falls diese bereits im System vorhanden sind wird der jeweilige Aufruf zur Installation einfach ignoriert:

Installation

Nun müssen wir das eigentliche Programm installieren. Yowsup heißt die Open Source Implementierung von WhatsApp und kann über GitHub heruntergeladen werden. Wir machen das mit dem folgenden Kommando:

Falls git im System noch nicht installiert ist kann dies über apt-get noch nachinstalliert werden. Sobald das Git Repository von Yowsup heruntergeladen ist, findet man im aktuellen Verzeichnis einen yowsup Ordner. Wir wechseln nun in diesen Ordner und führen von dort das Python Installationsskript aus:

Die Installation dauert etwas und im Zuge dieser werden jede Menge Zeilen an Information im Terminal ausgegeben. Sobald man wieder die Befehlszeige zurück bekommt ist Yowsup korrekt installiert und wir müssen dieses nur noch konfigurieren.

Konfiguration

Wie bei WhatsApp am Handy müssen wir uns zuerst registrieren. Um Yowsup zu verwenden gibt es ein eigenes Kommandozeilen Tool namens yowsup-cli, welches über Parameter gesteuert wird. Die Registrierung funktioniert so:

  • Registrierungscode anfordern
  • Nachricht mit dem Registrierungscode schicken

Registrierungscode anfordern

Wir verwenden nun folgendes Kommando:

Das Kommando hat eine ganze Menge Parameter. Das ist zum einen die Telefonnummer. WhatsApp kann mit einer Telefonnummer nur auf einem Gerät verwendet werden. Die Telefonnummer ist dabei samt Ländervorwahl anzugeben (43 für Österreich, 49 für Deutschland, usw.). Weitere Parameter sind:

  • cc
    steht für country code und ist die Ländervorwahl des eigenen Landes.
  • mcc
    steht für Mobile Country Code. Diesen findet man unter dem angegebenen Link. Für Europa wäre das eine Nummer die mit der Ziffer 2 beginnt. In meinem Fall 232.
  • mnc
    steht für Mobile Network Code. Dieser Code hat zwei Ziffern und gibt an unter welchem Netz man seine Sim Karte betreibt. In meinem Fall 10.

Als Antwort bekommt man nun eine SMS Nachricht mit dem Code im Format xxx-xxx.

Raspberry Pi Yowsup

Nachricht mit dem Registrierungscode schicken

Innerhalb weniger Sekunden erhält man nun den Code per SMS. Nun müssen wir den Raspberry Pi WhatsApp im Netzwerk registrieren. Das geht mit folgendem Kommando:

Wieder müssen wir die Telefonnummer mit Landesvowahl und den Ländercode eingeben. Mit dem Parameter register übergeben wir dem Programm den per SMS erhaltenen Code.

Nachrichten senden

Nun sind wir mit der Konfiguration von Raspberry Pi WhatsApp fast fertig. Im letzten Schritt müssen wir die Zugangsdaten noch in einer config Datei ablegen, damit diese nicht jedes mal über Parameter angegeben werden müssen. Dazu erstellen wir folgende Datei:

Mit dem Inhalt:

Es wird die Telefonnummer und das Passwort nun fix gespeichert. Yowsup ist eigentlich nur eine Bibliothek, damit man WhatsApp in andere Programme einbauen kann, deshalb findet man dort noch kein Programm mit grafischem Display. Es gibt aber ein Demoprogramm mit dem wir Nachrichten über die Kommandozeile schicken können. Dieses starten wir nun unter Angabe der neu erstellten Konfigurationsdatei:

Folgende Dinge können wir nun mit dem Demoprogramm machen:

  • \help
    zeigt uns alle möglichen Kommandos und Funktionen an.
  • \L
    Login. Erst nach einem erfolgreichen Login können wir Nachrichten schicken.
  • \message send 43xxxxxxxxxx „Das ist die erste Nachricht vom Raspberry Pi für developer-blog.net“

Erhaltene Nachrichten werden übrigens ebenfalls auf der Kommandozeile ausgegeben.

Anwendungsfälle

Mit Raspberry Pi WhatsApp hat man unglaublich viele mögliche Anwendungsfälle. Überall dort wo der Raspberry Pi ohne Display und direkter Interaktion läuft kann man über diese Nachrichten Informationen senden. Man denke an ein SmartHome, welches den Benutzer über bestimmte Parameter informiert. Man könnte bei einer Wetterstation täglich die aktuelle Temperatur, Luftfeuchtigkeit und den Luftdruck senden, oder besser noch auf Anfrage als Antwort liefern. Es gibt eigentlich kaum ein Projekt bei dem man diese WhatsApp Integration nicht benötigen würde!

Fazit

Mit Raspberry Pi WhatsApp erhält man vom Raspberry Pi automatisiert Nachrichten direkt aufs Handy und kann somit immer aktuelle Daten erhalten. Mit der Integration von Yowsup in Programme kann man über Textnachrichten sogar mit einem am Raspberry Pi laufenden System interagieren und bestimmte Skripte starten. Anwendungsfälle gibt es unendlich viele!

Wo würdet ihr diese Funktion einsetzen beziehungsweise wo verwendet ihr schon so etwas?

(Visited 10.869 times, 1 visits today)

Das könnte auch interessant sein...

28 Antworten

  1. Lars-Peter sagt:

    Welches Handy besitzt du eigentlich wenn man fragen darf

  2. Fillip sagt:

    Schön das das Projekt wieder online ist 🙂

    Leider passiert bei mir nichts mehr nach folgender Meldung:

    „Installed /usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg
    Processing dependencies for yowsup2==2.3.84
    Searching for pillow
    Reading http://pypi.python.org/simple/pillow/
    Best match: Pillow 2.8.2
    Downloading https://pypi.python.org/packages/source/P/Pillow/Pillow-2.8.2.zip#md 5=1122186af2c3baa411e881f0faffd89b
    Processing Pillow-2.8.2.zip
    Running Pillow-2.8.2/setup.py -q bdist_egg –dist-dir /tmp/easy_install-Ac4DyP/P illow-2.8.2/egg-dist-tmp-ctuZGG
    Single threaded build, not installing mp_compile: 1 processes
    warning: no files found matching ‚LICENSE‘ under directory ‚docs'“

    • Das stand bei mir auch sehr lange da am Raspberry Pi B! Ich habe dann eine Pause gemacht. Nachdem ich nach ca. einer Stunde wieder am Rechner war wars fertig.

      • Fillip sagt:

        Mein Fehler, war wohl zu ungeduldig, hattest recht 😉 Leider scheiterte der „Login“ bei Whats App, Reg Code habe ich erhalten und auch in der Datei angegeben.

        pi@raspberrypi ~/yowsup $ yowsup-cli demos –yowsup –config config
        Yowsup Cli client
        ==================
        Type /help for available commands

        [offline]:/L
        Exception in thread Thread-1:
        Traceback (most recent call last):
        File „/usr/lib/python2.7/threading.py“, line 552, in __bootstrap_inner
        self.run()
        File „/usr/lib/python2.7/threading.py“, line 505, in run
        self.__target(*self.__args, **self.__kwargs)
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/demos/cli/cli.py“, line 151, in startInputThread
        wait = self.execCmd(cmd)
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/demos/cli/cli.py“, line 135, in execCmd
        return self.doExecCmd(lambda :targetFn(*args))
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/demos/cli/cli.py“, line 138, in doExecCmd
        return fn()
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/demos/cli/cli.py“, line 135, in
        return self.doExecCmd(lambda :targetFn(*args))
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/demos/cli/layer.py“, line 362, in L
        return self.login(*self.getProp(YowAuthenticationProtocolLayer.PROP_CREDENTIALS))
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/demos/cli/layer.py“, line 372, in login
        self.broadcastEvent(connectEvent)
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/layers/__init__.py“, line 72, in broadcastEvent
        if self.__lower and not self.__lower.onEvent(yowLayerEvent):
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/layers/__init__.py“, line 178, in onEvent
        stopEvent = stopEvent or s.onEvent(yowLayerEvent)
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/layers/auth/layer_authentication.py“, line 41, in onEvent
        self.credentials = self.__getCredentials()
        File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.3.84-py2.7.egg/yowsup/layers/auth/layer_authentication.py“, line 34, in __getCredentials
        password = base64.b64decode(pb64)
        File „/usr/lib/python2.7/base64.py“, line 76, in b64decode
        raise TypeError(msg)
        TypeError: Incorrect padding

        • Fillip sagt:

          Wieder mein fehler gewesen -.- hatte die Zeite mit der registrierung übersehen, ist schon zu spät für mich, daher – Gute nacht! 😉 Ich danke dir für die gute Anleitung

  3. Stefan sagt:

    … funktioniert einwandfrei – wie könnte ein Skript aussehen z.B. GPIO schreiben/lesen ?
    Gruß Stefan

  4. Tobias sagt:

    Jemand eine Idee wie ich einen Zeilenumbruch provoziere?
    /n und ähnliche spielereien funktionieren nicht.

  5. jowiemann sagt:

    Workaround für Zeilenumbruch siehe hier https://github.com/tgalal/yowsup/issues/539

    • Tobias sagt:

      Habe ich gemacht, jedoch keine reaktion. Ändert sich nichts, das „\n“ wird einfach mit ausgegeben anstatt konvertiert. Vorschläge?

  6. Stefan sagt:

    Bei mir startet der Testserver nicht, das heißt die Zeile
    sudo yowsup-cli demos –yowsup –config config

    Endet mit folgendem Fehler:

    Traceback (most recent call last):
    File „/usr/local/bin/yowsup-cli“, line 4, in
    import pkg_resources
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 2707, in
    working_set.require(__requires__)
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 686, in require
    needed = self.resolve(parse_requirements(requirements))
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 584, in resolve
    raise DistributionNotFound(req)
    pkg_resources.DistributionNotFound: pillow

    Ideen? Was habe ich falsch gemacht?

    • Daniel sagt:

      Hey. Hatte auch mit dem Problem zu kämpfen. es fehlen hier noch einige Bibliotheken die vorher noch installiert werden sollen.

      z.B. sudo apt-get install python-pip
      und daraus dann sudo pip install pillow

      aber sehr hilfreich war diese Seite: http://www.fhemwiki.de/wiki/Yowsup

      am besten alles einbinden was hier vorgeschlagen wird.
      gerade das axolotl wird auch gebraucht.

      viele grüße

  7. Christoph sagt:

    Bei mir lief bis zum leltzten Updpate alles super und seitdem sieht es so aus:

    Traceback (most recent call last):
    File „/usr/local/bin/yowsup-cli“, line 4, in
    __import__(‚pkg_resources‘).run_script(‚yowsup2==2.4‘, ‚yowsup-cli‘)
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 534, in run_script
    self.require(requires)[0].run_script(script_name, ns)
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 1445, in run_script
    exec(script_code, namespace, namespace)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 323, in

    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 227, in process

    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 254, in startCmdline

    File „build/bdist.linux-armv6l/egg/yowsup/demos/cli/stack.py“, line 13, in __init__
    File „build/bdist.linux-armv6l/egg/yowsup/stacks/yowstack.py“, line 51, in pushDefaultLayers
    File „build/bdist.linux-armv6l/egg/yowsup/stacks/yowstack.py“, line 73, in getDefaultLayers
    File „build/bdist.linux-armv6l/egg/yowsup/layers/axolotl/__init__.py“, line 1, in
    File „build/bdist.linux-armv6l/egg/yowsup/layers/axolotl/layer.py“, line 3, in
    File „/usr/local/lib/python2.7/dist-packages/python_axolotl-0.1.7-py2.7.egg/axolotl/util/keyhelper.py“, line 3, in
    from ..identitykeypair import IdentityKeyPair
    File „/usr/local/lib/python2.7/dist-packages/python_axolotl-0.1.7-py2.7.egg/axolotl/identitykeypair.py“, line 1, in
    from .state.storageprotos import IdentityKeyPairStructure
    File „/usr/local/lib/python2.7/dist-packages/python_axolotl-0.1.7-py2.7.egg/axolotl/state/storageprotos.py“, line 9, in
    from google.protobuf import symbol_database as _symbol_database
    ImportError: cannot import name symbol_database

    kann mir jemand weiterhelfen?!?!

  8. Gunnar sagt:

    Hallo,
    funktioniert super mit dem Whats-app’en !
    Über das Terminal kein Problem, nur wie kan ich aus einem c-Programm Whats App aufrufen?

    Im Terminal schreibe ich: ( und es klappt super )
    pi@raspberrypi:~/yowsup $ python yowsup-cli demos -c config.conf -s 49xxxxxxx „Hallo World“

    Nur, wie muss ich es aus einem C-Programm aufrufen?
    system(“ /home/pi/yowsup python yowsup-cli demos -c config.conf -s 49xxxxxxx „Hallo World“
    (klappt leider nicht)

    Könnt ihr mir hier helfen ?

    Grüße
    Gunnar

  9. Gunnar sagt:

    Hallo Werner,
    danke für den Tipp.
    Habe es mal ausprobiert aber damit komme ich leider auch nicht wirklich weiter 🙁
    Kann da aber auch an mir liegen…

  10. Gunnar sagt:

    Ich bin es noch mal, habe nun mein kleines Problem gelöst bekommen und wollte es hier noch einmal mitteilen.
    -> Eine What’s App aus einem C-Code heraus zu versenden

    Der c-code lautet dann bei mir:

    strccpy( buffer, „python /home/pi/yowsup/yowsup-cli
    demos –c /home/pi/yowsup/config.conf –s
    491726xxxxxx \“Hallo World aus c heraus\““);
    system(buffer);

    Vielleicht benötigt das ja jemand 🙂

    Beste Grüße
    Gunnar

  11. Stefan sagt:

    Mal eine richtig „dämliche“ Frage.

    Muss der Raspberry mit einem UMTS Stick ausgerüstet werden oder reicht es eine weitere alte Prepaid SIM-Karte in einem Handy zu haben um die SMS empfangen zu können?

  12. Sniffer sagt:

    Du arbeitest bei der Deutschen Bahn? 😉

  13. LAR5W sagt:

    bekomme bei der Registrierung nur diese Meldung??
    registration: error: unrecognized arguments: 49 262 01

    • Steve sagt:

      DU hast wahrscheinlich statt „–cc 49 –mcc 262 etc.“, nur „-cc 49 -mcc 262 etc.“ eingetippt. Es müssen immer 2 bindestriche sein 🙂

  14. Steve sagt:

    Wenn ich mich auf dem Raspberry mit dem Demo programm einlogge werde ich auf meinem handy rausgeschmissen. Gibt es eine möglichkeit mit einer Nummer auf beiden Geräten zu whatsappen?

    • Sky sagt:

      Nein! Eine Mobilfunknummer kann immer nur einmal angemeldet sein! Jedes neu angemeldete Gerät wirft das letzte aus dem System.

  15. Björn sagt:

    Hello, i have a problem, please help me:

    sudo yowsup-cli demos –yowsup –config config
    yowsup-cli v2.0.15
    yowsup v2.4.103

    Copyright (c) 2012-2016 Tarek Galal
    http://www.openwhatsapp.org

    This software is provided free of charge. Copying and redistribution is
    encouraged.

    If you appreciate this software and you would like to support future
    development please consider donating:
    http://openwhatsapp.org/yowsup/donate

    Yowsup Cli client
    ==================
    Type /help for available commands

    [offline]:/L
    Auth: Logged in!
    [connected]:Traceback (most recent call last):
    File „/usr/local/bin/yowsup-cli“, line 5, in
    pkg_resources.run_script(‚yowsup2==2.4.103‘, ‚yowsup-cli‘)
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 499, in run_script
    self.require(requires)[0].run_script(script_name, ns)
    File „/usr/lib/python2.7/dist-packages/pkg_resources.py“, line 1235, in run_script
    execfile(script_filename, namespace, namespace)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 368, in
    if not parser.process():
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 268, in process
    self.startCmdline()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/EGG-INFO/scripts/yowsup-cli“, line 297, in startCmdline
    stack.start()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/demos/cli/stack.py“, line 25, in start
    self.stack.loop(timeout = 0.5, discrete = 0.5)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/stacks/yowstack.py“, line 187, in loop
    asyncore.loop(*args, **kwargs)
    File „/usr/lib/python2.7/asyncore.py“, line 216, in loop
    poll_fun(timeout, map)
    File „/usr/lib/python2.7/asyncore.py“, line 201, in poll2
    readwrite(obj, flags)
    File „/usr/lib/python2.7/asyncore.py“, line 123, in readwrite
    obj.handle_error()
    File „/usr/lib/python2.7/asyncore.py“, line 108, in readwrite
    obj.handle_read_event()
    File „/usr/lib/python2.7/asyncore.py“, line 449, in handle_read_event
    self.handle_read()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/network/layer.py“, line 88, in handle_read
    self.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/network/layer.py“, line 96, in receive
    self.toUpper(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/__init__.py“, line 75, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/stanzaregulator/layer.py“, line 29, in receive
    self.processReceived()
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/stanzaregulator/layer.py“, line 49, in processReceived
    self.toUpper(oneMessageData)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/__init__.py“, line 75, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/auth/layer_crypt.py“, line 65, in receive
    self.toUpper(payload)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/__init__.py“, line 75, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/coder/layer.py“, line 35, in receive
    self.toUpper(node)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/__init__.py“, line 75, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/logger/layer.py“, line 14, in receive
    self.toUpper(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/__init__.py“, line 75, in toUpper
    self.__upper.receive(data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/axolotl/layer.py“, line 124, in receive
    self.onMessage(protocolTreeNode)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/axolotl/layer.py“, line 146, in onMessage
    self.handleEncMessage(protocolTreeNode)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/axolotl/layer.py“, line 231, in handleEncMessage
    self.handleWhisperMessage(node)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/axolotl/layer.py“, line 277, in handleWhisperMessage
    encMessageProtocolEntity = EncryptedMessageProtocolEntity.fromProtocolTreeNode(node)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/axolotl/protocolentities/message_encrypted.py“, line 53, in fromProtocolTreeNode
    encNode.data.encode(‚latin-1‘) if sys.version_info >= (3,0) else encNode.data)
    File „/usr/local/lib/python2.7/dist-packages/yowsup2-2.4.103-py2.7.egg/yowsup/layers/axolotl/protocolentities/message_encrypted.py“, line 24, in setEncProps
    assert encType in „pkmsg“, „msg“
    AssertionError: msg

    Do you have an idea?

  16. Björn sagt:

    deutsch geht auch

Schreibe einen Kommentar

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