[32_yowsup.pm] Whatsapp versenden (Mit Handy- oder Festnetznummer)

Begonnen von AHA1805, 01 Oktober 2014, 21:58:55

Vorheriges Thema - Nächstes Thema

Ma_Bo

NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

piet_pit

Hallo TWART016,

danke für den Hinweis 8) 8) 8), bin blind gewesen...

Sorry...

VG
Pit
FHEM 6.0 auf Raspberry Pi 3, Rasbian-Stretch
FRITZ!Box 7490
HM-Mod-RPI-PCB
JeeLink
CUNO 1.47

ChrisK

Jetzt habe ich mich heute doch mal dran gewagt (nachdem ich verstanden habe, dass man keine Fritzbox brauch ;) ) und das Thema WhatsApp bei mir angegangen.
Zunächst mal: Klasse Arbeit!

Das meiste hat auch geklappt, nur der Empfang von Nachrichten klappt noch nicht.
Ich kann Nachricht verschicken und auch der Status wird als "online" angezeigt.

Im Log habe ich folgende Einträge, die vermutlich genau damit zusammenhängen:
2015.07.20 20:22:54 2: WhatsApp: starting yoswup-cli: /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-master/yowsup.config --yowsup
2015.07.20 20:22:55 2: WhatsApp: setting $HOME to /opt/fhem
2015.07.20 20:22:55 2: WhatsApp: starting yoswup-cli: /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-master/yowsup.config --yowsup
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/opt/yowsup-master/yowsup/demos/cli/cli.py", line 151, in startInputThread
    cmd = self._queuedCmds.pop(0) if len(self._queuedCmds) else input(self.getPrompt()).strip()
IOError: [Errno 104] Connection reset by peer


Wenn ich verbose=4 setze, dann kommt in diesem Bereich des Logs nichts dazu, dafür steht dann weiter unten:
2015.07.20 20:25:45 4: WhatsApp: parse: Yowsup Cli client
==================
Type /help for available commands

[offline]:
2015.07.20 20:25:45 3: WhatsApp: sending /L
2015.07.20 20:25:45 3: WhatsApp: sending /presence available
2015.07.20 20:25:45 1: 192.168.2.18:55000 reappeared (wz_TV)
2015.07.20 20:25:47 3: CUL_HM set ba_rollo1 statusRequest
2015.07.20 20:25:47 4: WhatsApp: parse: Auth: Logged in!
[connected]:[connected]:


Hat jemand ne Idee, was bei mir schief läuft?


//edit:
Ich habe auch mit dem Attribut acceptFrom rum gespielt und es mal rein genommen mit meiner Nummer und mal wieder raus genommen, Empfang klappt aber nicht. Interessant ist (vielleicht), dass die Nachrichten, die ich vom Handy an FHEM schicke als ungelesen markiert sind, Nachrichten von FHEM->Handy aber drum herum (also vorher/nachher) problemlos ankommen.

stromer-12

hast du schon in dein whatsapp device mit deiner handynummer geschaut?
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

justme1968

die meldung schaut so aus als ob der yowsup client beim empfang abstürzt. das sollte nichts mit dem fhem modul zu tun haben.

geht es wenn du den client von hand verwendest ohne fhem?

das die nachrichten als unbestätigt erscheinen ist (noch) normal. das fhem modul bestätigt nicht.

gruss
  andre

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

die meldung schaut so aus als ob der yowsup client beim empfang abstürzt. das sollte nichts mit dem fhem modul zu tun haben.

geht es wenn du den client von hand verwendest ohne fhem?

das die nachrichten als unbestätigt erscheinen ist (noch) normal. das fhem modul bestätigt nicht.

gruss
  andre

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

ChrisK

Danke Euch beiden!

Zitat von: stromer-12 am 20 Juli 2015, 22:21:11
hast du schon in dein whatsapp device mit deiner handynummer geschaut?
Ehm, verstehe ich nicht so ganz. Wo soll ich genau gucken?
Fhem nutzt in diesem Fall eine Festnetz Nummer für WhatsApp.

Zitat von: justme1968 am 20 Juli 2015, 22:28:18
geht es wenn du den client von hand verwendest ohne fhem?
Ich hatte das im Wiki so verstanden, dass ich fhem brauche um zu empfangen. Wie kann ich denn nur den Client starten?

stromer-12

Für jede empfange Nachricht von einer unbekannten Telefonnummer wird für diese Telefonnummer ein neues Device mit der Telefonnummer als Namen angelegt und darin wird die empfangene Nachrichten abgelegt.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

ChrisK

Zitat von: stromer-12 am 20 Juli 2015, 23:33:38
Für jede empfange Nachricht von einer unbekannten Telefonnummer wird für diese Telefonnummer ein neues Device mit der Telefonnummer als Namen angelegt und darin wird die empfangene Nachrichten abgelegt.
Ah ok, verstanden. Ich denke noch zu wenig in "fhem", bei "device" hatte ich an ein Handy gedacht ;)
Ne, ein Device wurde nicht angelegt, das hatte ich schon geguckt. Aber das reading "msg" würde auch sowieso bei dem WhatsApp Device ankommen, oder?

Ich teste das heute Abend vielleicht mal mit einem anderen Absender.

Carsten

Hallo,

vielen Dank für das tolle Modul und die detaillierte Anleitung im Wiki. Hat bei mir auf Anhieb geklappt.

Das einzige, was nicht funktioniert, ist Nachrichten von Gruppen zu empfangen.

Gemäß dem Workaround im Wiki habe ich jetzt manuell die Gruppe als <Gründer>-<Timestamp> in FHEM definiert und kann dadurch jetzt auch Nachrichten an die Gruppe senden, aber wenn in der Gruppe geschrieben wird, versucht das Modul <Gründer>\<Gründer>-<Timestamp> anzulegen.

Wenn ich die Def auf <Gründer>\<Gründer>-<Timestamp> änder, kann ich zwar Nachrichten aus der Gruppe empfangen, aber keine mehr senden.

Jeweils ein Device zum Senden und eins zum Empfangen anzulegen, funktioniert leider auch nicht, weil dann die Meldung kommt, dass die Nummer schon einem Device zugeordnet ist.

Hat jemand Gruppen mit Senden und Empfangen am Laufen?

*edit*
Habs jetzt zum Laufen bekommen, indem ich in der 32_yowsup.pm hinter Zeile 369 folgendes ergänzt habe:
    my $number = $1;
    my $time = $2;
    my $id = $3;
    my $message = $4;

    $number =~ s/.*\///;


So löscht er vor der Prüfung alles vor dem "/" und es passt dann.

Das geht bestimmt eleganter, aber es scheint jedenfalls zu funktionieren.
Wird dann nur beim nächsten Update vermutlich wieder überschrieben.

Carsten

Okay, jetzt habe ich kapiert, dass die Nummer vor dem Slash nicht die Gründernummer, sondern die Nummer des Schreibenden ist.
Da ich diese Nummer brauche, habe ich bei mir die 32_yowsup nun so geändert:


   [...]
   #Zeile 365
    my $number = $1;
    my $time = $2;
    my $id = $3;
    my $message = $4;

    my $lastgroupsender = "";

    if ( $number =~ /(.*\/)/ )   
    {
      $lastgroupsender = $1;
      $lastgroupsender =~ s/\///;
      $number =~ s/.*\///;
   }

  [...]

    if( $chash ) {
      readingsSingleUpdate( $chash, "message", $message, 1 );
      readingsSingleUpdate( $chash, "chatstate", "received", 1 );
      readingsSingleUpdate( $chash, "LastSender", $lastgroupsender, 1 );


Ist wieder nicht besonders schön, fürchte ich, aber ich habs nicht so mit Regexen.  :-[
Den LastSender kriegen so jetzt auch Single-Teilnehmer. Müsste man vorher noch auf Inhalt prüfen aber da ich das ausschließlich für Gruppen brauche, interessierte mich das im Moment nicht.

Ich hoffe, Andre übernimmt das so oder so ähnlich, damit ich auch zukünftig gefahrlos updaten kann.

justme1968

ich verwende keine gruppen deshalb kann ich nicht wirklich etwas dazu sagen. änderungen dazu baue ich aber gerne ein.

zum verständnis: mit dem patch gibt es für die komplette gruppe ein fhem device und ein zusätzliches reading das den letzen sender anzeigt. korrekt?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Carsten

Hi Andre,

Zitat von: justme1968 am 22 Juli 2015, 11:00:49
zum verständnis: mit dem patch gibt es für die komplette gruppe ein fhem device und ein zusätzliches reading das den letzen sender anzeigt. korrekt?

Ja, so ist das jetzt bei mir.

Das zusätzliche Reading gibt es aber derzeit auch bei "normalen Kontakten", weil es ungeprüft angelegt wird. Dort ist es dann aber derzeit immer leer.
Möglichkeit 1: Wenn lastgroupsender leer ist, dann ist number der LastSender
Möglichkeit 2: Wenn lastgroupsender leer ist, gar nicht erst das Reading anlegen

Außerdem habe ich das Autocreate noch nicht getestet. Wird wahrscheinlich auch fehlschlagen, weil ja initial die Nummer als Devicename verwendet wird und die enthält bei Gruppen immer noch ein "-" und ich weiß nicht, ob das im Devicename erlaubt ist. Ist aber zumindest keine Verschlechterung, weil aktuell schlägt es ja bei Gruppen auch immer fehl.  ;D

Wie gesagt, das geht bestimmt eleganter, aber RexExps ( und Perl ) sind nicht gerade mein Steckenpferd. Ziel der ganzen Übung ist es, nur den Part nach dem Slash als Nummer zu verwenden, weil der Part davor die Nr. des Absenders ist.

*edit*
Ein Hinweis noch:
Ich benutze die Rechteeinstellungen ( bisher ) nicht, aber um das mit den Gruppen in Einklang zu bringen, müsste man evtl. noch überlegen, ob man das bei den Gruppen dann nicht gegen den LastSender statt gegen number prüft. Theoretisch kann beides Sinn machen.

justme1968

#523
anbei eine version mit gruppen unterstützung zum testen:

  • weil der - in fhem device namen nicht erlaubt ist wird er durch einen . ersetzt
  • gruppen können im master device bei allowedFrom angegeben werden
  • es wird automatisch ein fhem device für die gruppe angelegt
  • der absender der letzten gruppen nachricht steht mit im chatstate attribut der gruppe
  • die gruppen devices haben zusätzliches eigenes allowedFrom attribut
  • die möglichkeit kommandos senden ist für gruppen zweistufig eingeschränkt:
    zuerst wird über allowedFrom im master device geprüft ob die gruppe an sich an fhem senden darf
    falls die nachricht als kommando erkannt wird und an eine gruppe geht wird zusätzlich das allowedFrom der gruppe gegen die tatsächliche absender id geprüft.

gruss
  andre

edit: die beschriebene funktionalität ist inzwischen teil des eingecheckten moduls
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

meyomey

Hi,
habe mich auch an Whatsapp gewagt.

Das Versenden aus der Kommandozeile funktioniert, aber wenn es so aufgerufen wird:
define HeikoNachricht notify Heiko:on set WhatsApp send 49151xxxxxxxxx Heiko ist zuhause

wird folgendes in`s Logfile geschrieben:
2015.07.25 14:56:29 2: WhatsApp: starting yoswup-cli: /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup
2015.07.25 14:56:30 3: NTFY return:  WhatsApp:HASH(0x1d63f70)
2015.07.25 14:56:30 2: WhatsApp: setting $HOME to /opt/fhem
2015.07.25 14:56:30 2: WhatsApp: starting yoswup-cli: /opt/yowsup-master/yowsup-cli demos -c /opt/yowsup-config/yowsup.config --yowsup
2015.07.25 14:56:30 1: HMLAN_Parse: HMLAN1 new condition ok
Traceback (most recent call last):
  File "/opt/yowsup-master/yowsup-cli", line 327, in <module>
    if not parser.process():
  File "/opt/yowsup-master/yowsup-cli", line 231, in process
    self.startCmdline()
  File "/opt/yowsup-master/yowsup-cli", line 259, in startCmdline
    stack.start()
  File "/opt/yowsup-master/yowsup/demos/cli/stack.py", line 21, in start
    print("Yowsup Cli client\n==================\nType /help for available commands\n")
IOError: [Errno 32] Broken pipe
2015.07.25 14:56:30 3: WhatsApp: sending /L
2015.07.25 14:56:30 3: WhatsApp: sending /presence available


Kann jemand helfen, bin leider nur Anfänger,
Danke Heiko