Giter Site home page Giter Site logo

mikesch-1960 / demo-iobroker_rest-api_with_browser Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 24 KB

Hie zeige wie 'long polling' verwendet werden kann, um Daten aus dem ioBroker in einer html Seite anzuzeigen und automatisch zu aktualisieren

License: Creative Commons Zero v1.0 Universal

HTML 43.86% JavaScript 56.14%
api browser html iobroker javascript long polling rest rest-api

demo-iobroker_rest-api_with_browser's Introduction

my ioBroker rest-api longpoll demo

Was ist long polling?

Long Polling ist der einfachste Weg, um eine dauerhafte Verbindung zu einem Server herzustellen. Sobald der Server dem browser eine Nachricht sendet wird diese von browser sofort empfangen. Dadurch wird das Netz nur sehr wenig belastet und die Daten können ohne Verzögerung vom browser verarbeitet werden.

In diesem Projekt habe ich eine javascript Klasse entwickelt, mit deren Hilfe Daten aus dem iobroker gelesen, abonniert und verändern werden können. Zum Testen der Klasse habe ich eine html Seite erstellt, in der die Ergebnisse dargestellt werden, und in der die Methoden der Klasse verwendet werden. Ich habe keinen besonderen Wert auf das Aussehen gelegt, da die html Seite nur zum Testen der javascript Klasse dienen soll.

Voraussetzungen

  • Installierte, aktuelle Version des iobrokers

  • Im ioBroker muss der rest-api Adapter installiert und konfiguriert sein. Der rest-api Adapter bietet die Möglichkeit Datenpunkte zu abonnieren und auf Veränderungen zu reagieren, sehr ähnlich wie beim MQTT Adapter.

    Bei Verwendung von MQTT in einer html Seite, besteht aber das Problem, dass beim Setzen eines Datenpunktes nicht das zugehörige Gerät reagiert. Mit einer rest-api gibt es dieses Problem nicht.

Hinweis

Für den ioBroker gibt es auch einen Adapter mit dem Name 'simple rest-api'. Dieser unterstützt aber kein long polling, was für das Abonnieren von Datenpunkten benötigt wird. Leider ist der rest-api Adapter noch in einer sehr frühen Version und vor drei Monaten (Stand Februar.2023) das letzte Mal bearbeitet worden.

Meine Motivation

Unter den Beispielen im github repository des rest-api Adapters ist auch eins für die Verwendung von long polling in einem browser. Jedoch hatte ich einige Schwierigkeiten bei der Benutzung des Beispiels.

Meine Probleme mit dem Beispiel sind:

  • meiner Meinung nach ist der code recht unübersichtlich und nur wenig kommentiert.
  • es sind viele Variablen im Scriptteil der html Seite erforderlich.
  • bei jedem Aufruf der Seite wird eine neue session-id generiert, was bei mir nach wenigen Malen dazu führte, das die Abonnenten keine Ereignisse mehr bei Änderungen sendeten.
  • beim Abonnieren von Datenpunkten ist im script vorgesehen, das eine callback Funktion als zweiter Parameter angegeben werden kann. Dies wird im Beispiel aber nicht verwendet. Für mich war es auch wichtiger, dass ich zusätzliche Informationen mitgeben kann. Diese Information kann dann im Ereignis das bei Veränderungen ausgelöst wird verwendet werden.
  • beim Abonnieren von Datenpunkten zu shelly Geräten wird die gesendete URL nicht ganz erkannt, da diese Datenpunkte '#'-Zeichen im Namen haben.
  • die html Seite ist leer.

Zum entwickeln benutzte Programme

  • Visual Studio Code. Erweiterungen:
    • Live Server
    • weitere, die das Bearbeiten von html, css und js erleichtern
  • Firefox (light mode)

Das Projekt

In meiner Version implementiert:

  • eine einzige Klasse die nicht nur das long polling kapselt, sondern in der auch die anderen (im Moment nur die von mir benötigten) Aufrufe der rest-api enthalten sind.

  • keine zusätzlichen Variablen außer der Instanz der rest-api Klasse und den Ereignis Funktionen im html Dokument nötig.

  • beim Abonnieren kann ein zusätzliches Objekt mitgegeben werden, das im Ereignis gelesen werden kann.

  • Abonnieren von Datenpunkten zu shelly Geräten ist möglich, da beim Senden in der URL alle '#'-Zeichen der id durch '%23' ersetzt werden.

  • Die session-id wird im constructor gesetzt und bleibt so bei jedem Aufruf der html Seite gleich.

    Da ich mit vsCode und der 'Live Server' Erweiterung arbeite, lud die Erweiterung bei jedem Speichern die Seite im browser neu und damit wurde auch jedes Mal eine neue session-id generiert.

Die html Seite zum Testen der javascript Klasse

Ich habe die html Seite relativ einfach gehalten. Auf der html Seite sind nur Schalter für das Ein- und Ausschalten der long polling Funktion, sowie Anzeigefelder für die abonnierten Datenpunkten und ein Schalter zum setzen des Wertes einer der beiden Datenpunkte (ein boolean Wert) zu sehen. Zusätzlich wird die zuletzt empfangene Nachricht angezeigt.

Um das ganze einiger Maßen ansehnlich zu machen, habe ich einige CSS Stile hinzugefügt.

Den Skriptteil der html Seite kommentiere ich so, dass alles verständlich sein sollte. Es werden zwei Datenpunkte abonniert, die (soweit ich weiß) im ioBroker standardmäßig vorhanden sind. Die Abonnierten Datenpunkte können leicht angepasst werden. Unter Umständen muss dann aber auch im html etwas geändert werden, was aber mit ein wenig html Kenntnissen auch nicht so kompliziert sein sollte.

demo-iobroker_rest-api_with_browser's People

Contributors

mikesch-1960 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.