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. S7 Adapter LOGO Datenpunkte zusammenführen button + state

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

S7 Adapter LOGO Datenpunkte zusammenführen button + state

Geplant Angeheftet Gesperrt Verschoben JavaScript
22 Beiträge 3 Kommentatoren 436 Aufrufe 3 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.
  • paul53P paul53

    @Elektroniker86 sagte: Meinst du den Adapter Alias Manager?

    Nein, ich meinte Alias unter "alias.0", die der js-controller verwaltet.
    Erstellung eines Alias:

    • im Tab "Objekte" den Status-DP "s7.0.DBs.DB1.Q13" selektieren
    • Rechte Maustaste über der ID und "Alias erstellen" auswählen
    • im öffnenden Fenster die Alias-ID und den Namen anpassen, die Rolle auf "switch" ändern und "schreiben" erlauben
    • "Konvertierungsfunktionen benutzen" anhaken
    • Schreibkonvertierung eintragen: val ? true : true

    Anschließend noch per "Unterschiedliche IDs für Lesen und Schreiben" die Button-ID "s7.0.DBs.DB1.NI13" für Schreiben eintragen.

    Elektroniker86E Offline
    Elektroniker86E Offline
    Elektroniker86
    schrieb am zuletzt editiert von
    #13

    @paul53

    Hi, ist es auch möglich die Datenpunkte der LOGO Schaltzeiten in ein alias, schon umgerechnet abzubilden? Dafür hatte ich auch für jede Schaltzeit ein eigens Script:

    createState("LOGO.Schaltuhren.Weihnachtsbeleuchtung_außen_ASZ1", 0);
    
    const idLogo = 's7.4.DBs.DB1.B024_Ausschaltz_1';
    const idVis = 'javascript.0.LOGO.Schaltuhren.Weihnachtsbeleuchtung_außen_ASZ1';
    
    on(idLogo, function(dp) {
    setStateDelayed(idVis, logotime2str(dp.state.val), 5000);
    });
    
    on(idVis, function(dp) {
    setState(idLogo, str2logotime(dp.state.val));
    });'s7.4.DBs.DB1.B024_Ausschaltz_1'
    

    Dann gäbe es da noch die Temperaturen...

    const idS7Temp = 's7.5.DBs.DB1.AM03'; // Datenpunkt-ID vom S7 eingeben !
    const idTemp = 'LOGO.Temperaturen.Außentemperatur Westen2'; // neuer Datenpunkt unter javascript.0
     
    createState(idTemp, 0, {type: 'number', unit: '°C', role: 'value.temperature'}); // Neuen Datenpunkt erzeugen
     
    on(idS7Temp, function(dp) { // Wertänderung
       setState(idTemp, dp.state.val / 10, true);
    });
     
    // Skriptstart
    setState(idTemp, getState(idS7Temp).val / 10, true);
    
      
    function S7Celsius(val) {
       if(val > 32768) val = val - 65536;
       setState(idTemp, val / 10, true);
    }
     
    on(idS7Temp, function(dp) { // Wertänderung
       S7Celsius(dp.state.val);
    });
     
    // Skriptstart
    S7Celsius(getState(idS7Temp).val);
    

    Lassen die sich auch über den alias lösen?

    Dann könnte ich ja alle scripte rausschmeißen?

    Vielen Dank vorab!

    paul53P 1 Antwort Letzte Antwort
    0
    • Elektroniker86E Elektroniker86

      @paul53

      Hi, ist es auch möglich die Datenpunkte der LOGO Schaltzeiten in ein alias, schon umgerechnet abzubilden? Dafür hatte ich auch für jede Schaltzeit ein eigens Script:

      createState("LOGO.Schaltuhren.Weihnachtsbeleuchtung_außen_ASZ1", 0);
      
      const idLogo = 's7.4.DBs.DB1.B024_Ausschaltz_1';
      const idVis = 'javascript.0.LOGO.Schaltuhren.Weihnachtsbeleuchtung_außen_ASZ1';
      
      on(idLogo, function(dp) {
      setStateDelayed(idVis, logotime2str(dp.state.val), 5000);
      });
      
      on(idVis, function(dp) {
      setState(idLogo, str2logotime(dp.state.val));
      });'s7.4.DBs.DB1.B024_Ausschaltz_1'
      

      Dann gäbe es da noch die Temperaturen...

      const idS7Temp = 's7.5.DBs.DB1.AM03'; // Datenpunkt-ID vom S7 eingeben !
      const idTemp = 'LOGO.Temperaturen.Außentemperatur Westen2'; // neuer Datenpunkt unter javascript.0
       
      createState(idTemp, 0, {type: 'number', unit: '°C', role: 'value.temperature'}); // Neuen Datenpunkt erzeugen
       
      on(idS7Temp, function(dp) { // Wertänderung
         setState(idTemp, dp.state.val / 10, true);
      });
       
      // Skriptstart
      setState(idTemp, getState(idS7Temp).val / 10, true);
      
        
      function S7Celsius(val) {
         if(val > 32768) val = val - 65536;
         setState(idTemp, val / 10, true);
      }
       
      on(idS7Temp, function(dp) { // Wertänderung
         S7Celsius(dp.state.val);
      });
       
      // Skriptstart
      S7Celsius(getState(idS7Temp).val);
      

      Lassen die sich auch über den alias lösen?

      Dann könnte ich ja alle scripte rausschmeißen?

      Vielen Dank vorab!

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

      @Elektroniker86 sagte: LOGO Schaltzeiten in ein alias, schon umgerechnet abzubilden?

      Die beiden Konvertierungsfunktionen sind sicherlich komplexer? Ich weiß nicht, ob sie sich auch per Alias-Konvertierung abbilden lassen.

      @Elektroniker86 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:

      noch die Temperaturen...

      Lesekonvertierung:

      val > 32768 ? (val - 65536) / 10 : val / 10
      

      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

      Elektroniker86E 1 Antwort Letzte Antwort
      1
      • paul53P paul53

        @Elektroniker86 sagte: LOGO Schaltzeiten in ein alias, schon umgerechnet abzubilden?

        Die beiden Konvertierungsfunktionen sind sicherlich komplexer? Ich weiß nicht, ob sie sich auch per Alias-Konvertierung abbilden lassen.

        @Elektroniker86 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:

        noch die Temperaturen...

        Lesekonvertierung:

        val > 32768 ? (val - 65536) / 10 : val / 10
        
        Elektroniker86E Offline
        Elektroniker86E Offline
        Elektroniker86
        schrieb am zuletzt editiert von
        #15

        @paul53 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:

        Die beiden Konvertierungsfunktionen sind sicherlich komplexer?

        Da fällt mir ein es gab noch ein Script in Global wo glaube ich, die Umrechnung beinhaltet:

        /* -- do not edit following lines - START --
        {
          "debug": false,
          "verbose": false
        }
        -- do not edit previous lines - END --*/
        function logotime2str(time) {
           var x = parseInt(time, 10).toString(16);
           if(parseInt(x) < 10) return '00:0' + x;
           if(parseInt(x) < 100) return '00:' + x;
           if(parseInt(x) < 1000) return '0' + x.slice(0, 1) + ':' + x.slice(1, 3);
           return x.slice(0, 2) + ':' + x.slice(2, 4);
        }
        
        function str2logotime(str) {  // str im Format "hh:mm:ss"
           var x = str.split(':');
           x = parseInt(x[0] + x[1], 16).toString(10);
           return parseInt(x);
        }
        

        Hilft das vielleicht?

        Die Umrechnung der Temperaturen funktioniert hervorragend! Danke dafür!

        paul53P 1 Antwort Letzte Antwort
        0
        • Elektroniker86E Elektroniker86

          @paul53 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:

          Die beiden Konvertierungsfunktionen sind sicherlich komplexer?

          Da fällt mir ein es gab noch ein Script in Global wo glaube ich, die Umrechnung beinhaltet:

          /* -- do not edit following lines - START --
          {
            "debug": false,
            "verbose": false
          }
          -- do not edit previous lines - END --*/
          function logotime2str(time) {
             var x = parseInt(time, 10).toString(16);
             if(parseInt(x) < 10) return '00:0' + x;
             if(parseInt(x) < 100) return '00:' + x;
             if(parseInt(x) < 1000) return '0' + x.slice(0, 1) + ':' + x.slice(1, 3);
             return x.slice(0, 2) + ':' + x.slice(2, 4);
          }
          
          function str2logotime(str) {  // str im Format "hh:mm:ss"
             var x = str.split(':');
             x = parseInt(x[0] + x[1], 16).toString(10);
             return parseInt(x);
          }
          

          Hilft das vielleicht?

          Die Umrechnung der Temperaturen funktioniert hervorragend! Danke dafür!

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

          @Elektroniker86 sagte: Hilft das vielleicht?

          Das ist mir tatsächlich zu komplex für eine Alias-Konvertierung.

          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

          Elektroniker86E 1 Antwort Letzte Antwort
          1
          • paul53P paul53

            @Elektroniker86 sagte: Hilft das vielleicht?

            Das ist mir tatsächlich zu komplex für eine Alias-Konvertierung.

            Elektroniker86E Offline
            Elektroniker86E Offline
            Elektroniker86
            schrieb am zuletzt editiert von
            #17

            @paul53 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:

            Das ist mir tatsächlich zu komplex für eine Alias-Konvertierung.

            Du, gar kein Problem, hast mir mega viel weiter geholfen.
            Nochmals vielen Dank an dieser Stelle!

            Wünsche noch weiterhin schöne Feiertage und ein frohes neues Jahr!

            1 Antwort Letzte Antwort
            0
            • Elektroniker86E Elektroniker86

              Hi,
              damals, 2019 hatte ich schon mal ein Thema erstellt, ist mittlerweile geschlossen:

              https://forum.iobroker.net/topic/26024/datenpunkte-zusammenführen-switch-state/18?_=1766396252103

              Es ging darum, dass die LOGO für eine Leuchte z.B. ein Datenpunkt (button) zum Schalten und ein Datenpunkt für den Status der Leuchte hat.

              Da das sonst immer schlecht in Vis und co einzubinden ist,

              deshalb das Script:

              // IDs anpassen
              const idButton = 's7.0.DBs.DB1.NI13';
              const idActor = 's7.0.DBs.DB1.Q13';
               
              const js = 'system.adapter.javascript.' + instance;
              const common = getObject(idButton).common;
              const idVis = 'LOGO.s7-0.' + common.name.replace(' ', '_');
               
              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);
              });
              
              

              Das Script hat die Datenpunkte zusammengeführt und einen neuen erstellt den ich dann problemlos einbinden konnte.

              Die neuen Datenpunkte wurden dann in javascript.0.LOGO.s7-0
              (je nach s7 Instanz s7-x) erstellt.

              Jetzt bin ich dabei meine ioBroker Installation ein bisschen aufzuräumen und habe schon einige manuell erzeugte Datenpunkte in den Ordner 0_userdata.0 verschoben.
              Da man ja in Zukunft nur noch da eigene Datenpunkte ablegen sollte.

              In den Blocklys war das kein Problem, aber bei dem Script von damals reicht es nicht javascript.0 durch 0_userdata.0 auszutauschen.

              Lange Rede kurzer Sinn, wie muss ich das Script bearbeiten damit der Datenpunkt entsprechend im neuen Verzeichnis erstellt wird?

              Oder bin ich nicht mehr up to Date und es gibt mittlerweile eine neue/andere Lösung für das "LOGO" Problem? Vielleicht ein Adapter oder in Vis?

              Vielen Dank im voraus!

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

              @Elektroniker86 sagte: Datenpunkte in den Ordner 0_userdata.0 verschoben.

              Wenn du die Zeitschaltuhr-Skripte an "0_userdata.0" anpassen möchtest, dann besser so:

              const idLogo = 's7.4.DBs.DB1.B024_Ausschaltz_1';
              const Name = 'Weihnachtsbeleuchtung außen ASZ1';
              
              const idVis = '0_userdata.0.LOGO.Schaltuhren.' + Name.replaceAll(' ', '_');
              
              createState(idVis, '0:00', {type: 'string', name: Name, role: 'text', read: true, write: true});
              
              on(idLogo, function(dp) {
                  if(dp.state.c != scriptName) setState(idVis, logotime2str(dp.state.val), true);
              });
               
              on(idVis, function(dp) {
                  if(dp.state.c != scriptName) setState(idLogo, str2logotime(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

              Elektroniker86E 2 Antworten Letzte Antwort
              1
              • paul53P paul53

                @Elektroniker86 sagte: Datenpunkte in den Ordner 0_userdata.0 verschoben.

                Wenn du die Zeitschaltuhr-Skripte an "0_userdata.0" anpassen möchtest, dann besser so:

                const idLogo = 's7.4.DBs.DB1.B024_Ausschaltz_1';
                const Name = 'Weihnachtsbeleuchtung außen ASZ1';
                
                const idVis = '0_userdata.0.LOGO.Schaltuhren.' + Name.replaceAll(' ', '_');
                
                createState(idVis, '0:00', {type: 'string', name: Name, role: 'text', read: true, write: true});
                
                on(idLogo, function(dp) {
                    if(dp.state.c != scriptName) setState(idVis, logotime2str(dp.state.val), true);
                });
                 
                on(idVis, function(dp) {
                    if(dp.state.c != scriptName) setState(idLogo, str2logotime(dp.state.val));
                });
                
                Elektroniker86E Offline
                Elektroniker86E Offline
                Elektroniker86
                schrieb am zuletzt editiert von
                #19

                @paul53 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:

                Wenn du die Zeitschaltuhr-Skripte an "0_userdata.0" anpassen möchtest

                Vielen Dank ! Das steht tatsächlich auch noch an.

                1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @Elektroniker86 sagte: Datenpunkte in den Ordner 0_userdata.0 verschoben.

                  Wenn du die Zeitschaltuhr-Skripte an "0_userdata.0" anpassen möchtest, dann besser so:

                  const idLogo = 's7.4.DBs.DB1.B024_Ausschaltz_1';
                  const Name = 'Weihnachtsbeleuchtung außen ASZ1';
                  
                  const idVis = '0_userdata.0.LOGO.Schaltuhren.' + Name.replaceAll(' ', '_');
                  
                  createState(idVis, '0:00', {type: 'string', name: Name, role: 'text', read: true, write: true});
                  
                  on(idLogo, function(dp) {
                      if(dp.state.c != scriptName) setState(idVis, logotime2str(dp.state.val), true);
                  });
                   
                  on(idVis, function(dp) {
                      if(dp.state.c != scriptName) setState(idLogo, str2logotime(dp.state.val));
                  });
                  
                  Elektroniker86E Offline
                  Elektroniker86E Offline
                  Elektroniker86
                  schrieb am zuletzt editiert von
                  #20

                  @paul53

                  Hi, und ein frohes neues Jahr wünsche ich.

                  ich habe noch eine Frage zum Script der Zeitschaltuhren. Kann man es so modifizieren damit die aktuellen Werte direkt im neuen Datenpunkt geschrieben werden wenn man das Script startet?

                  Weil es steht immer 0:00 drin und ich muss die Werte in der LOGO erst ändern bevor im Datenpunkt was geschrieben wird.

                  Vielen Dank vorab!

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • Elektroniker86E Elektroniker86

                    @paul53

                    Hi, und ein frohes neues Jahr wünsche ich.

                    ich habe noch eine Frage zum Script der Zeitschaltuhren. Kann man es so modifizieren damit die aktuellen Werte direkt im neuen Datenpunkt geschrieben werden wenn man das Script startet?

                    Weil es steht immer 0:00 drin und ich muss die Werte in der LOGO erst ändern bevor im Datenpunkt was geschrieben wird.

                    Vielen Dank vorab!

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

                    @Elektroniker86 sagte: es steht immer 0:00 drin

                    ... aber nur, wenn der Vis-DP noch nicht existiert.
                    Man kann auch beim Erstellen des DP die Uhrzeit aus der Logo übernehmen.

                    createState(idVis, logotime2str(getState(idLogo).val), {type: 'string', name: Name, role: 'text', read: true, write: 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

                    Elektroniker86E 1 Antwort Letzte Antwort
                    1
                    • paul53P paul53

                      @Elektroniker86 sagte: es steht immer 0:00 drin

                      ... aber nur, wenn der Vis-DP noch nicht existiert.
                      Man kann auch beim Erstellen des DP die Uhrzeit aus der Logo übernehmen.

                      createState(idVis, logotime2str(getState(idLogo).val), {type: 'string', name: Name, role: 'text', read: true, write: true});
                      
                      Elektroniker86E Offline
                      Elektroniker86E Offline
                      Elektroniker86
                      schrieb am zuletzt editiert von
                      #22

                      @paul53 sagte in S7 Adapter LOGO Datenpunkte zusammenführen button + state:

                      createState(idVis, logotime2str(getState(idLogo).val), {type: 'string', name: Name, role: 'text', read: true, write: true});

                      Vielen Dank! funktioniert super!

                      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

                      744

                      Online

                      32.6k

                      Benutzer

                      82.1k

                      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