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. [Gelöst] Auf Sonnenstand reagieren mit beschreibbarer Variable

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.3k

[Gelöst] Auf Sonnenstand reagieren mit beschreibbarer Variable

Geplant Angeheftet Gesperrt Verschoben JavaScript
31 Beiträge 3 Kommentatoren 2.0k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • HomoranH Homoran

    @paul53 sagte in [Hilfe] Auf Sonnenstand reagieren mit beschreibbarer Variable:

    Ändere es bitte auch in der Doku (s.o), da sonst sicherlich weitere Neulinge darüber stolpern.

    Gerne.

    Hast du mal das komplette Skript?
    Nach der Änderung meckert es jetzt noch mehr.

    14:16:27.777	warn	javascript.0 at Sonnenstand_berechnen (script.js.Wetter_und_Klima.Sonnenstand:30:7)
    14:16:27.777	warn	javascript.0 at script.js.Wetter_und_Klima.Sonnenstand:38:2
    14:16:27.777	warn	javascript.0 at Sonnenstand_berechnen (script.js.Wetter_und_Klima.Sonnenstand:31:7)
    14:16:27.777	warn	javascript.0 at script.js.Wetter_und_Klima.Sonnenstand:38:2
    

    EDIT:
    Mein Fehler. Habe die Zeilen komplett ohne Prüfung übernommen.
    Der Pfad stimmte so natürlich nicht

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

    @Homoran sagte:

    Hast du mal das komplette Skript?

    const suncalc = require('suncalc');
    const result = getObject("system.adapter.javascript.0");
    const lat = result.native.latitude;
    const long = result.native.longitude;
    const idEle = 'Sonnenstand.Elevation';
    const idAzi = 'Sonnenstand.Azimut';
     
    createState(idEle, 0, {type: 'number', unit: '°'});
    createState(idAzi, 0, {type: 'number', unit: '°'});
     
    function Sonnenstand_berechnen () {
        var now = new Date();
        var sunpos = suncalc.getPosition(now, lat, long);
        var h = sunpos.altitude * 180 / Math.PI;
        var a = sunpos.azimuth * 180 / Math.PI + 180;
        setState(idEle, Math.round(10 * h) / 10, true);
        setState(idAzi, Math.round(a), true);
    }
    
    schedule("* * * * *", Sonnenstand_berechnen); // jede Minute
    

    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

    HomoranH 1 Antwort Letzte Antwort
    0
    • paul53P paul53

      @Homoran sagte:

      Hast du mal das komplette Skript?

      const suncalc = require('suncalc');
      const result = getObject("system.adapter.javascript.0");
      const lat = result.native.latitude;
      const long = result.native.longitude;
      const idEle = 'Sonnenstand.Elevation';
      const idAzi = 'Sonnenstand.Azimut';
       
      createState(idEle, 0, {type: 'number', unit: '°'});
      createState(idAzi, 0, {type: 'number', unit: '°'});
       
      function Sonnenstand_berechnen () {
          var now = new Date();
          var sunpos = suncalc.getPosition(now, lat, long);
          var h = sunpos.altitude * 180 / Math.PI;
          var a = sunpos.azimuth * 180 / Math.PI + 180;
          setState(idEle, Math.round(10 * h) / 10, true);
          setState(idAzi, Math.round(a), true);
      }
      
      schedule("* * * * *", Sonnenstand_berechnen); // jede Minute
      
      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #15

      @paul53
      Danke!

      Das hast du ja mal wieder massiv verschlankt ;-)

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      paul53P 1 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @paul53
        Danke!

        Das hast du ja mal wieder massiv verschlankt ;-)

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

        @Homoran sagte:

        Das hast du ja mal wieder massiv verschlankt

        Nein, nur die Logs entfernt, dafür aber Konstanten als solche deklariert und den Datenpunkttyp "number" mitgegeben.

        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

        1 Antwort Letzte Antwort
        0
        • W webseb79

          @paul53
          Jetzt drehe ich mich im Kreis.

          Also vom Sonnenstands Script beide Variablen in String und meine beschreibbare Variable in String schaltet das Licht ein.
          Da meckert aber das Sonnenstands Script wegen "Number".
          Stelle ich auf Number um ist das Sonnenstandsscript in Ordnung aber mein Licht schaltet nicht.
          Meine beschreibbare Variable auf "Number" geändert und trotzdem kein einschalten

          Ich verzweifle gerade.

          Sebastian

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

          @webseb79 sagte:

          Meine beschreibbare Variable auf "Number" geändert und trotzdem kein einschalten

          Stimmt der Datentyp ?

          log('Typ Grenzwert: ' + typeof gwElevation);
          

          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

          W 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @webseb79 sagte:

            Meine beschreibbare Variable auf "Number" geändert und trotzdem kein einschalten

            Stimmt der Datentyp ?

            log('Typ Grenzwert: ' + typeof gwElevation);
            
            W Offline
            W Offline
            webseb79
            schrieb am zuletzt editiert von
            #18

            @paul53

            Jetzt ist Grenzwert Typ "Number" und Elevation auch Typ "Number"

            paul53P 1 Antwort Letzte Antwort
            0
            • W webseb79

              @paul53

              Jetzt ist Grenzwert Typ "Number" und Elevation auch Typ "Number"

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

              @webseb79 Dann sollte es funktionieren. Wie sieht das komplette Skript jetzt aus ?

              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

              W 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @webseb79 Dann sollte es funktionieren. Wie sieht das komplette Skript jetzt aus ?

                W Offline
                W Offline
                webseb79
                schrieb am zuletzt editiert von webseb79
                #20

                @paul53

                createState('javascript.0.Zeiten.Treppenlicht.Elevation', -0.5 , {type:"number", role:"javascript"});
                
                var idt3 = 'javascript.0.Zeiten.Treppenlicht.Elevation';
                
                var idElevation = getState(idt3).val;
                
                
                
                on({
                    id: "javascript.0.Global.Sonnenstand.Elevation"/*Global.Sonnenstand.Elevation*/,
                    change: "ne",
                    valLe: idElevation,  
                    oldValGt: idElevation,   
                    logic: "and"
                }, function (obj) {
                   Treppenlicht_an_Sonnenuntergang();
                });
                
                function Treppenlicht_an_Sonnenuntergang() {
                
                    if      (getState("radar.0.G-Tag-Claudia.here"/*G-Tag-Claudia.here*/).val === false 
                        &&   getState("radar.0.G-Tag-Sebastian.here"/*G-Tag-Sebastian.here*/).val === false ) 
                            
                            { return; }
                    
                    if      (getState("knx.0.Licht.Licht-Status.OG-Schlafzimmer-Treppenleuchte-Schalten-Status"/*OG-Schlafzimmer-Treppenleuchte-Schalten-Status*/).val === 1) 
                            
                            { return; }
                    
                            event("Schlafzimmer...Treppenbeleuchtung zum Sonnenuntergang eingeschalten","Allgemein","white");
                            setState ("knx.0.Licht.Licht-Schalten.OG-Schlafzimmer-Treppenleuchte-Schalten"/*OG-Schlafzimmer-Treppenleuchte-Schalten*/, 1);
                }
                

                Wie schon erwähnt ... Typ String und alles lief.

                Sebastian

                paul53P 1 Antwort Letzte Antwort
                0
                • W webseb79

                  @paul53

                  createState('javascript.0.Zeiten.Treppenlicht.Elevation', -0.5 , {type:"number", role:"javascript"});
                  
                  var idt3 = 'javascript.0.Zeiten.Treppenlicht.Elevation';
                  
                  var idElevation = getState(idt3).val;
                  
                  
                  
                  on({
                      id: "javascript.0.Global.Sonnenstand.Elevation"/*Global.Sonnenstand.Elevation*/,
                      change: "ne",
                      valLe: idElevation,  
                      oldValGt: idElevation,   
                      logic: "and"
                  }, function (obj) {
                     Treppenlicht_an_Sonnenuntergang();
                  });
                  
                  function Treppenlicht_an_Sonnenuntergang() {
                  
                      if      (getState("radar.0.G-Tag-Claudia.here"/*G-Tag-Claudia.here*/).val === false 
                          &&   getState("radar.0.G-Tag-Sebastian.here"/*G-Tag-Sebastian.here*/).val === false ) 
                              
                              { return; }
                      
                      if      (getState("knx.0.Licht.Licht-Status.OG-Schlafzimmer-Treppenleuchte-Schalten-Status"/*OG-Schlafzimmer-Treppenleuchte-Schalten-Status*/).val === 1) 
                              
                              { return; }
                      
                              event("Schlafzimmer...Treppenbeleuchtung zum Sonnenuntergang eingeschalten","Allgemein","white");
                              setState ("knx.0.Licht.Licht-Schalten.OG-Schlafzimmer-Treppenleuchte-Schalten"/*OG-Schlafzimmer-Treppenleuchte-Schalten*/, 1);
                  }
                  

                  Wie schon erwähnt ... Typ String und alles lief.

                  Sebastian

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

                  @webseb79 sagte:

                  Wie schon erwähnt ... Typ String und alles lief.

                  Ein Stringvergleich (im Trigger) dürfte Probleme machen (bei negativen Werten).

                  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

                  W 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @webseb79 sagte:

                    Wie schon erwähnt ... Typ String und alles lief.

                    Ein Stringvergleich (im Trigger) dürfte Probleme machen (bei negativen Werten).

                    W Offline
                    W Offline
                    webseb79
                    schrieb am zuletzt editiert von
                    #22

                    @paul53
                    Zu dem Zeitpunkt war der Sonnenstand ja positiv...also kannst du rechthaben.
                    Das Script läuft ja schon einige Zeit, nur 2 Dinge wurden verändert

                        valLe: -0.5,  
                        oldValGt: -0.5, 
                    auf
                    
                        valLe: idElevation,  
                        oldValGt: idElevation, 
                    

                    Wie kann ich die feste vergebene Zahl nun flexibel über Vis steuern?

                    paul53P 1 Antwort Letzte Antwort
                    0
                    • W webseb79

                      @paul53
                      Zu dem Zeitpunkt war der Sonnenstand ja positiv...also kannst du rechthaben.
                      Das Script läuft ja schon einige Zeit, nur 2 Dinge wurden verändert

                          valLe: -0.5,  
                          oldValGt: -0.5, 
                      auf
                      
                          valLe: idElevation,  
                          oldValGt: idElevation, 
                      

                      Wie kann ich die feste vergebene Zahl nun flexibel über Vis steuern?

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

                      @webseb79 sagte:

                      Wie kann ich die feste vergebene Zahl nun flexibel über Vis steuern?

                      Zusätzlich:

                      on(idt3, function(dp) {
                         idElevation = 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

                      W 1 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        @webseb79 sagte:

                        Wie kann ich die feste vergebene Zahl nun flexibel über Vis steuern?

                        Zusätzlich:

                        on(idt3, function(dp) {
                           idElevation = dp.state.val;
                        });
                        
                        W Offline
                        W Offline
                        webseb79
                        schrieb am zuletzt editiert von
                        #24

                        @paul53

                        Da bin ich jetzt überfragt wohin das noch soll.
                        Deine on - Anweisung sagt doch nur das wenn sich idt3 ändert dieser Wert in idElevation geschoben wird , oder?
                        Ich triggere doch auf den ständig veränderten Sonnenstand.

                        Sebastian

                        paul53P 1 Antwort Letzte Antwort
                        0
                        • W webseb79

                          @paul53

                          Da bin ich jetzt überfragt wohin das noch soll.
                          Deine on - Anweisung sagt doch nur das wenn sich idt3 ändert dieser Wert in idElevation geschoben wird , oder?
                          Ich triggere doch auf den ständig veränderten Sonnenstand.

                          Sebastian

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

                          @webseb79 sagte:

                          das wenn sich idt3 ändert dieser Wert in idElevation geschoben wird , oder?

                          Richtig. Das genau wolltest Du doch: Wenn der Wert in Vis geändert wird, kommt diese Änderung auch im Skript an, ohne dass das Skript neu gestartet werden muss.

                          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

                          W 1 Antwort Letzte Antwort
                          0
                          • paul53P paul53

                            @webseb79 sagte:

                            das wenn sich idt3 ändert dieser Wert in idElevation geschoben wird , oder?

                            Richtig. Das genau wolltest Du doch: Wenn der Wert in Vis geändert wird, kommt diese Änderung auch im Skript an, ohne dass das Skript neu gestartet werden muss.

                            W Offline
                            W Offline
                            webseb79
                            schrieb am zuletzt editiert von
                            #26

                            @paul53

                            Deine letzte Anweisung

                            on(idt3, function(dp) {
                            
                               idElevation = dp.state.val;
                            
                            });
                            

                            hatte ich vorhin noch nicht und dort ging es doch schon wie ich es wollte , halt nur mit dem Datentyp "String" als Variable von Vis kommend und vergleichend vom Sonnenstandsscript die Variable kommend auch als "String".
                            Nur dann kam doch die Meldung vom Sonnenstandsscript das es ein Datentyp "Number" verlangt.

                            paul53P 1 Antwort Letzte Antwort
                            0
                            • W webseb79

                              @paul53

                              Deine letzte Anweisung

                              on(idt3, function(dp) {
                              
                                 idElevation = dp.state.val;
                              
                              });
                              

                              hatte ich vorhin noch nicht und dort ging es doch schon wie ich es wollte , halt nur mit dem Datentyp "String" als Variable von Vis kommend und vergleichend vom Sonnenstandsscript die Variable kommend auch als "String".
                              Nur dann kam doch die Meldung vom Sonnenstandsscript das es ein Datentyp "Number" verlangt.

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

                              @webseb79 sagte:

                              hatte ich vorhin noch nicht und dort ging es doch schon wie ich es wollte

                              Ohne den Trigger wird der Wert nur bei Skriptstart aktualisiert und bleibt dann konstant, egal was in Vis geändert wird.

                              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

                              W 1 Antwort Letzte Antwort
                              0
                              • paul53P paul53

                                @webseb79 sagte:

                                hatte ich vorhin noch nicht und dort ging es doch schon wie ich es wollte

                                Ohne den Trigger wird der Wert nur bei Skriptstart aktualisiert und bleibt dann konstant, egal was in Vis geändert wird.

                                W Offline
                                W Offline
                                webseb79
                                schrieb am zuletzt editiert von
                                #28

                                @paul53
                                Ok ... zum laufen bekomme ich das nicht.
                                Gibt es eine andere Variante um zum Ziel zu kommen?
                                Eine angelegte Variable in Instanz.0 durch Vis beschreibbar vergleicht den Elevation Wert des Sonnenstandes und löst eine Funktion aus beim unterschreiten als 1.Beispiel und beim Überschreiten als 2.Beispiel.
                                Hast du da eine Idee Paul53

                                Danke Sebastian

                                1 Antwort Letzte Antwort
                                0
                                • paul53P Offline
                                  paul53P Offline
                                  paul53
                                  schrieb am zuletzt editiert von
                                  #29

                                  Vorschlag:

                                  const idGrenzwert = 'javascript.0.Zeiten.Treppenlicht.Elevation';
                                  const idElevation = "javascript.0.Global.Sonnenstand.Elevation"/*Global.Sonnenstand.Elevation*/;
                                  
                                  createState(idGrenzwert, -0.5, {type: 'number', unit: '°'});
                                  
                                  var gwElevation = parseFloat(getState(idGrenzwert).val);
                                  on(idGrenzwert, function(dp) {
                                     gwElevation = parseFloat(dp.state.val);
                                  });
                                  
                                  on(idElevation, function(dp) {
                                     if(dp.state.val <= gwElevation && dp.oldState.val > gwElevation) {
                                        // Aktion bei Unterschreiten Grenzwert
                                     }
                                     if(dp.state.val >= gwElevation && dp.oldState.val < gwElevation) {
                                        // Aktion bei Überschreiten Grenzwert
                                     }
                                  });
                                  

                                  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

                                  W 1 Antwort Letzte Antwort
                                  0
                                  • paul53P paul53

                                    Vorschlag:

                                    const idGrenzwert = 'javascript.0.Zeiten.Treppenlicht.Elevation';
                                    const idElevation = "javascript.0.Global.Sonnenstand.Elevation"/*Global.Sonnenstand.Elevation*/;
                                    
                                    createState(idGrenzwert, -0.5, {type: 'number', unit: '°'});
                                    
                                    var gwElevation = parseFloat(getState(idGrenzwert).val);
                                    on(idGrenzwert, function(dp) {
                                       gwElevation = parseFloat(dp.state.val);
                                    });
                                    
                                    on(idElevation, function(dp) {
                                       if(dp.state.val <= gwElevation && dp.oldState.val > gwElevation) {
                                          // Aktion bei Unterschreiten Grenzwert
                                       }
                                       if(dp.state.val >= gwElevation && dp.oldState.val < gwElevation) {
                                          // Aktion bei Überschreiten Grenzwert
                                       }
                                    });
                                    
                                    W Offline
                                    W Offline
                                    webseb79
                                    schrieb am zuletzt editiert von
                                    #30

                                    @paul53

                                    Vielen Dank Paul53 !
                                    Ich glaube wir hätten die ganze Sache schon viel früher lösen können mit deinem Vorschlag.
                                    Ich muss auch sagen das du richtig gut im Stoff stehst was Javascript angeht.
                                    Ich lese ja ziemlich viel hier mit Tag täglich und du bist eigentlich bei vielen Lösungen mit present.
                                    Mach weiter so.

                                    Danke

                                    Sebastian

                                    paul53P 1 Antwort Letzte Antwort
                                    0
                                    • W webseb79

                                      @paul53

                                      Vielen Dank Paul53 !
                                      Ich glaube wir hätten die ganze Sache schon viel früher lösen können mit deinem Vorschlag.
                                      Ich muss auch sagen das du richtig gut im Stoff stehst was Javascript angeht.
                                      Ich lese ja ziemlich viel hier mit Tag täglich und du bist eigentlich bei vielen Lösungen mit present.
                                      Mach weiter so.

                                      Danke

                                      Sebastian

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

                                      @webseb79 sagte:

                                      Ich glaube wir hätten die ganze Sache schon viel früher lösen können mit deinem Vorschlag.

                                      Das Sonnenstandsskript musste auch für den richtigen Datenpunkttyp korrigiert werden.

                                      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

                                      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

                                      842

                                      Online

                                      32.4k

                                      Benutzer

                                      81.5k

                                      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