Yowsup: Unterschied zwischen den Versionen

Aus FHEMWiki
(Diverse Änderungen und Ergänzungen)
(Update der Installation - die Kleinigkeiten waren alle im Thread zu finden)
Zeile 13: Zeile 13:


== Voraussetzungen ==
== Voraussetzungen ==
* yowsup Client (von Github) muss, wie {{Link2Forum|Topic=27543|Message=204426|LinkText=hier beschrieben}}, installiert werden
* Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.
* Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.
* Nach der Erstinstallation/-einrichtung '''muss''' zwingend das ''cmd'' Attribut korrekt gesetzt werden.  
* Nach der Erstinstallation/-einrichtung '''muss''' zwingend das ''cmd'' Attribut korrekt gesetzt werden.  


== Anwendung ==
== Installation ==  
=== Define ===
Die ursprüngliche Einrichtung wurde hier {{Link2Forum|Topic=27543|Message=204426|LinkText=hier beschrieben}}, jedoch sind noch einige wichtige Dinge zu setzen.
* Fhem Device anlegen: <code> define <name> yowsup </code>
 
* wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading ''state''
=== Yowsup Installation ===
* im Whatsapp Client auf dem Handy sollte man sehen, dass Fhem online ist
Los gehts mit den Paketen:
* zum Senden aus Fhem kann man das Kommando <code>set WhatsApp send <nummer> <text></code> verwenden
<code>sudo apt-get install python-soappy python-dateutil python-pip python-dev build-essential</code>
 
Nun erstmal pip updaten:
<code>sudo pip install --upgrade pip</code>
 
Und dann axolotl installieren (das dauert ne Weile):
<code>sudo pip install python-axolotl</code>
 
Will man Bilder verarbeiten, so braucht man noch ein paar Pakete mehr:
* Paketinstallationen:
** Unter Debian Wheezy: <code>sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tkv</code>
** Unter Debian Jessie: <code>sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk</code>
* PIP:<code>sudo pip install -l pillow</code>
 
Nun loggt man sich unter dem User ein, unter dem fhem läuft (in den folgenden Beispielen als "fhem" benannt, sein home ist /home/fhem und seine gruppe nenne ich "dialout") und lässt dort die $HOME-Variable heraus:
<pre>sudo su - fhem
echo $HOME
cd $HOME
logout</pre>
Diesen Wert braucht man später - gut merken. Sollte hier ein Fehler auftreten (z.B. das home nicht vorhanden), so muss dies zuerst korrigiert werden.
 
Desweiteren muss man nun yowsup installieren, was wie folgt vonstatten geht:
<pre>cd /opt
mkdir yowsup-config
sudo wget https://github.com/tgalal/yowsup/archive/master.zip
sudo unzip master.zip
rm master.zip
cd yowsup-config
sudo nano yowsup.config</pre>
 
Wie bemerkt, ist man nun im Editor für die yowsup.config gelandet. Diese wird nun wie folgt gefüllt:
<pre>## Actual config starts below ##
 
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script
cc=49
phone=498912345678
id=0000000000
password=</pre>
Ersetze die Nummer 498912345678 gegen eine Festnetz oder Handynummer welche derzeit nicht mit WhatsApp verwendet wird. Mittels STRG+o wird die Datei nun gespeichert und mittels STRG+x verlässt man den Editor.
 
Vor den weiteren Schritten sollte man nun erstmal die yowsup Verzeichnisse dem fhem-user zugängig machen:
<pre>sudo chown -R fhem:dialout /opt/yowsup-master /opt/yowsup-config</pre>
 
Für die folgenden Schritte würde ich auf den FHEM-Nutzer wechseln:
<pre>sudo su - fhem
cd /opt/yowsup-master</pre>
 
Nun erfolgt die anmeldung am WhatsApp-Server. Dies kann man nun via <code>voice</code> oder <code>sms</code> machen. Bei einem Handy bietet sich SMS an, ansonsten bei Festnetznummern unbedingt etwas zum schreiben bereit halten
<pre>python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -r sms</pre>
 
Die Rückmeldung ist nun entscheidend. Wenn man diese zurückbekommt:
<pre>de sms
status: fail
retry_after: 3600
reason: no_routes</pre>
Dann ist die Nummer so nicht kompatibel. Was man dann noch probieren kann, ist die registration via voice - meistens ist das aber vergebene Liebesmüh'.
 
Wenn man folgende Rückmeldung bekommt:
<pre>Detected cc: 49
status: sent
retry_after: 1805
length: 6
method: sms</pre>
 
So ist alles gut gelaufen und man sollte kurz später eine SMS bekommen. Darin ist ein Text, der am Ende z.B. 123-456 lautet. Diesen fügt man ohne Bindestrich am Ende des folgenden Befehls ein:
<pre>python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -R 123456</pre>
 
Dann kommt ein Text der etwa so aussehen sollte:
<pre>status: ok
kind: free
pw: bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx
price: 0,89 €
price_expiration: 1432127524
currency: EUR
cost: 0.89
login: 498912345678
type: existing
expiration: 1460832553</pre>
Den Text hinter dem Zeilenanfang <code>pw: </code> benötigt man nun für die Konfigurationsdatei, wo dieser eingefügt werden muss:
<pre>nano /opt/yowsup-config/yowsup.config</pre>
Sodass die Datei beispielhaft dann so aussieht:
<pre>## Actual config starts below ##
 
#cc ist wichtig ansonsten funktioniert es nicht aus dem Script
cc=49
phone=498912345678
id=0000000000
password=bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx</pre>
 
Wie man schon gesehen hat, ist der Account nur begrenzt gültig - die Gültigkeit kann man anhand der als <code>expiration: </code> bezeichneten Zeile ablesen, welche einen Unix-Timestamp beinhaltet. Diese kann man hier umrechnen lassen.
 
Nun mal ein schneller test an die eigene Nummer (im Beispiel 491751234567):
<pre>python yowsup-cli demos -c /opt/yowsup-config/yowsup.config -s 491751234567 "Das ist ein Test"</pre>
 
Das sollte dir eine Nachricht einbringen. Wenn du darauf antwortest, kommt diese allerdings noch nicht an - der Client hat sich nach dem Befehl sofort beendet. Damit dieser dauerhaft im Hintergrund läuft legen wir nun in FHEM ein Gerät an, welches dies steuert.
 
=== FHEM Define ===
* Fhem Device anlegen: <code> define <name> yowsup</code>, also z.B. <code>define WhatsApp yowsup</code>
* Nun muss man den Pfad zu yowsup anpassen: <code>attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup</code>
* Und das Home directory mit dem Pfad zum Home des fhem users: <code>attr WhatsApp home /home/fhem</code>
* Wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading ''state''
* Im Whatsapp Client auf dem Handy sollte man sehen, dass Fhem online ist
* Zum Senden aus Fhem kann man das Kommando <code>set WhatsApp send <nummer> <text></code> verwenden


=== Attribute ===
=== Attribute ===
* cmd <br />komplettes Kommando, um den yowsup Client zu starten. z.B.: <code>attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/config.yowsup --yowsup</code>
Bitte sehe immer in der Commandref nach - diese hier könnten veraltet sein.
* accept_from <br />kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.
 
* commandPrefix <br />nicht gesetzt -> es werden keine Befehle akzeptiert.<br />0 -> es werden keine Befehle akzeptiert.<br />1 -> erlaubt Befehle, jede Nachricht wird als Fhem-Befehl interpretiert.<br />alles andere -> Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.
* <code>cmd</code><br />komplettes Kommando, um den yowsup Client zu starten. z.B.: <code>attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/config.yowsup --yowsup</code>
* <code>accept_from</code><br />kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.
* <code>commandPrefix</code><br />nicht gesetzt -> es werden keine Befehle akzeptiert.<br />0 -> es werden keine Befehle akzeptiert.<br />1 -> erlaubt Befehle, jede Nachricht wird als Fhem-Befehl interpretiert.<br />alles andere -> Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.
{{Randnotiz|RNTyp=Warn|RNText='''allowedCommands''' should work as intended, but no guarantee can be given, that there is no way to circumvent it.}}
{{Randnotiz|RNTyp=Warn|RNText='''allowedCommands''' should work as intended, but no guarantee can be given, that there is no way to circumvent it.}}
* allowedCommands<br />Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.
* <code>allowedCommands</code><br />Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.
* <code>home</code><br />Setzt das Home-directory welches für yowsup verwendet werden soll.


=== Befehle ===
=== Befehle ===

Version vom 21. Juni 2015, 14:25 Uhr


yowsup
Zweck / Funktion
Schnittstelle, um WhatsApp-Nachrichten empfangen und senden zu können.
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Unterstuetzende Dienste
Modulname 32_yowsup.pm
Ersteller André / justme1968 (Forum / Wiki)
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!


Das Modul yowsup dient dazu, WhatsApp-Nachrichten zu empfangen und zu senden.

Voraussetzungen

  • Die Funktionalität ist vermutlich auf Linux/Unix Systeme beschränkt.
  • Nach der Erstinstallation/-einrichtung muss zwingend das cmd Attribut korrekt gesetzt werden.

Installation

Die ursprüngliche Einrichtung wurde hier hier beschrieben, jedoch sind noch einige wichtige Dinge zu setzen.

Yowsup Installation

Los gehts mit den Paketen: sudo apt-get install python-soappy python-dateutil python-pip python-dev build-essential

Nun erstmal pip updaten: sudo pip install --upgrade pip

Und dann axolotl installieren (das dauert ne Weile): sudo pip install python-axolotl

Will man Bilder verarbeiten, so braucht man noch ein paar Pakete mehr:

  • Paketinstallationen:
    • Unter Debian Wheezy: sudo apt-get install libtiff4-dev libjpeg8-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tkv
    • Unter Debian Jessie: sudo apt-get install libtiff5-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk
  • PIP:sudo pip install -l pillow

Nun loggt man sich unter dem User ein, unter dem fhem läuft (in den folgenden Beispielen als "fhem" benannt, sein home ist /home/fhem und seine gruppe nenne ich "dialout") und lässt dort die $HOME-Variable heraus:

sudo su - fhem
echo $HOME
cd $HOME
logout

Diesen Wert braucht man später - gut merken. Sollte hier ein Fehler auftreten (z.B. das home nicht vorhanden), so muss dies zuerst korrigiert werden.

Desweiteren muss man nun yowsup installieren, was wie folgt vonstatten geht:

cd /opt
mkdir yowsup-config
sudo wget https://github.com/tgalal/yowsup/archive/master.zip
sudo unzip master.zip
rm master.zip
cd yowsup-config
sudo nano yowsup.config

Wie bemerkt, ist man nun im Editor für die yowsup.config gelandet. Diese wird nun wie folgt gefüllt:

## Actual config starts below ##

#cc ist wichtig ansonsten funktioniert es nicht aus dem Script
cc=49
phone=498912345678
id=0000000000
password=

Ersetze die Nummer 498912345678 gegen eine Festnetz oder Handynummer welche derzeit nicht mit WhatsApp verwendet wird. Mittels STRG+o wird die Datei nun gespeichert und mittels STRG+x verlässt man den Editor.

Vor den weiteren Schritten sollte man nun erstmal die yowsup Verzeichnisse dem fhem-user zugängig machen:

sudo chown -R fhem:dialout /opt/yowsup-master /opt/yowsup-config

Für die folgenden Schritte würde ich auf den FHEM-Nutzer wechseln:

sudo su - fhem
cd /opt/yowsup-master

Nun erfolgt die anmeldung am WhatsApp-Server. Dies kann man nun via voice oder sms machen. Bei einem Handy bietet sich SMS an, ansonsten bei Festnetznummern unbedingt etwas zum schreiben bereit halten

python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -r sms

Die Rückmeldung ist nun entscheidend. Wenn man diese zurückbekommt:

de sms
status: fail
retry_after: 3600
reason: no_routes

Dann ist die Nummer so nicht kompatibel. Was man dann noch probieren kann, ist die registration via voice - meistens ist das aber vergebene Liebesmüh'.

Wenn man folgende Rückmeldung bekommt:

Detected cc: 49
status: sent
retry_after: 1805
length: 6
method: sms

So ist alles gut gelaufen und man sollte kurz später eine SMS bekommen. Darin ist ein Text, der am Ende z.B. 123-456 lautet. Diesen fügt man ohne Bindestrich am Ende des folgenden Befehls ein:

python yowsup-cli registration -c /opt/yowsup-config/yowsup.config -R 123456

Dann kommt ein Text der etwa so aussehen sollte:

status: ok
kind: free
pw: bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx
price: 0,89 €
price_expiration: 1432127524
currency: EUR
cost: 0.89
login: 498912345678
type: existing
expiration: 1460832553

Den Text hinter dem Zeilenanfang pw: benötigt man nun für die Konfigurationsdatei, wo dieser eingefügt werden muss:

nano /opt/yowsup-config/yowsup.config

Sodass die Datei beispielhaft dann so aussieht:

## Actual config starts below ##

#cc ist wichtig ansonsten funktioniert es nicht aus dem Script
cc=49
phone=498912345678
id=0000000000
password=bfGA9wPWWNeHcSBxxxxxxxxxxxxxxxxx

Wie man schon gesehen hat, ist der Account nur begrenzt gültig - die Gültigkeit kann man anhand der als expiration: bezeichneten Zeile ablesen, welche einen Unix-Timestamp beinhaltet. Diese kann man hier umrechnen lassen.

Nun mal ein schneller test an die eigene Nummer (im Beispiel 491751234567):

python yowsup-cli demos -c /opt/yowsup-config/yowsup.config -s 491751234567 "Das ist ein Test"

Das sollte dir eine Nachricht einbringen. Wenn du darauf antwortest, kommt diese allerdings noch nicht an - der Client hat sich nach dem Befehl sofort beendet. Damit dieser dauerhaft im Hintergrund läuft legen wir nun in FHEM ein Gerät an, welches dies steuert.

FHEM Define

  • Fhem Device anlegen: define <name> yowsup, also z.B. define WhatsApp yowsup
  • Nun muss man den Pfad zu yowsup anpassen: attr WhatsApp cmd /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup
  • Und das Home directory mit dem Pfad zum Home des fhem users: attr WhatsApp home /home/fhem
  • Wenn alles gut geht, gibt es danach im Device ein internal PID und das Reading state
  • Im Whatsapp Client auf dem Handy sollte man sehen, dass Fhem online ist
  • Zum Senden aus Fhem kann man das Kommando set WhatsApp send <nummer> <text> verwenden

Attribute

Bitte sehe immer in der Commandref nach - diese hier könnten veraltet sein.

  • cmd
    komplettes Kommando, um den yowsup Client zu starten. z.B.: attr WhatsApp cmd /opt/local/bin/yowsup-cli demos -c /root/config.yowsup --yowsup
  • accept_from
    kommagetrennte Liste von Kontakten (Nummern), von denen Nachrichten akzeptiert werden. Ist das Attribut nicht gesetzt, so werden die Nachrichten von jedem akzeptiert.
  • commandPrefix
    nicht gesetzt -> es werden keine Befehle akzeptiert.
    0 -> es werden keine Befehle akzeptiert.
    1 -> erlaubt Befehle, jede Nachricht wird als Fhem-Befehl interpretiert.
    alles andere -> Wenn die Nachricht mit diesem Prefix startet, wird alles weitere als Befehle interpretiert.
Emblem-question-yellow.svgallowedCommands should work as intended, but no guarantee can be given, that there is no way to circumvent it.
  • allowedCommands
    Eine Komma-getrennte Liste von zulässigen Befehlen für diesen Kontakt. Wenn die Liste leer ist (z.B. nur ein Komma), dann werden keine Befehle akzeptiert.
  • home
    Setzt das Home-directory welches für yowsup verwendet werden soll.

Befehle

  • image -> Über diesen Befehl können Bilder gesendet werden.

Anwendungsbeispiele

Beispielnachricht

Beim Empfang einer Nachricht wird automatisch ein Fhem Device für diesen Kontakt angelegt. In diesem Device gibt es das Reading message für die empfangene Nachricht und ab der ersten Nachricht auch das Reading chatstate, in dem zu sehen ist, ob gerade getippt wird. Nachdem ein Device für einen Kontakt angelegt ist, lässt sich auch direkt dieses Device zum Senden verwenden:

set <device> send <text>,

d.h., man spart sich die Angabe der Nummer.

Gruppen

Gruppennachrichten werden von yowsup mit Sonderzeichen im Absender empfangen:

49yyyyyyyyyyyy/49xxxxxxxxxxx-1234567890
absender/gründer-timestamp

Aufgrund der Sonderzeichen schlägt das automatische Anlegen einer yowsup Instanz fehl. Es kann aber zum Versenden direkt die JID der Gruppe genutzt werden, oder manuell die yowsup Instanz ohne Sonderzeichen gemacht werden.

erst kommt die Nummer des Gruppenerstellers, dann die Uhrzeit im Unix Zeitformat.
49xxxxxxxxxxx-1234567890
gründer-timestamp
define whatsapp.gruppe yowsup 49xxxxxxxxxxx-1234567890

JID der Gruppe ermitteln

Am einfachsten ist es, eine Nachricht an die Gruppe zu senden und aus der Fehlermeldung von Fhem die JID herauszusuchen. Etwas gezielter geht es mit der Auflistungsfunktion von yowsup direkt.

set WhatsApp raw /groups list

Um die Ergebnisse eines raw Befehls im Log zu sehen, muss noch verbose 4 gesetzt werden:

attr WhatsApp verbose 4

Dieses Attribut sollte, wenn nicht mehr benötigt, wieder gelöscht werden, um unnötige Logeinträge zu vermeiden.

Links

  • Forenthread, in dem die Whatsapp Anwendung beschrieben wird
  • Foreneintrag, ab dem das yowsup Modul beschrieben wird
  • Die Python Whatsapp Library auf github