NEWS
[gelöst]Script mit script stoppen
-
Schreib mal was Du machen möchtest.
Klar kann man ein Script auch an und aus schalten, aber ich denke Du willst was ein und aus schalten und hast dafür zwei Scripte ?
Das geht bestimmt einfacher…
-
Also ich habe 2 scripte die je einen wert schreiben . und zwar folgende
Sript 1
setState('viessmann.0.get.BetriebArtM1', 'ABSCHALT', true /*ACK*/);script 2
setState('viessmann.0.get.BetriebArtM1', 'H+WW', true /*ACK*/);bin halt mit java nicht vertraut. denke schon es geht einfacher. mit nur einem script, das bei an oder aus das jeweilige als wert setzt.
-
1.) Für Skripte und deren Steuerung gibnt es den Datenpunkte unter "javascript.0.scriptEnabled", die man dann
anschalten (true) oder ausschalten kann (false).
2.) Das ACK=true brauchst Du nicht. Das sorgt unter Umnständen nur dafür, daß der Datenpunkt zwar aktualisiert wird,
aber der Adapter nix tut, weil ack=true bedeutet, daß der Befehl vom Gerät kommt. So in der Art. Viele Adapter reagieren
dann nicht drauf, da sie ja selbst die Geräte verwalten. Die reagieren, dann nur auf ack=false (defauld, wenn man es wegläßt).
Kann aber an dem Adapter liegen, weil im State ein get state .. evtl. holt der sich ja eine Betriebsart … ?
3.) Mit irgendeinem Event willst du ja die BetriebsArtM1 umstellen, dafür haste einen State, z.B. "Heizung.Betriebsart.Winter",
evtl. im Javascript-Adapter oder sonstwo.
Dann würde das Skript so aussehen:
on ('javascript.0.Heizung.Betriebsart.Winter'), function(obj) { if (obj.state.val) { setState('viessmann.0.get.BetriebArtM1', 'ABSCHALT'); } else { setState('viessmann.0.get.BetriebArtM1', 'H+WW'); } });MfG Markus
-
Also ich will eigentlich nur ,das wenn ich zb sage …. alexa schalte heizung an dann soll bei dem Datenpunkt setBetriebsArtM1 der wert "H+WW" eingetragen werden und bei heizung aus eben "ABSCHALT"
PS.
das script hat so nen fehler
meldung ist
javascript.0 2018-09-29 16:51:31.812 error at Object.createScript (vm.js:80:10)
javascript.0 2018-09-29 16:51:31.812 error SyntaxError: Unexpected token )
javascript.0 2018-09-29 16:51:31.812 error ^
javascript.0 2018-09-29 16:51:31.812 error });
javascript.0 2018-09-29 16:51:31.812 error at script.js.common.Skript2:7
javascript.0 2018-09-29 16:51:31.812 error script.js.common.Skript2 compile failed:
javascript.0 2018-09-29 16:48:26.474 error at Object.createScript (vm.js:80:10)
javascript.0 2018-09-29 16:48:26.474 error SyntaxError: Unexpected token )
javascript.0 2018-09-29 16:48:26.474 error ^
javascript.0 2018-09-29 16:48:26.473 error });
javascript.0 2018-09-29 16:48:26.473 error at script.js.common.Skript2:7
javascript.0 2018-09-29 16:48:26.473 error script.js.common.Skript2 compile failed:
-
Kannst Du das auch von Hand in die Datenpunkte eintagen und den Befehl absetzen / schalten ?
Ist das Text in dem Datenpunkt, oder kommt der Wert aus einer Liste ?
Mach mal einen Screenshot vom Datenpunkt bei RAW.
Das Script selbst machen wir dann gemeinsam…
-
Dann erweitern wir das Skript mal, um einen Datenpunkt.
createState('alexa.Heizung', {type: 'boolean', def: false, read: true, write: true, role: 'switch'}) on ('javascript.0.alexa.Heizung', function(obj) { if (obj.state.val) { // case: true setState('viessmann.0.get.BetriebArtM1', 'ABSCHALT'); } else { // case: false setState('viessmann.0.get.BetriebArtM1', 'H+WW'); } });Was jetzt noch fehlt ist die Anbindung an Alexa. Dafür müßte du den Datenpunkt
"javascript.0.alexa.Heizung" in den Cloud-Adapter einbinden mit Name "Heizung" und ihm den Status SWITCH geben.
Dann in die Alexa-App gehen und nach neuen Geräten suchen lassen, dann taucht der neue Datenpunkt dort auf.
Dann kannst Du sagen "Alexa, schalte Heizung an/aus" und das skript läuft
Sorry für den Compile-Fehler .. da ist mir bei on ein ) rein geraten.
MfG Markus
-
{ "from": "system.adapter.viessmann.0", "ts": 1538223413728, "common": { "name": "BetriebArtM1", "desc": "Setze Betriebsart M1" }, "native": {}, "acl": { "object": 1638, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1638 }, "_id": "viessmann.0.set.BetriebArtM1", "type": "state" } -
script startet nicht da fehler
j````
avascript.0 2018-09-29 16:56:04.577 error at Object.createScript (vm.js:80:10)
javascript.0 2018-09-29 16:56:04.577 error SyntaxError: Unexpected token )
javascript.0 2018-09-29 16:56:04.577 error ^
javascript.0 2018-09-29 16:56:04.576 error });
javascript.0 2018-09-29 16:56:04.576 error at script.js.common.Skript2:11
javascript.0 2018-09-29 16:56:04.576 error script.js.common.Skript2 compile failed: -
Hab es oben nochmal korrigiert; da haste das falsche Skript schneller gelesen .. :-)
Mußte nach dem ersten starten nochmal neu starten, da der on-Trigger schneller
erzeugt wird, als der State eingelesen werden kann. Das kolliert dann
an der Stelle.
Daher haben viele ein eigens Skript, nur um eigene States im Adapter zu erzeugen;
oder legen eigene States manuell irgendwo an.
MfG Markus
-
"_id": "viessmann.0.set.BetriebArtM1", ```` `Falsche ID im Skript verwendet !
createState('alexa.Heizung', false, {type: 'boolean', role: 'switch'}); on('javascript.0.alexa.Heizung', function(obj) { if (obj.state.val) setState('viessmann.0.set.BetriebArtM1', 'H+WW'); else setState('viessmann.0.set.BetriebArtM1', 'ABSCHALT'); }); -
-
Schön das Dir schon geholfen wurde.
(ich habe unerwartet Besuch bekommen und musste dann aufhören.)
PS:
Den Smartnamen für Alexa bzw. den CloudAdapter baue ich mir bei eigenen Datenpunkten immer gleich mit ein.
Hier z.B. für meinen Rasenmäher

<link_text text="https://uploads.tapatalk-cdn.com/201809 ... b2ab16.jpg">https://uploads.tapatalk-cdn.com/20180929/a8c50c94b00d4ef4411032e45cb2ab16.jpg</link_text>" />