Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [GELÖST] Abfrage anhand der aktuellen Uhrzeit

    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

    [GELÖST] Abfrage anhand der aktuellen Uhrzeit

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

      Hi,

      ich habe da mal eine Frage an die javascript Profis.

      Ich habe folgendes script geschrieben:

      function temp() {
      
          debug = true;
      
          createState('javascript.0.Wetter.Temp_akt', 0);
      
      if (compareTime('00:00', '01:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.0h.Temperature").val, true);
      }
      if (compareTime('01:00', '02:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.1h.Temperature").val, true);
      }
      if (compareTime('02:00', '03:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.2h.Temperature").val, true);
      }
      if (compareTime('03:00', '04:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.3h.Temperature").val, true);
      }
      if (compareTime('04:00', '05:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.4h.Temperature").val, true);
      }
      if (compareTime('05:00', '06:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.5h.Temperature").val, true);
      }
      if (compareTime('06:00', '07:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.6h.Temperature").val, true);
      }
      if (compareTime('07:00', '08:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.7h.Temperature").val, true);
      }
      if (compareTime('08:00', '09:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.8h.Temperature").val, true);
      }
      if (compareTime('09:00', '10:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.2h.Temperature").val, true);
      }
      if (compareTime('10:00', '11:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.10h.Temperature").val, true);
      }
      if (compareTime('11:00', '12:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.11h.Temperature").val, true);
      }
      if (compareTime('12:00', '13:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.12h.Temperature").val, true);
      }
      if (compareTime('13:00', '14:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.13h.Temperature").val, true);
      }
      if (compareTime('14:00', '15:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.14h.Temperature").val, true);
      }
      if (compareTime('15:00', '16:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.15h.Temperature").val, true);
      }
      if (compareTime('16:00', '17:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.16h.Temperature").val, true);
      }
      if (compareTime('17:00', '18:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.17h.Temperature").val, true);
      }
      if (compareTime('18:00', '19:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.18h.Temperature").val, true);
      }
      if (compareTime('19:00', '20:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.19h.Temperature").val, true);
      }
      if (compareTime('20:00', '21:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.20h.Temperature").val, true);
      }
      if (compareTime('21:00', '22:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.21h.Temperature").val, true);
      }
      if (compareTime('22:00', '23:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.22h.Temperature").val, true);
      }
      if (compareTime('23:00', '24:00', "between", null)) {
        setState("javascript.0.Wetter.Temp_akt"/*Temp_akt*/, getState("daswetter.0.hourly.0d.23h.Temperature").val, true);
      }
      
      }  // Ende temp()
      
      schedule('* * * * *', temp);
      

      Ziel des script ist es, mit der aktuellen Uhrzeit das passende state "Temperature" zu finden und in mein neues state "Temp_akt" zu schreiben.

      Nun meine Frage, kann mann das vereinfachen bzw. anders Lösen?

      Bin noch ganz am Anfang was javascript betrifft… 😉

      Gruß,

      Tom

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

        Der ID-String für die Quelle kann aus der Stunde der aktuellen Uhrzeit und einem String davor und einem danach gebildet werden.

        const start = 'daswetter.0.hourly.0d.';
        const end = 'h.Temperature';
        
        createState('javascript.0.Wetter.Temp_akt', 0, {type: 'number', unit: '°C'});
        
        function temp() {
           var hour = new Date().getHours();
           setState("javascript.0.Wetter.Temp_akt", getState(start + hour + end).val, true);
        }
        
        schedule('* * * * *', temp);  // Weshalb jede Minute ?
        
        
        1 Reply Last reply Reply Quote 0
        • T
          tomdeboom last edited by

          Guten Morgen Paul,

          vielen lieben Dank für die tolle Unterstützung!

          Das kann ich noch für viele Abfragen nutzen und ich habe wieder was neues gelernt. 😄

          Die Abfrage im Minutentakt hatte ich nur aus Testzwecken so drin. 😉

          Was ich noch nicht so ganz bei cron verstehe, ist der Start zu jeder volle Stunde, also 14, 15 und 16:00Uhr, ist das dann "0 * * * *" oder sagt das dann nur führe es jede Stunde nach cron Start aus?

          Also nochmals vielen Dank für die Unterstützung.

          Schöne Ostern noch und Gruß,

          Tom

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

            @tomdeboom:

            ist der Start zu jeder volle Stunde, also 14, 15 und 16:00Uhr, ist das dann "0 * * * *" `
            Ja. Ich würde allerdings die Abfrage eine Minute später machen: "1 * * * *".

            Setze bitte das Thema auf gelöst (im Betreff des ersten Beitrags).

            1 Reply Last reply Reply Quote 0
            • T
              tomdeboom last edited by

              Danke

              Gruß,

              Tom

              1 Reply Last reply Reply Quote 0
              • T
                tomdeboom last edited by

                Hallo Paul,

                eine Frage hätte ich noch?

                Was bedeutet diese Fehlermeldung, so ganz werde ich daraus nicht schlau?
                5104_warn.jpg

                Gruß,

                Tom

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

                  Der Quell-Datenpunkt liefert offenbar die Temperatur als String. Dann ergänze bitte um parseFloat().

                     setState("javascript.0.Wetter.Temp_akt", parseFloat(getState(start + hour + end).val), true);
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • T
                    tomdeboom last edited by

                    Hallo Paul,

                    danke für die schnelle hilfe, ich hatte das zwischen durch schon gefunden, aber die zweite Klammer falsch gesetzt… :lol:

                    Jetzt funktioniert es.

                    Danke und Gruß,

                    Tom

                    1 Reply Last reply Reply Quote 0
                    • Mic
                      Mic Developer last edited by

                      Danke für das Skript, ich habe auf Basis der Idee folgendes fertige Script erstellt:

                      viewtopic.php?f=30&t=13795&p=189246#p189246

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

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      551
                      Online

                      31.9k
                      Users

                      80.2k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      1914
                      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