NEWS
Günstigste Architektur Simple API (hochfrequente Requests)
-
Servus zusammen,
Ich habe mir ein Webfrontent gebaut, mit dem ich den Status verschiedener Gewerke aufbereite. Aktuell frage ich asynchron (je nach Gewerk zwischen 1 - 5 Sekunden) verschiedene Datenpunkt-Gruppen (ganze Datenpunkte via pattern) ab. Das Frontent selber läuft auf meinem Webserver und ist mit PHP umgesetzt. Der Webserver schickt Requests an meinen Pi im Heimnetz. Das lässt meinen Pi manchmal recht heiß laufen, wenn ich gerade entsprechend große Gewerke anzeige die jede Sekunde aktualisiert werden.
Ich würde das gern ein wenig optimieren, und habe aktuell zwei Ideen:
Alternative 1: Ich überwache per Blockly-Script jede relevante Datenpunkt-Gruppe und schreibe bei einer Änderung ein Flag. Nun würde ich in meiner Frequenz nur das Flag lesen, und ggf. bei Änderung die Datenpunkte wie gehabt.
Alternative 2: Ich frage nicht mehr ganze Datenpunkte ab, sondern nur noch Plain-Values mit expliziten Datenpunkt-Bezeichnern. Damit müsste ich die Konfiguration und Logik auf dem Webserver etwas aufblähen, aber dieser ist potenter als der Pi.
Welche Ansätze habt Ihr für die Simple API umgesetzt, bzw. welche Ansätze fallen Euch ein? Kann jemand von Euch meine beiden Alternativen bewerten, welche sinniger bzw. performanter und Pi-schonender ist?
Besten Dank im Voraus.
-
@binaryaddict Sinnvoller wäre eine dauerhafte Verbindung basierend auf socket.io, wo nicht (unnötig) gepollt wird. Da kannst du auf mehrere Patterns subscriben, eingangs einmal die Werte lesen, und dir bei Änderungen die neuen Werte schicken lassen (so wie in ioBroker Skripten auch).
-
@alcalzone said in Günstigste Architektur Simple API (hochfrequente Requests):
@binaryaddict Sinnvoller wäre eine dauerhafte Verbindung basierend auf socket.io, wo nicht (unnötig) gepollt wird. Da kannst du auf mehrere Patterns subscriben, eingangs einmal die Werte lesen, und dir bei Änderungen die neuen Werte schicken lassen (so wie in ioBroker Skripten auch).
Danke für den Tipp. Hast Du hierzu ein paar weiterführende Links auf etwaige Referenzimplementierungen zur Hand? Was muss ich ioBroker-seitig tun, um eine eingehende Verbindung bereitzustellen? socket.io scheint kein eigenständiger Adapter zu sein. Steht der Serverteil ioBroker-seitig von Haus aus zur Verfügung?
-
@binaryaddict sagte in Günstigste Architektur Simple API (hochfrequente Requests):
socket.io scheint kein eigenständiger Adapter zu sein
Doch, klick mal auf den Link in meinem vorherigen Post
Alternativ hat der web-Adapter auch socket.io an Bord.Zur Referenzimplementierung könnte folgender Thread etwas helfen:
https://forum.iobroker.net/topic/52798/solved-benutze-socket-io-adapter-in-react-appMit PHP ist das allerdings etwas komplizierter, da wirst du nicht umhin kommen, https://github.com/ioBroker/socket-client/ mehr oder weniger zu portieren. Der interessante Teil steckt in Connection.ts, wo die Methoden zum Datenzugriff implementiert sind.
-
@alcalzone said in Günstigste Architektur Simple API (hochfrequente Requests):
@binaryaddict sagte in Günstigste Architektur Simple API (hochfrequente Requests):
socket.io scheint kein eigenständiger Adapter zu sein
Doch, klick mal auf den Link in meinem vorherigen Post
Alternativ hat der web-Adapter auch socket.io an Bord.Zur Referenzimplementierung könnte folgender Thread etwas helfen:
https://forum.iobroker.net/topic/52798/solved-benutze-socket-io-adapter-in-react-appMit PHP ist das allerdings etwas komplizierter, da wirst du nicht umhin kommen, https://github.com/ioBroker/socket-client/ mehr oder weniger zu portieren. Der interessante Teil steckt in Connection.ts, wo die Methoden zum Datenzugriff implementiert sind.
Den hab ich mir schon angeschaut. Ich war verwirrt, weil ich socket.io bei den Adaptern zwar mit der Suche finde, jedoch nicht installieren kann. Installiert scheint er aber auch nicht zu sein, zumindest seh ich ihn nicht bei meinen Instanzen.
Mit einer Beispieldatei konnte ich schon eine Verbindung herstellen (die läuft scheinbar über den web-Adapter). Da gibt es aber noch vieeeeele Feinheiten zu erforschen Beispielsweise ist mir aktuell noch rätselhaft, wie man das vernünftig absichert. Weil ich letztenendes JS mit der Config und Authentifizierung ausliefern muss, die ja im Klartext lesbar ist. Aber ich wühl mich mal durch.
Besten Dank für die weiteren Links!
-
@binaryaddict sagte in Günstigste Architektur Simple API (hochfrequente Requests):
jedoch nicht installieren kann. Installiert scheint er aber auch nicht zu sein, zumindest seh ich ihn nicht bei meinen Instanzen.
Ggf. musst du einfach nur eine Instanz hinzufügen? https://www.iobroker.net/#en/documentation/tutorial/adapter.md?creationofaninstanceofanadapter
-
@alcalzone said in Günstigste Architektur Simple API (hochfrequente Requests):
@binaryaddict sagte in Günstigste Architektur Simple API (hochfrequente Requests):
jedoch nicht installieren kann. Installiert scheint er aber auch nicht zu sein, zumindest seh ich ihn nicht bei meinen Instanzen.
Ggf. musst du einfach nur eine Instanz hinzufügen? https://www.iobroker.net/#en/documentation/tutorial/adapter.md?creationofaninstanceofanadapter
Oh mann, da scheint mein Hirn noch nicht mitaufgestanden zu sein. Oder es hat sich noch nicht an die neue Oberfläche gewöhnt
Danke für Deine Geduld - nu hab ich eine Instanz. Wobei wahrscheinlich die größere Herausforderung sein wird die Schnittstelle entsprechend zu implementieren.