Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Müsste das nicht in den Ordner: /usr/local/smarthome/var/webpush/'
Ja müsste es, ich hole mir den begin des Pfades über os.getcwd() dies sollte eigentlich immer usr/local/smarthome/ sein. Gibt es evtl. einen Befehl um BASE von smarthome.py abzufragen? (https://github.com/smarthomeNG/smart...rthome.py#L101)
Muss das Modul 'cryptography' auch in die requirements?
Ja cryptography gehört auch in die requirements. Die deprecated warnings werde ich rausfiltern die betreffen mich nicht und kommen nur beim import mit.
Sisamiwe Hat bei dir das Versenden und Empfangen geklappt?
Nach einigen Neustarts ist die Fehlermeldung im Log nicht mehr finden.
Der Ordner '/usr/local/smarthome/var/webpush/' wurde auch angelegt und dort die Dateien abgelegt.
Dann gab es ein paar Neustarts, bei dem das Plugin auch nicht korrekt geladen wurde und somit das struct nicht gefunden werden konnte.
Nun geht es. Vielleicht lag es an der Nachinstallation der requirements.
Startet man shNG über die Konsole im "Debug-Modus", gibt es nicht ein paar Meldungen:
Code:
/usr/local/smarthome/lib/smarthome.py:885: CryptographyDeprecationWarning: Blowfish has been deprecated
obj = getattr(module, sym)
/usr/local/smarthome/lib/smarthome.py:885: CryptographyDeprecationWarning: CAST5 has been deprecated
obj = getattr(module, sym)
/usr/local/smarthome/lib/smarthome.py:885: CryptographyDeprecationWarning: IDEA has been deprecated
obj = getattr(module, sym)
/usr/local/smarthome/lib/smarthome.py:885: CryptographyDeprecationWarning: SEED has been deprecated
obj = getattr(module, sym)
Muss das Modul 'cryptography' auch in die requirements?
Habe jetzt ssl über selbst signierte Zertifikate aktiviert. Bei Chrome desktop und mobil wird es unterbunden einen serviceworker auf http zu registrieren, dh da gehts nicht. Aber z.B. Firefox lässt es zu und da funktioniert es sogar mobil und es kommen die auch Nachrichten an leider momentan nur lautlos.
Ach so ne s... Musste gerade feststellen, dass push nur über https funktioniert. Ich habe eine Installation über einen Proxy mit ssl bei dem klappts super und bei der anderen die nur über die lokale Ip und http läuft wird man drauf hingewiesen, dass push nicht unterstützt wird.
Mal schauen ob man das irgendwie anders regeln kann.
sh.webpush.sendPushNotification("Test Nachricht an die Gruppe Info", "info", "Titel der Nachricht", "https://smarthomeng.de/")
Ich hab zwar noch keine Ahnung wie ich dann den PR so hinbiege, dass mein Repo als Unterverzeichnis von smarthomeng/plugins/ auftaucht und die commits erhalten bleiben, aber alles zu seiner Zeit.
LG
Zuletzt geändert von hijacker7; 31.10.2022, 20:48.
Grund: Renamed Repo
Habe gerade geschaut ist hier mit git sparse-checkout nicht so einfach und ich will dir dein ausgechecktes Repo nicht abschießen...
Du kannst dir aber irgendwo (nicht im Smarthome Verzeichniss und schon gar nicht bei plugins) mein Repo mit sparse auschecken - wie unten gezeigt- und dann halt den Ordner webpush nach plugins kopieren, geht aber whrscheinlich nicht vieel schneller als direkt von Hand.
Aus diesem Grund lege ich die Plugins, an denen ich entwickle, direkt in mein Repo. So kann man schneller und direkt in der eigenen Installation Updates des "fremden" Pluigns machen.
Dazu gibt es hier auch schon eine Anleitung, wie man das dann bei sich einbaut.
Das macht es für dich, zumindest für den PR aufwendiger, für den anderen aber einfacher.
Nur als Gedankenanstoß.
Ein mkdir könnte natürlich nicht schaden, habs gefixt.
Habe gerade geschaut, ist hier mit git sparse-checkout nicht so einfach und ich will dir dein ausgechecktes orginal plugin Repo nicht abschießen...
Du kannst dir aber irgendwo (nicht im smarthome Verzeichniss und schon gar nicht bei plugins) mein Repo mit sparse auschecken - wie unten gezeigt- und dann halt immer den Ordner webpush nach plugins kopieren.
Code:
cd *irgendwohin wo es sicher ist*
git clone --filter=blob:none --no-checkout --depth 1 --branch develop --sparse https://github.com/gruberth/plugins.git
cd plugins
git sparse-checkout add webpush
git checkout
cp -r webpush /usr/local/smarthome/plugins/_priv_webpush
Dieses Repo kannst du dann ganz normal mit git pull updaten und den cp Befehl erneut ausführen.
Zuletzt geändert von hijacker7; 22.10.2022, 09:39.
ich wollte mir das mal anschauen und testen. Weit gekommen bin ich nicht ;o)
Code:
2022-10-21 20:20:51 ERROR lib.plugin Plugin '_priv_webpush' from section 'webpush' exception: unable to open database file
Traceback (most recent call last):
File "/usr/local/smarthome/lib/plugin.py", line 162, in __init__
plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta, self._configfile)
File "/usr/local/smarthome/lib/plugin.py", line 629, in __init__
exec("self.plugin.__init__(smarthome{0}{1})".format("," if len(arglist) else "", argstring))
File "<string>", line 1, in <module>
File "/usr/local/smarthome/plugins/_priv_webpush/__init__.py", line 89, in __init__
self.initDatabase()
File "/usr/local/smarthome/plugins/_priv_webpush/__init__.py", line 249, in initDatabase
dbConn = sqlite3.connect(self.databasePath)
sqlite3.OperationalError: unable to open database file
Wie kann ich dann nur dieses Plugin aus Deinem Repo clonen?
Das Plugin ist soweit fertig entwickelt, ich bräuchte noch ein paar Tester und etwas Feedback.
Die oben angehägte Zip ist auf dem selben Stand wie mein Fork, ihr könnt euch also das Plugin von beiden Varianten hohlen. Für weitere Infos zur Verwendung und genauere Beschreibung der Parameter usw. schaut euch bitte die vorhergehende Nachricht, die userdoc datei und evtl die plugins.yaml an.
Falls mir jemand, der in JavaScript fitter ist als ich, kurz über den Code in der sv_widgets/webpush.js schauen könnte, würde mich das auch sehr freuen. Dieser ist eine angepasste Variante von hier https://codelabs.developers.google.c...-notifications
Würde dann, wenn sich ein paar Tester gemeldet haben, einen PR erstellen.
Soll ich später einen neuen Thread für den Support aufmachen oder kann dieser umbenannt werden?
LG
Zuletzt geändert von hijacker7; 21.10.2022, 18:50.
Zum Testen das Plugin ins Verzeichis plugins legen, nach Neustart Plugin im Adminbereich aus Web/Cloud Plugins importieren und konfigurieren (dh. eig nur die Liste an Gruppen anlegen zb. alarm | info), oder direkt die plugin.yaml unter etc bearbeiten z.B.
Nach einem Neustart sollte man sich über die Visu zu Nachrichten-Gruppen an- und abmelden können, die Einstellungen werden auf dem Gerät gespeichert.
Über eine Logik oder einen eval-Befehl können dann Nachrichten versendet werden. zb.
Code:
sh.webpush.sendPushNotification("Test Nachricht an die Gruppe Info", "info", "Titel der Nachricht", "https://smarthomeng.de/")
Es gibt noch viele weitere Parameter die angehängt werden können, z.b. um das Icon der Nachricht zu setzten, ein Bild einzubinden oder ein eigenes Vibrationsmuster anzulegen und noch einiges mehr. Habs noch nicht geschafft alles sauber durchzutesten aber die Basics funktionieren.
Firefox auf Android hat ein Problem mit dem Empfangen von push Nachrichten, dazu gibt es schon lange ein Issue (https://github.com/mozilla-mobile/fenix/issues/19152) aber anscheinend intressiert es niemanden, dass es nicht funktioniert. Sonst hat es auf allen meinen Geräten und auch Browsern super geklappt, wobei die meiste Funktioalität (Vibration steuern, usw.) hat Chrome sowohl im desktop als auch mobilen Bereich.
Bei mobilen Geräten muss kein Browser geöffnet sein, bei Desktop Browsern muss der Browser auf einer beliebigen Seite geöffnet sein um Nachrichten zu empfangen. Nachrichten werden auch nachträglich zugestellt, wenn das Gerät zunächst offline war (oder bei Desktop der Browser geschlossen) und dann wieder verfügbar ist.
Bei sendPushNotification() gibt es den Parameter ttl wo die Zeit eingestellt werden kann wie lange maximal versucht werden soll die Nachricht nachzusenden. ttl=0 bedeutet hierbei kein nachsenden wenn das gerät nicht erreichbar war, jedoch werden Nachrichten mit ttl=0 mit höherer Priorität behandelt. Bei Android wird die Nachricht mit ttl>0 nur bei entsperrtem Bildschirm sofort erhalten, bei Bildschrimsperre dauert es etwas, hingegen bei 0 erscheint die Nachricht auch sofort am Sperrbildschirm. Es gibt für sendPushNotification() den Parameter highPriority der den zusätzlichen Urgency Parameter auf high setzt, somit werden Nachrichten generell aber auch speziell bei Stromsparmodus am mobil Gerät schneller empfangen.
Webinterface und Doku sind noch nicht vollständig.
Ideen, Fehlermeldungen und Anregungen sind willkommen.
Hab mir das grade nochmal angeguckt könnte mans nicht so machen:
- pushnotification json erstellen - per button als text in item übertragen
- string aus item in json wandeln
- in pythonplugin abgreifen und verarbeiten
Zumindest wäre das analog hierzu
In the browser, the promise handler for registration.pushManager.subscribe() returns a PushSubscription object. This object has a .toJSON() method that will return a JSON object that contains all the info we need to encrypt and push data.
As illustration, a subscription_info object may look like:
How you send the PushSubscription data to your backend, store it referenced to the user who requested it, and recall it when there's a new push subscription update is left as an exercise for the reader.
Naja, Post schreit ja schon nach REST oder?
gibts da nicht schon ne unterstützung von smarthomeNG dafür? Wäre sogar ganz nett, dann könntest du mit python weiterarbeiten. Ich weiss allerdings nicht, welche daten zum registrieren gebraucht werden.. wahrscheinlich werden die nachrichten ja wieder per JS also smartvisu wieder zum Browser abgesetzt...
Hallo,
ich würde gerne ein Plugin schreiben, welches es ermöglicht web push Nachrichten via Logik von SmarthomeNG aus an einen Client-Browser (Smartphone, Tablet, PC, …) zu senden. Dadurch ist es für Server zu Client Nachrichten nicht nötig einen Messenger wie Telegram oder einen externen Push service mit App usw. wie Pushover zu verwenden. Es reicht jeder gewöhnliche Browser aus. Ein Benutzer sollte sich dabei zusätzlich zu bestimmten Gruppen von Nachrichten registrieren können, um nicht immer alle Nachrichten zu erhalten.
Meine bisherigen Überlegungungen sind dazu:
-Plugin webpush
Konfiguration:
-Liste mit möglichen Nachrichten-Gruppen z.B. [Alarme, Infos, Heizung, Geräte]
-python Bibliothek wie z.B. solidwebpush
-Datenbank mit web push subscription (id, key, …) und gewählten Nachrichten-Gruppen
-SmartVisu-Widget webpush.config
Parameter:
-PublicServerKey (erhält man vom Plugin, könnte auch über Websocket/Item übertragen werden)
-Item oder Text mit der gesamten Nachrichten-Gruppen Liste
Oberfläche:
-Liste zum Ankreuzen der möglichen Gruppen zu denen Nachrichten empfangen werden sollen
-Bestätigungs-Button der web push auf dem Gerät aktiviert und Gruppenauswahl übernimmt
Hintergrund:
JavaSkript das den web push service worker und die subscription registriert und verwaltet. Dadurch wird auch erkannt ob push Nachrichten auf dem Gerät aktiviert sind. Die getätigte Gruppenauswahl für das Gerät müsste in einem Cookie gespeichert werden.
Mein Problem an der Sache ist, dass ich nicht weiß, wie ich über den Websocket die Daten, die ich von der web push subscription erhalte und die Gruppenauswahl an das Plugin zurücksende, damit ich diese in die Datenbank schreiben kann und später Nachrichten schicken kann. Normalerweise wird dies über einen Html POST an den Server, wo ein PHP Skript wartet, zurückgesendet. Dies ist aber im Falle mit SmartVisu meiner Meinung nach nicht machbar und auch nicht nötig weil der Websocket ja eh schon offen ist.
Hat jemand dazu und generell Ideen, die mir weiterhelfen oder Tipps was ich nicht vergessen sollte.
LG
Zuletzt geändert von hijacker7; 18.10.2022, 12:39.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Einen Kommentar schreiben: