Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] LOGO! & Wochenschaltuhr

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] LOGO! & Wochenschaltuhr

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

      ja, total blöd

      hier habe ich ein Zitat aus http://www.frickelzeugs.de/logocontrol/ … erstellen/
      > Die Logo speichert Uhrzeiten (z.B. der Wochenschaltuhr) relativ seltsam ab. Eine Zeit von 18:30 Uhr wird als Hex-Wert 0x1830 im VM-Speicher abgelegt, dies entspricht der Dezimalzahl 6192\. Für die Visualisierung muss diese Dezimalzahl also wieder in Hex umgerechnet werden. Die Funktion LogoDec2Hex entspricht also einer einfachen Dec->Hex-Konvertierung mit einem Sonderfall: die Umrechnung wird nur durchgeführt, wenn der sich ergebende Hex-Wert ausschließlich aus Ziffern bestünde (kein A-F erlaubt!). Ist dies nicht der Fall, liefert die Funktion -1 zurück. Dieser Kunstgriff ist nötig, da NCalc nicht mit Hex-Werten umgehen kann. Die Funktion LogoHex2Dec erledigt die Konvertierung in die entgegengesetzte Richtung.
      Das ist eigentlich das einzige Manko von LOGO

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

        Gut, dann ist mir folgendes nicht klar:

        on({id: "javascript.0.LOGO.Uhr1-1_Eind", change: "ne"}, function (dp){
        
           var Zeittmp= getState("javascript.0.LOGO.Uhr1-1_Eind").val.toString();
        
           if (getState ("javascript.0.LOGO.Uhr1-1_Eind").val < 1000) {
        

        Das wäre korrekt, wenn der Datenpunkt "javascript.0.LOGO.Uhr1-1_Eind" eine Zahl ("number") enthalten würde. Da er aber das Ergebnis von dec2hex() enthält, sollte es ein String sein. Ergänze mal durch ein Logging:

        on({id: "javascript.0.LOGO.Uhr1-1_Eind", change: "ne"}, function (dp){
           log(typeof dp.state.val);
        
        
        1 Reply Last reply Reply Quote 0
        • Vumer
          Vumer last edited by

          > javascript.0 2017-12-27 21:55:45.581 info script.js.common.WochenUhr.ZeitMitTrenzeichen: string
          wie schon geschrieben: bin noch im Vorschulalter was JS betrifft

          Als Vorlage habe ich dem Skript von http://forum.iobroker.net/viewtopic.php?p=73365#p73365 genommen

          /**
          * Beschreibe diese Funktion …
          */
          createState('Sunrise', 0);
          createState('Sunrisenf', 0);
          
          on({id: "s7.1.DBs.DB1.Sunrise", change: "ne"}, function (obj) {
          
          (function(){
          
          var ConvertBase = function (num) {
          return {
          from : function (baseFrom) {
          return {
          to : function (baseTo) {
          return parseInt(num, baseFrom).toString(baseTo);
          }
          };
          }
          };
          };
          
          // decimal to hexadecimal
          ConvertBase.dec2hex = function (num) {
          return ConvertBase(num).from(10).to(16);
          };
          this.ConvertBase = ConvertBase;
          })(this);
          
          setState("javascript.0.Sunrisenf",ConvertBase.dec2hex(getState("s7.1.DBs.DB1.Sunrise").val));
          
          var Sunrisetmp= ConvertBase.dec2hex(getState("s7.1.DBs.DB1.Sunrise").val).toString();
          
          //setState("javascript.0.Sunrise",Sunrisetmp.slice(0, 2) + String(":") + Sunrisetmp.slice(2, 4)) ; //bei 4 stelliger Zeit
          setState("javascript.0.Sunrise",Sunrisetmp.slice(0, 1) + String(":") + Sunrisetmp.slice(1, 3)) ; //bei 3 stelliger Zeit
          
          });
          

          dem habe ich http://forum.iobroker.net/viewtopic.php?p=106841#p106841

          createState("LOGO.Uhr1-1_Ein", 0);
          createState("LOGO.Uhr1-1_Eintmp", 0);
          
          on({id: "s7.0.DBs.DB1.B023-a1", change: "ne"}, function (obj) {
          
          (function(){
          
          var ConvertBase = function (num) {
          return {
          from : function (baseFrom) {
          return {
          to : function (baseTo) {
          return parseInt(num, baseFrom).toString(baseTo);
          }
          };
          }
          };
          };
          
          // decimal to hexadecimal
          ConvertBase.dec2hex = function (num) {
          return ConvertBase(num).from(10).to(16)
          };
          this.ConvertBase = ConvertBase;
          })(this);
          
          setState("javascript.0.LOGO.Uhr1-1_Eintmp",ConvertBase.dec2hex(getState("s7.0.DBs.DB1.B023-a1").val));
          
          var Zeittmp= ConvertBase.dec2hex(getState("s7.0.DBs.DB1.B023-a1").val).toString();
          
          if (getState ("javascript.0.LOGO.Uhr1-1_Eintmp").val < 1000) {
          
          setState("javascript.0.LOGO.Uhr1-1_Ein",Zeittmp.slice(0, 1) + String(":") + Zeittmp.slice(1, 3)) ;
          
          } else {
          
          setState("javascript.0.LOGO.Uhr1-1_Ein",Zeittmp.slice(0, 2) + String(":") + Zeittmp.slice(2, 4)) ;
          
          }
          
          });
          

          hex2dec habe ich auch von http://forum.iobroker.net/viewtopic.php?p=75107#p75107

          createState('ZeitEinnf_in', 0);
          
          on({id: "javascript.0.ZeitEinnf_in"/*ZeitEinnf_in*/, change: "ne"}, function (obj) {
          
          (function(){
          
          var ConvertBase = function (num) {
          return {
          from : function (baseFrom) {
          return {
          to : function (baseTo) {
          return parseInt(num, baseFrom).toString(baseTo);
          }
          };
          }
          };
          };
          
          // hexadecimal to decimal
          ConvertBase.hex2dec = function (num) {
          return ConvertBase(num).from(16).to(10);
          };
          this.ConvertBase = ConvertBase;
          })(this);
          
          setState("s7.1.DBs.DB1.ZeitEin",ConvertBase.hex2dec(getState("javascript.0.ZeitEinnf_in"/*ZeitEinnf_in*/).val));
          
          });
          

          danach kamm die Geschichte ab Post1

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

            Hier die beiden Funktionen:

            function logotime2str(time) {
               var x = parseInt(time, 10).toString(16);
               if(parseInt(x) < 10) return '0:0' + x;
               if(parseInt(x) < 100) return '0:' + x;
               if(parseInt(x) < 1000) return 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);
            }
            

            EDIT: Habe das Skript noch für Zeiten < 0:10 Uhr und < 1:00 Uhr angepasst.

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

              so bald ich die beiden Funktionen in global hinterlege bekomme ich sofort einen Fehler
              > instance system.adapter.javascript.0 terminated with code 7 (Adapter already running)

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

                Der Aufruf der (globalen) Funktionen kann in einem einfachen Skript erfolgen.

                const idLogo = 's7.0.DBs.DB1.B023-a1';
                const idVis = 'javascript.0.LOGO.Uhr1-1_Ein';
                
                on(idLogo, function(dp) {
                   setStateDelayed(idVis, logotime2str(dp.state.val), 5000);
                });
                
                on(idVis, function(dp) {
                   setState(idLogo, str2logotime(dp.state.val));
                });
                
                
                1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 last edited by

                  @Vumer:

                  so bald ich die beiden Funktionen in global hinterlege bekomme ich sofort einen Fehler `
                  Das kann ich bei mir nicht nachvollziehen. Es erfolgt lediglich ein Adapter-Restart mit einer Warnung. Der Restart ist erforderlich, da globale Skripte in alle anderen Skripte eingefügt werden müssen.

                  1 Reply Last reply Reply Quote 0
                  • Homoran
                    Homoran Global Moderator Administrators last edited by

                    Bei code7 hat sich der adapter verabschiedet (aber nicht ganz) die Instanz wurde mit einem neuen Prozess wieder gestartet, aber die alte existiert noch.

                    Entweder die prozesse killen oder den raspi neu starten

                    Gruß Rainer

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

                      @Homoran:

                      Entweder die prozesse killen oder den raspi neu starten

                      Gruß Rainer `
                      Das war es

                      ich muss darüber schlafen, Morgen bekommt ihr Blumen

                      Einfach Super!!!

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

                        Hallo paul53,

                        hab noch 8 x 4 Uhren hinzugefügt, ging ganz schnell und alles leuft 😄

                        noch einmal ein riesen Dankeschön von mir und denke von allen LOGO-ioBroker Nutzern.

                        Jetzt ist die LOGO! 8 100% kompatibel mit ioBroker

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

                          Bitte beachten: Habe die Funktion logotime2str(time) im Skript oben für Zeiten vor 1:00 Uhr korrigiert.

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

                            Super!!! Danke!!!

                            habe es bei mir korrigiert.

                            Noch eine blöde Frage

                            Unter Skripte kann man einen neuen Ordner und eine neue Gruppe erstellen. Wo ist der Unterschied?

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

                              @Vumer:

                              Unter Skripte kann man einen neuen Ordner und eine neue Gruppe erstellen. Wo ist der Unterschied? `
                              Ich kenne nur die Möglichkeiten eine neue Gruppe oder ein neues Skript (innerhalb einer Gruppe) zu erstellen. Wo findest Du "neuen Ordner erstellen" ?

                              S 1 Reply Last reply Reply Quote 0
                              • Vumer
                                Vumer last edited by

                                Sorry, mein Fehler.

                                Muss eine neu Brille bestellen und Schrift vergrößern. ordner und ordnen. Ich schäme mich.

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

                                  Hallo Vumer,

                                  genau diese Funktion habe ich auch gesucht!! Bin ja auch mit der LOGO 8 unterwegs.

                                  Allerdings kriege ich die beiden Scripts nicht zum laufen. Habe die beiden Funktionen (logotime2str und str2logotime) als separate Globale Scripte angelegt. Dann das Script zum Aufrufen der beiden Funktionen als Common-Script angelegt. Die beiden Variablen darin habe ich für meine Bedürfnisse angepasst. Hier habe ich schon die erste Frage: –> die Konstante idLogo ist soweit klar aber die folgende const idVis muss die "von Hand" angelegt werden?

                                  Die Scripte laufen scheinbar ohne Fehler (Objektansicht ioBroker zeigt beim Common.Script true, bei den beiden Globalen Scripten jedoch false) aber es wird keine Variable erzeugt bzw. diese hat den Wert "null".

                                  Steff

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

                                    Hallo Steff,

                                    Hast du auch einen Datenpunkt angelegt?

                                    So habe ich das gemacht

                                    Unter global habe ich mit dem name Converter

                                    function logotime2str(time) {
                                       var x = parseInt(time, 10).toString(16);
                                       if(parseInt(x) < 10) return '0:0' + x;
                                       if(parseInt(x) < 100) return '0:' + x;
                                       if(parseInt(x) < 1000) return 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);
                                    }
                                    ````angelegt.
                                    
                                    Unter common habe ich eine neue Gruppe mit dem Name LOGO erstellt
                                    
                                    Unter die Gruppe LOGO einen Skrip für die erste Uhr mit dem Name Uhr1-1_Ein
                                    

                                    createState("LOGO.Uhr1-1_Ein", 0);

                                    const idLogo = 's7.0.DBs.DB1.B023-a1';
                                    const idVis = 'javascript.0.LOGO.Uhr1-1_Ein';

                                    on(idLogo, function(dp) {
                                    setStateDelayed(idVis, logotime2str(dp.state.val), 5000);
                                    });

                                    on(idVis, function(dp) {
                                    setState(idLogo, str2logotime(dp.state.val));
                                    });

                                    Unter dem Name Uhr1-1_Aus
                                    

                                    createState("LOGO.Uhr1-1_Aus", 0);

                                    const idLogo = 's7.0.DBs.DB1.B023-b1';
                                    const idVis = 'javascript.0.LOGO.Uhr1-1_Aus';

                                    on(idLogo, function(dp) {
                                    setStateDelayed(idVis, logotime2str(dp.state.val), 5000);
                                    });

                                    on(idVis, function(dp) {
                                    setState(idLogo, str2logotime(dp.state.val));
                                    });

                                    und so weiter, erstellt
                                    
                                    Schöne Grüße
                                    1 Reply Last reply Reply Quote 0
                                    • Steff
                                      Steff last edited by

                                      Hallo Vumer,

                                      schon gesehen…., ich habe noch ordentlich was aufzuholen in Sachen JScript :oops:

                                      Die Datenpunkte waren das Problem. Jetzt werden die zwar angelegt allerdings immer noch mit "0"-Werten. :shock: Ist das so normal?

                                      Gruß

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

                                        ender mal im Datenpunkte unter Objekte die 0 in 9:30

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

                                          Jackpot!!

                                          Das ist echt genial.

                                          …und wieder was gelernt - die Datenpunkte wurden ja mit 0 angelegt. Macht das Sinn die Punkte gleich mit einem "richtigen" Wert sprich Uhrzeit anzulegen?

                                          Gruß

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

                                            Falsches Gedanke

                                            Der Script macht nur was wenn sich der Wert verendert, damit er nicht immer leuft. z.B wenn du in der LOGO die Zeit verenderst dann aktualisiert der Skript das. Oder du nimms im vis dem Widget "Jqui ctrl Input Datetime" umd stellst die Uhr im vis ein
                                            2071_zwischenablage01.jpg

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            885
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            9
                                            61
                                            7951
                                            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