Ankündigung

Einklappen
Keine Ankündigung bisher.

Neues Plugin: Pushbullet

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

    #61
    Hallo,

    kurze, vielleicht etwas blöde Frage: Ich kann die per sh gesendeten Nachrichten zwar sehen, bekomme aber keine Push Benachrichtigung. Macht ja auch irgendwie sinn, da ich ja quasi von meinem eigenen account an mich selber sende. Also kann ich die Nachrichten nur sehen, wenn ich pushbullet öffne und in die Message history schaue. Hab ich da was übersehen?

    Danke und Gruß

    Nils

    Kommentar


      #62
      Verstehe leider das Problem nicht so ganz. Du kannst an Dich selbst senden und die Nachrichten werden dann auch gepusht, bspw. von SH auf das ip**ne.
      Dabei spielt es keine Rolle ob Du Dir oder jemand anders die Nachrichten versendet. Wo und wie siehst du denn die Nachrichten?

      Kommentar


        #63
        Also ich bekomme keine Benachrichtigung bei von mir selbst gesendeten Nachrichten. Wenn ich z.B. von der Desktopapp schreibe bekomme ich keine Benachrichtung auf dem Handy (Macht ja auch Sinn). Genauso wenig wie beim versenden durch sh.py. Bei Nachrichten von "außen" (z.B. WhatsApp) auf das Handy bekomme ich die Benachrichtigung auf dem Desktop (Popup). Folglich sehe ich die Nachrichten von sh.py nur, wenn ich die app auf dem Handy öffne...

        Kommentar


          #64
          Naja, bei mir klappts einwandfrei, dann taucht auf dem Phone auf Meldung von "Me". Wohin sendest Du denn? An ein Device oder an einen User (emailadresse)? Ich sende immer notes an Emailadressen.

          Kommentar


            #65
            Ich sende an ein Device. Werde mal die email adresse probieren...

            Kommentar


              #66
              Yo, könnte der Unterschied sein. Finde Email deutlich komfortaler, denn da können dann diverse Devices dahinter sein. Sende damit auch an fremde PB-Clients/Accounts, bspw. an die meiner besseren Hälfte

              Kommentar


                #67
                Juhu, jetzt geht's. Musste mich am android telefon einmal ausloggen und wieder anmelden...
                Habe auch auf email umgestellt...
                Zuletzt geändert von wpcdeeznutz; 08.07.2015, 13:52.

                Kommentar


                  #68
                  Zitat von Sandman60 Beitrag anzeigen
                  Schuß ins Blaue... Dein Plugin ist kein Text/Plugincode sondern die HMTL-Seite vom GIT, sprich schau mal die __init__ Datei mit einem Notepad oder ähnlichem an...
                  Hi Sandman60,

                  danke für Deine schnelle Antwort! Ich bin leider erst heute wieder dazu gekommen...

                  Leider weiß ich nicht so richtig, was ich mit Deiner Antwort anfangen soll, bzw was ich falsch gemacht habe - ich hab ja auch nicht mehr gemacht, als über den Befehl die Installation anzustoßen.
                  Die init habe ich mit einem Editor geöffnet. Muß ich die init durch eine andere ersetzen? Ich habe in der init auch nichts geändert.

                  Vielen Dank für Deine Hilfe!

                  Kommentar


                    #69
                    Moin,
                    hmm. Also laut dem Fehler "__init__.py, line 4" und "<!DOCTYPE html>" hätte ich gesagt die init-Datei ist keine reine Textdatei sondern irgendwas mit einem HTML-Header, denn in der Zeile 4 ist ja normalerweise noch ein # mit den Info/Copyrights, oder was sagt Dein File bei Zeile4?
                    Mir ging das ganz am Anfang auch etliche Male so bevor ich auf einen anderen Editor (Notepad++) umgestiegen bin.
                    Cheers,
                    Oliver

                    Kommentar


                      #70
                      Hallo zusammen,

                      sorry das es etwas länger gedauert hat.

                      Hier: http://pastebin.com/5uKB5DXf einmal eine Version, welche den JSON-Response der Pushbullet API zurückliefern sollte.

                      (Anhänge scheinen nicht zu funktionieren )

                      Habs leider noch nicht wirklich austesten können, hoffe aber das das soweit funktioniert.
                      Im JSON Objekt findet man unter dem Key "iden" die ID des gesendeten Pushs, wenn man sich den nun am Auslöser-Objekt speichert könnte man sicherlich über eine Logik den Push löschen wenn die Bedingung wieder auf 0 gesetzt wird.

                      Zum Löschen von Pushes muss ich das Plugin noch erweitern, ich versuche das am Wochenende nachzuliefern, aber evtl. kann man mit dem Response schon mal rumprobieren?


                      Grüße,

                      Lars
                      Angehängte Dateien
                      Zuletzt geändert von Shai; 07.08.2015, 08:39.

                      Kommentar


                        #71
                        Hallo Lars,
                        sorry für die ziemlich späte Rückmeldung. Habe nun heute Abend die neue Version mal eingespielt und werde berichten.

                        Vielen Dank auf jeden Fall schon mal für die neue Version! Klasse!
                        Cheers,
                        Oliver

                        Kommentar


                          #72
                          Hi Lars,
                          blöde Frage, stehe gerade auf dem Schlauch... Könntest Du mir bitte kurz auf die Sprünge helfen wie ich an die "iden" herankomme?

                          Kommentar


                            #73
                            Hey,

                            musste auch erst mal reingucken - hab mich damit länger nicht beschäftigt,
                            aber von der API des "Py Requests" aus zu schließen würde ich sagen:

                            Code:
                            response = sh.pushbullet.note("Note to myself.", "Call my mother.")
                            iden = response['iden']
                            versuchen.


                            Ich hab auch im Anhang noch die (potentielle) Version zum Löschen von Pushes:

                            Aufruf mit

                            Code:
                            sh.pushbullet.delete(<iden>)

                            Grüße,

                            Lars

                            Code:
                            #!/usr/bin/env python3
                            # vim: set encoding=utf-8 tabstop=4 softtabstop=4 shiftwidth=4 expandtab
                            #########################################################################
                            #  Copyright 2011 KNX-User-Forum e.V.           https://knx-user-forum.de/
                            #########################################################################
                            #  This file is part of SmartHome.py.    http://mknx.github.io/smarthome/
                            #
                            #  SmartHome.py is free software: you can redistribute it and/or modify
                            #  it under the terms of the GNU General Public License as published by
                            #  the Free Software Foundation, either version 3 of the License, or
                            #  (at your option) any later version.
                            #
                            #  SmartHome.py is distributed in the hope that it will be useful,
                            #  but WITHOUT ANY WARRANTY; without even the implied warranty of
                            #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                            #  GNU General Public License for more details.
                            #
                            #  You should have received a copy of the GNU General Public License
                            #  along with SmartHome.py. If not, see <http://www.gnu.org/licenses/>.
                            #########################################################################
                            
                            import logging
                            
                            import json
                            import requests
                            import magic
                            import os
                            import re
                            
                            logger = logging.getLogger("Pushbullet")
                            
                            class Pushbullet(object):
                                _apiurl = "https://api.pushbullet.com/v2/pushes"
                                _upload_apiurl = "https://api.pushbullet.com/v2/upload-request"
                            
                                def __init__(self, smarthome, apikey=None, deviceid=None, debug=False):
                                    self._apikey = apikey
                                    self._deviceid = deviceid
                                    self._sh = smarthome
                                    self._debug = debug
                            
                                def run(self):
                                    pass
                            
                                def stop(self):
                                    pass
                            
                                def delete(self, pushid, apikey=None):
                                    if apikey is None:
                                        apikey = self._apikey
                            
                                    try:
                                        response = requests.delete(self._apiurl + "/" + pushid, headers={"User-Agent": "SmartHome.py", "Content-Type": "application/json"}, auth=(apikey,""))
                                        if self._is_response_ok(response):
                                            return response.json()
                            
                                        logger.error("Could not delete Pushbullet notification. Error: {0}".format(response.text))
                                    except Exception as exception:
                                        logger.error("Could not delete Pushbullet notification. Error: {0}".format(exception))
                            
                                    return False
                            
                                def note(self, title, body, deviceid=None, apikey=None):
                                    return self._push(data={"type": "note", "title": title, "body": body}, deviceid=deviceid, apikey=apikey)
                            
                                def link(self, title, url, deviceid=None, apikey=None, body=None):
                                    return self._push(data={"type": "link", "title": title, "url": url, "body": body}, deviceid=deviceid, apikey=apikey)
                            
                                def address(self, name, address, deviceid=None, apikey=None):
                                    return self._push(data={"type": "address", "name": name, "address": address}, deviceid=deviceid, apikey=apikey)
                            
                                def list(self, title, items, deviceid=None, apikey=None):
                                    return self._push(data={"type": "list", "title": title, "items": items}, deviceid=deviceid, apikey=apikey)
                            
                                def file(self, filepath, deviceid=None, apikey=None, body=None):
                                    if os.path.exists(filepath) == False:
                                        logger.error("Trying to push non existing file: {0}".format(filepath))
                                        return False
                            
                                    return self._upload_and_push_file(filepath, body, deviceid, apikey)
                            
                                def _upload_and_push_file(self, filepath, body=None, deviceid=None, apikey=None):
                                    try:
                                        headers = {"User-Agent": "SmartHome.py", "Content-Type": "application/json"}
                            
                                        if apikey is None:
                                            apikey = self._apikey
                            
                                        upload_request_response = requests.post(self._upload_apiurl, data=json.dumps({"file_name": os.path.basename(filepath), "file_type": magic.from_file(filepath, mime=True).decode("UTF-8")}), headers=headers, auth=(apikey,""))
                            
                                        if self._is_response_ok(upload_request_response):
                                            data = upload_request_response.json()
                                            upload_response = requests.post(data["upload_url"], data=data["data"], headers={"User-Agent": "SmartHome.py"}, files={"file": open(filepath, "rb")})
                            
                                            if self._is_response_ok(upload_response):
                                                if body is None:
                                                    body = ""
                            
                                                return self._push(data={"type": "file", "file_name": data["file_name"], "file_type": data["file_type"], "file_url": data["file_url"], "body": body}, deviceid=deviceid, apikey=apikey)
                                            else:
                                                logger.error("Error while uploading file: {0}".format(upload_response.text))
                                        else:
                                            logger.error("Error while requesting upload: {0}".format(upload_request_response.text))
                                    except Exception as exception:
                                        logger.error("Could not send file to Pushbullet notification. Error: {0}".format(exception))
                            
                                    return False
                            
                                def _push(self, data, deviceid=None, apikey=None):
                                    if apikey is None:
                                        apikey = self._apikey
                            
                                    if deviceid is None:
                                        deviceid = self._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
                            
                                    try:
                                        response = requests.post(self._apiurl, data=json.dumps(data), headers={"User-Agent": "SmartHome.py", "Content-Type": "application/json"}, auth=(apikey,""))
                                        if self._is_response_ok(response):
                                            return response.json()
                            
                                        logger.error("Could not send Pushbullet notification. Error: {0}".format(response.text))
                                    except Exception as exception:
                                        logger.error("Could not send Pushbullet notification. Error: {0}".format(exception))
                            
                                    return False
                            
                                def _is_response_ok(self, response):
                                    if response.status_code == 200 or response.status_code == 204:
                                        logger.debug("Pushbullet returns: Notification submitted.")
                            
                                        return True
                                    elif response.status_code == 400:
                                        logger.warning("Pushbullet returns: Bad Request - Often missing a required parameter.")
                                    elif response.status_code == 401:
                                        logger.warning("Pushbullet returns: Unauthorized - No valid API key provided.")
                                    elif response.status_code == 402:
                                        logger.warning("Pushbullet returns: Request Failed - Parameters were valid but the request failed.")
                                    elif response.status_code == 403:
                                        logger.warning("Pushbullet returns: Forbidden - The API key is not valid for that request.")
                                    elif response.status_code == 404:
                                        logger.warning("Pushbullet returns: Not Found - The requested item doesn't exist.")
                                    elif response.status_code >= 500:
                                        logger.warning("Pushbullet returns: Server errors - something went wrong on PushBullet's side.")
                                    else:
                                        logger.error("Pushbullet returns unknown HTTP status code = {0}".format(response.status_code))
                            
                                    if self._debug:
                                        logger.warning("Response was: {}".format(response.text))
                            
                                    return False

                            Kommentar


                              #74
                              Hey Lars,

                              das sieht verdammt gut aus. Erste Tests mit Zwischenspeicherung der ID und anschließender Löschung haben 1A geklappt. Habe nun meine Logik testweise angepasst und werde nun Zug um Zug die nächsten Scripts umstellen. Werde berichten....
                              Danke nochmal, klasse!

                              Cheers,
                              Oliver
                              P.S.: Sollten die folgende Zeile noch am Anfang beim Init einbauen (zur Unterdrückung der API-Meldung beim Versenden "logging.getLogger("requests").setLevel(logging.WA RNING)")
                              Zuletzt geändert von Sandman60; 08.11.2015, 00:55. Grund: P.S.: Hinzugefügt

                              Kommentar


                                #75
                                So nachdem ich wegen meinem Synology System die libmagic.so jetzt neu gebaut habe geht es bei mir auch :-) Super Plugin. Mit dem Löschen habe ich das Symptom, dass er wohl so schnell löscht, dass die Meldung nicht mehr ans Handy ausgeliefert wird. In der Webapp von PushBullet sehe ich kurz die Nachricht, bevor sie dann wieder weg ist. Habt ihr das auch? Ich fände nachträgliches Löschen aus Sicht des Datenschutzes nicht schlecht (sofern das wirklich "echtes" Löschen dort ist..)

                                Hab mir in der Smartvisu noch nen Input-Feld gebaut mit dem meine Frau mir schnell Nachrichten schicken kann. Eigentlich ganz praktisch.

                                Kommentar

                                Lädt...
                                X