Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Frage] Direkte Verknüfpung von Werten

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    919

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[Frage] Direkte Verknüfpung von Werten

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
18 Beiträge 4 Kommentatoren 2.2k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Offline
    T Offline
    TOBO
    schrieb am zuletzt editiert von
    #1

    Hallo,

    leider muss ich Euch wieder belästigen.

    Ich bin ein absoluter Java DAU und fange gerade an. Diesmal habe ich vorher gelesen, aber es hilft mir nicht weiter.

    Ich meine die Einführung in Java. http://www.iobroker.net/docu/?page_id=5385&lang=de

    Ich habe einen Datenpunkt "s7.0.DBs.DB1.VW0", das ist ein Wert in der Simatic S7.

    Diesen möchte ich einfach auf ein Homematic wired Dimmer Modul weiterleiten.

    Dieser Datenpunkt ist "hm-rpc.1.MEQ0312049.3.LEVEL".

    setState("hm-rpc.1.MEQ0312049.3.LEVEL","s7.0.DBs.DB1.VW0");
    

    Das habe ich versucht. ;-)

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Dann versuche es mal so:

      setState("hm-rpc.1.MEQ0312049.3.LEVEL", getState("s7.0.DBs.DB1.VW0").val);
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • T Offline
        T Offline
        TOBO
        schrieb am zuletzt editiert von
        #3

        Das geht auch nicht.

        Kann es sein das es man vielleicht den Wert noch konvertieren muss ?

        Von der S7 bekomme ich einen Integer Wert. Wenn ich mir den Zustand des Dimmers ansehe, steht da % hinter.

        Im Log steht das

        hm-rpc.1 2017-03-26 18:36:39.521 info setValue ["MEQ0312049:3","LEVEL",{"explicitDouble":0.5}] FLOAT

        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          LEVEL in Homematic ist von 0.0 bis 1.0. Versuche es mal so:

          setState("hm-rpc.1.MEQ0312049.3.LEVEL", getState("s7.0.DBs.DB1.VW0").val / 100);
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • T Offline
            T Offline
            TOBO
            schrieb am zuletzt editiert von
            #5

            Hmm,

            Irgendwas ist faul.

            Ich habe jetzt mal ganz einfach angefangen und das Hallo Welt aus der Einführung genommen.

            Da kommt nichts bei mir im Log unten.

            Oh Mann,

            Sorry und Asche auf mein Haupt. Die Script Engine war gar nicht aktiviert. Das funktioniert jetz.

            Aber immer nur ein mal. Wenn ich das Script starte geht es. Wie bekomme ich es nun hin, das

            das immer läuft ?

            on({id: 's7.0.DBs.DB1.VW0', change: "ne"}, function (obj) {
              var value = obj.state.val;
              var oldValue = obj.oldState.val;
              setState("hm-rpc.1.MEQ0312049.3.LEVEL", getState("s7.0.DBs.DB1.VW0").val);
            });
            
            

            Ist das richtig so ?

            Habe mir den ersten Teil aus dem Code von Blocky kopiert :-)

            So ganz verstehen tu ich es aber nicht :-(

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              pix
              schrieb am zuletzt editiert von
              #6

              Hallo,

              Wenn beide Datenpunkte gleichen Typs sind geht das ganz einfach:

              on('s7.0.DBs.DB1.VW0', "hm-rpc.1.MEQ0312049.3.LEVEL");
              
              

              Ist Kurzschreibweise. Bei Änderung des ersten Wertes wird dieser in den zweiten Datenpunkt geschrieben.

              Gruß

              Pix

              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

              1 Antwort Letzte Antwort
              0
              • T Offline
                T Offline
                TOBO
                schrieb am zuletzt editiert von
                #7

                OK, da brauche ich noch eine Weile um das zu verstehen.

                Eigentlich programmiere ich alle Steueraufgaben in der SPS und muss dann nur die Ausgabe in diesem Fall auf das Dimmer Modul weiterleiten.

                Wenn ich nun 5 Dimmer Module habe, muss ich für jedes ein neues Script anlegen, oder kann ich den obigen Code einfach kopieren und

                mit geänderten Datenpunkten untereinander in ein Script packen ?

                1 Antwort Letzte Antwort
                0
                • paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  @TOBO:

                  Wenn ich nun 5 Dimmer Module habe, muss ich für jedes ein neues Script anlegen, oder kann ich den obigen Code einfach kopieren und mit geänderten Datenpunkten untereinander in ein Script packen ? `
                  Alle 5 Dimmer können in einem Skript behandelt werden: 5 mal on(idSrc, idDst), so wie von pix angegeben.

                  Falls alle Dimmer den gleichen Wert aus der SPS erhalten sollen, dann so:

                  on('s7.0.DBs.DB1.VW0', function(dp) {  // Auslösung bei Wertänderung
                    setState(idDst1, dp.state.val);
                    setState(idDst2, dp.state.val);
                    setState(idDst3, dp.state.val);
                    setState(idDst4, dp.state.val);
                    setState(idDst5, dp.state.val);
                  });
                  

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  1 Antwort Letzte Antwort
                  0
                  • T Offline
                    T Offline
                    TOBO
                    schrieb am zuletzt editiert von
                    #9

                    Nur noch mal zum Verständnis.

                    on('s7.0.DBs.DB1.VW0', function(dp) {  // Auslösung bei Wertänderung
                      setState(idDst1, dp.state.val);
                    });
                    

                    Bedeutet dieses "on" am Anfang das jedesmal überprüft wird, ob sich der Zustand des Datenpunktes geändert hat und dann wird die Funktion ausgeführt, oder wird die Funktion einfach immer bei jedem Zyklus ausgeführt ?

                    on({id: 's7.0.DBs.DB1.VW0', change: "ne"}, function (obj) {
                      var value = obj.state.val;
                      var oldValue = obj.oldState.val;
                      setState("hm-rpc.1.MEQ0312049.3.LEVEL", getState("s7.0.DBs.DB1.VW0").val);
                    });
                    

                    Hier steht ja immerhin noch ein "change", was ich verstehe. SetState verstehe ich auch noch, aber alles nach dem "Change" ist mir unerklärlich.

                    1 Antwort Letzte Antwort
                    0
                    • paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von
                      #10

                      @TOBO:

                      Bedeutet dieses "on" am Anfang das jedesmal überprüft wird, ob sich der Zustand des Datenpunktes geändert hat und dann wird die Funktion ausgeführt…? `
                      Das hängt vom change: ab. Wenn des Muster im on(Muster, callback) als ID-Zeichenkette angegeben ist, gilt change: 'ne' (default). Ist das Muster als Objekt angegeben und kein change:, wird 'any' als default genommen.
                      @TOBO:

                      …aber alles nach dem "Change" ist mir unerklärlich. `
                      Kennst Du die https://github.com/ioBroker/ioBroker.javascript#on–-subscribe-on-changes-or-updates-of-some-state auf Github ?

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      1 Antwort Letzte Antwort
                      0
                      • T Offline
                        T Offline
                        TOBO
                        schrieb am zuletzt editiert von
                        #11

                        @paul53:

                        Kennst Du die https://github.com/ioBroker/ioBroker.javascript#on–-subscribe-on-changes-or-updates-of-some-state auf Github ? `

                        Bis jetzt nicht. Werde es aber sofort nachholen.

                        1 Antwort Letzte Antwort
                        0
                        • T Offline
                          T Offline
                          TOBO
                          schrieb am zuletzt editiert von
                          #12

                          Ehrlich gesagt sind das ziemlich viele Böhmische Dörfer.

                          1 Antwort Letzte Antwort
                          0
                          • P Offline
                            P Offline
                            ple
                            schrieb am zuletzt editiert von
                            #13

                            Tja, so geht es mir im Moment auch.

                            Die Dokus habe ich soweit alle durch, aber einen neuen Syntax zu lernen wenn man nur awl, scl kennt

                            Ist nicht gerade einfach, aber man wird hier ja super aufgeklärt und beraten.

                            Da ich anscheinend auf dem gleichen Level wie du bist kann ich dir empfehlen erst mal die Funktionen mit internen variablen aufzubauen um die Funktionen zu testen und zu verstehen. Dann alles ins log schreiben, damit man weiß das er dadurchgegangen ist.

                            Habe letztens an einer if Anweisung 2 Tage verbracht, bis ich rausfand das der Syntax so geht.

                            on({id: "radar.0.Christian_iPhone.here", change: "any"}, function (obj) {
                                log("State: " + obj.val);
                                if ((obj.state.val) === true){
                                log("if ausgelöst");
                                } else {
                                    log("else hat ausgelöst");
                                }
                            });
                            

                            Gibt leider keine variablentabelle, Aber mit log("State: " + obj.val) Kann man wenigsten sehen was drin steht.

                            Gruß

                            Intel Nuc + Proxmox

                            1 Antwort Letzte Antwort
                            0
                            • P Offline
                              P Offline
                              pix
                              schrieb am zuletzt editiert von
                              #14

                              Okay, dann gebe ich auch einen kleinen Hinweis:

                              on und subscribe sind identisch. Subscribe erklärt vielleicht etwas mehr, was der Befehl macht. Er überwacht einen Datenpunkt (in ple's Fall "radar.0.Christian_iPhone.here"). Wenn any angegeben ist, dann wird bei jeder Aktualisierung die angehängte Funktion ausgeführt. Bei change passiert das nur bei Änderung des Wertes des Datenpunktes.

                              Der Teil "function (obj) {}" ist der Teil, in dem die abzuarbeitenden Befehle stehen. Das obj steht dabei für das Objekt, aus dem der Datenpunkt kommt. Diese Funktion soll also mit dem (Mutter-)Objekt des Datenpunktes arbeiten. Es ist dabei aber egal, ob man das "obj" oder "data" oder "dp" (Pauls Lieblingsbezeichnung) oder "Elsa" oder "Eisprinzessin" nennt. Es ist nur eine neue Bezeichnung für das Objekt. Das habe ich damals nicht gleich verstanden und lange gerätselt, wann die damals unter CCU.IO üblichen Bezeichnungen "data" oder "obj" jeweils zu verwenden waren.

                              Dann kommen in den geschweiften Klammern die Befehle. Zum Datenpunkt gehören einige Werte (val für Wert/Inhalt, oldVal (für alten Inhalt), lc (für Lastchange/letzte Änderung) oder ts (für Timestamp/letzte Aktualisierung). Diese Werte lassen sich dann so abfragen und zum Beispiel als Log ausgeben:

                              log('Alter Wert: '  + obj.oldState.val); // oder eben Elsa.oldState.val :-D
                              log('Zeitstempel: ' + obj.state.ts);
                              log('Neuer Wert: ' + obj.state.val); // früher auch obj.newState.val
                              
                              

                              Naja, das war's fürs Erste. Will man einen weiteren Wert eines anderen Datenpunktes abfragen, dann geht das mit geState(idDatenpunkt).val

                              Wenn das innerhalb der function(obj) {} steht, dann wird dieser Wert dann abgefragt, wenn die Funktion aufgerufen wird (also zB bei Änderung von "radar.0.Christian_iPhone.here" (siehe oben)).

                              Hoffe, es kommt etwas Licht ins Dunkel. 8-)

                              Gruß

                              Pix

                              ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

                              1 Antwort Letzte Antwort
                              0
                              • paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #15

                                @pix:

                                Wenn any angegeben ist, dann wird bei jeder Aktualisierung die angehängte Funktion ausgeführt. Bei change passiert das nur bei Änderung des Wertes des Datenpunktes. Kleine Korrektur: > Wenn change: 'any' angegeben ist, dann wird bei jeder Aktualisierung die angehängte Funktion ausgeführt. Bei change: 'ne' passiert das nur bei Änderung des Wertes des Datenpunktes. `
                                @pix:

                                Das obj steht dabei für das Objekt, aus dem der Datenpunkt kommt. `
                                Das obj steht für den Datenpunkt, der sowohl das statische Objekt als auch den dynamischen Zustand (state) enthält. Deshalb bevorzuge ich das Kürzel dp für on(pattern, function(dp) {…});.
                                @pix:

                                Zum Datenpunkt gehören einige Werte (val für Wert/Inhalt, oldVal (für alten Inhalt), lc (für Lastchange/letzte Änderung) oder ts (für Timestamp/letzte Aktualisierung). Genauer: > Zum Zustand des Datenpunktes gehören einige Werte (state.val für Wert/Inhalt, oldState.val (für alten Inhalt), state.lc (für Lastchange/letzte Änderung) oder state.ts (für Timestamp/letzte Aktualisierung). `

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                1 Antwort Letzte Antwort
                                0
                                • P Offline
                                  P Offline
                                  ple
                                  schrieb am zuletzt editiert von
                                  #16

                                  Super erklärt;-) Danke

                                  Intel Nuc + Proxmox

                                  1 Antwort Letzte Antwort
                                  0
                                  • T Offline
                                    T Offline
                                    TOBO
                                    schrieb am zuletzt editiert von
                                    #17

                                    Gut, gut…. Da brauch ich noch eine Weile. Bis jetzt sind in meinem Neubau nur Standardschaltungen geplant und das mache ich SPS Seitig.

                                    Ich möchte aber noch mal auf den Code zurück kommen, den ich aus dem Blocky geklaut habe.

                                    on({id: 's7.0.DBs.DB1.VW0', change: "ne"}, function (obj) {
                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                      setState("hm-rpc.1.MEQ0312049.3.LEVEL", getState("s7.0.DBs.DB1.VW0").val);
                                    });
                                    

                                    Die Erste und die letzte Zeile verstehe ich nun, kann mir aber absolut keinen Reim aus den beiden in der Mitte machen.

                                      var value = obj.state.val;
                                      var oldValue = obj.oldState.val;
                                    
                                    

                                    Was macht das und wozu ?

                                    Würde das ganze nicht aus so funktionieren ?

                                    on({id: 's7.0.DBs.DB1.VW0', change: "ne"}, function (obj) {
                                      setState("hm-rpc.1.MEQ0312049.3.LEVEL", getState("s7.0.DBs.DB1.VW0").val);
                                    });
                                    
                                    1 Antwort Letzte Antwort
                                    0
                                    • paul53P Offline
                                      paul53P Offline
                                      paul53
                                      schrieb am zuletzt editiert von
                                      #18

                                      @TOBO:

                                      Die Erste und die letzte Zeile verstehe ich nun, kann mir aber absolut keinen Reim aus den beiden in der Mitte machen. `
                                      Blockly ist eben nur eine Hilfestellung zu Javascript. Deshalb werden hier JS-Variablen für die am häufigsten verwendeten gebildet.@TOBO:

                                      Würde das ganze nicht aus so funktionieren ? `
                                      Ja, hat aber den Nachteil, dass (im Prinzip) mit getState(id).val ein Datenbankzugriff erfolgt, der die CPU entsprechend belastet, obwohl die Werte bereits an die callback-Funktion übergeben wurden. Deshalb ist dies besser:

                                      on({id: 's7.0.DBs.DB1.VW0', change: "ne"}, function (obj) {
                                        var value = obj.state.val;
                                        setState("hm-rpc.1.MEQ0312049.3.LEVEL", value);
                                      });
                                      

                                      oder

                                      on({id: 's7.0.DBs.DB1.VW0', change: "ne"}, function (obj) {
                                        setState("hm-rpc.1.MEQ0312049.3.LEVEL", obj.state.val);
                                      });
                                      

                                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                      1 Antwort Letzte Antwort
                                      0
                                      Antworten
                                      • In einem neuen Thema antworten
                                      Anmelden zum Antworten
                                      • Älteste zuerst
                                      • Neuste zuerst
                                      • Meiste Stimmen


                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      784

                                      Online

                                      32.6k

                                      Benutzer

                                      82.2k

                                      Themen

                                      1.3m

                                      Beiträge
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                      ioBroker Community 2014-2025
                                      logo
                                      • Anmelden

                                      • Du hast noch kein Konto? Registrieren

                                      • Anmelden oder registrieren, um zu suchen
                                      • Erster Beitrag
                                        Letzter Beitrag
                                      0
                                      • Home
                                      • Aktuell
                                      • Tags
                                      • Ungelesen 0
                                      • Kategorien
                                      • Unreplied
                                      • Beliebt
                                      • GitHub
                                      • Docu
                                      • Hilfe