Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. gst666

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    G
    • Profile
    • Following 0
    • Followers 0
    • Topics 3
    • Posts 202
    • Best 1
    • Groups 2

    gst666

    @gst666

    1
    Reputation
    54
    Profile views
    202
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    gst666 Follow
    Pro Starter

    Best posts made by gst666

    • RE: Einführung Programmieren mit Javascript

      Funktionen

      Wir haben sie bereits verwendet, wir haben selber etliche geschrieben, nur was ist das?

      Eine Funktion ist eine Zusammenfassung mehrere Anweisungen zu einem Block. Eine Funktion wird (in der Regel) über Ihren Namen aufgerufen. Ihr können Parameter übergeben werden und sie kann einen Rückgabewert haben.

      Nehmen wir die Funktion getState(). Der Funktion übergeben wir die id des States, den wir haben möchten. Als Rückgabewert erhalten wir dann den Zustand des States. Gut, eine Funktion verwendet man, wenn man sie braucht. Wann aber schreibt man eine Funktion? Dann, wenn man muss, oder wenn man sie braucht. Wir brauchen z.B. eine Funktion bei der Funktion subscribe() bzw. on().

      on({id: 'hm-rpc.1.IEQ053xxxx.1.PRESS_SHORT‘}, function (obj) {
      	setState("hm-rpc.1.IEQ038xxxx.3.State",!getState("hm-rpc.1.IEQ038xxxx3.State").val);
      		  setState("hm-rpc.1\. IEQ056xxxx.3.State",!getState("hm-rpc.1\. IEQ056xxxx.State").val);
      });
      
      

      Die Funktion ist der Bereich > function (obj) { … }
      In diesem Fall hat die Funktion keinen Namen. Wichtig ist folgendes festzuhalten:

      • Eine Funktion ist mit dem Schlüsselwort function gekennzeichnet.

      • Eine Funktion kann einen Namen haben. Beispiel function irgendetwas. Der Name kann nach den gleichen Regeln wie der Name einer Variablen gewählt werden.

      • Einer Funktion kann ein oder mehrere Werte Übergeben werden. In dem Beispiel wird ein Wert, obj, übergeben. Mehrere Werte werden durch Komma übergeben. Die Werte werden von Runden Klammern eingeschlossen. Wird kein Wert übergeben, so bleibt der Raum zwischen den runden Klammern leer.

      • In den geschweiften Klammern wird dann die Anweisungen wie in einem ganz normalen Programm geschrieben.

      • Eine Funktion kann einen Wert zurückgeben.
        Nur wann schreibt man sonst noch eine Funktion. Eine Funktion hilft dabei, ein Programm zu strukturieren und übersichtlicher zu gestalten. Gerade wenn ein Programmabschnitt mehrfach verwendet werden soll, macht es Sinn, ihn in eine Funktion auszugliedern. Zum Beispiel wollen wir an verschiedenen Stellen eines Programms die Temperatur schön formatieren. Das Programm könnte so aussehen:

      console.log('Wohnzimmer: '+formatTemp(20));
      console.log('Küche: '+formatTemp(18.27));
      
      function formatTemp(temp) {
          return(temp.toFixed(1)+'°C');
      }
      
      

      Die Funktion selber gibt nichts aus (könnte sie natürlich). Vielmehr gibt sie per return einen Wert zurück, den wir dann ausgeben. Ob sich für so eine einfache Aufgabe bereits eine Funktion lohnt liegt im Auge des Betrachters. Dem typografisch versierten Leser dürfte aufgefallen sein, dass man zwischen der Zahl und °C eigentlich ein Leerzeichen schreibt. Wenn wir dieses in der Funktion korregieren, brauchen wir den Rest des Programms nicht mehr kontollieren. Also auch bei so einem kleinen Programm kann es Sinn machen.

      Der Name der Funktion ist eine Variable. Daher müsste eigentlich auch folgendes gehen:

      console.log('Wohnzimmer: '+formatTemp(20));
      console.log('Küche: '+formatTemp(18.27));
      
      var formatTemp=function (temp) {
          return(temp.toFixed(1)+'°C');
      };
      
      

      Das Programm beschert uns jetzt aber leider einen Fehler:
      > Test: ReferenceError: formatTemp is not defined at script.js
      Das hängt damit zusammen, dass wir zunächst die Funktion (Variable) verwenden und diese erst später definiert wurde. So geht es:

      var formatTemp=function (temp) {
          return(temp.toFixed(1)+'°C');
      };
      
      console.log('Wohnzimmer: '+formatTemp(20));
      console.log('Küche: '+formatTemp(18.27));
      
      

      Daher macht es in der Regel Sinn bei der Deklaration der FUnktion auch den Namen anzugeben. Bei dieser Schreibweise kommt es im Skript (fast) nicht darauf an, wo die Funktion deklariert wird. Idealer Weise schreibt man erst das eigentliche Programm und hängt am Ende die Hilfsfunktionen an.

      Wenn man der Funktion selber den Namen gibt sind Rekursionen möglich. Ein Rekursion ist eine Funktion, die sich selber aufruft. Es gibt Situationen in denen dieses notwendig ist. Nach Möglichkeiten sollte man diese wegen ihrer schlechten Lesbarkeit vermeiden. EIn Beispiel hierzu ist die Fakultät eine Zahl. Die Fakultät von 3 ist 6. Die Fakultät ist eine mathematische Funktion, die einer natürlichen Zahl das Produkt aller natürlichen Zahlen (ohne Null) kleiner und gleich dieser Zahl zuordnet. Bei 3 wird also gerechnet: 123=6

      Das Programm könnte hierzu wie folgt aussehen:

      function fac(n) { 
          if (n<2) {
              console.log(n);
              return 1;
          } else {
              console.log(n+'*')
              return n*fac(n-1) 
      
          }
      }
      console.log('='+fac(3));
      
      

      Wichtig ist die Zeile

      	return n*fac(n-1)
      

      Hier ruft sich die Funktion selber auf. Bei der Variablenschreibweise wäre das nicht möglich.

      Trotzdem wäre ein solches Kontrukt nicht notwendig gewesen. Mit einer for-Schleife wäre das eleganter gewesen:

      function fac(n) { 
          var ergebnis=1;
          for(var i=2;i<=n;i++) ergebnis*=i;
          return ergebnis;
      }
      console.log(fac(3));
      
      

      Einer Funktion können beliebig viele Argumente übergeben werden. Spannend ist es, wenn die Zahl der Argumente variiert. Hier gibt es die Möglichkeit diese mit dem arguments Objekt abzufragen:

      `function printArgs() {
         var result = "";
         var i;
         for (i = 0; i < arguments.length; i++) {
            result += arguments[i] + ', ';
         }
         return result;
      }
      
      console.log(printArgs(1,2,3,4,'Maus'));` [/i]
      
      posted in Skripten / Logik
      G
      gst666

    Latest posts made by gst666

    • RE: jarvis v3.0.0 - just another remarkable vis

      Irgendwie habe ich gerade ein Brett vor dem Kopf. Nutze jarvis 3.0.11. Es geht um das Ausblenden einzelner Zeilen in einer State List. Dazu gibt des folgenden Hinweis: StateList-Zeile verschwinden lassen.

      Ich weiß bloß nicht, wo ich den Eintrag vornehmen soll.
      Vielleicht kann mir jemand das Brett entfernen. Danke

      posted in Tester
      G
      gst666
    • RE: [glöst] Javascript Editor - ohne Funktion

      @Jan1 said in Javascript Editor - ohne Funktion:
      Wie oben beschrieben habe ich das Problem zwischenzeitlich bereits beseitigt.

      Umstieg auf https (Lösung von Jan1) hat bei mir nicht nicht geholfen.

      Aber anscheinend gab es ein Problem beim Update des Adapters. Bin mit Script Engine auf 4.4.2 zurück und alles lief wieder. Nach nochmaligen Upgrade auf 4.5.1 geht es auch mit dieser Version wieder.

      Danke an alle, die versucht haben zu helfen.

      posted in Error/Bug
      G
      gst666
    • RE: [glöst] Javascript Editor - ohne Funktion

      Noch ein Nachtrag:

      Folgende Resourcen werden laut Debug Konsole nicht gefunden:

      [Error] Failed to load resource: the server responded with a status of 404 (Not Found) (2.bc7716ef.chunk.js, line 0)
      [Error] Failed to load resource: the server responded with a status of 404 (Not Found) (main.320f2344.chunk.js, line 0)
      [Error] Failed to load resource: the server responded with a status of 404 (Not Found) (socket.io.js.map, line 0)
      [Error] Failed to load resource: the server responded with a status of 404 (Not Found) (loader.js.map, line 0)
      [Error] Failed to load resource: the server responded with a status of 404 (Not Found) (editor.main.js.map, line 0)
      [Error] Failed to load resource: the server responded with a status of 404 (Not Found) (editor.main.nls.de.js.map, line 0)
      
      

      Weiß jemand wo genau diese Ressourcen liegen? Ist es vielleicht ein Rechte-Problem?

      posted in Error/Bug
      G
      gst666
    • RE: [glöst] Javascript Editor - ohne Funktion

      Danke für den Hinweis mit dem Problem der node-installation. Habe ich behoben. node und nodejs jetzt beide v14.1.0. Das Problem mit dem JS-Controller hat sich leider nicht geändert.

      posted in Error/Bug
      G
      gst666
    • RE: [glöst] Javascript Editor - ohne Funktion

      Nachtrag:
      Könnte vergleichbares Problem wie bei /#tab-objects lässt sich nicht mehr aufrufen sein.

      In Javascript Konsole des Browsers wird folgender Fehler ausgegeben:
      Failed to load resource: the server responded with a status of 404 (Not Found)
      http://www.xxx.de:8081/adapter/min-maps/vs/loader.js.map

      Ist in Safari in Firefox identisch.
      Die üblichen Verdächtigen wie clear cache habe ich natürlich gemacht.

      posted in Error/Bug
      G
      gst666
    • [glöst] Javascript Editor - ohne Funktion
      Systemdata
      Hardwaresystem: x86
      Arbeitsspeicher: 8 GB
      Festplattenart: HDD
      Betriebssystem: Ubuntu 18.04.4
      Node-Version: 12.16.1
      Nodejs-Version: 10.16.3
      NPM-Version: 6.13.4
      Installationsart: Skript
      Image genutzt: Nein

      Wenn ich mich im Admin befinde, bekomme ich den Tab "Skripte" wie gewünscht angezeigt
      Wenn ich auf den Tab klicke, so bleibt das rechte Fenster leer. Im Log keine Probleme. Die vorhandenen Skript laufen auch. Ich kann sie wegen des Problems nicht mehr editieren.

      Hat jemand eine Idee?
      Danke

      posted in Error/Bug
      G
      gst666
    • RE: [Neuer Adapter] hue-extended

      Bei mir gibt es leider auch ein Problem. Wenn ich eine Szene aktivieren will (also den Trigger unter Action auslöse) erhalte ich immer Fehlermeldungen:

      Error setting /lights/LightScene-4_1FbpfnZI6O1ksvo/state: resource, /lights/LightScene-4_1FbpfnZI6O1ksvo/state, not available
      

      Habt ihr das Problem auch.

      Trotzdem schon mal ein dickes Lob an den Entwickler. Wenn der Adapter fertig ist, brauche ich nicht mehr mein eigenes gefrickle für die Szenen verwenden.

      posted in Entwicklung
      G
      gst666
    • RE: Erwartete Tageshelligkeit (Dauer) berechnen

      Also ich vermute, dass hat etwas mit der Dämmerung zu tun. Wie dem auch sei, hier ein Lösungsvorschlag:

      var sommer=30;  //Korrektur in Min
      var winter=-30; //Korrektur in Min
      
      console.log(correctSunset(new Date(),sommer, winter));
      
      
      function correctSunset(iDateTime,iCorrectSunsetSummer,iCorrectSunsetWinter) {
          var month = iDateTime.getMonth();
          console.log(month);
          var diffSummerWinter = iCorrectSunsetSummer-iCorrectSunsetWinter;
          if (month<=6) {
              var corr = iCorrectSunsetWinter+(diffSummerWinter/5)*(month);
          } else {
              var corr = iCorrectSunsetSummer-(diffSummerWinter/5)*(month-6);
          }
          return(corr);
      }
      

      Ist zwar nur eine empirische Lösung. Sollte das Problem aber wohl lösen. Wem der Korreturwert noch zu grob ist, kann statt mit Monaten mit Tagen rechnen.

      posted in Skripten / Logik
      G
      gst666
    • RE: Erwartete Tageshelligkeit (Dauer) berechnen

      Eine Jahreszeitliche Anpassung wäre ja nicht das Problem. Kann man ja vom Tag im Jahr abhängig machen. Ich habe eher ein ganz anderes Problem dabei: Die Resthelligkeit ist auch stark vom Wetter abhängig. Ist es stark bewölkt ist es früher dunkel. Hier wird es schwierig. Natürlich könnte man dieses bei manchen Wetterdienstleistern auch abfragen. Dumm nur, wenn die Vorhersage nicht mit dem tatsächlichen Wetter zusammenpasst. Bin daher dabei geblieben: Rolladen erst runter, wenn es draußen sicher dunkel ist.

      posted in Skripten / Logik
      G
      gst666
    • RE: Entscheidungshilfe gesucht

      @Papabaer:

      die Teile können das gleiche wie die IP Variante. Nur die Optik ist halt "kantiger". `
      Habe beide Teile im Betrieb. Von der Funktion sind beide gleichwertig. Unterschied ist das Design und das Funkprotokoll. Nach meinem Eindruck ist das HM-IP Protokoll robuster. Bei den Thermostaten habe ich aber noch keine Unterschiede erkannt. Auf Dauer werden sicherlich die HM-IP Produkte die alten ersetzen. Ich persönlich versuche nur auch auf die IP Produkte zu setzen. Gegen die "alte" Variante dürfte aber nichts sprechen.

      Zu den langen Reaktionszeiten der DECT-Variante ist folgendes anzumerken: Alle batteriebetriebenen Geräte habe das Problem mit der Laufzeit. Bei dem DECT-Protokoll kann man dieses nicht seitens des Herstellers optimieren. Also ist es der effizienteste Weg, die Funk-Verbindung nur selten herzustellen. Auch bei den Homematic-Produkten kann man das gelegentlich feststellen.

      posted in ioBroker Allgemein
      G
      gst666
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo