Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Pushbullet

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

    #16
    hallo,

    erst mal danke für das tolle Plugin, funktioniert soweit sehr gut!

    bin leider noch rechter Anfänger, deshalb eine eher allgemeine Frage die wohl eher Python betrifft:

    Ich möchte eine liste Verschicken, z.B. "Aktueller Stromverbrauch"

    sh.pushbullet.list("Aktueller Stromverbrauch",[sh.OG.System.Strom.Leistung_Server(), sh.OG.Arbeit.Strom.Leistung()])

    Funktioniert, nur bekomme ich halt eine Liste mit Zahlen was mir nicht so recht weiter Hilft. Gibt es einen einfachen Weg die Items der Liste zu beschriften oder muss ich mir zuerst selbst Strings zusammenbauen die ich dann dem Plugin übergebe?

    Christian

    Kommentar


      #17
      Hallo Christian,

      du musst die Strings selbst zusammenbauen und in die Liste packen.
      Pro Eintrag wird dann eine Zeile im Push stehen.


      Grüße,

      Lars

      Kommentar


        #18
        ok, danke

        Kommentar


          #19
          ich habe da noch so ein paar kleine Probleme .....

          Die requests und python-magic habe ich installiert.
          Ohne Fehler -> succesfull

          Die aktuelle __init__.py habe ich mir aus develop geholt.

          Beim Start erhalte ich jedoch die folgende Fehlermeldung:

          Code:
          2014-08-24 02:22:08,942 DEBUG    Main         Plugin: pushbullet -- plugin.py:__init__:43
          2014-08-24 02:22:10,129 ERROR    Main         Plugin pushbullet exception: No module named magic -- plugin.py:__init__:57
          Traceback (most recent call last):
            File "/usr/smarthome/lib/plugin.py", line 53, in __init__
              plugin_thread = Plugin(smarthome, plugin, classname, classpath, args)
            File "/usr/smarthome/lib/plugin.py", line 79, in __init__
              exec("import {0}".format(classpath))
            File "<string>", line 1, in <module>
            File "/usr/smarthome/plugins/pushbullet/__init__.py", line 26, in <module>
              import magic
          ImportError: No module named magic
          Kann mir hier jemand weiterhelfen?

          Grüße,

          Mark

          Kommentar


            #20
            Hey Mark,

            vermutlich hast Du das hier überlesen?

            Zitat von Shai Beitrag anzeigen
            Es wird nun zusätzlich "python-magic" benötigt, das lässt sich einfach mit "pip install python-magic" installieren.

            Grüße,

            Lars

            Kommentar


              #21
              Ne, hab ja geschrieben, dass ich magic installiert habe.

              requests
              Code:
               admin@smarthome:/usr/smarthome$ sudo pip install requests --upgrade
              Requirement already up-to-date: requests in /usr/local/lib/python2.7/dist-packages
              Cleaning up...
              admin@smarthome:/usr/smarthome$
              und Magic
              Code:
               admin@smarthome:/usr/smarthome$ sudo pip install python-magic --upgrade
              Requirement already up-to-date: python-magic in /usr/local/lib/python2.7/dist-packages
              Cleaning up...
              admin@smarthome:/usr/smarthome$

              Kommentar


                #22
                Hi,

                ohne Dir eine Lösung verraten zu können, wie Du das richtig installierst:
                Das aktuelle smarthome verwendet python 3.2, Du hast magic unter python 2.7 installiert. Ich vermute, deswegen wird es nicht gefunden.

                Leider kann ich Dir aber nicht sagen, wie Du das Problem behebst...
                Aber mit Google sollte das schon klappen

                Gruß, Waldemar
                OpenKNX www.openknx.de

                Kommentar


                  #23
                  Spontane Idee:


                  pip3.2 install ....


                  Auf meinem Ubuntu gibt es "pip", "pip3" sowie "pip3.2", daher wäre mein Vorschlag es mal mit 3.2 zu versuchen.

                  Bei mir kommen die allerdings alle aus dem selben Paket, daher hat "pip" ausgereicht.

                  Code:
                  lars@SmartHome:~$ pip -V
                  pip 1.5 from /usr/local/lib/python3.2/dist-packages/pip-1.5-py3.2.egg (python 3.2)
                  lars@SmartHome:~$ pip3.2 -V
                  pip 1.5 from /usr/local/lib/python3.2/dist-packages/pip-1.5-py3.2.egg (python 3.2)
                  lars@SmartHome:~$ pip3 -V
                  pip 1.5 from /usr/local/lib/python3.2/dist-packages/pip-1.5-py3.2.egg (python 3.2)
                  lars@SmartHome:~$
                  Gruß,

                  Lars

                  Kommentar


                    #24
                    Super, bin schon mal einen ganzen Schritt weiter!
                    Vielen Dank, das war die Richtige Vermutung!!

                    Ich musste pip3 erst mal nachinstallieren
                    Code:
                     apt-get install python3-pip
                    und mit

                    Code:
                     pip3.2 install requests
                     pip3.2 install python-magic
                    funktioniert dann auch die Installation korrekt.

                    Ich habe als Test eine ganz einfache Logik benutzt, mit Beispiel aus der Readme. Leider funktioniert es noch nicht 100%ig wie es soll.

                    Die Logik wird getriggert, es folgt aber darauf sofort ein Error, der scheinbar auf ein Problem mit der DeviceID schließen lässt?

                    Code:
                     2014-08-24 15:03:07,524 INFO     push_test    Starting new HTTPS connection (1): api.pushbullet.com -- connectionpool.py:_new_conn:695
                    2014-08-24 15:03:08,794 ERROR    push_test    Could not send Pushbullet notification. Error: {"cat": "(^\uff65o\uff65^)\uff89\u201d", "error": {"message": "Param `device_iden` is missing or has an invalid value.", "type": "invalid_r  equest", "param": "device_iden"}} -- __init__.py:_push:102
                    In meiner Logik steht lediglich folgende Zeile:

                    Code:
                     sh.pushbullet.note("Note to myself.", "Call my mother.")
                    In der plugin.conf folgendes:

                    Code:
                     [pushbullet]
                        class_name = Pushbullet
                        class_path = plugins.pushbullet
                        deviceid = Iphone
                        apikey = (API Key von der Website)
                    Die DeviceID enstspricht hier der genauen Schreibweise aus der Pushbullet Website. Muss da etwas anderes eingetragen werden?

                    Viele Grüße und schon mal besten Dank für Eure Unterstützung!

                    Mark

                    Kommentar


                      #25
                      Hey Mark,

                      die DeviceID ist nicht der Name des Geräts.
                      Am einfachsten kannst Du die ID rausfinden wenn Du im Browser unter pushbullet.com das Gerät auswählst und den hinteren Teil der Browser-URL herauskopierst.

                      Siehe Screenshot im Anhang. Ich habe hier mal eine Random-ID eingesetzt und den Teil markiert den Du brauchst.



                      Grüße,

                      Lars
                      Angehängte Dateien

                      Kommentar


                        #26
                        Na da wäre ich ja nie drauf gekommen.
                        Sollte man definitiv in der Doku ergänzen.

                        Vielen Dank für Deine Hilfe, funktioniert jetzt einwandfrei.

                        Grüße,

                        Mark

                        Kommentar


                          #27
                          Danke!

                          Hi Lars,

                          erst mal vielen Danke für das Plugin. Passt, wackelt und hat Luft! Klasse!

                          Vielleicht noch ein paar Anmerkungen für die Doku:
                          1. Auf dem PY-Image gibt es kein PIP, hier wäre es IMHO gut die Anweisung von Monti aus Post2 mitaufzunehmen (getestet auch bei mir):
                          Code:
                          git clone git://github.com/kennethreitz/requests.git
                          cd requests
                          sudo python3 setup.py install
                          2. Bei den Beispielen wäre es noch interessant die Variante note auf ein Device, a la "sh.pushbullet.note("<Headline>", "<Message>", "<DeviceKey>") mitaufzunehmen. Hier macht es dann evtl. auch Sinn den Trick, wie man die DeviceID herausfindet, mitanzugeben.

                          Was aktuell etwas nervt, habe aber auch noch keine Abhilfe gefunden, ist das Logging "Starting new HTTPS connection (1): api.pushbullet.com". Soweit ich das sehen konnte ist das aus der connectionpool.py, aber eine Auskommentierung der Message hat leider bislang nix gebracht.

                          Cheers,
                          Oliver

                          Kommentar


                            #28
                            Versenden an devices außerhalb des eigenen Accounts mgl.?

                            Hallo Lars,

                            kaum habe ich das Plugin ein paar Stunden im Einsatz kommt schon der erste Featurerequest bzw. bin ich auf die erste Einschränkung gekommen...

                            Wenn ich den Code und Pushbullet richtig verstanden habe ist es aktuell nur möglich an Devices eines dem API-Keys zugehörigen Devices zu versenden.
                            Wenn man an ein Device versendet eines anderen Accounts wird dies abgelehnt (Bad Request). Laut API-Beschreibung ist dann anstatt
                            Code:
                             device_iden=<deviceID>
                            ein
                            Code:
                            email=<emailadress>
                            zu versenden.

                            Könnte man das erweitern?

                            Sehe dabei die folgenden Möglichkeiten:
                            1. Einbau eines weiteren Parameters (im Moment noch keine Ahnung wie)
                            2. Übergabe des Mediums (device_iden=xxx bzw. email=yyy) in der Variable anstatt nur (xxx)

                            Bevor ich nun anfange an Deinem Code rumzubasteln (bin noch ein Anfänger in PY) wollte ich erst einmal fragen was Du davon halten würdest, ich würde dann in die eine oder andere Richtung das mal bei mir abändern und testen.

                            Cheers,
                            Oliver

                            Kommentar


                              #29
                              Hey Oliver,

                              danke fürs Feedback.
                              Die Doku werde ich die Tage mal etwas aufpimpen.

                              Für die Sache mit der eMail-Adresse könnte man auch evtl. einfach den "device"-Parameter parsen und prüfen obs ne eMail ist. Wenn ja, setzt man den Param "email" ansonsten halt "device_iden".


                              Aus dem Bauch heraus und völlig ungetestet:

                              Zeile 95-97 ersetzen durch: (Einrückung beachten)
                              Code:
                              if deviceid:
                              	if re.match(r"^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", deviceid):
                              		data["email"] = deviceid
                              	else:
                              		data["device_iden"] = deviceid
                              else:
                              	data["device_iden"] = self._deviceid

                              Grüße,

                              Lars

                              Kommentar


                                #30
                                Hi Lars,

                                bin nun schon seit gestern am Testen mit dem Parameter email und habe den Code für den Test etwas abgestrickt. Strange... Mit Curl klappt es, mit den debugs sieht es eigentlich auch so aus damit alles sauber übertragen wird, aber in der Realität bekomme ich dann einen Dismiss=True im Senderlog und dann schickt er es an die Adressen des API-Owners.
                                Ich tüftle weiter und werde mal Deine Zeilen ausprobieren bzw. einbauen.
                                Keep you in the loop.

                                Cheers,
                                Oliver

                                Kommentar

                                Lädt...
                                X