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. JavaScript
  5. JS für Switch + State anpassen

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

JS für Switch + State anpassen

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
5 Beiträge 2 Kommentatoren 541 Aufrufe 1 Watching
  • Ä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.
  • tugsiT Offline
    tugsiT Offline
    tugsi
    schrieb am zuletzt editiert von tugsi
    #1

    Moin,
    in einem anderen Beitrag( Datenpunkte zusammenführen switch + state) hat @Paul53 ein JS zur Verfügung gestellt:

    // IDs anpassen
    const idButton = 's7.0.DBs.DB1.NI02';
    const idActor = 's7.0.DBs.DB1.Q02';
     
    const js = 'system.adapter.javascript.' + instance;
    const common = getObject(idButton).common;
    const idVis = 'LOGO.s7-0.' + common.name.replace(/\s/g, '_');
     
    common.read = true;
    createState(idVis, getState(idActor).val, common);
     
    on({id: 'javascript.0.' + idVis, change: 'ne', fromNe: js}, function() {
        setState(idButton, true);
    });
     
    on(idActor, function(dp) {
        setState(idVis, dp.state.val, true);
    });
    
    

    Kurz erklärt, es gibt in der S7/Logo ein Button "idButton" der kurz getastet wird und ein Ausgang der den Zustand anzeigt "idActor".

    Jetzt möchte ich dies für meine Beleuchtung etc die über die S7 laufen benutzen, ein Test ist positiv verlaufen.
    Ich möchte aber ungern für jede Lampe ein extra Skript machen, deswegen habe ich mir überlegt, geht sowas nicht mit einer Schleife?
    Sowas wie

    // IDs anpassen
    const idButton1 = 's7.0.DBs.DB1.NI02';
    const idActor1 = 's7.0.DBs.DB1.Q02';
    const idButton2 = 's7.0.DBs.DB1.NI03';
    const idActor2 = 's7.0.DBs.DB1.Q03';
    ...
    

    Also immer eine fortlaufende Nummer angehangen an der Variable.
    Jetzt könnte man ja im folgenden eben die Schleife erstellen, sodass er immer einen weiterzählt und dann immer von vorne durchgeht, bis er alle durch hat und dann wieder von vorne.
    Dann hätte ich nur ein Skript.

    Jetzt bin ich leider in JS nicht so fit, dass ich diese Schleife mir selber basteln kann.
    Aber vielleicht hilft mir hier einer?

    Gruß Thomas

    Master ioBroker in Proxmox als LXC auf 1. Tiny-Lenovo, Proxmox-VM als Slave auf 2. Tinyi-Lenovo mit Zigbee und Monitor zur Visualisierung, Hauptautomatisierung über S7 auf Beckhoff CX, dazu noch Shelly, Homematic...

    paul53P 1 Antwort Letzte Antwort
    0
    • tugsiT tugsi

      Moin,
      in einem anderen Beitrag( Datenpunkte zusammenführen switch + state) hat @Paul53 ein JS zur Verfügung gestellt:

      // IDs anpassen
      const idButton = 's7.0.DBs.DB1.NI02';
      const idActor = 's7.0.DBs.DB1.Q02';
       
      const js = 'system.adapter.javascript.' + instance;
      const common = getObject(idButton).common;
      const idVis = 'LOGO.s7-0.' + common.name.replace(/\s/g, '_');
       
      common.read = true;
      createState(idVis, getState(idActor).val, common);
       
      on({id: 'javascript.0.' + idVis, change: 'ne', fromNe: js}, function() {
          setState(idButton, true);
      });
       
      on(idActor, function(dp) {
          setState(idVis, dp.state.val, true);
      });
      
      

      Kurz erklärt, es gibt in der S7/Logo ein Button "idButton" der kurz getastet wird und ein Ausgang der den Zustand anzeigt "idActor".

      Jetzt möchte ich dies für meine Beleuchtung etc die über die S7 laufen benutzen, ein Test ist positiv verlaufen.
      Ich möchte aber ungern für jede Lampe ein extra Skript machen, deswegen habe ich mir überlegt, geht sowas nicht mit einer Schleife?
      Sowas wie

      // IDs anpassen
      const idButton1 = 's7.0.DBs.DB1.NI02';
      const idActor1 = 's7.0.DBs.DB1.Q02';
      const idButton2 = 's7.0.DBs.DB1.NI03';
      const idActor2 = 's7.0.DBs.DB1.Q03';
      ...
      

      Also immer eine fortlaufende Nummer angehangen an der Variable.
      Jetzt könnte man ja im folgenden eben die Schleife erstellen, sodass er immer einen weiterzählt und dann immer von vorne durchgeht, bis er alle durch hat und dann wieder von vorne.
      Dann hätte ich nur ein Skript.

      Jetzt bin ich leider in JS nicht so fit, dass ich diese Schleife mir selber basteln kann.
      Aber vielleicht hilft mir hier einer?

      Gruß Thomas

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      @tugsi sagte:

      Also immer eine fortlaufende Nummer angehangen an der Variable.

      Variablenbezeichner können nicht dynamisch modifiziert werden. Man muss Arrays verwenden.

      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

      tugsiT 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @tugsi sagte:

        Also immer eine fortlaufende Nummer angehangen an der Variable.

        Variablenbezeichner können nicht dynamisch modifiziert werden. Man muss Arrays verwenden.

        tugsiT Offline
        tugsiT Offline
        tugsi
        schrieb am zuletzt editiert von
        #3

        @paul53
        Ok, macht dies denn Sinn bzw einfacher oder doch Copy+Paste und das Script dann x-mal kopieren für die einzelnen "Taster"?

        Master ioBroker in Proxmox als LXC auf 1. Tiny-Lenovo, Proxmox-VM als Slave auf 2. Tinyi-Lenovo mit Zigbee und Monitor zur Visualisierung, Hauptautomatisierung über S7 auf Beckhoff CX, dazu noch Shelly, Homematic...

        paul53P 1 Antwort Letzte Antwort
        0
        • tugsiT tugsi

          @paul53
          Ok, macht dies denn Sinn bzw einfacher oder doch Copy+Paste und das Script dann x-mal kopieren für die einzelnen "Taster"?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @tugsi sagte:

          macht dies denn Sinn

          Ja, bei vielen Aktoren macht es schon Sinn. Versuche es mal so (nicht getestet):

          // IDs anpassen
          const idsButton = ['s7.0.DBs.DB1.NI02','usw.'];
          const idsActor  = ['s7.0.DBs.DB1.Q02','usw.'];
          
          const js = 'system.adapter.javascript.' + instance;
          
          var idsVis = [];
          for(let i = 0; i < idsButton.length; i++) {
              let common = getObject(idsButton[i]).common;
              idsVis[i] = 'javascript.' + instance + '.LOGO.s7-0.' + common.name.replace(/\s/g, '_');
              common.read = true;
              createState(idsVis[i], getState(idsActor[i]).val, common);
          }
          
          on({id: idsVis, change: 'ne', fromNe: js}, function(dp) {
              let i = idsVis.indexOf(dp.id);
              if(i > -1) setState(idsButton[i], true);
          });
           
          on(idsActor, function(dp) {
              let i = idsActor.indexOf(dp.id);
              if(i > -1) setState(idsVis[i], dp.state.val, true);
          });
          

          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

          tugsiT 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @tugsi sagte:

            macht dies denn Sinn

            Ja, bei vielen Aktoren macht es schon Sinn. Versuche es mal so (nicht getestet):

            // IDs anpassen
            const idsButton = ['s7.0.DBs.DB1.NI02','usw.'];
            const idsActor  = ['s7.0.DBs.DB1.Q02','usw.'];
            
            const js = 'system.adapter.javascript.' + instance;
            
            var idsVis = [];
            for(let i = 0; i < idsButton.length; i++) {
                let common = getObject(idsButton[i]).common;
                idsVis[i] = 'javascript.' + instance + '.LOGO.s7-0.' + common.name.replace(/\s/g, '_');
                common.read = true;
                createState(idsVis[i], getState(idsActor[i]).val, common);
            }
            
            on({id: idsVis, change: 'ne', fromNe: js}, function(dp) {
                let i = idsVis.indexOf(dp.id);
                if(i > -1) setState(idsButton[i], true);
            });
             
            on(idsActor, function(dp) {
                let i = idsActor.indexOf(dp.id);
                if(i > -1) setState(idsVis[i], dp.state.val, true);
            });
            
            tugsiT Offline
            tugsiT Offline
            tugsi
            schrieb am zuletzt editiert von
            #5

            @paul53 sagte in JS für Switch + State anpassen:

                                                                                                                                        // IDs anpassen                                                                                                                                                                            const idsButton = ['s7.0.DBs.DB1.NI02','usw.'];                                                                                                                                                                            const idsActor  = ['s7.0.DBs.DB1.Q02','usw.'];                                                                                                                                                                                                                                                                                                                                                         const js = 'system.adapter.javascript.' + instance;                                                                                                                                                                                                                                                                                                                                                         var idsVis = [];                                                                                                                                                                            for(let i = 0; i < idsButton.length; i++) {                                                                                                                                                                                let common = getObject(idsButton[i]).common;                                                                                                                                                                                idsVis[i] = 'javascript.' + instance + '.LOGO.s7-0.' + common.name.replace(/\s/g, '_');                                                                                                                                                                                common.read = true;                                                                                                                                                                                createState(idsVis[i], getState(idsActor[i]).val, common);                                                                                                                                                                            }                                                                                                                                                                                                                                                                                                                                                         on({id: idsVis, change: 'ne', fromNe: js}, function(dp) {                                                                                                                                                                                let i = idsVis.indexOf(dp.id);                                                                                                                                                                                if(i > -1) setState(idsButton[i], true);                                                                                                                                                                            });                                                                                                                                                                                                                                                                                                                                                         on(idsActor, function(dp) {                                                                                                                                                                                let i = idsActor.indexOf(dp.id);                                                                                                                                                                                if(i > -1) setState(idsVis[i], dp.state.val, true);                                                                                                                                                                            });                                            
            

            Kam erst heute dazu es zu testen, hab es mit drei Tastern/Aktoren ausprobiert, klappt 1a !
            Danke dafür!

            Master ioBroker in Proxmox als LXC auf 1. Tiny-Lenovo, Proxmox-VM als Slave auf 2. Tinyi-Lenovo mit Zigbee und Monitor zur Visualisierung, Hauptautomatisierung über S7 auf Beckhoff CX, dazu noch Shelly, Homematic...

            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

            707

            Online

            32.6k

            Benutzer

            82.0k

            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