Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Whatsapp

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Neues Plugin: Whatsapp

    Hallo zusammen,

    ich habe auch mein erstes Plugin gemacht. Mit diesem Plugin könnt ihr Whatsapp Nachrichten senden und auch empfangen. Dazu müsst ihr folgendes machen:

    1. Eine freie TelefonNr. besorgen und die Nummer Registrieren. Hier hat es ein Howto dazu:
    Mit dem Pi über WhatsApp Nachrichten, etc. senden!
    2. Da es (noch) nicht im git eingechekt ist, die angehängt Datei im plugin-Verzeichnis entpacken.
    3. Konfigurieren: siehe dazu README.md

    Das Plugin baut auf Yowsup auf: https://github.com/tgalal/yowsup/wiki/yowsup-cli

    Daher bitte zuerst überprüfen, ob ihr per Yowsup mit euch selbst kommunizieren könnt.
    Auf Nachrichten hören: python yowsup-cli -c whatsapp.conf -l -a –k
    Nachricht senden: python yowsup-cli -c / whatsapp.conf -s 417912345678 "hallo"
    Wenn das nicht geht, wird’s auch im SH nicht funktionieren.

    Das Plugin hat sicherlich noch die einen oder anderen Macken, aber es macht mal soweit das was es tun soll. Zudem wird davon ausgegangen, dass es eine Logik gibt mit dem namen „whatsapp“. Kann man bestimmt noch besser lösen…mir ist nur kein Beispiel untergekommen.

    Viel Spass damit
    Buffi

    #2
    Super! Genau das wollte ich die nächsten Tage auch zusammenklicken.

    Das kann ich mir nun sparen

    Kommentar


      #3
      Hallo zusammen, ich habe noch ein paar kleine Änderungen vorgenommen.

      * Wenn keine Nummer angegeben wurde (sh.whatsapp("Testmsg")), und kein Absender evaluiert werden konnte, dann wird die erste Nummer von von "trusted" in der config genommen.
      * Der Client beendet die Verbindung zum Server sporadisch. Neu wird nach einem Disconnect wieder automatisch eine Verbindung haufgebaut.

      PS: Ich wollte es noch in den developer commiten, hat aber nicht so ganz geklappt....


      Code:
      admin@smarthome:/usr/smarthome/plugins/whatsapp$ git status                                                                                                                                                                                                                     
      # On branch develop                                                                                                                                                                                                                                                             
      # Your branch is ahead of 'origin/develop' by 1 commit.                                                                                                                                                                                                                         
      #                                                                                                                                                                                                                                                                               
      # Changes not staged for commit:                                                                                                                                                                                                                                                
      #   (use "git add <file>..." to update what will be committed)                                                                                                                                                                                                                  
      #   (use "git checkout -- <file>..." to discard changes in working directory)                                                                                                                                                                                                   
      #                                                                                                                                                                                                                                                                               
      #       modified:   ../../lib/item.py                                                                                                                                                                                                                                           
      #       modified:   ../../lib/tools.py                                                                                                                                                                                                                                          
      #                                                                                                                                                                                                                                                                               
      # Untracked files:                                                                                                                                                                                                                                                              
      #   (use "git add <file>..." to include in what will be committed)                                                                                                                                                                                                              
      #                                                                                                                                                                                                                                                                               
      #       ../../.sh.swp                                                                                                                                                                                                                                                           
      #       ../../knxAdress.txt                                                                                                                                                                                                                                                     
      #       __init__.py.NOK                                                                                                                                                                                                                                                         
      #       __init__.py.OK                                                                                                                                                                                                                                                          
      #       ../../testGroupsrite.sh                                                                                                                                                                                                                                                 
      no changes added to commit (use "git add" and/or "git commit -a")                                                                                                                                                                                                               
      admin@smarthome:/usr/smarthome/plugins/whatsapp$

      Kommentar


        #4
        Super Plugin!
        Danke!

        Kommentar


          #5
          Bezüglich des git commits gehe mal wie folgt vor:
          Ins Smarthome Root Dir wechseln.
          git pull
          git add plugins/whatsapp/*
          git commit -m "Your Commit message"
          git show
          git push origin develop.

          Kommentar


            #6
            Eine Frage habe ich noch.
            Wie befüllst du das Attribut trusted in der plugin.conf.
            Für mich sieht es so aus, als ob du in trusted ein Array von mehreren Nummern vorhalten möchtest.
            So weit ich weiss sind alle Werte die aus einer Config kommen aber ein String.
            Dh. ein trusted[0] gibt dir nicht die erste NUmmer sondern das erste Zeichen des Strings der so aussieht wie ein Array.

            Oder gibt es eine Möglichkeit Arrays aus config Files zu übergeben?

            LG

            Kommentar


              #7
              Plugin kopiert, eingerichtet und läuft!

              Toll. Danke

              Gruß

              Heiko

              Kommentar


                #8
                @mode
                Das mit dem git werde ich demnächst versuchen, bin aber grad noch dran ne Möglichkeit zu bieten, dass man auch Bilder verschicken kann.

                Meine Config sieht so aus:
                trusted = 4179xxxxxx | 4178xxxxxx
                Ich wollte zuerst auch den Werte in der Config splitten, was aber dann nicht nötig war…warum auch immer, es gingt einfach grad schon so.

                Man könnte das Plugin/Config sicherlich noch Typsafer machen. Ich habe bis jetzt nur noch keine Zeit investiert, um Fehlkonfigurationen abzufangen…

                Gruss Buffi

                Kommentar


                  #9
                  Hallo Buffi,

                  ich habe das Plugin noch ein wenig erweitert, so dass die aufzurufende Logik bei eingehenden Nachrichten in der logic.conf eingestellt werden kann.
                  Hast du was dagegen wenn ich diesen Stand schon mal ins GIT bringe? Dann können wir alle zusammen weiter daran arbeiten....

                  Kommentar


                    #10
                    Hallo zusammen,

                    man kann nun auch Bilder versenden

                    sh.whatsapp.sendPicture(url, username, password, phoneNumber)

                    Es ist aber noch nicht so sauber gelöst. Ich hole zuerst das Bild auf das lokale Filesystem und schiebe es dann wieder auf den Wahtsapp-Server. Sehr unschön. Aber den Url-Input-Stream auf den Whatsapp-output-stream zu legen hat wohl geklappt, die Übertragung hat aber 1 Minute gedauert...auch unschön. Vielleicht kann sich das mal jemand mit python Erfahrung anschauen.

                    Plugin in Anhang.

                    @mode
                    natürlich kannst du das in git bringen. macht vieles einfacher
                    Meine Frage an dich, hast du viele Änderung machen müssen für deine Erweiterung?
                    Ansonsten versuche ich den git push origin develop, nur das keine Merge/Konfikt-Orgie entsteht. Oder du nimmst V3 und mergest deine Änderung da rein und commitest es.


                    gruss Buffi

                    Kommentar


                      #11
                      Alles klar, ich merge manuell und pushe es dann aufs git...

                      Kommentar


                        #12
                        Hey super!

                        danke dir

                        gruss Buffi

                        Kommentar


                          #13
                          Hey, tolle Idee. Zukünftig schickt mir mein Haus whatsapp ;-)

                          Kurze Frage:
                          ist die whatsapp.py immer notwendig, oder nur, wenn ich auf eingehende whatsapp-Nachrichten reagieren will?

                          Danke und Gruss
                          Marco

                          Kommentar


                            #14
                            Frage 1 selbst beantwortet. sh.whatsapp(msg) schickt Nachrichten

                            Aktuell klemmt es noch beim Empfangen:
                            Code:
                            2014-01-24 00:35:36,627 DEBUG    Main         knx: 1.1.47 set 5/6/2 to c5 -- __init__.py:parse_telegram:181
                            2014-01-24 00:35:36,694 DEBUG    Thread-9     4915xxxxxxxxx@s.whatsapp.net [24-01-2014 00:35]:Status? -- ListenerClient.py:onMessageReceived:80
                            2014-01-24 00:35:36,708 WARNING  Thread-9     Logic name not found: Whatsapp -- scheduler.py:trigger:155
                            2014-01-24 00:35:36,741 DEBUG    Main         knx: 1.1.47 set 5/6/1 to 02cd -- __init__.py:parse_telegram:181
                            2014-01-24 00:35:36,811 DEBUG    Main         knx: 1.1.45 set 0/1/7 to 0.0 -- __init__.py:parse_telegram:190
                            Angeblich wird die Logik "Whatsapp" nicht gefunden

                            Aktuelle Logic.conf
                            Code:
                            [debug]
                            	filename = logic_develop.py
                            	watch_item = Zentral.debug
                            
                            [Whatsapp]
                            	filename = whatsapp.py
                            Ich habe Klein- und Großschreibung probiert.

                            Nach einem Blick in die ListenerClient.py gehe ich aber von Großschreibung aus
                            Code:
                                    if absender in self._trusted:       
                                        if wantsReceipt and self.sendReceipts:
                                            self.methodsInterface.call("message_ack", (jid, messageId))
                            
                                        self._sh.trigger(name= 'Whatsapp', value=messageContent, source=absender)
                                    else:
                                        logger.warn("Sender is not trusted: "+absender)
                            Habt ihr einen Tipp?
                            Danke
                            Marco

                            Kommentar


                              #15
                              Ich würde mal vermuten er sucht whatsapp.py unter /etc/logics und findet sie dort nicht.

                              Gruss
                              Jochen.

                              Kommentar

                              Lädt...
                              X