NEWS
Wie mit vis Button ein Event in einem Adapter auslösen?
-
Hallo zusammen
nach längerem mitlesen hier im Forum hab ich mich nun doch mal angemeldet und komme auch gleich mit der ersten Frage
Ich habe einen Adapter geschrieben der mir Werte aus einer externen Quelle zur Verfügung stellt.
Ich würde jetzt gerne beim Druck eines Buttons auf einer vis Oberfläche, Code in meinem Adapter ausführen.
Also quasi einen Eventhandler im Adapter triggern.
Was wäre hier der richtige Weg das zu realisieren?
Danke für eure Hilfe
Gruß
Stefan
-
Hallo,
du generierst einen Datenpunkt.
Auf diesen horcht dein Script.
Dieser Datenpunkt kann mit vielen verschiedenen Widgets aus VIS ändern.
Lg
Günther
-
Hallo Stefan,
willkommen im Forum. Und dann gleich im ersten Post einen Adapter-Ankündigung, super!
Du kannst natürlich auch im Adapter einen State anlegen und den überwachen. Nennen wir in "trigger".
adaptername.0.trigger
Dann kannst du den mit
adapter.on("adaptername.0.trigger")
natürlich auch überwachen. Wenn die Änderungen nur aus VIS erwünscht sind, kannst die Überwachung mit````
"from: system.adapter.web.0"[https://github.com/ioBroker/ioBroker/wi … ant-events](https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#most-important-events) States anderer Adapter lassen sich damit überwachen:
adapter.subscribeForeignStates
Diese Seite gesehen? [https://github.com/ioBroker/ioBroker/wi … #functions](https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#functions) Gruß Pix
-
@pix:Hallo Stefan,
willkommen im Forum. Und dann gleich im ersten Post einen Adapter-Ankündigung, super! `
Vielen Dank erst mal für die Unterstützung hier!Ich spiele erst noch viel rum und versuche da einen Einstieg in die JavaScript und nodeJS Welt zu bekommen.
Von einem nutzbaren Adapter für die Allgemeinheit bin ich noch weit entfernt wie du an meinen laienhaften Fragen merkst
@pix:Du kannst natürlich auch im Adapter einen State anlegen und den überwachen. Nennen wir in "trigger".
adaptername.0.trigger ```` `
Wie genau würdest du den State anlegen? Bisher habe ich es z.B so gemacht:
adapter.setObject('trigger', { type: 'state', common: { name: 'trigger', type: 'boolean', role: 'switch' }, native: {} });
@pix:Dann kannst du den mit
adapter.on("adaptername.0.trigger")
natürlich auch überwachen. Wenn die Änderungen nur aus VIS erwünscht sind, kannst die Überwachung mit"from: system.adapter.web.0"
einschränken `Dazu muss ich mich aber erst subscriben, oder?
adapter.subscribeStates('trigger');
Allerdings wird jetzt zwar der
> adapter.stateChanged()
notifiziert,nicht aber mein
adapter.on('trigger', function () { adapter.log.info("Trigger triggered"); });
Bisher ändere ich die States auch nur über den Admin/Objekte. Wie das dann über VIS geht muss ich auch noch lernen. Mit VIS hab ich bisher noch gar nichts gemacht.
-
Das ist nicht so richtig:
adapter.on('trigger', function () { adapter.log.info("Trigger triggered"); });
So sollte es sein:
adapter.on('stateChange', function (id, state) { if (!state || state.ack) return; // Warning, state can be null if it was deleted if (id === adapter.namespace + '.trigger') { // do something adapter.log.debug('stateChange ' + id + ' ' + JSON.stringify(state)); } });
-
Danke Bluefox
So hab ich es dann in meinem Samsung2016 Adapter gemacht, weil es anders nicht funktionierte.
Dachte aber das wäre eher eine Notlösung und das 'stateChange' nicht dafür gemacht.
Gut zu wissen dass es dann doch so richtig ist.
Obwohl ja ein 'adpater.on('varName', function(){});' schon elegant(er) wäre.
Wie genau würdest du denn 'trigger' im setObject erzeugen?
Ich denke ja, als boolean, aber ich bin mir bei der "Rolle" nie sicher. Was hat die für eine Bedeutung?
Und zum Schluss noch die dumme Newbie Frage: Wie trigger ich den State dann über einen VIS button?
Danke und Gruß
Stefan