NEWS
[geklärt] prinzipielle Steuerungsfrage
-
Hallo,
ich hab mir vor längerem mit einem ESP826 und zwei 8-fach Relaiskarten ein kleine Gartensteuerung gebaut.
Auf dem ESP8266 läuft ein WebServer mit dem ich über eine HTML Seite die Relais ein/aus-schalten kann.
In der WebSeite ist auch ein automatisches "reload", damit -falls die WebSeite von einem anderen Rechner(Smartphone)
aufgerufen wird- auch immer der aktuelle Status der Relais angezeigt wird…. funktioniert soweit prima.
Jetzt möchte ich das Ganze auch zusätzlich über ioBroker steuern, daher die Frage, wie gehe ich hier am geschicktesten vor.
Javascript ist kein Problem, allerdings ist mir die NODEJS-Logik nicht ganz klar.
Ich kann per http-request, jederzeit den Status der Relais abfragen, und Datenpunkte damit setzen(z.B: Relais1: an/aus),
aber wie mache ich das im IOBroker?
mit "setState" kann ich Datenpunkte setzen,
mit getState Datenpunkte abfragen...
mit on({id:'xxxxx'},... kann ich auf Änderungen reagieren,
wie steuere ich aber sowas jetzt vernünftig, mit je zwei Datenpunkten(SOLL/IST-Zustand) pro Relais?
Ein script "pollt" alle10 sec den Status der Relais und setzt die Datenpunkte(IST)
parallel läuft ein weiteres script, das auf Änderungen der Datenpunkte (SOLL) reagiert, und dann entsprechend schaltet,
ist das die übliche Vorgehensweise oder gibt's was besseres mit IOBroker?
-
Ich kann per http-request, jederzeit den Status der Relais abfragen, und Datenpunkte damit setzen(z.B: Relais1: an/aus),
aber wie mache ich das im IOBroker?
mit "setState" kann ich Datenpunkte setzen, `
Ganau so: Per Polling (schedule) die Werte aus der Webseite abfragen, und mit setState(id, val, true) den Datenpunkt setzen.
@stoffel67:wie steuere ich aber sowas jetzt vernünftig, mit je zwei Datenpunkten(SOLL/IST-Zustand) pro Relais? `
Weshalb zwei Datenpunkte pro Relais ?
@stoffel67:Ein script "pollt" alle10 sec den Status der Relais und setzt die Datenpunkte(IST)
parallel läuft ein weiteres script, das auf Änderungen der Datenpunkte (SOLL) reagiert, und dann entsprechend schaltet, `
Das kann alles in einem Skript erfolgen, sogar für alle Relais. Prinzip:const id1 = '...'; // Datenpunkt-ID für Relais 1 const id2 = '...'; // Datenpunkt-ID für Relais 2 const js = 'system.adapter.javascript.' + instance; on({id: id1, change: 'ne', fromNe: js}, function(dp) { // Wert an Webseite für Relais 1 senden }); on({id: id2, change: 'ne', fromNe: js}, function(dp) { // Wert an Webseite für Relais 2 senden }); schedule('*/10 * * * * *', function() { // Werte von Webseite holen setState(id1, val1, true); // val1 = Wert für Relais 1 von Webseite // usw. });
-
So hab' ich mir es auch gedacht, aber ( ich hab's so noch nicht programmiert..)
wenn ich durch den "schedule" alle 10 sec den Status hole, und mit "setState" setze, produziere ich da nicht eine "Endlosschleife"
denn mit setState "ändert" sich der Zustand und damit wird der Befehl über "on ({…" an die WebSite erneut gesendet?
oder habe ich da einen Gedankenfehler?
-
denn mit setState "ändert" sich der Zustand und damit wird der Befehl über "on ({…" an die WebSite erneut gesendet?
oder habe ich da einen Gedankenfehler? `
Genau das soll der Triggerzusatz fromNe: js verhindern: Ist die Quelle der Wertänderung die Javascript-Instanz (setState), wird nicht getriggert. -
Ahh, OK
wieder was gelernt…
Vielen Dank...
-
Dann markiere bitte das Thema im Betreff des ersten Beitrags als [geklärt] oder so ähnlich.