NEWS
Trigger zündet nicht
-
Ich habe ein Problem mit einem sehr einfachen Script. Immer wenn die Alarmanlage eingeschaltet wird, will ich eine Aktion durchführen. Dafür habe ich das folgende Script erstellt:
on({id: 'alarmanlage', change: "ne"}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; if (getState("alarmanlage").val == true) { sendTo("telegram.0", "send", { text: 'AN' }); console.log("telegram: " + 'AN'); } else if (getState("alarmanlage").val == false) { sendTo("telegram.0", "send", { text: 'AUS' }); console.log("telegram: " + 'AUS'); } });
Das ist jetzt die simpelste Varianete, die nichts macht außer Telegram Nachrichten zu verschicken. Ich weiß, dass Telegramm funktioniert, weil ich es genau so in andren Scripten einsetze. Bei diesem Script passiert jedoch gar nichts. Ich kann die Alarmanlage einschalten und ausschalten wie ich will. Der Trigger scheint nicht zu greifen. Was mache ich falsch?
Hier die Definition vom Datenpunkt alarmanlage:
{ "common": { "name": "alarmanlage", "role": "", "type": "boolean", "desc": "Manuell erzeugt", "read": true, "write": true, "def": false, "smartName": { "de": "Alarmanlage" } }, "native": {}, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 }, "_id": "alarmanlage", "type": "state" }
Es ist mir echt peinlich das zu posten, aber ich seitze da jetzt schon zum dritten Mal dran und komme nicht weiter. Das Problem ist wahrscheinlich trivial.
-
Hallo JanGa,
da muss dir nix peinlich sein. Ich schreibe das Skript mal etwas um.
- Vereinfachung
Wenn du auf eine ID triggerst ("alarmanlage"), kannst du diese in der on-Funktion auch immer mit (hier) obj.state.val abrufen. Nochmaliges getState("alarmanlage").val wäre falsch.
- vermutlich Fehler
Die ID sollte alarmanlage ohne Anführungszeichen sein. Sonst ist der Name des Datenpunkts gemeint (in ANführungszeichen).
Ich bezeichne IDs auch immer mit idName, einfach um sie zu erkennen. Sie sind ja nix anderes als Zeichenkettenvariablen zB mit dem Inhalt "hm-rega.0.1234". Ich lasse diese Bezeichnung im folgenden Code aber mal weg.
const alarmanlage = "hm-rega.0.1234"; // zB HOmematic Variable on({id: alarmanlage, change: "ne"}, function (obj) { var status = (obj.state.val) ? "EIN" : "AUS"; // true = EIN, false = AUS; sendTo("telegram.0", "send", { text: status }); log("telegram: " + status); });
geht noch etwas kürzer im oberen Bereich, denn change: "ne" ist default.
!
on("hm-rega.0.1234", function (obj) { var status = (obj.state.val) ? "EIN" : "AUS"; // true = EIN, false = AUS; sendTo("telegram.0", "send", { text: status }); log("telegram: " + status); }); !
Gruß
Pix
-
ich vermute die ID soll "javascript.0.alarmanlage" sein.
-
Ich habe das Script mal angepasst. Die Kurzform bringt mir nichts, weil ich mehrere Befehle ausführen will, sobald es funktioniert.
on("alarmanlage"/*alarmanlage*/, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; sendTo("telegram.0", "send", { text: 'TEST' }); console.log("telegram: " + 'TEST'); if (value === true) { sendTo("telegram.0", "send", { text: 'Alarmanlage an' }); console.log("telegram: " + 'Alarmanlage an'); } else if (value === false) { sendTo("telegram.0", "send", { text: 'Alarmanlage aus' }); console.log("telegram: " + 'Alarmanlage aus'); } });
Ich bin eigentlich der Meinung, dass "alarmanlage" richtig ist. Sowohl für die ID als auch für den Namen. Der Datenpunkt liegt direkt im Hauptordner.
Leider geht das Script immer noch nicht. Hat noch jemand eine Idee? Muss ich den Datenpunkt anders erstellen? Das eigentliche Alarmanlagenscript funktioniert einwandfrei. Den Status abzufragen ist kein Problem. Nur den Trigger kriege ich nicht zum laufen.
-
Der Datenpunkt liegt direkt im Hauptordner. `
Das wird das Problem sein. Der Datenpunkt sollte eine ID "irgendwas.N.alarmanlage" (N = Ziffer) haben, am Besten "javascript.0.alarmanlage", um zu createState(name) kompatibel zu sein. Datenpunkte mit einer ID ohne die Ziffer zwischen erstem und zweiten Punkt machen regelmäßig Probleme. -
Danke das hat funktioniert. Jetzt noch eine Kleinigkeit: Wie kriege ich die falsch angelegten Datenpunkte wieder gelöscht? Zum Teil sehe ich die im Objektbaum nicht. Z.B. in VIS kann ich sie dann aber auswählen.
-
Aktiviere Mal den Experten Modus oben links beim Reiter objecte
–-----------------------
Send from mobile device
-
Der ist schon aktiviert. Ich sehe trotzdem nicht alles. Objekte direkt im Hauptordner abzulegen scheint eine kleine Totsünde zu sein. Leider geht das aus den ganzen Tutorials nicht wirklich hervor und es kursieren Scripte im Forum, die demnach nicht korrekt sind. :?