Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Trigger zündet nicht

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Trigger zündet nicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      JanGa last edited by

      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. 😄

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Hallo JanGa,

        da muss dir nix peinlich sein. Ich schreibe das Skript mal etwas um.

        1. 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.

        1. 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

        1 Reply Last reply Reply Quote 0
        • ruhr70
          ruhr70 last edited by

          ich vermute die ID soll "javascript.0.alarmanlage" sein.

          1 Reply Last reply Reply Quote 0
          • J
            JanGa last edited by

            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.

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              @JanGa:

              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.

              1 Reply Last reply Reply Quote 0
              • J
                JanGa last edited by

                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.

                1 Reply Last reply Reply Quote 0
                • Dutchman
                  Dutchman Developer Most Active Administrators last edited by

                  Aktiviere Mal den Experten Modus oben links beim Reiter objecte

                  –-----------------------

                  Send from mobile device

                  1 Reply Last reply Reply Quote 0
                  • J
                    JanGa last edited by

                    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. :?

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    660
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    5
                    8
                    844
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo