Navigation

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

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    M
    • Profile
    • Following 0
    • Followers 0
    • Topics 32
    • Posts 229
    • Best 24
    • Groups 3

    Malaus

    @Malaus

    Pro

    32
    Reputation
    120
    Profile views
    229
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Malaus Follow
    Developer Pro Starter

    Best posts made by Malaus

    • Dynamisches Licht - Farbverlauf Tag/Nacht

      Hallo Ihr,

      Ich habe hier ein Script, dass den Kelvin Wert an die jeweilige Tageszeit anpasst.
      Morgens gehts in Richtung Tageslichtweiß und Abends wieder Richtung Warmweiß.
      Da sich Sonnenauf- und untergang jeden Tag ändern, ist es an das Astroskript angelegt.

      Die Kelvinwerte, die man an einer bestimmten Tageszeit möchte, kann man per Datenpunkt ändern.
      Den aktuellen Kelvin Wert gibts per Datenpunkt, damit man das an die jeweiligen Leuchten weiterleiten kann.

      Da meine Leuchtmittel von unterschiedlichen Hersteller sind, muss ich das noch mit einem Offset anpassen, damit ich überall die gleiche Farbe habe. Ist aber noch in arbeit...

      Viel Spaß beim ausprobieren 🙂

      Das Skript funktioniert nur mit der Astro Funktion! (unten angehängt)

      var INTERVAL_MS = 1000 * 60
       
      var ASTRO_DAYTIME = "javascript.0.Astro.Tageszeit.current";
      var DYNAMIC_LIGHT = "javascript.0.Dynamisches_Licht.Hilfswert_Kelvin";
       
      var KELVIN_DAYBREAK = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Morgendämmerung";
      var KELVIN_SUNRISE = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Sonnenaufgang";
      var KELVIN_FORENOON = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Vormittag";
      var KELVIN_NOON = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Mittag";
      var KELVIN_TWILIGHT = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Abendämmerung";
      var KELVIN_EVE = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Abend";
      var KELVIN_NIGHT = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Nacht";
       
      var interval
       
      /**
        * @param step Die Höhe der Schritte um die Kelvinzahl anzupassen
        * @param runs Anzahl der Durchläufe
        */
      function startDimmer (step, runs) {
        if (interval) {
          clearInterval(interval);
        }
       
        //Startwert setzen für Hilfswert_Kelvin
         setStartKelvinState();
        
         var counter = 0
         interval = setInterval(function() {
           var kelvin = getKelvinState()
           setKelvin(Math.round(kelvin + step));
        
           // Hilfswert Kelvin ist ein Datenpunkt für die Übergabe an die Leuchten
           counter = counter + 1;
        
           if (counter >= runs) {
             console.log("Ende dimmer");
             clearInterval(interval);
             return
           }
         }, INTERVAL_MS);
         console.log("Start dimmer");
       }
        
       /** HELPER FUNCTIONS **/
        
       function getMinutes (time) {
         var dateString = time.indexOf("javascript") >= 0 ? getState(time).val : time;
         var v = getDateObject(dateString);
         return v.getHours() * 60 + v.getMinutes();
       }
        
       function getTimeDifference (time1, time2) {
         return getMinutes(time1) - getMinutes(time2)
       }
        
       function getTimeStep (time1, time2, runs) {
         return Math.round(((getState(time1).val - getState(time2).val) / runs) * 10) / 10;
       }
        
       function getKelvinState () {
         return getState(DYNAMIC_LIGHT).val;
       }
        
       function setKelvin (value) {
         return setState(DYNAMIC_LIGHT, value);
       }
        
       function setKelvinState (state) {
         setKelvin(getState(state).val);
       }
        
       function setStartKelvinState () {
         var state
         switch (getState(ASTRO_DAYTIME).val) {
           case 'Morgendämmerung':
             state = KELVIN_DAYBREAK;
             break;
           case 'Sonnenaufgang':
             state = KELVIN_SUNRISE;
             break;
           case 'Vormittag':
             state = KELVIN_FORENOON;
             break;
           case 'Mittag':
             state = KELVIN_NOON;
             break;
           case 'Abend':
             state = KELVIN_EVE;
             break;
           case 'Nacht':
             state = KELVIN_NIGHT;
             break;
           case 'Abenddämmerung':
             state = KELVIN_TWILIGHT;
             break;
         }
         if (state) {
           setKelvinState(state);
         }
       }
        
       function proveDaytime (obj) {
         var runs, step;
        
         console.log('ASTRO_DAYTIME: ' + obj.state.val)
         switch (obj.state.val) {
           case 'Morgendämmerung':
             runs = getTimeDifference("javascript.0.Astro.Zeiten.12 - dawn", "javascript.0.Astro.Zeiten.11 - nauticalDawn");
             step = getTimeStep(KELVIN_SUNRISE, KELVIN_DAYBREAK, runs);
             setKelvinState(KELVIN_DAYBREAK);
             break;
        
           case 'Sonnenaufgang':
             runs = getTimeDifference("javascript.0.Astro.Zeiten.03 - goldenHourEnd", "javascript.0.Astro.Zeiten.12 - dawn");
             step = getTimeStep(KELVIN_FORENOON, KELVIN_SUNRISE, runs);
             setKelvinState(KELVIN_SUNRISE);
             break;
        
           case 'Vormittag':
             runs = getTimeDifference("javascript.0.Astro.Zeiten.04 - solarNoon", "javascript.0.Astro.Zeiten.03 - goldenHourEnd");
             step = getTimeStep(KELVIN_NOON, KELVIN_FORENOON, runs);
             setKelvinState(KELVIN_FORENOON);
             break;
        
           case 'Mittag':
             runs = getTimeDifference("javascript.0.Astro.Zeiten.05 - goldenHour", "javascript.0.Astro.Zeiten.04 - solarNoon");
             step = getTimeStep(KELVIN_EVE, KELVIN_NOON, runs);
             setKelvinState(KELVIN_NOON);
             break;
        
           case 'Abend':
             runs = getTimeDifference("javascript.0.Astro.Zeiten.09 - nauticalDusk", "javascript.0.Astro.Zeiten.05 - goldenHour");
             step = getTimeStep(KELVIN_TWILIGHT, KELVIN_EVE, runs);
             setKelvinState(KELVIN_EVE);
             break;
        
           case 'Abenddämmerung':
             runs = getTimeDifference("21:00", "javascript.0.Astro.Zeiten.09 - nauticalDusk");
             step = getTimeStep(KELVIN_NIGHT, KELVIN_TWILIGHT, runs);
             setKelvinState(KELVIN_TWILIGHT);
             break;
        
           default:
             console.log('State missing: ' + obj.state.val)
             break;
         }
        
         if (step && runs) {
           startDimmer(step, runs);
         }
       }
        
       /** ADD STATES **/
        /***/
       createState(KELVIN_DAYBREAK, {
         name: 'Morgendämmerung',
         unit: 'K',
         type: 'number',
         def:   2700,
       });
       createState(KELVIN_SUNRISE, {
         name: 'Sonnenaufgang',
         unit: 'K',
         type: 'number',
         def:   4000,
       });
       createState(KELVIN_FORENOON, {
         name: 'Vormittag',
         unit: 'K',
         type: 'number',
         def:   5500,
       });
       createState(KELVIN_NOON, {
         name: 'Mittag',
         unit: 'K',
         type: 'number',
         def:   5000,
       });
       createState(KELVIN_EVE, {
         name: 'Abend',
         unit: 'K',
         type: 'number',
         def:   4500,
       });
       createState(KELVIN_TWILIGHT, {
         name: 'Abenddämmerung',
         unit: 'K',
         type: 'number',
         def:   3000,
       });
       createState(KELVIN_NIGHT, {
         name: 'Nacht',
         unit: 'K',
         type: 'number',
         def:   2100,
       });
       createState(DYNAMIC_LIGHT, {
         name: 'Hilfswert_Kelvin',
         unit: 'K',
         type: 'number',
         def:   5000,
       });
       /***/
        
       // Tageszeit überprüfen
       on({ id: ASTRO_DAYTIME, change: "any" }, proveDaytime);
        
      
      

      Astro Funktion
      Finde leider nicht mehr die Quelle

      const sec = false; // Sekunden darstellen oder nicht
      const fC = false; // forceCreation ein/aus
      const pfad = "Astro"; // Pfad zum Objekt - Objektbaum-Hauptverzeichnis
      // *****************************************************************************
      // TAGESZEITEN - T E I L 
      // Tageszeiten nach eigenem Gusto (Shifts siehe schedules weiter unten)
      const tageszeiten = ["Nacht",
                         "Morgendämmerung",
                         "Sonnenaufgang",
                         "Morgen",
                         "Vormittag",
                         "Mittag",
                         "Nachmittag",
                         "Abend",
                         "Sonnenuntergang",
                         "Abenddämmerung"
                        ];
      const idTageszeit = "javascript." + instance  + "." + pfad + ".Tageszeit.current" /*Tageszeit*/,
          idTageszeitNext = "javascript." + instance  + "." + pfad + ".Tageszeit.next";
       
      createState(idTageszeit, "nächsten Wechsel abwarten", fC, {
        name: "Tageszeit",
        desc: "Name der Tageszeit",
        type: "string"
      });   
      createState(idTageszeitNext, "nächsten Wechsel abwarten", fC, {
        name: "nächste Tageszeit",
        desc: "Name der nächsten Tageszeit",
        type: "string"
      });
      function neue_tageszeit(abschnitt) {
        var akt = tageszeiten[parseInt(abschnitt, 10)],
        // wenn aktuelles Element ist letztes, dann nächstes ist erstes :-D
        nxt = (abschnitt + 1 === tageszeiten.length) ? tageszeiten[0] : tageszeiten[parseInt(abschnitt + 1, 10)];
        setState(idTageszeit, akt);
        setState(idTageszeitNext, nxt);
        log("neue Tagezeit: " + akt);
        log("nächte kommende Tagezeit: " + nxt);
      }
      // Nacht
      schedule({
        astro: "nauticalDusk", 
        shift: 45
      }, function () { 
        neue_tageszeit(0);
      });
      // Morgengdämmerung
      schedule({
        astro: "nauticalDawn",
        shift: -45
      }, function () {
        neue_tageszeit(1);
      });
      // Sonnenaufgang
      schedule({
        astro: "dawn"
      }, function() {
        neue_tageszeit(2);
      });
      // Morgen
      schedule({
        astro: "sunriseEnd"
      }, function () {
        neue_tageszeit(3);
      });
      // Vormittag 
      schedule({
        astro: "goldenHourEnd",
        shift: 60
      }, function () {
        neue_tageszeit(4);
      });
      // Mittag
      schedule({
        astro: "solarNoon",
        shift: -30
      }, function () {
        neue_tageszeit(5);
      });
      // Nachmittag
      schedule({
        astro: "solarNoon",
        shift: 30
      }, function () {
        neue_tageszeit(6);
      });
      // Abend
      schedule({
        astro: "goldenHour",
        shift: -60
      }, function () {
        neue_tageszeit(7);
      });
      // Sonnenuntergang
      schedule({
        astro: "sunsetStart",
      }, function () {
        neue_tageszeit(8);
      });
      // Abenddämmerung (nach Sonnenuntergang)
      schedule({
        astro: "nauticalDusk"
      }, function () {
        neue_tageszeit(9);
      });
      // *****************************************************************************
      // A S T O - T E I L 
      /* Objekt Astrotag 
       Astrotag liegt zwischen Sonnauf- und untergang, 
       Astronacht liegt zwischen Sonnenunter- und aufgang */
      const idAstrotag =  "javascript." + instance + "." + pfad + ".Astrotag";
      // Objekt für Uhrzeiten der Astrozeiten
      const astrotime = {
        "elements" : [
            // Astrotag beginnt
            {
                "fname" : "sunrise", // function name
                "de" : {
                    "name" : "Sonnenaufgang",
                    "nxt" : "nächster",
                    "desc" : ""
                },
                "en" : {
                    "name" : "Sunrise",
                    "desc" : "top edge of the sun appears on the horizon"
                },
                "astroday" : true //during astroday
            },
            {
                "fname" : "sunriseEnd", // function name
                "de" : {
                    "name" : "Ende Sonnenaufgang",
                    "nxt" : "nächstes",
                    "desc" : ""
                },
                "en" : {
                    "name" : "End of sunrise",
                    "desc" : "bottom edge of the sun touches the horizon"
                },
                "astroday" : true //during astroday
            },
            {
                "fname" : "goldenHourEnd", // function name
                "de" : {
                    "name" : "Ende der goldenen Stunde am Morgen",
                    "nxt" : "nächstes",
                    "desc" : ""
                },
                "en" : {
                    "name" : "End of golden hour",
                    "desc" : "morning golden hour (soft light, best time for photography) ends"
                },
                "astroday" : true //during astroday
            },
            {
                "fname" : "solarNoon", // function name
                "de" : {
                    "name" : "Sonnenhöchststand",
                    "nxt" : "nächster",
                    "desc" : ""
                },
                "en" : {
                    "name" : "Solar noon",
                    "desc" : "sun is in the highest position"
                },
                "astroday" : true //during astroday
            },
            {
                "fname" : "goldenHour", // function name
                "de" : {
                    "name" : "Goldene Stunde (am Abend)",
                    "nxt" : "nächste",
                    "desc" : ""
                },
                "en" : {
                    "name" : "Golden hour",
                    "desc" : "evening golden hour starts"
                },
                "astroday" : true //during astroday
            },
            {
                "fname" : "sunsetStart", // function name
                "de" : {
                    "name" : "Beginn Sonnenuntergang",
                    "nxt" : "nächster",
                    "desc" : ""
                },
                "en" : {
                    "name" : "Sunset starts",
                    "desc" : "bottom edge of the sun touches the horizon"
                },
                "astroday" : true //during astroday
            },
            // Astronacht beginnt
            {
                "fname" : "sunset", // function name
                "de" : {
                    "name" : "Sonnenuntergang",
                    "nxt" : "nächster",
                    "desc" : ""
                },
                "en" : {
                    "name" : "Sunset",
                    "desc" : "sun disappears below the horizon, evening civil twilight starts"
                },
                "astroday" : false //during astronight
            },
            {
                "fname" : "dusk",
                "de" : {
                    "name" : "Abenddämmerung",
                    "nxt" : "nächste",
                    "desc" : ""
                },
                "en" : {
                    "name" : "Dusk",
                    "desc" : "evening nautical twilight starts"
                },
                "astroday" : false //during astronight
            },
            {
                "fname" : "nauticalDusk",
                "de" : {
                    "name" : "nautische Abenddämmerung",
                    "nxt" : "nächste",
                    "desc" : ""
                },
                "en" : {
                    "name" : "Nautical dusk",
                    "desc" : "evening astronomical twilight starts"
                },
                "astroday" : false //during astronight
            },
            {
                "fname" : "nadir",
                "de" : {
                    "name" : "Nadir",
                    "nxt" : "nächster",
                    "desc" : "Fußpunkt gegenüber dem Zenit"
                },
                "en" : {
                    "name" : "Nadir",
                    "desc" : "darkest moment of the night, sun is in the lowest position"
                },
                "astroday" : false //during astronight
            },
            {
                "fname" : "nauticalDawn",
                "de" : {
                    "name" : "nautische Morgendämmerung",
                    "nxt" : "nächste",
                    "desc" : ""
                },
                "en" : {
                    "name" : "Nautical dawn",
                    "desc" : "morning nautical twilight starts"
                },
                "astroday" : false //during astronight
            },
            {
                "fname" : "dawn",
                "de" : {
                    "name" : "Morgendämmerung",
                    "nxt" : "nächste",
                    "desc" : ""
                },
                "en" : {
                    "name" : "dawn",
                    "desc" : "morning nautical twilight ends, morning civil twilight starts"
                },
                "astroday" : false //during astronight
            }
       
        ]
      };
       
      function writeAstroTimes(i) {
        // führende Nummer zur Sortierung in Admin/Objekte
        var nr = (i+1 < 10) ? "0" + (i+1) : (i+1);
        // Erstelle Objekt, falls nicht bereits vorhanden
        var idAstroObject = "javascript." + instance + "." + pfad + ".Zeiten." + nr + " - " + astrotime.elements[i].fname;
        createState(idAstroObject, " ", fC, {
            name: astrotime.elements[i].de.nxt + " " + astrotime.elements[i].de.name + " Uhrzeit",
            desc: astrotime.elements[i].en.desc,
            type: "string"
        });
       
        setTimeout(function() { // kurz warten, damit Objekte ggf. erst angelgt werden können
            var astrotag = getState(idAstrotag).val,
                temp;
            var today = new Date();
            var tomorrow = new Date(today.setDate(today.getDate()+1));
            var next_event;
            if (astrotag) { 
                // Wenn Tag (Aufgang vorbei (erst wieder morgen, Untergang kommt noch heute)
                next_event = (astrotime.elements[i].astroday) ? tomorrow : today; // prüfen
            } else { 
                // nach Nacht (Untergang vorbei (erst wieder morgen, Aufgang kommt heute oder morgen)
                next_event = (astrotime.elements[i].astroday) ? today : tomorrow; // prüfen
            }
            var fname = astrotime.elements[i].fname;
            temp = getAstroDate(fname, next_event);
            setState(idAstroObject, checkSec(temp.toLocaleTimeString('de-DE', { hour12: false })) );
        }, 3 * 1000);
      }
       
      // Zeit mit oder ohne Sekunden anzeigen
      function checkSec (zeit) {
        if (!sec) {
            var newString_arr = zeit.split(":");
            var newString = newString_arr[0] + ":" + newString_arr[1];
            return (newString);
        } else return (zeit);
      }
       
      function getAstroday() {
        // Astrotag bestimmen (boolean)
        createState(idAstrotag, false, fC, {
            type: "boolean",
            name: "Astrologischer Tag",
            desc: "Liegt die aktuelle Zeit zwischen Sonnenauf- und untergang"
        }); 
        setState(idAstrotag, isAstroDay());
      }
       
      function iterateAstrotimes() {
        // Zeiten für jede Astrozeit schreiben
        for (var i = 0; i < astrotime.elements.length; i++) {
            writeAstroTimes(i);
        }
      }
       
      // Astrotag checken
      schedule("*/1 * * * *", function () { // jede Minute
        getAstroday();
        iterateAstrotimes();
      });
       
      iterateAstrotimes();
      getAstroday();
      
      
      posted in Skripten / Logik
      M
      Malaus
    • RE: CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor

      @skvarel falls es dich interessiert, ich benutze den hier mit ptvo:

      CC2530F256 USB Test Board Kit von Aliexpress

      Bildschirmfoto 2025-01-12 um 11.48.49.png

      Und seit gestern teste ich den:

      Bildschirmfoto 2025-01-12 um 11.50.17.png

      Den kannn man über usb flashen.

      posted in Praktische Anwendungen (Showcase)
      M
      Malaus
    • RE: Dynamisches Licht - Farbverlauf Tag/Nacht

      @el_malto

      Danke für ein Feedback.
      Habe mir Hilfe geholt und das Skript komplett überarbeitet.

      var INTERVAL_MS = 1000 * 60
      
      var ASTRO_DAYTIME = "javascript.0.Astro.Tageszeit.current";
      var DYNAMIC_LIGHT = "javascript.0.Dynamisches_Licht.Hilfswert_Kelvin";
      
      var KELVIN_DAYBREAK = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Morgendämmerung";
      var KELVIN_SUNRISE = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Sonnenaufgang";
      var KELVIN_FORENOON = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Vormittag";
      var KELVIN_NOON = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Mittag";
      var KELVIN_TWILIGHT = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Abendämmerung";
      var KELVIN_EVE = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Abend";
      var KELVIN_NIGHT = "javascript.0.Dynamisches_Licht.Kelvin_Werte.Nacht";
      
      var interval
      
      /**
       * @param step Die Höhe der Schritte um die Kelvinzahl anzupassen
       * @param runs Anzahl der Durchläufe
       */
      function startDimmer (step, runs) {
        if (interval) {
          clearInterval(interval);
        }
      
        //Startwert setzen für Hilfswert_Kelvin
        setStartKelvinState();
      
        var counter = 0
        interval = setInterval(function() {
          var kelvin = getKelvinState()
          setKelvin(Math.round(kelvin + step));
      
          // Hilfswert Kelvin ist ein Datenpunkt für die Übergabe an die Leuchten
          counter = counter + 1;
      
          if (counter >= runs) {
            console.log("Ende dimmer");
            clearInterval(interval);
            return
          }
        }, INTERVAL_MS);
        console.log("Start dimmer");
      }
      
      /** HELPER FUNCTIONS **/
      
      function getMinutes (time) {
        var dateString = time.indexOf("javascript") >= 0 ? getState(time).val : time;
        var v = getDateObject(dateString);
        return v.getHours() * 60 + v.getMinutes();
      }
      
      function getTimeDifference (time1, time2) {
        return getMinutes(time1) - getMinutes(time2)
      }
      
      function getTimeStep (time1, time2, runs) {
        return Math.round(((getState(time1).val - getState(time2).val) / runs) * 10) / 10;
      }
      
      function getKelvinState () {
        return getState(DYNAMIC_LIGHT).val;
      }
      
      function setKelvin (value) {
        return setState(DYNAMIC_LIGHT, value);
      }
      
      function setKelvinState (state) {
        setKelvin(getState(state).val);
      }
      
      function setStartKelvinState () {
        var state
        switch (getState(ASTRO_DAYTIME).val) {
          case 'Morgendämmerung':
            state = KELVIN_DAYBREAK;
            break;
          case 'Sonnenaufgang':
            state = KELVIN_SUNRISE;
            break;
          case 'Vormittag':
            state = KELVIN_FORENOON;
            break;
          case 'Mittag':
            state = KELVIN_NOON;
            break;
          case 'Abend':
            state = KELVIN_EVE;
            break;
          case 'Nacht':
            state = KELVIN_NIGHT;
            break;
          case 'Abenddämmerung':
            state = KELVIN_TWILIGHT;
            break;
        }
        if (state) {
          setKelvinState(state);
        }
      }
      
      function proveDaytime (obj) {
        var runs, step;
      
        console.log('ASTRO_DAYTIME: ' + obj.state.val)
        switch (obj.state.val) {
          case 'Morgendämmerung':
            runs = getTimeDifference("javascript.0.Astro.Zeiten.12 - dawn", "javascript.0.Astro.Zeiten.11 - nauticalDawn");
            step = getTimeStep(KELVIN_SUNRISE, KELVIN_DAYBREAK, runs);
            setKelvinState(KELVIN_DAYBREAK);
            break;
      
          case 'Sonnenaufgang':
            runs = getTimeDifference("javascript.0.Astro.Zeiten.03 - goldenHourEnd", "javascript.0.Astro.Zeiten.12 - dawn");
            step = getTimeStep(KELVIN_FORENOON, KELVIN_SUNRISE, runs);
            setKelvinState(KELVIN_SUNRISE);
            break;
      
          case 'Vormittag':
            runs = getTimeDifference("javascript.0.Astro.Zeiten.04 - solarNoon", "javascript.0.Astro.Zeiten.03 - goldenHourEnd");
            step = getTimeStep(KELVIN_NOON, KELVIN_FORENOON, runs);
            setKelvinState(KELVIN_FORENOON);
            break;
      
          case 'Mittag':
            runs = getTimeDifference("javascript.0.Astro.Zeiten.05 - goldenHour", "javascript.0.Astro.Zeiten.04 - solarNoon");
            step = getTimeStep(KELVIN_EVE, KELVIN_NOON, runs);
            setKelvinState(KELVIN_NOON);
            break;
      
          case 'Abend':
            runs = getTimeDifference("javascript.0.Astro.Zeiten.09 - nauticalDusk", "javascript.0.Astro.Zeiten.05 - goldenHour");
            step = getTimeStep(KELVIN_TWILIGHT, KELVIN_EVE, runs);
            setKelvinState(KELVIN_EVE);
            break;
      
          case 'Abenddämmerung':
            runs = getTimeDifference("21:00", "javascript.0.Astro.Zeiten.09 - nauticalDusk");
            step = getTimeStep(KELVIN_NIGHT, KELVIN_TWILIGHT, runs);
            setKelvinState(KELVIN_TWILIGHT);
            break;
      
          default:
            console.log('State missing: ' + obj.state.val)
            break;
        }
      
        if (step && runs) {
          startDimmer(step, runs);
        }
      }
      
      /** ADD STATES **/
       /***/
      createState(KELVIN_DAYBREAK, {
        name: 'Morgendämmerung',
        unit: 'K',
        type: 'number',
        def:   2700,
      });
      createState(KELVIN_SUNRISE, {
        name: 'Sonnenaufgang',
        unit: 'K',
        type: 'number',
        def:   4000,
      });
      createState(KELVIN_FORENOON, {
        name: 'Vormittag',
        unit: 'K',
        type: 'number',
        def:   5500,
      });
      createState(KELVIN_NOON, {
        name: 'Mittag',
        unit: 'K',
        type: 'number',
        def:   5000,
      });
      createState(KELVIN_EVE, {
        name: 'Abend',
        unit: 'K',
        type: 'number',
        def:   4500,
      });
      createState(KELVIN_TWILIGHT, {
        name: 'Abenddämmerung',
        unit: 'K',
        type: 'number',
        def:   3000,
      });
      createState(KELVIN_NIGHT, {
        name: 'Nacht',
        unit: 'K',
        type: 'number',
        def:   2100,
      });
      createState(DYNAMIC_LIGHT, {
        name: 'Hilfswert_Kelvin',
        unit: 'K',
        type: 'number',
        def:   5000,
      });
      /***/
      
      // Tageszeit überprüfen
      on({ id: ASTRO_DAYTIME, change: "any" }, proveDaytime);
      
      
      posted in Skripten / Logik
      M
      Malaus
    • RE: CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor

      @skvarel daran habe ich gar nicht gedacht, dass der cc2531 kein zigbee 3 kann.

      • Raumsensoren mit Senseair S8 und DHT22.
      • Licht Taster für die Räume im Schaltschrank. Dadurch brauch ich nicht in jedem Raum ein Gerät als Taster, sondern fasse das im Schaltschrank zusammen. Hier hat jeder Raum ein SSR Relais (230V/5V), so kann ich die Signale mit dem Zigbee erfassen.
      • Außensensor mit DS18B20, SHTC3 und BH1750
      posted in Praktische Anwendungen (Showcase)
      M
      Malaus
    • RE: Test Adapter shuttercontrol v2.0.x

      @simatec
      Wäre es möglich die Einstellungen vom Sonnenschutz als Datenpunkte zur Verfügung zu stellen? So könnte man die Einstellungen jederzeit über ein Skript ändern.
      Beispiel - Helligkeit
      Spät Nachmittags geht manchmal die Helligkeit unter die eingestellte Grenze im Sonnenschutz. Dadurch passiert es, dass die Rollläden hochfahren, obwohl die Sonne noch hinein scheint. Setze ich den Wert noch weiter runter, passiert bei einer Bewölkung nichts und der Rollo bleibt weiterhin im Sonnenschutz.
      Durch die Änderungen an der Helligkeit durch den Datenpunkt, könnte man nach Tageszeit die Grenze nach unten ändern und es etwas dynamischer gestalten.

      posted in Tester
      M
      Malaus
    • RE: [erledigt] Nodered log ausschalten

      @mickym

      Bei Debug kommt immer nur der Wert.

      22.11.2022, 16:19:34node: debug 8
      istwert : msg.payload : number
      2
      

      Wenn ich bei der iobroker-out Node auf command stelle, dann kommen auch keine Logs mehr.

      Dann war das wohl der Fehler.
      Vielen Dank dir!

      posted in ioBroker Allgemein
      M
      Malaus
    • RE: Dynamisches Licht - Farbverlauf Tag/Nacht

      @el_malto sagte in Dynamisches Licht - Farbverlauf Tag/Nacht:

      Cooles Skript.
      Gibt es auch die Möglichkeit direkt ein RGB Wert auszugeben? Meine Ikea Tradfri unterstützen leider keinen CT Wert.
      Leider habe ich überhaupt keine Ahnung von JS und den ganzen umwandeln. Hier mal meine jetzige Situation die auch funktioniert.
      https://forum.iobroker.net/topic/22344/tradfri-rgb-über-deconz-und-yahka-farbwahl-nicht-möglich/31

      Edit: Noch eine weitere Frage.
      Regelt sich das Licht auch kontinuirlich wenn es an ist? Oder wird nur beim einschalten der CT Wert geschrieben und das Licht geht dementsprechend in der Farbtemperatur an?
      Weil für "richtiges" dynamisches Licht muss sich der Kelvin Wert wenn er morgens z.B. um 06:00 Uhr bei 2700 K anfängt und man mittags z.B. um 12:00 Uhr 4000 K haben will ja zwischen 06:00 Uhr und 12:00 Uhr setig zeigen. Gerade wenn man das Licht die ganze Zeit an hat. So weit kann ich JS dann leider nicht lesen.

      Muss ich mir mal genauer anschauen. Gibt bestimmt eine Möglichkeit.

      Es wird eine Differenz in Minuten zwischen der aktuellen und der nächsten Tageszeit errechnet. Danach wird die Differenz der Kelvin Werte ausgerechnet und durch die Minuten geteilt. So hab ich einen Wert, den ich jede Minute addiere oder subtrahiere um am Schluss die gewünschte Kelvinzahl zu erreichen.
      Das sind kleinere Werte, so dass man es selbst nicht merkt, dass sich die Farbe ändert.

      posted in Skripten / Logik
      M
      Malaus
    • Test Adapter DALI v0.0.x GitHub
      Aktuelle Test Version 0.0.2
      Veröffentlichungsdatum 02.04.2020
      Github Link https://github.com/Malaus-io/ioBroker.dali

      Hallo Ihr,
      hier ist mein erster Adapter, der es ermöglicht mit einem Modbusfähigen Gerät (Dali4Net) Daten aus dem Dali Bus zu erhalten aber auch zu senden.

      Der Adapter sucht im Dali Bus nach vorhandenen Geräten/Gruppen und erstellt für diese einen Datenpunkt.
      Die Szenen habe ich auf insgesamt 16 Stück begrenzt. Heißt, sie werden als Broadcast abgesendet und erreichen jedes Gerät/Gruppe, wo die jeweilige Szene aktiv ist.

      Ich hoffe, es finden sich hier im Forum der eine oder andere, der Dali Geräte nutzt und den Adapter testet. Der Adapter wurde mit dem Gerät Dali4Net von Lunatone geschrieben aber bin mir sicher, dass es da auch Alternativen gibt.

      posted in Tester
      M
      Malaus
    • RE: Conbee 2 mit Repeater? Signalstärke?

      @Pavel-R
      Steckdosen werden unter Lampen neu eingelernt.

      posted in Hardware
      M
      Malaus
    • RE: Telegram Keyboard mit callback_data (statt QWERTZ)

      @Mephist0

      Wie wäre es mit dieser Lösung?

      on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
          stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
          benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
          befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
      
          switch (befehl) {
      
              case 'Wohnzimmer':
              Wohnzimmer ();
              break;
      
              case 'Bad':
              Bad ();
              break;
      
              default:
              console.log ("Geht nicht ");
              break;
      

      Wenn "Wohnzimmer" zurück kommt tu das..usw
      Ich führe allerdings Funktionen aus.
      Ich weiß nicht, wie du das bei dir aufgebaut hast. Also was würde den bei "_WC,WC" kommen?

      posted in JavaScript
      M
      Malaus

    Latest posts made by Malaus

    • RE: CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor

      @skvarel daran habe ich gar nicht gedacht, dass der cc2531 kein zigbee 3 kann.

      • Raumsensoren mit Senseair S8 und DHT22.
      • Licht Taster für die Räume im Schaltschrank. Dadurch brauch ich nicht in jedem Raum ein Gerät als Taster, sondern fasse das im Schaltschrank zusammen. Hier hat jeder Raum ein SSR Relais (230V/5V), so kann ich die Signale mit dem Zigbee erfassen.
      • Außensensor mit DS18B20, SHTC3 und BH1750
      posted in Praktische Anwendungen (Showcase)
      M
      Malaus
    • RE: CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor

      @asgothian ich habe den im August 23 für 13€ bei Ali gekauft. Momentan findet den man auf Ali für ca. 16€

      posted in Praktische Anwendungen (Showcase)
      M
      Malaus
    • RE: CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor

      @skvarel falls es dich interessiert, ich benutze den hier mit ptvo:

      CC2530F256 USB Test Board Kit von Aliexpress

      Bildschirmfoto 2025-01-12 um 11.48.49.png

      Und seit gestern teste ich den:

      Bildschirmfoto 2025-01-12 um 11.50.17.png

      Den kannn man über usb flashen.

      posted in Praktische Anwendungen (Showcase)
      M
      Malaus
    • Proxmox iobroker volumen zu groß - wie verkleinern

      Hallo zusammen,

      ich habe unter Proxmox bemerkt, dass ioBroker mehr Speicherplatz benötigt. Leider habe ich einfach blind das Volumen vergrößert, ohne erstmal nachzuschauen, wieviel größer ich es überhaupt machen darf. Jetzt ist mehr Speicherplatz vergeben, wie vorhanden. Ich habe schon viel gegoogelt aber leider führt keine Anleitung zum Erfolg. Hoffe jemand kann mir hier helfen.

      vm-167-disk-0 ist das ioBroker lxc

      lsblk:

      NAME                                 MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
      sda                                    8:0    0 223.6G  0 disk
      ├─sda1                                 8:1    0  1007K  0 part
      ├─sda2                                 8:2    0   512M  0 part /boot/efi
      └─sda3                                 8:3    0 223.1G  0 part
        ├─pve-swap                         253:5    0     8G  0 lvm  [SWAP]
        ├─pve-root                         253:6    0  65.8G  0 lvm  /
        ├─pve-data_tmeta                   253:7    0   1.3G  0 lvm
        │ └─pve-data-tpool                 253:9    0 130.6G  0 lvm
        │   ├─pve-data                     253:10   0 130.6G  1 lvm
        │   ├─pve-vm--165--disk--0         253:11   0   150G  0 lvm
        │   ├─pve-vm--166--disk--0         253:12   0    32G  0 lvm
        │   └─pve-vm--167--disk--0         253:13   0    53G  0 lvm
        └─pve-data_tdata                   253:8    0 130.6G  0 lvm
          └─pve-data-tpool                 253:9    0 130.6G  0 lvm
            ├─pve-data                     253:10   0 130.6G  1 lvm
            ├─pve-vm--165--disk--0         253:11   0   150G  0 lvm
            ├─pve-vm--166--disk--0         253:12   0    32G  0 lvm
            └─pve-vm--167--disk--0         253:13   0    53G  0 lvm
      nvme0n1                              259:0    0 953.9G  0 disk
      ├─nvme0n1p1                          259:1    0   250G  0 part
      │ ├─windowsData-windowsData_tmeta    253:0    0   2.5G  0 lvm
      │ │ └─windowsData-windowsData-tpool  253:2    0 244.9G  0 lvm
      │ │   ├─windowsData-windowsData      253:3    0 244.9G  1 lvm
      │ │   └─windowsData-vm--165--disk--0 253:4    0   260G  0 lvm
      │ └─windowsData-windowsData_tdata    253:1    0 244.9G  0 lvm
      │   └─windowsData-windowsData-tpool  253:2    0 244.9G  0 lvm
      │     ├─windowsData-windowsData      253:3    0 244.9G  1 lvm
      │     └─windowsData-vm--165--disk--0 253:4    0   260G  0 lvm
      └─nvme0n1p2                          259:2    0 703.9G  0 part
      
      

      pvs

        PV             VG          Fmt  Attr PSize    PFree
        /dev/nvme0n1p1 windowsData lvm2 a--  <250.00g  124.00m
        /dev/nvme0n1p2 Backup      lvm2 a--  <703.87g <703.87g
        /dev/sda3      pve         lvm2 a--  <223.07g   15.99g
      
      

      lvs

        WARNING: Thin volume pve/vm-167-disk-0 maps 54.50 GiB while the size is only 53.00 GiB.
        LV            VG          Attr       LSize    Pool        Origin Data%  Meta%  Move Log Cpy%Sync Convert
        data          pve         twi-aotz--  130.63g                    100.00 4.54              
        root          pve         -wi-ao----  <65.77g                                             
        swap          pve         -wi-ao----    8.00g                                             
        vm-165-disk-0 pve         Vwi-a-tz--  150.00g data               35.48                    
        vm-166-disk-0 pve         Vwi-a-tz--   32.00g data               71.61                    
        vm-167-disk-0 pve         Vwi-a-tz--   53.00g data               100.00                   
        vm-165-disk-0 windowsData Vwi-a-tz--  260.00g windowsData        7.44                     
        windowsData   windowsData twi-aotz-- <244.88g                    7.90   0.89   
      
      posted in Proxmox
      M
      Malaus
    • RE: [Anleit.] ReverseProxy, Portfreigabe, Fritzbox unter Proxmox

      Hallo Ihr, ich habe auch nginx proxy manager direkt mit dem proxmox helper script installiert. Ich möchte das ganze nur lokal benutzen. Sobald ich nun ein Proxy Host anlege und darauf klicke, erhalte ich das Fenster "Welcome to OpenResty!".
      Muss man hier noch was einstellen?

      Ich habe parallel noch nginx proxy manager auf docker laufen und da funktioniert alles.

      posted in Proxmox
      M
      Malaus
    • RE: Proxmox ext. Festplatte schlafen & abschalten

      @martinp sorry das ich mich erst jetzt melde.
      Wenn ich das ganze über eine VM mache und die Festplatten dorthin direkt durchreiche? Dann sollte doch Proxmox erstmal egal sein, ob die Festplatte da ist oder nicht, oder verstehe ich da was falsch?

      posted in Proxmox
      M
      Malaus
    • Proxmox ext. Festplatte schlafen & abschalten

      Hallo zusammen,

      ich habe eine externe Festplatte mit Stromversorgung für meine Backups. Da die Backups nur einmal am Tag durchgeführt werden, muss die Festplatte ja nicht immer eingeschaltet sein. Dazu könnte ich ja die Steckdose schaltbar machen und kurz vor dem Backup einschalten. Aber wie mache ich es beim ausschalten? Da sollte ich diese ja am besten erstmal schlafen legen und dann erst abschalten?
      Wie sende ich diesen Befehl von ioBroker aus und erhalte als Antwort, wenn die Festplatte im Standby ist, damit ich die Steckdose ausschalten kann?

      Um eine Festplatte in den Standby Modus zu schicken, benutze ich ja folgenden Befehl

      hdparm -y /dev/sda
      

      Und den Status zu erhalten, diesen hier:

      hdparm -C /dev/sda
      
      posted in Proxmox
      M
      Malaus
    • RE: MQTT - Shelly

      @66er ich bin inzwischen wieder auf 1.1 aber das war auch nicht die Lösung.
      Mein Mosquitto hat irgendwie das Passwort vergessen. Die alten Verbindungen durften rein, aber neue nicht. Lösung hier, ein neues Passwort file anlegen. Seit dem geht es wieder.

      posted in ioBroker Allgemein
      M
      Malaus
    • RE: MQTT - Shelly

      @da_woody
      hab vergessen zu erwähnen, dass ich den Mosquitto und nicht den Shelly Adapter benutze - daher der Port 1883

      Wenn ich den MQTT Adapter als Broker einstelle, meldet sich der Shelly an. Aber eben nicht mehr an den Mosquitto Broker. Dort sind auch andere Shellys, die funktionieren aber noch nicht das Update erhalten haben.

      Vielleicht mach ich doch einen eigenen Thread auf, da das hier doch nichts mit meinem Problem zu tun hat.

      posted in ioBroker Allgemein
      M
      Malaus
    • RE: MQTT - Shelly

      Ich habe ein ähnliches Problem.
      Gestern ein Update auf 1.2 bei einem 2PM Plus gemacht und seit dem habe ich keine Verbindung mehr über MQTT.

      shos_mqtt_conn.c:601 MQTT0: Connecting to 192.168.2.245:1883 (192.168.2.245:1883)
      09:34:51
      shos_mqtt_conn.c:489 MQTT0: Connect status 5
      09:34:51
      shos_mqtt_conn.c:844 MQTT0: Connecting after 56336 ms
      09:34:51
      shos_mqtt_conn.c:844 MQTT0: Connecting after 58682 ms
      

      Das erhalte ich als Log auf dem Shelly.
      Die MQTT Einstellungen sehen so aus:
      Bildschirmfoto 2024-02-19 um 09.36.39.png

      Da kann fehlt seit dem Update der haken mit MQTT Control.

      posted in ioBroker Allgemein
      M
      Malaus
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo