RE: Mit dem Pi über WhatsApp Nachrichten, etc. senden!

  • Dieses nuetzliche Tutorial zu yowsup hat sich zu einem Diskussions- und Austauschthread bzgl Erweiterungen bei yowsup entwickelt. Da sowas nix mit einem Tutorial zu tun hat erstelle ich diesen Thread um hier die Diskussion und den Austausch vom eigentlichen Tutorial zu trennen und fortzufuehren. Ein Mod hat sich freundlicherweise angeboten Beitraege zu Erweiterungen aus dem Tutorial hierher zu verschieben.

    ...

    Nette Sache. Da ich auch ein nettes ContactIcon auf meinem Smartphone für meine Pi haben wollte wenn ich sie per WhatsUp steuere, habe ich den CmdClient ein wenig erweitert. Man kann mit ihm Icons zum Profile hochladen bzw die Icons von beliebigen Kontakten runterladen.

    Code
    Authed 491234567
    Starting Interactive chat with 491234567
    Enter Message or command: (/available, /getcontact, /lastseen, /setprofile, /unavailable)
    /setprofile
    Set picture succeeded: 1383314954
    Starting Interactive chat with 491234567
    Enter Message or command: (/available, /getcontact, /lastseen, /setprofile, /unavailable)

    Sollte jemand dieselbe Funktion benoetigen - der Patch steht hier zum download. Nach dem Runterladen in das Examples Verzeichnis als CmdClient.patch dort den Patch mit

    Code
    patch < CmdClient.patch


    einbauen. Das Icon darf nicht zu gross sein (bei mir geht es mit 196*216) denn sonst gibt es Fehler und muss profile.jpeg heissen und im selben Verzeichnis stehen wie config.example. Dann Aufruf mit

    Code
    yowsup-cli -c config.example -i 491234567 -a


    und /setprofile eingeben.

  • RE: Mit dem Pi über WhatsApp Nachrichten, etc. senden!? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    So Freunde, das Problem ist eigentlich keins ;). Ihr müsst wenn ihr einem Programm das gleiche Programm aufrufen wollt, den "send" befehl in einen eigenen Thread schieben, somit läuft er parallel zu eurem Hauptprogramm. Hier mal die ListenerClient.py mit den ersten Änderungen. Den Os.system befehl müsst ihr noch anpassen und auch das pass würde ich ersetzen, sonst kriegt man keine Fehlermeldungen mit weil die einfach ignoriert werden.

    Ich empfehle aber die Nutzung von Subprocess anstelle von os.system.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (30. Oktober 2013 um 14:07)

  • Ich glaubs nicht..
    Ich habs gelöst :)

    Viel Gefummel, aber im Prinzip ganz einfach.

    Ich nutze nicht den Client, den ich in der Shell aufrufe, sondern einfach die Senden-Funktion aus EchoClient.

    Das ganze sieht dann so aus:


    Code
    if "!Test" in messageContent:   
                message ="Test"
                self.methodsInterface.call("message_send", (jid, message))

    Natürlich muss dies weiterhin in der ListenerClient stehen.

    Die Variable jid behinhaltet, so wie ich das sehe die ID des Absenders.
    Da sie zuvor in "onMessageRecieved" die Absender ID beinhaltete.

    Möchte man an eine beliebige Adresse senden, so muss die ID komplett ausgeschrieben werden:

    "12324526165@s.whatsapp.net"

    Falls Ihr irgendwelche Fehler bei diesem Weg findet, gebt sie ruhig bekannt.

  • Ist doch ganz einfach:

    Code
    self.methodsInterface.call("message_imageSend",(self.jid,"http://domain.de/test.jpg","test.jpg","270038",str(open("/Users/fons/thumb.jpgb64",'r').read())))

    oder halt lokale bilder mit send_data zu whatsapp hochladen und dann mit mesage_imageSend senden!


  • Nette Sache. Da ich auch ein nettes ContactIcon auf meinem Smartphone für meine Pi haben wollte wenn ich sie per WhatsUp steuere, habe ich den CmdClient ein wenig erweitert. Man kann mit ihm Icons zum Profile hochladen bzw die Icons von beliebigen Kontakten runterladen.

    Code
    Authed 491234567
    Starting Interactive chat with 491234567
    Enter Message or command: (/available, /getcontact, /lastseen, /setprofile, /unavailable)
    /setprofile
    Set picture succeeded: 1383314954
    Starting Interactive chat with 491234567
    Enter Message or command: (/available, /getcontact, /lastseen, /setprofile, /unavailable)

    Sollte jemand dieselbe Funktion benoetigen - der Patch steht hier zum download. Nach dem Runterladen in das Examples Verzeichnis als CmdClient.patch dort den Patch mit

    Code
    patch < CmdClient.patch


    einbauen. Das Icon darf nicht zu gross sein (bei mir geht es mit 196*216) denn sonst gibt es Fehler und muss profile.jpeg heissen und im selben Verzeichnis stehen wie config.example. Dann Aufruf mit

    Code
    yowsup-cli -c config.example -i 491234567 -a


    und /setprofile eingeben.

    Suuper, funktioniert hervorragend, danke!

    Ich habe gerade mal versucht, die Funktion /setstatus einzubauen, komme damit aber nicht so recht weiter. Ich hänge an der Definition von onStatusSuccess(), kannst du mal sehen, wie die 4 Zeilen lauten müssen?


  • Eine Lösung dafür, dass der Listener nicht ständig die Connection trennt hat bisher noch niemand gefunden? Egal wie ich es aufrufe, immer nach 30-60 sek. trennt er die Verbindung..


    Hänge einfach den Parameter -k beim Aufruf mit dran ;) Wenn Du

    Code
    python yowsup-cli


    aufrufst bekommst Du eine sehr nützliche Hilfe zu dem Script. U.a. wird da auch -k beschrieben.

    Ein Ändern im connectionmanager ist nicht notwendig.

  • Suuper, funktioniert hervorragend, danke!

    Ich habe gerade mal versucht, die Funktion /setstatus einzubauen, komme damit aber nicht so recht weiter. Ich hänge an der Definition von onStatusSuccess(), kannst du mal sehen, wie die 4 Zeilen lauten müssen?

    Ich komme einfach nicht weiter, wäre dir sehr dankbar, wenn du mal danach schauen würdest.
    Eine andere Frage habe ich auch noch dazu: Wie kommt man aus dem interaktiven Chat wieder raus?

  • Wo ist dein Problem?

    Code
    self.methodsInterface.call("profile_setStatus", "Status")

  • Danke, nur leider funktioniert das auch nicht. Habe jetzt mal den Debugger mitschreiben lassen, mein Output bevor er schließt sieht dann immer so aus, vllt. wird ja jemand daraus schlau.. ich leider nicht :/


    Bei mir funktioniert es (Allerding umodifizierter code). Am Debug trace sieht man dass er seinen Timeout wieder hochsetzt wenn er expired.

    Spoiler anzeigen

    framp@obelix ~/yowsup/yowsup-master/src $ python yowsup-cli -c config.example -l -k -a -d
    YowsupConnectionManager: >>>>>>>> AUTH CALLED
    BinTreeNodeReader: Reader init
    YowsupAuth: Connecting to c2.whatsapp.net
    WAuth: Yowsup WAUTH-1 INIT
    WAuth: Starting stream
    WAuth: Sending Features
    BinTreeNodeWriter: Outgoing
    BinTreeNodeWriter:
    <stream:features>
    <receipt_acks>
    </receipt_acks>
    <w:profile:picture type="all">
    </w:profile:picture>
    <w:profile:picture type="group">
    </w:profile:picture>
    <notification type="participant">
    </notification>
    <status>
    </status>
    </stream:features>

    WAuth: Sending Auth
    BinTreeNodeWriter: Outgoing
    BinTreeNodeWriter:
    <auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" user="491234567" mechanism="WAUTH-1">
    </auth>

    WAuth: Read stream start
    WAuth: Read features and challenge
    BinTreeNodeReader: Incoming
    BinTreeNodeReader:
    <stream:features>
    <receipt_acks>
    </receipt_acks>
    <w:profile:picture type="all">
    </w:profile:picture>
    </stream:features>

    WAuth: GOT FEATURES !!!!
    BinTreeNodeReader: Incoming
    BinTreeNodeReader:
    <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
    _t�+��f1�YK7�q��8</challenge>

    WAuth: GOT CHALLENGE !!!!
    WAuth: Sending Response
    BinTreeNodeWriter: Outgoing
    BinTreeNodeWriter:
    <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
    �ε?B;~��aH��I/I�چ��:
    ʕ���[ٔ�����</response>

    WAuth: Read success
    BinTreeNodeReader: Incoming
    BinTreeNodeReader:
    <success status="active" kind="free" xmlns="urn:ietf:params:xml:ns:xmpp-sasl" creation="1383157134" t="1383418976" expiration="1414693134">
    �=���SI.b�^��<���</success>

    WAuth: Login Status: success
    WAuth: Expires: 1414693134
    WAuth: Account type: free
    WAuth: Account status: active
    Authed 491234567
    YowsupConnectionManager: starting reader
    ReaderThread: Read thread startedX
    ReaderThread: Waiting, time to die: T-180 seconds
    YowsupConnectionManager: started
    BinTreeNodeReader: Incoming
    BinTreeNodeReader:
    <presence status="dirty" xmlns="w" from="s.whatsapp.net">
    <category timestamp="1383301053" name="groups">
    </category>
    </presence>

    ReaderThread: WILL SEND DIRTY
    ReaderThread: SENT DIRTY
    ReaderThread: Waiting, time to die: T-180 seconds
    BinTreeNodeReader: Incoming
    BinTreeNodeReader:
    <message type="chat" retry="3" from="491234567@s.whatsapp.net" id="1383310986-1" t="1383418976">
    <received xmlns="urn:xmpp:receipts">
    </received>
    </message>

    ReaderThread: Waiting, time to die: T-180 seconds
    BinTreeNodeReader: Incoming
    BinTreeNodeReader:
    <message type="chat" from="491234567@s.whatsapp.net" id="1383326919-1" t="1383418976">
    <received xmlns="urn:xmpp:receipts">
    </received>
    </message>

    ReaderThread: Waiting, time to die: T-180 seconds
    BinTreeNodeReader: Incoming
    BinTreeNodeReader:
    <ib from="s.whatsapp.net">
    <offline count="2">
    </offline>
    </ib>

    ReaderThread: Waiting, time to die: T-180 seconds
    ReaderThread: Waiting, time to die: T-150 seconds
    ReaderThread: Waiting, time to die: T-120 seconds
    ReaderThread: Waiting, time to die: T-90 seconds
    ReaderThread: Waiting, time to die: T-60 seconds
    ReaderThread: Waiting, time to die: T-30 seconds
    BinTreeNodeWriter: Outgoing
    BinTreeNodeWriter:
    <iq to="s.whatsapp.net" type="get" id="ping_1">
    <ping xmlns="w:p">
    </ping>
    </iq>

    BinTreeNodeReader: Incoming
    BinTreeNodeReader:
    <iq type="result" from="s.whatsapp.net" id="ping_1">
    <ping xmlns="w:p">
    </ping>
    </iq>

    ReaderThread: Waiting, time to die: T-180 seconds
    ReaderThread: Waiting, time to die: T-150 seconds
    ReaderThread: Waiting, time to die: T-120 seconds[/code]

  • Hallo Leute ich wollte mal fragen ob mittlerweile jemand Bilder hochladen kann da ich Bilder schon senden kann aber halt nicht hochladen kann [Bild an das Raspberry gesendet und im Debugger die Url gesendet [

    Code
    if message == "bild":
         self.methodsInterface.call("message_imageSend",(jid,"https://mms881.whatsapp.net/d/wgo_Ui7gMPuctpL6NW-jWb9BKF4ABOobmjtmUA/AiY2LcQhO18WbzHZEquiEjZHdOJJydJ2sh4CmA9wSXDf.jpg","Raspberry Pi Cam", "120", "https://mms881.whatsapp.net/d/wgo_Ui7gMPuctpL6NW-jWb9BKF4ABOobmjtmUA/AiY2LcQhO18WbzHZEquiEjZHdOJJydJ2sh4CmA9wSXDf.jpg"))


    ]
    ]

    Einmal editiert, zuletzt von fantomas17 (3. November 2013 um 19:27)


  • Hallo Leute ich wollte mal fragen ob mittlerweile jemand Bilder hochladen kann da ich Bilder schon senden kann aber halt nicht hochladen kann [Bild an das Raspberry gesendet und im Debugger die Url gesendet [

    Code
    if message == "bild":
         self.methodsInterface.call("message_imageSend",(jid,"https://mms881.whatsapp.net/d/wgo_Ui7gMPuctpL6NW-jWb9BKF4ABOobmjtmUA/AiY2LcQhO18WbzHZEquiEjZHdOJJydJ2sh4CmA9wSXDf.jpg","Raspberry Pi Cam", "120", "https://mms881.whatsapp.net/d/wgo_Ui7gMPuctpL6NW-jWb9BKF4ABOobmjtmUA/AiY2LcQhO18WbzHZEquiEjZHdOJJydJ2sh4CmA9wSXDf.jpg"))


    ]
    ]

    wie sendest du wenn ich fragen darf ?

    @ Alex
    Ob du jemanden hilfst der wenig Kenntnisse hat oder nicht, ist deine Entscheidung.
    Ich sehen das Forum auch so das Experten, Fortgeschrittene und Anfänger zusammen Ihr Wissen und Halbwissen austauschen und somit Probleme lösen.

    Ich bin froh für jeden der mein Problem schneller löst und dafür versuche ich auch Probleme von anderen zu lösen.

    Wenn du da nicht mitmachen willst, warum auch immer, dann lass es, aber Kommentare wie "no support" oder ließ bla bla und bla kannste dir sparen weil 80% von den die sich hier beteiligen das schon zum Teil probiert haben und wieso soll man ein ganzes Buch lesen wenn man nur 1% braucht das ein andere in 2 Minuten abtippen kann?

    Aber Diskussion beendet, lets suppurt us ^^ ;)

    Ich mach das mim Bild gleich mal :) Danke dafür

    jetzt fehlt mir noch noch Bilder schicken für die "Überwachung daheim"


  • Hey,
    ich arbeite zur Zeit auch noch am Senden der Bilder. ich verstehe noch nicht ganz, wie ich den Link zum Whatsapp Server bekomme, auf dem mein Bild liegt.

    Bis dahin habe ich mir so beholfen, dass ich ein Bild mit fswebcam mache, dieses per FTP auf meinen Webspace lade und der RPi mir dann einfach nur den Link zum Bild auf meinem Webspace sendet.

    wir warten mal bis heut Abend, denke mal [font="Tahoma, Verdana, Arial, sans-serif"]fantomas17 wird uns sagen wie der erste Schritt geht, vlt bekommen wir dann das 2te hin :)[/font]

  • das mit dem Bild klappt bei mir nicht @ Hans


    edit: /getcontact geht prima :)

    Einmal editiert, zuletzt von StillResonance1614 (4. November 2013 um 14:26)

  • @ Hans
    chmod a+rwx
    -rwxrwxrwx 1 pi pi 55084 Nov 4 13:05 profile.jpeg

    also daran solls nicht hängen
    liegt im
    /opt/yowsup/src
    gleicher Ordner wie die config.example


    wenn ichs in den Ordner Examples mache bekomm ich nen Fehler das ers Foto nicht findet

    Einmal editiert, zuletzt von StillResonance1614 (4. November 2013 um 14:27)

  • Wie bist du denn eingeloggt in WhatsApp? ich sehe nur, dass du den interaktiven Chat mit einer anderen Nummer aufbauen willst, als hinterher mit "Authed" angezeigt wird.
    [font="Monaco, Consolas, Courier, monospace"]4968219315241[/font]
    [font="Monaco, Consolas, Courier, monospace"]Starting Interactive chat with 4915114976671[/font]
    Das sieht nach einem Fehler in der config.example aus.

    Einmal editiert, zuletzt von HaSch (4. November 2013 um 14:32)

  • bei mir läufts nun mit der Patched CMDclient von fantomas17 +
    [font="Monaco, Consolas, Courier, monospace"]self.signalsInterface.registerListener("profile_setStatus",self.profileStatus)[/font]

    mit /setstatus setzt er mirs nun auf das was in meiner Variable steht oben :)


    edit:

    Ich bekomm nun aber für jedes mal ändern bei jedem start wieder den Hinweis das ichs mal gesetzt habe:

    Code
    Enter Message or command: (/available, /unavailable, /setprofile, /setstatus, /exit, /lastseen, /getcontact)
    Set status success s.us 1383571479-2
    Set status success s.us 1383572145-1
    Set status success s.us 1383572499-1
    Set status success s.us 1383572515-2


    Wie bist du denn eingeloggt in WhatsApp? ich sehe nur, dass du den interaktiven Chat mit einer anderen Nummer aufbauen willst, als hinterher mit "Authed" angezeigt wird.
    [font="Monaco, Consolas, Courier, monospace"]4968219315241[/font]
    [font="Monaco, Consolas, Courier, monospace"]Starting Interactive chat with 4915114976671[/font]
    Das sieht nach einem Fehler in der config.example aus.

    loggt der mich dann nicht ein?

    also bissher mach ich entweder -l fürs nur hören
    oder -i wenn ich "chatten" will

    Dachte das reicht, es klappt ja auch zum schreiben, dacht in dem "task" kann ich dann auch die /befehle abgeben

    in meiner config steht nur die Nummer die ich registriert habe und das PW

    Einmal editiert, zuletzt von StillResonance1614 (4. November 2013 um 14:45)

  • Die Version wurde von framp gepatched und nicht von fantomas17. Ich habe mit framp über PM kommuniziert und den Statusupload getestet, der im Patch vorhanden ist. Auch das /exit hat framp auf meine Anregung hin eingebaut.
    /setstatus läuft momentan noch nicht so, wie es eigentlich laufen sollte. Man kann seinen Profilstatus nur ein einziges Mal ändern. Grund dafür ist, dass eine Information des Übertragungsprotokolls von WhatsApp unbekannt ist. Das ist auch der Grund dafür, dass die vielen "Set status success" Meldungen erscheinen. Jedes Mal, wenn du jetzt versuchst, deinen Status zu ändern, kommt eine weitere Zeile hinzu.
    Beim Einloggen wirst du mit den Daten eingeloggt, die in der config.example stehen. Du baust aber den interaktiven Chat zu einer anderen Nummer auf, wenn ich das richtig sehe. Probiere mal die Nummer, die in deiner config.example steht.

Jetzt mitmachen!

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