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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. await is only valid in async functions ...

NEWS

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

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

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

await is only valid in async functions ...

Geplant Angeheftet Gesperrt Verschoben JavaScript
26 Beiträge 5 Kommentatoren 1.1k Aufrufe 4 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.
  • CodierknechtC Codierknecht

    @warhammer73
    Also ich habe die Zieltemperatur am HM Wandthermostat mit der Zieltemperatur des ZigBee-Thermostaten gekoppelt.
    Der ZigBee Fenstersensor liefert dem HM den Status des Fensters.
    Heating-Control steuer das Ganze über die Zeit.
    Funktioniert einwandfrei und reicht mir völlig.

    Bei der Masse Deiner Anforderungen bin ich raus ... da stehen für mich Aufwand und Nutzen nicht im richtigen Verhältnis. Und: Je komplexer ein System, desto eher geht etwas schief wenn in dem filigranen Getriebe etwas knirscht.

    W Offline
    W Offline
    warhammer73
    schrieb am zuletzt editiert von
    #21

    @codierknecht
    Naja, aus WAF Gründen brauchte ich leise Thermostate - Leiser wie die Bosch habe ich nicht gefunden, die spielen aber ohne iobroker und co. eben nur mit Bosch.

    So schlimm ist das meiste gar nicht - javascript mag nur vieles anders als die Sachen die ich gewohnt bin und da muss man manchmal um ein paar Ecken denken. :)

    CodierknechtC 1 Antwort Letzte Antwort
    0
    • W Offline
      W Offline
      warhammer73
      schrieb am zuletzt editiert von
      #22

      @Asgothian , @Paul53, @Codierknecht:
      Danke für Eure Hinweise und Ideen.

      Das ganze sieht jetzt so aus:

      function SetTemperature(room) {
          let locktime = 3600;
          locktime = locktime * 1000;
          setState(folderName + "." + room + ".Roomtemperature", current_room_temperature, true);
          setState(folderName + "." + room + ".Target_temperature", parseInt(target_temperature), true); 
          setState(folderName + "." + room + ".Thermostat_temperature", getState("alias.0." + room + ".Thermostat.ACTUAL").val, true);
          setState(folderName + "." + room + ".Thermostat", parseInt(new_temperature_value), true);
          setState(folderName + "." + room + ".Lastchange", new Date().toLocaleString(), true); 
          console.log ("Manual changed: " + getState(folderName + "." + room + ".Temperature_manual_changed").val);
          console.log ("Window: " + getState("alias.0." + room + ".Fensterkontakt.ACTUAL").val);
          if (getState("alias.0." + room + ".Fensterkontakt.ACTUAL").val == false) {
              console.log ("Set temperature to minimum");
              setState("alias.0." + room + ".Thermostat.SET", min_temperature, true); 
          }   else if (getState(folderName + "." + room + ".Temperature_manual_changed").val == true && (new Date().getTime() - changeDate.getTime()) > locktime) {
              console.log("Loop manual changed and locktime reached");
              setState(folderName + "." + room + ".Temperature_manual_changed",false, true);
          }   else if (getState(folderName + "." + room + ".Temperature_manual_changed").val == false) {
              console.log ("SetTemperatur on Thermostat: " + new_temperature_value + " based on Room temperature " + current_room_temperature + ", Thermostat_temparature " + getState("alias.0." + room + ".Thermostat.ACTUAL").val +" and target temperature " + target_temperature);
              setState("alias.0." + room + ".Thermostat.SET", new_temperature_value, true);  
          }
      }
      
      
      // Trigger für manuelle Änderungen anlegen, Testweise nur ein Raum
      for (let i=0; i<1; i++) {
          console.log("Create Trigger");
          let room = deviceName[i];
          on({id: [folderName + "." + room + ".Target_temperature_manual", "alias.0." + room + ".Thermostat.SET"], change: "any" }, function (obj) 
          { 
                  if (getState("alias.0." + room + ".Thermostat.SET").val != new_temperature_value) { 
                      console.log ("Datapoint manual changed");
                      setState(folderName + "." + room + ".Temperature_manual_changed",true,true);
                      changeDate=new Date();
                      SetTemperature(room);
                  }    
          });
          on({id: ["alias.0." + room + ".Fensterkontakt.ACTUAL"], change: "any" }, function (obj) 
          { 
                  if (getState("alias.0." + room + ".Fensterkontakt.ACTUAL").val == true) { //geschlossen
                      console.log ("Window Closed");
                      SetTemperature(room);
                  } else {
                      console.log ("Window Opened");
                      SetTemperature(room);
                  }   
          });
      }
      
      
      
      while (1) {
         ... kleine Magie zur Ist Temperaturberechnung. ;)
          SetTemperature(room);
          console.log ("Sleep for " + sleeptime + " sec");
          await sleep(sleeptime);   
      } 
      
      

      ... das Einzige was jetzt noch fehlt ist das beim Fenster schliessen der alte Wert wiederhergestellt wird - Aber erstmal morgen alles durchtesten.

      1 Antwort Letzte Antwort
      0
      • W warhammer73

        @codierknecht
        Naja, aus WAF Gründen brauchte ich leise Thermostate - Leiser wie die Bosch habe ich nicht gefunden, die spielen aber ohne iobroker und co. eben nur mit Bosch.

        So schlimm ist das meiste gar nicht - javascript mag nur vieles anders als die Sachen die ich gewohnt bin und da muss man manchmal um ein paar Ecken denken. :)

        CodierknechtC Online
        CodierknechtC Online
        Codierknecht
        Developer Most Active
        schrieb am zuletzt editiert von
        #23

        @warhammer73 sagte in await is only valid in async functions ...:

        Naja, aus WAF Gründen brauchte ich leise Thermostate - Leiser wie die Bosch habe ich nicht gefunden, die spielen aber ohne iobroker und co. eben nur mit Bosch.

        Die Fritz!Dect 301 sind ziemlich leise - zumindest im Vergleich mit Aqara E1.
        Mich stört allerdings die Reaktionszeit von bis zu 15 Minuten. Darum gebe ich die wieder ab.
        https://forum.iobroker.net/topic/61778/verkaufe-2x-fritz-dect-301-heizkörperthermostat

        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
        HmIP|ZigBee|Tasmota|Unifi
        Zabbix Certified Specialist
        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

        W 1 Antwort Letzte Antwort
        0
        • CodierknechtC Codierknecht

          @warhammer73 sagte in await is only valid in async functions ...:

          Naja, aus WAF Gründen brauchte ich leise Thermostate - Leiser wie die Bosch habe ich nicht gefunden, die spielen aber ohne iobroker und co. eben nur mit Bosch.

          Die Fritz!Dect 301 sind ziemlich leise - zumindest im Vergleich mit Aqara E1.
          Mich stört allerdings die Reaktionszeit von bis zu 15 Minuten. Darum gebe ich die wieder ab.
          https://forum.iobroker.net/topic/61778/verkaufe-2x-fritz-dect-301-heizkörperthermostat

          W Offline
          W Offline
          warhammer73
          schrieb am zuletzt editiert von
          #24

          @codierknecht
          Netter Werbungsversuch ;)

          1 Antwort Letzte Antwort
          0
          • W warhammer73

            @asgothian
            Ich versuchs mal mit Worten, weil der relevante Teil im Script ja nicht so will wie ich und es da eher ein grundlegendes Problem gibt.

            Es gibt diverse Eingangsparameter die eine Solltemperatur im Raum definieren.
            Es gibt ein Thermometer das die Ist Temperatur angibt.
            Mit diversen Sachen versucht jetzt das Script am Thermometer die Ist Temperatur zu erreichen.
            Das klappt alles soweit.
            Das ist momentan der Teil der in der Schleife läuft (Ja, kann man auch als Trigger auf die Ist Temperatur machen).
            Damit sich das Thermostat aber keinen Wolf dreht und das Script ständig Last erzeugt, soll die Regelung zwischen Ist und Soll nur zyklisch passieren (Daher der 5min Timeout)
            Das würde mit dem Script Ausschnitt auch funktionieren.

            Aber:
            Wenn jemand manuell über das Thermostat oder über die Visualisierung die Temperatur ändert soll natürlich das Script NICHT nach spätestens 5min die Einstellung wieder überschreiben. Deswegen die Idee mit dem Trigger und dem Timeout von 60min.

            Zusammengefasst also:
            Script regelt zyklisch das Thermostat und soll die Füsse für eine Stunde stillhalten wenn jemand manuell eingreift.

            An der Stelle komme ich jetzt nicht weiter wie ich die beiden Timeouts oder welche Mechanismen auch immer für die zyklische Bearbeitung und das Sperren der Bearbeitung zusammen bekomme.

            Und um es noch etwas komplizierter zu machen:
            Es gibt auch noch einen Fenster offen Sensor auf dessen Trigger natürlich das Thermostat auf min gehen soll und wenn Fester zu wieder auf den alten Wert.

            Und jetzt habe ich keine Idee wie ich diese (Im Zweifel ja drei) Trigger jetzt synchronisiert und sich gegenseitig beeinflussend bekomme.

            CodierknechtC Online
            CodierknechtC Online
            Codierknecht
            Developer Most Active
            schrieb am zuletzt editiert von
            #25

            @warhammer73 sagte in await is only valid in async functions ...:

            Es gibt auch noch einen Fenster offen Sensor auf dessen Trigger natürlich das Thermostat auf min gehen soll und wenn Fester zu wieder auf den alten Wert.

            Nur so als Anmerkung, weil ich diese Idee auch schon hatte:
            Dein Zeitplan sagt: Zwischen 07:00 und 16:00 Uhr => Komforttemperatur (z.B. 22°C).
            Um 15:55 Uhr macht jemand das Fenster auf => Runter auf Minimum und alten Wert merken.
            Wird jetzt um 16:05 Uhr das Fenster geschlossen wird, würde ein einfaches "wieder auf den alten Wert" den Zeitplan aushebeln. Muss also irgendwie berücksichtigt werden.

            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

            Proxmox 9.1.1 LXC|8 GB|Core i7-6700
            HmIP|ZigBee|Tasmota|Unifi
            Zabbix Certified Specialist
            Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

            W 1 Antwort Letzte Antwort
            0
            • CodierknechtC Codierknecht

              @warhammer73 sagte in await is only valid in async functions ...:

              Es gibt auch noch einen Fenster offen Sensor auf dessen Trigger natürlich das Thermostat auf min gehen soll und wenn Fester zu wieder auf den alten Wert.

              Nur so als Anmerkung, weil ich diese Idee auch schon hatte:
              Dein Zeitplan sagt: Zwischen 07:00 und 16:00 Uhr => Komforttemperatur (z.B. 22°C).
              Um 15:55 Uhr macht jemand das Fenster auf => Runter auf Minimum und alten Wert merken.
              Wird jetzt um 16:05 Uhr das Fenster geschlossen wird, würde ein einfaches "wieder auf den alten Wert" den Zeitplan aushebeln. Muss also irgendwie berücksichtigt werden.

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

              @codierknecht
              Richtig, ist aber ein Punkt den ich an der Stelle ignoriere.
              Warum? Die Schleife die alle X Minuten (Aktuell 10) einen neuen Wert würfelt berücksichtigt den Zeitplan.
              Der "falsche" Wert greift also maximal für die Schlafzeit des Scriptes. Für mich verkraftbar.

              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

              269

              Online

              32.4k

              Benutzer

              81.4k

              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