NEWS
Gelöst: Unterscheid zwischen Script und Fernbedienung
-
Hallöchen
wie versuche mich gerade daran zu Unterscheiden, ob ein Gerät per Script oder per Hersteller FB geschaltet wurde.
Ich habe eine Tahoma die bietet in den Objekten folgende States:
Ich benötige mal einen Ansatz, habe mich gerade verrannt.
Danke
michael -
@michihorn
Hallihallo!Ich habe das mit einem selbstangelegten state gelöst. Wenn mein Skript selbst etwas steuert, setzt es den state auf true. So weiss ich, wenn sich etwas geändert hat, und der state false ist, dass die Änderung nicht von meinem Skript kommt.
Beste Grüße,
Tobias -
@michihorn
Wenn du das zum Schaltzeitpunkt wissen möchtest gibt es im Trigger dafür eine Option. Wenn du es später erfahren willst, nutze die Lösung vom Vorposter. -
@ticaki Hallo das mit dem eigenen State habe ich auch schon probiert, bin gespannt auf deinen Trigger
-
@TobiasHahner Danke, das war auch meine Idee
-
@michihorn sagte in Unterscheid zwischen Script und Fernbedienung:
bin gespannt auf deinen Trigger
const idMeinDP = '...'; const jsi = 'system.adapter.javascript.' + instance; on({id: idMeinDP, change: 'ne', fromNe: jsi}, function(dp) { // nicht durch Javascript-Instanz verursacht
-
@paul53 sagte in Unterscheid zwischen Script und Fernbedienung:
const idMeinDP = '...'; const jsi = 'system.adapter.javascript.' + instance; on({id: idMeinDP, change: 'ne', fromNe: jsi}, function(dp) { // nicht durch Javascript-Instanz verursacht
Kannst Du mir das kurz erklären?
Ich habe 3 Instanzen laufen. Die Markisen sind auf 2.
Beim Anlagen des DP habe ich eine 0 als Standardwert vorgegeben.
const idL = 'javascript.0.Garten.Markisse.ScriptL';
Michael -
@michihorn sagte:
Kannst Du mir das kurz erklären?
change: 'ne' - nur bei Wertänderung wird getriggert
fromNe: jsi - nur, wenn die Quelle der Wertänderung nicht die Javascript-Instanz ist, wird getriggert
Siehe Funktions-Doku zum Javascript-Adapter. -
@paul53 Okay Danke
const idMeinDP = 'tahoma.0.devices.Markisse_Links.states.core:DeploymentState'; const jsi = 'system.adapter.javascript.' + instance; on({id: idMeinDP, change: 'ne', fromNe: jsi}, function(dp) { // nicht durch Javascript-Instanz verursacht log("Fernbedienung"); });
Normaler Weise sollte nun bei Bedienung per FB im LOG was stehen, oder?
-
@michihorn sagte:
sollte nun bei Bedienung per FB im LOG was stehen, oder?
Ja, wenn sich der Wert des Datenpunktes durch die FB ändert.
-
@paul53 Danke das tuts auch
Gruß
Michael -
@michihorn sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:
@paul53 Okay Danke
const idMeinDP = 'tahoma.0.devices.Markisse_Links.states.core:DeploymentState'; const jsi = 'system.adapter.javascript.' + instance; on({id: idMeinDP, change: 'ne', fromNe: jsi}, function(dp) { // nicht durch Javascript-Instanz verursacht log("Fernbedienung"); });
Normaler Weise sollte nun bei Bedienung per FB im LOG was stehen, oder?
Hallo Paul ich habe deine Idee nochmal aufgegriffen, die Funktion gibt den Wert, des Datenpunktes wieder aber nicht den Hinweis, dass die Aktion nicht durch ein Script ausgelöst wurde. In Zeile 28 kann man das so sehen.
/*****Handbedienung Markisen Pool ***************************************** ** November 2021 ** TAHOMA ** (0 = OBEN), (100 = UNTEN) ** erstellt: 17.11.21 ** geändert: ********************************************************************************/ var logging = true; const jsi = 'system.adapter.javascript' + instance; const idRollo = 'tahoma.0.devices.Pool_Kopf.states.core:DeploymentState' const idRollo1 = 'tahoma.0.devices.Pool_Seite.states.core:DeploymentState' var text const idFB = "javascript.0.Garten.Pool.Kopf.FB" const idFB1 = "javascript.0.Garten.Pool.Seite.FB" on({ id: idRollo, change: 'ne', fromNe: jsi }, function (dpL) { // nicht durch Javascript-Instanz verursacht if (dpL.state.val == 0) { log("MELDUNG: Hand Bedienung Markise Kopf") setState(idFB, dpL.state.val); text = '\u270b Markise Kopf ' createEventlog("Handbedienung", text) if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915753938xxx' }); }; //Handbetrieb Kopf }); on({ id: idRollo1, change: 'ne', fromNe: jsi }, function (dpL) { // nicht durch Javascript-Instanz verursacht log("Ergebniss:" +dpL.state.val) if (dpL.state.val == 1) { log("MELDUNG: Hand Bedienung Markise Links") setState(idFB1, dpL.state.val); text = '\u270b Markise Seite ' createEventlog("Handbedienung", text) if (logging) sendTo('whatsapp-cmb.0', 'send', { text, phone: '+4915753938xxx' }); }; //Handbetrieb Seite }); on({ time: { hour: 23, minute: 59 } }, function () { setState(idFB, 0) setState(idFB1, 0) });
michael
-
@michihorn sagte: const jsi = 'system.adapter.javascript' + instance;
In Zeile 9 fehlt ein Punkt.
const jsi = 'system.adapter.javascript.' + instance;
-
@paul53 Hallo Paul, Danke.
Das Verhalten bleibt gleich.
Wenn ich mit der Fernbedienung die Markisse fahre gibt der DP den Status aus(Wert zwischen 0 und 100), dass selbe passiert wenn ich die Markisse per Script fahre.
Also kein Unterschied im Ergebnis.
Gruß
Michael -
@michihorn
zeige bitte das Log. Läuft dieses Skript auf der gleichen Instanz wie die anderen Skripte? -
@ticaki
Habe das Script nun fest mit Instance 3 verbunden
Zeile 3-6 sind vom Script ausgelöst, Zeile 15-17 per FB. Die einzige Unterscheidung ist das per Script die Markisse hoch gefahren wurde und per FB runter.10:59:48.705 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: schedule(cron=[object Object]) 10:59:48.705 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: registered 2 subscriptions and 1 schedule 10:59:56.024 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:0 11:00:49.612 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:12 11:00:49.613 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:2 11:00:49.615 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:0 11:02:14.778 info javascript.1 (14532) Stop script script.js.Garten.Pool.POOL_Fernbedienung 11:02:14.778 info javascript.2 (6940) Stop script script.js.Garten.Pool.POOL_Fernbedienung 11:02:14.790 info javascript.3 (964) Stop script script.js.Garten.Pool.POOL_Fernbedienung 11:02:14.803 info javascript.3 (964) Start javascript script.js.Garten.Pool.POOL_Fernbedienung 11:02:14.809 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: subscribe: {"pattern":{"id":"tahoma.0.devices.Pool_Kopf.states.core:DeploymentState","change":"ne","fromNe":"system.adapter.javascript.3","q":0},"name":"script.js.Garten.Pool.POOL_Fernbedienung"} 11:02:14.810 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: subscribe: {"pattern":{"id":"tahoma.0.devices.Pool_Seite.states.core:DeploymentState","change":"ne","fromNe":"system.adapter.javascript.3","q":0},"name":"script.js.Garten.Pool.POOL_Fernbedienung"} 11:02:14.812 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: schedule(cron=[object Object]) 11:02:14.812 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: registered 2 subscriptions and 1 schedule 11:02:19.684 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:4 11:02:19.688 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:97 11:02:19.689 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss:100
-
@michihorn
Infos reichen noch nichtlog("Ergebniss: " +dpL.state.val + ' from: ' + dpL.state.from + ' ack: ' + dpL.state.ack)
benutze die Logausgabe bitte
-
@ticaki sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:
log("Ergebniss: " +dpL.state.val + ' from: ' + dpL.state.from + ' ack: ' + dpL.state.ack)
Zeile 1 sollte nun Script sein
Wie erfasse ich den Status ack?11:23:16.631 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 0 from: system.adapter.web.0 ack: false 11:24:49.736 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 11 from: system.adapter.tahoma.0 ack: true 11:24:49.738 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 2 from: system.adapter.tahoma.0 ack: true 11:24:49.741 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 1 from: system.adapter.tahoma.0 ack: true 11:24:49.741 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: MELDUNG: Hand Bedienung Markise Links 11:24:49.741 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: setForeignState(id=javascript.0.Garten.Pool.Seite.FB, state={"val":1,"ack":false,"c":"script.js.Garten.Pool.POOL_Fernbedienung"}) 11:24:49.741 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: getState(id=javascript.0.SystemEventList.EventList, timerId=undefined) => {"val":"","ack":false,"ts":1637663040059,"q":0,"c":"script.js.common.Loeschen_Eventlist","from":"system.adapter.javascript.3","user":"system.user.admin","lc":1637662920040} 11:24:49.741 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: getState(id=javascript.0.SystemEventList.NextEventId, timerId=undefined) => {"val":0,"ack":false,"ts":1637663040059,"q":0,"c":"script.js.common.Loeschen_Eventlist","from":"system.adapter.javascript.3","user":"system.user.admin","lc":1637662920040} 11:24:49.742 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: setForeignState(id=javascript.0.SystemEventList.NextEventId, state={"val":1,"ack":false,"c":"script.js.Garten.Pool.POOL_Fernbedienung"}) 11:24:49.742 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: setForeignState(id=javascript.0.SystemEventList.EventList, state={"val":"00001 -- 23.11.21 - 11:24:49 --- Handbedienung - ✋ Markise Seite <br>","ack":false,"c":"script.js.Garten.Pool.POOL_Fernbedienung"}) 11:24:49.742 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: sendTo(adapter=whatsapp-cmb.0, cmd=send, msg={"text":"✋ Markise Seite ","phone":"+4915253938149"}) 11:24:49.746 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 0 from: system.adapter.tahoma.0 ack: true 11:24:49.752 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 5 from: system.adapter.tahoma.0 ack: true 11:24:49.756 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 98 from: system.adapter.tahoma.0 ack: true 11:24:49.758 info javascript.3 (964) script.js.Garten.Pool.POOL_Fernbedienung: Ergebniss: 100 from: system.adapter.tahoma.0 ack: true
-
@michihorn sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:
on({ id: idRollo1, change: 'ne', fromNe: jsi, ack:true}, function (dpL) {
ack: true oder false in on({})
-
@ticaki sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:
@michihorn sagte in Gelöst: Unterscheid zwischen Script und Fernbedienung:
on({ id: idRollo1, change: 'ne', fromNe: jsi, ack:true}, function (dpL) {
ack: true oder false in on({})
Danke, das "ack" hat wohl gefehlt. Jetzt klappt es