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. "On" Subscripton: Funktionsaufruf mit Parameter

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    558

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    622

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

"On" Subscripton: Funktionsaufruf mit Parameter

Geplant Angeheftet Gesperrt Verschoben JavaScript
14 Beiträge 5 Kommentatoren 1.3k Aufrufe 5 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.
  • V Vippis

    Hallo Leute,

    ich habe folgendes Problem. Ich möchte auf die Änderung eines Datenpunktes reagieren und nutze die "on"-Subscription im Javascript Adapter. Ich möchte je nachdem welcher Datenpunkt geändert wurde, der aufzurufenden Funktion einen Parameter übergeben.

    Wenn ich das so mache stürzt der Javascript Adapter aber ab und folgende Fehlermeldungen erscheinen im Log:

    host.iobroker
    	2024-05-16 06:39:20.796	error	Caught by controller[16]: 14: 0x16820ec [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.796	error	Caught by controller[15]: 13: 0xdd1ef0 v8::internal::Builtin_JsonParse(int, unsigned long*, v8::internal::Isolate*) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.796	error	Caught by controller[14]: 12: 0x11b9170 v8::internal::String::SlowFlatten(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ConsString>, v8::internal::AllocationType) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.796	error	Caught by controller[13]: 11: 0xeef85c v8::internal::FactoryBase<v8::internal::Factory>::NewRawOneByteString(int, v8::internal::AllocationType) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.796	error	Caught by controller[12]: 10: 0xeed4cc v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawWithImmortalMap(int, v8::internal::AllocationType, v8::internal::Map, v8::internal::AllocationAlignment) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.796	error	Caught by controller[11]: 9: 0xef6254 v8::internal::Factory::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.796	error	Caught by controller[10]: 8: 0xf140a0 v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.796	error	Caught by controller[9]: 7: 0xf130c8 v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[8]: 6: 0xf36f44 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[7]: 5: 0xf24fac [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[6]: 4: 0xd468c0 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[5]: 3: 0xd466f0 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[4]: 2: 0xa9df08 [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[3]: 1: 0xb84c6c node::Abort() [io.javascript.0]
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[2]: FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[1]: <--- JS stacktrace --->
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[1]: [736721:0x1294d850] 70354 ms: Mark-sweep 1995.6 (2096.3) -> 1994.1 (2096.5) MB, 202.1 / 0.0 ms (average mu = 0.079, current mu = 0.023) allocation failure; scavenge might not succeed
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[1]: [736721:0x1294d850] 70148 ms: Mark-sweep 1995.1 (2096.5) -> 1993.5 (2095.7) MB, 216.3 / 0.0 ms (average mu = 0.133, current mu = 0.027) allocation failure; scavenge might not succeed
    host.iobroker
    	2024-05-16 06:39:20.795	error	Caught by controller[1]: <--- Last few GCs --->
    

    Das ist mein "on"-Definition:

    const ventile=[
        {
            "name": "Rasensprenger",
            "nr": 1,
            "on": "0_userdata.0.Garten.Rasensprenger_Ein",
            "left": "0_userdata.0.Garten.Rasensprenger_Restzeit"
        },
        {
            "name": "Hecke+Steinbeet",
            "nr": 2,
            "on": "0_userdata.0.Garten.Hecke+Steinbeet_Ein",
            "left": "0_userdata.0.Garten.Hecke+Steinbeet_Restzeit"
        },
        {
            "name": "Vorgarten+Kübel",
            "nr": 3,
            "on": "0_userdata.0.Garten.Vorgaten+Kübel_Ein",
            "left": "0_userdata.0.Garten.Vorgarten+Kübel_Restzeit"
        },
        {
            "name": "Hochbeete",
            "nr": 4,
            "on": "0_userdata.0.Garten.Hochbeete_Ein",
            "left": "0_userdata.0.Garten.Hochbeete_Restzeit"
        },
        {
            "name": "Oli-Seite",
            "nr": 5,
            "on": "0_userdata.0.Garten.Oli-Seite_Ein",
            "left": "0_userdata.0.Garten.Oli-Seite_Restzeit"
        },
        {
            "name": "Dachterrasse",
            "nr": 6,
            "on": "0_userdata.0.Garten.Dachterrasse_Ein",
            "left": "0_userdata.0.Garten.Dachterrasse_Restzeit"
        }
    ]
    
    on ({id: ventile[0].on, change: 'ne'}, function(){Einschalten(ventile[0])})
    on ({id: ventile[1].on, change: 'ne'}, function(){Einschalten(ventile[1])})
    on ({id: ventile[2].on, change: 'ne'}, function(){Einschalten(ventile[2])})
    on ({id: ventile[3].on, change: 'ne'}, function(){Einschalten(ventile[3])})
    on ({id: ventile[4].on, change: 'ne'}, function(){Einschalten(ventile[4])})
    on ({id: ventile[5].on, change: 'ne'}, function(){Einschalten(ventile[5])})
    
    
    function Einschalten(ventil){
        console.log("Schalte Ventil "+ventil.name+" ein.")
        var ein = getState(ventil.on).val;
        var min = toInt(getState("0_userdata.0.Garten.Einschalten_min").val);
        var s = min * 60
        
        if (ein==true){
            var duration_value=getState(root+ventil.nr+".duration_value").val
            var i=1
            while (duration_value==null || duration_value=="null"){
               my_log(dp_log, "Starte Bewässerung "+ventil.name+"."+i+"-ter Versuch...")
               setState(root+ventil.nr+".duration_value", `${s}`) 
               sleep(10000)
               i+=1
            }
        }
        if (ein==false){
            setState(root+ventil.nr+".duration_value", "STOP_UNTIL_NEXT_TASK")
            my_log(dp_log, "Stoppe Bewässerung "+ventil.name)
        }
    }
    

    Wo ist mein Fehler?

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

    @vippis

    Zunächst mal vorweg: JS ist nicht unbedingt meine Kernkompetenz ;-)

    Aber mir fallen da ein paar Dinge auf:

    @vippis sagte in "On" Subscripton: Funktionsaufruf mit Parameter:

    der aufzurufenden Funktion einen Parameter übergeben

    Das machst Du aber nicht.
    Du rufts - wie eigentlich üblich - eine anonyme Funktion auf. Ohne Parameter - das könnte man nämlich auch so formatieren:

    on ({id: ventile[5].on, change: 'ne'}, function() {
        Einschalten(ventile[5]);
    });
    

    Deine Formatierung ist lediglich "mimified".
    Wie gesagt: Nicht meine Kernkompetenz, aber ich würde da ein Semikolon ans Ende der Zeile setzen.

    Auch den Vergleich würde ich anders formulieren:

    if (ein) {
        ...
    } else {
        ...
    }
    

    Und hinter

    console.log("Schalte Ventil "+ventil.name+" ein.")
    

    und

    var s = min * 60
    

    und einigen anderen Zeilen fehlt ein Semikolon,

    "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

    1 Antwort Letzte Antwort
    0
    • V Vippis

      Hallo Leute,

      ich habe folgendes Problem. Ich möchte auf die Änderung eines Datenpunktes reagieren und nutze die "on"-Subscription im Javascript Adapter. Ich möchte je nachdem welcher Datenpunkt geändert wurde, der aufzurufenden Funktion einen Parameter übergeben.

      Wenn ich das so mache stürzt der Javascript Adapter aber ab und folgende Fehlermeldungen erscheinen im Log:

      host.iobroker
      	2024-05-16 06:39:20.796	error	Caught by controller[16]: 14: 0x16820ec [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.796	error	Caught by controller[15]: 13: 0xdd1ef0 v8::internal::Builtin_JsonParse(int, unsigned long*, v8::internal::Isolate*) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.796	error	Caught by controller[14]: 12: 0x11b9170 v8::internal::String::SlowFlatten(v8::internal::Isolate*, v8::internal::Handle<v8::internal::ConsString>, v8::internal::AllocationType) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.796	error	Caught by controller[13]: 11: 0xeef85c v8::internal::FactoryBase<v8::internal::Factory>::NewRawOneByteString(int, v8::internal::AllocationType) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.796	error	Caught by controller[12]: 10: 0xeed4cc v8::internal::FactoryBase<v8::internal::Factory>::AllocateRawWithImmortalMap(int, v8::internal::AllocationType, v8::internal::Map, v8::internal::AllocationAlignment) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.796	error	Caught by controller[11]: 9: 0xef6254 v8::internal::Factory::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationAlignment) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.796	error	Caught by controller[10]: 8: 0xf140a0 v8::internal::HeapAllocator::AllocateRawWithRetryOrFailSlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.796	error	Caught by controller[9]: 7: 0xf130c8 v8::internal::HeapAllocator::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[8]: 6: 0xf36f44 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[7]: 5: 0xf24fac [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[6]: 4: 0xd468c0 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[5]: 3: 0xd466f0 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[4]: 2: 0xa9df08 [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[3]: 1: 0xb84c6c node::Abort() [io.javascript.0]
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[2]: FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[1]: <--- JS stacktrace --->
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[1]: [736721:0x1294d850] 70354 ms: Mark-sweep 1995.6 (2096.3) -> 1994.1 (2096.5) MB, 202.1 / 0.0 ms (average mu = 0.079, current mu = 0.023) allocation failure; scavenge might not succeed
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[1]: [736721:0x1294d850] 70148 ms: Mark-sweep 1995.1 (2096.5) -> 1993.5 (2095.7) MB, 216.3 / 0.0 ms (average mu = 0.133, current mu = 0.027) allocation failure; scavenge might not succeed
      host.iobroker
      	2024-05-16 06:39:20.795	error	Caught by controller[1]: <--- Last few GCs --->
      

      Das ist mein "on"-Definition:

      const ventile=[
          {
              "name": "Rasensprenger",
              "nr": 1,
              "on": "0_userdata.0.Garten.Rasensprenger_Ein",
              "left": "0_userdata.0.Garten.Rasensprenger_Restzeit"
          },
          {
              "name": "Hecke+Steinbeet",
              "nr": 2,
              "on": "0_userdata.0.Garten.Hecke+Steinbeet_Ein",
              "left": "0_userdata.0.Garten.Hecke+Steinbeet_Restzeit"
          },
          {
              "name": "Vorgarten+Kübel",
              "nr": 3,
              "on": "0_userdata.0.Garten.Vorgaten+Kübel_Ein",
              "left": "0_userdata.0.Garten.Vorgarten+Kübel_Restzeit"
          },
          {
              "name": "Hochbeete",
              "nr": 4,
              "on": "0_userdata.0.Garten.Hochbeete_Ein",
              "left": "0_userdata.0.Garten.Hochbeete_Restzeit"
          },
          {
              "name": "Oli-Seite",
              "nr": 5,
              "on": "0_userdata.0.Garten.Oli-Seite_Ein",
              "left": "0_userdata.0.Garten.Oli-Seite_Restzeit"
          },
          {
              "name": "Dachterrasse",
              "nr": 6,
              "on": "0_userdata.0.Garten.Dachterrasse_Ein",
              "left": "0_userdata.0.Garten.Dachterrasse_Restzeit"
          }
      ]
      
      on ({id: ventile[0].on, change: 'ne'}, function(){Einschalten(ventile[0])})
      on ({id: ventile[1].on, change: 'ne'}, function(){Einschalten(ventile[1])})
      on ({id: ventile[2].on, change: 'ne'}, function(){Einschalten(ventile[2])})
      on ({id: ventile[3].on, change: 'ne'}, function(){Einschalten(ventile[3])})
      on ({id: ventile[4].on, change: 'ne'}, function(){Einschalten(ventile[4])})
      on ({id: ventile[5].on, change: 'ne'}, function(){Einschalten(ventile[5])})
      
      
      function Einschalten(ventil){
          console.log("Schalte Ventil "+ventil.name+" ein.")
          var ein = getState(ventil.on).val;
          var min = toInt(getState("0_userdata.0.Garten.Einschalten_min").val);
          var s = min * 60
          
          if (ein==true){
              var duration_value=getState(root+ventil.nr+".duration_value").val
              var i=1
              while (duration_value==null || duration_value=="null"){
                 my_log(dp_log, "Starte Bewässerung "+ventil.name+"."+i+"-ter Versuch...")
                 setState(root+ventil.nr+".duration_value", `${s}`) 
                 sleep(10000)
                 i+=1
              }
          }
          if (ein==false){
              setState(root+ventil.nr+".duration_value", "STOP_UNTIL_NEXT_TASK")
              my_log(dp_log, "Stoppe Bewässerung "+ventil.name)
          }
      }
      

      Wo ist mein Fehler?

      haus-automatisierungH Offline
      haus-automatisierungH Offline
      haus-automatisierung
      Developer Most Active
      schrieb am zuletzt editiert von haus-automatisierung
      #4

      @vippis sagte in "On" Subscripton: Funktionsaufruf mit Parameter:

      Wo ist mein Fehler?

      Sleep liefert ein Promise zurück: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#wait

      Damit wartet Dein Script an der Stelle nie, sondern die Schleife läuft mit voller Rechenleistung. Ansonsten könntest Du das Script deutlich vereinfachen (es fehlt zwar die Hälfte vom Script, aber hier ein Beispiel):

      const ventile = {
          '0_userdata.0.Garten.Rasensprenger_Ein': {
              name: 'Rasensprenger',
              nr: 1,
              left: '0_userdata.0.Garten.Rasensprenger_Restzeit',
          },
          '0_userdata.0.Garten.Hecke+Steinbeet_Ein': {
              name: 'Hecke+Steinbeet',
              nr: 2,
              left: '0_userdata.0.Garten.Hecke+Steinbeet_Restzeit',
          },
          '0_userdata.0.Garten.Vorgaten+Kübel_Ein': {
              name: 'Vorgarten+Kübel',
              nr: 3,
              left: '0_userdata.0.Garten.Vorgarten+Kübel_Restzeit',
          },
          '0_userdata.0.Garten.Hochbeete_Ein': {
              name: 'Hochbeete',
              nr: 4,
              left: '0_userdata.0.Garten.Hochbeete_Restzeit',
          },
          '0_userdata.0.Garten.Oli-Seite_Ein': {
              name: 'Oli-Seite',
              nr: 5,
              left: '0_userdata.0.Garten.Oli-Seite_Restzeit',
          },
          '0_userdata.0.Garten.Dachterrasse_Ein': {
              name: 'Dachterrasse',
              nr: 6,
              left: '0_userdata.0.Garten.Dachterrasse_Restzeit',
          },
      };
      
      on ({ id: Object.keys(ventile), change: 'ne' }, async (obj) => {
          const ventil = ventile[obj.id];
          const isOn = obj.state.val;
      
          const durationStateId = `${root}${ventil.nr}.duration_value`;
      
          console.log(`Schalte Ventil ${ventil.name} ein.`);
      
          const min = parseInt(getState('0_userdata.0.Garten.Einschalten_min').val);
      
          const s = min * 60;
      
          if (isOn) {
              const duration_value = getState(durationStateId).val;
              let i = 1;
      
              while (duration_value == null || duration_value == "null") {
                 log(`Starte Bewässerung ${ventil.name}. ${i}-ter Versuch...`);
      
                 setState(durationStateId, String(s), true);
      
                 await sleep(10000);
                 i += 1;
              }
          } else {
              setState(durationStateId, 'STOP_UNTIL_NEXT_TASK', true);
              log(`Stoppe Bewässerung ${ventil.name}`);
          }
      });
      

      (so richtig verstehe ich die Logik dahinter noch nicht. Nur im Forum programmiert - daher kein Anspruch auf Vollständigkeit)

      🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
      🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
      📚 Meine inoffizielle ioBroker Dokumentation

      V 1 Antwort Letzte Antwort
      0
      • haus-automatisierungH haus-automatisierung

        @vippis sagte in "On" Subscripton: Funktionsaufruf mit Parameter:

        Wo ist mein Fehler?

        Sleep liefert ein Promise zurück: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#wait

        Damit wartet Dein Script an der Stelle nie, sondern die Schleife läuft mit voller Rechenleistung. Ansonsten könntest Du das Script deutlich vereinfachen (es fehlt zwar die Hälfte vom Script, aber hier ein Beispiel):

        const ventile = {
            '0_userdata.0.Garten.Rasensprenger_Ein': {
                name: 'Rasensprenger',
                nr: 1,
                left: '0_userdata.0.Garten.Rasensprenger_Restzeit',
            },
            '0_userdata.0.Garten.Hecke+Steinbeet_Ein': {
                name: 'Hecke+Steinbeet',
                nr: 2,
                left: '0_userdata.0.Garten.Hecke+Steinbeet_Restzeit',
            },
            '0_userdata.0.Garten.Vorgaten+Kübel_Ein': {
                name: 'Vorgarten+Kübel',
                nr: 3,
                left: '0_userdata.0.Garten.Vorgarten+Kübel_Restzeit',
            },
            '0_userdata.0.Garten.Hochbeete_Ein': {
                name: 'Hochbeete',
                nr: 4,
                left: '0_userdata.0.Garten.Hochbeete_Restzeit',
            },
            '0_userdata.0.Garten.Oli-Seite_Ein': {
                name: 'Oli-Seite',
                nr: 5,
                left: '0_userdata.0.Garten.Oli-Seite_Restzeit',
            },
            '0_userdata.0.Garten.Dachterrasse_Ein': {
                name: 'Dachterrasse',
                nr: 6,
                left: '0_userdata.0.Garten.Dachterrasse_Restzeit',
            },
        };
        
        on ({ id: Object.keys(ventile), change: 'ne' }, async (obj) => {
            const ventil = ventile[obj.id];
            const isOn = obj.state.val;
        
            const durationStateId = `${root}${ventil.nr}.duration_value`;
        
            console.log(`Schalte Ventil ${ventil.name} ein.`);
        
            const min = parseInt(getState('0_userdata.0.Garten.Einschalten_min').val);
        
            const s = min * 60;
        
            if (isOn) {
                const duration_value = getState(durationStateId).val;
                let i = 1;
        
                while (duration_value == null || duration_value == "null") {
                   log(`Starte Bewässerung ${ventil.name}. ${i}-ter Versuch...`);
        
                   setState(durationStateId, String(s), true);
        
                   await sleep(10000);
                   i += 1;
                }
            } else {
                setState(durationStateId, 'STOP_UNTIL_NEXT_TASK', true);
                log(`Stoppe Bewässerung ${ventil.name}`);
            }
        });
        

        (so richtig verstehe ich die Logik dahinter noch nicht. Nur im Forum programmiert - daher kein Anspruch auf Vollständigkeit)

        V Offline
        V Offline
        Vippis
        schrieb am zuletzt editiert von
        #5

        Vielen Dank für Euren Input, werde es umsetzen.

        Zurzeit macht der smartgarden Adapter aber Ärger und daher kann ich die Verbesserungen nicht überprüfen. Ich bekomme jetzt error 429 Rückmeldungen von der API, wahrscheinlich weil die while Schleife zu viele API Calls generiert hat...

        V haus-automatisierungH 2 Antworten Letzte Antwort
        0
        • V Vippis

          Vielen Dank für Euren Input, werde es umsetzen.

          Zurzeit macht der smartgarden Adapter aber Ärger und daher kann ich die Verbesserungen nicht überprüfen. Ich bekomme jetzt error 429 Rückmeldungen von der API, wahrscheinlich weil die while Schleife zu viele API Calls generiert hat...

          V Offline
          V Offline
          Vippis
          schrieb am zuletzt editiert von
          #6

          @vippis
          https://forum.iobroker.net/topic/31289/neuer-adapter-smartgarden-adapter-for-gardena-smart-system/1051

          1 Antwort Letzte Antwort
          0
          • V Vippis

            Vielen Dank für Euren Input, werde es umsetzen.

            Zurzeit macht der smartgarden Adapter aber Ärger und daher kann ich die Verbesserungen nicht überprüfen. Ich bekomme jetzt error 429 Rückmeldungen von der API, wahrscheinlich weil die while Schleife zu viele API Calls generiert hat...

            haus-automatisierungH Offline
            haus-automatisierungH Offline
            haus-automatisierung
            Developer Most Active
            schrieb am zuletzt editiert von
            #7

            @vippis sagte in "On" Subscripton: Funktionsaufruf mit Parameter:

            Ich bekomme jetzt error 429

            Heißt: 429 Too Many Requests

            🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
            🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
            📚 Meine inoffizielle ioBroker Dokumentation

            V 1 Antwort Letzte Antwort
            0
            • haus-automatisierungH haus-automatisierung

              @vippis sagte in "On" Subscripton: Funktionsaufruf mit Parameter:

              Ich bekomme jetzt error 429

              Heißt: 429 Too Many Requests

              V Offline
              V Offline
              Vippis
              schrieb am zuletzt editiert von
              #8

              @haus-automatisierung

              Ja genau, das habe ich auch schon herausgefunden. Weißt du wie man da rauskommt oder hilft nur warten?

              Hab schon eine Anfrage an feedback@developer.husqvarnagroup.cloud gesendet

              haus-automatisierungH 1 Antwort Letzte Antwort
              0
              • V Vippis

                @haus-automatisierung

                Ja genau, das habe ich auch schon herausgefunden. Weißt du wie man da rauskommt oder hilft nur warten?

                Hab schon eine Anfrage an feedback@developer.husqvarnagroup.cloud gesendet

                haus-automatisierungH Offline
                haus-automatisierungH Offline
                haus-automatisierung
                Developer Most Active
                schrieb am zuletzt editiert von
                #9

                @vippis sagte in "On" Subscripton: Funktionsaufruf mit Parameter:

                Weißt du wie man da rauskommt oder hilft nur warten?

                Das weiß nur der Serverbetreiber. Normalerweise sind die Rate Limits für so eine API öffentlich dokumentiert. Gibt es da nix?

                🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                📚 Meine inoffizielle ioBroker Dokumentation

                ice987I 1 Antwort Letzte Antwort
                0
                • haus-automatisierungH haus-automatisierung

                  @vippis sagte in "On" Subscripton: Funktionsaufruf mit Parameter:

                  Weißt du wie man da rauskommt oder hilft nur warten?

                  Das weiß nur der Serverbetreiber. Normalerweise sind die Rate Limits für so eine API öffentlich dokumentiert. Gibt es da nix?

                  ice987I Offline
                  ice987I Offline
                  ice987
                  schrieb am zuletzt editiert von
                  #10

                  bei der Automower Connect API gilt:

                  Limits
                  The following limitations currently apply to the Automower Connect API:
                  Max 1 request per second and appKey.
                  Max 10 000 request per month and appKey.
                  Any additional requests above these limits will be throttled.

                  https://developer.husqvarnagroup.cloud/apis/automower-connect-api?tab=readme

                  ist ggf. bei Gardena gleich/ähnlich.

                  husqvarna-automower, meteoblue, wiserbyfeller, spritmonitor

                  V 1 Antwort Letzte Antwort
                  0
                  • ice987I ice987

                    bei der Automower Connect API gilt:

                    Limits
                    The following limitations currently apply to the Automower Connect API:
                    Max 1 request per second and appKey.
                    Max 10 000 request per month and appKey.
                    Any additional requests above these limits will be throttled.

                    https://developer.husqvarnagroup.cloud/apis/automower-connect-api?tab=readme

                    ist ggf. bei Gardena gleich/ähnlich.

                    V Offline
                    V Offline
                    Vippis
                    schrieb am zuletzt editiert von
                    #11

                    @ice987

                    On average one call every fifteen minutes.

                    700 requests per week.

                    10 requests per 10-second interval.

                    https://developer.husqvarnagroup.cloud/apis/gardena-smart-system-api?tab=readme

                    1 Antwort Letzte Antwort
                    0
                    • V Offline
                      V Offline
                      Vippis
                      schrieb am zuletzt editiert von
                      #12

                      Wie könnte man effektiv die API calls monitoren, damit ich die Limits nicht reiße?

                      Die Calls sollen dann entsprechend delayed werden und eine Ausgabe erfolgen?

                      Ist das eher was für mein Anwenderskript oder für @jpgorganizer Adapter?

                      haus-automatisierungH 1 Antwort Letzte Antwort
                      0
                      • V Vippis

                        Wie könnte man effektiv die API calls monitoren, damit ich die Limits nicht reiße?

                        Die Calls sollen dann entsprechend delayed werden und eine Ausgabe erfolgen?

                        Ist das eher was für mein Anwenderskript oder für @jpgorganizer Adapter?

                        haus-automatisierungH Offline
                        haus-automatisierungH Offline
                        haus-automatisierung
                        Developer Most Active
                        schrieb am zuletzt editiert von
                        #13

                        @vippis sagte in "On" Subscripton: Funktionsaufruf mit Parameter:

                        Wie könnte man effektiv die API calls monitoren, damit ich die Limits nicht reiße?

                        Die meisten APIs liefern in jedem Response auch die restlichen rateLimits mit. Dann weiß man schon, ob man noch Luft hat und wieviele Anfragen verbleiben.

                        Ist aber sehr individuell. Ich würde einfach mal einen Response genauer anschauen, ob etwas in die Richtung enthalten ist.

                        🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                        🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                        📚 Meine inoffizielle ioBroker Dokumentation

                        1 Antwort Letzte Antwort
                        0
                        • V Offline
                          V Offline
                          Vippis
                          schrieb am zuletzt editiert von
                          #14

                          Ich hab mir unter https://developer.husqvarnagroup.cloud einen frischen API Key erzeugt und bekomme jetzt keinen error 429 mehr

                          1 Antwort Letzte Antwort
                          1
                          Antworten
                          • In einem neuen Thema antworten
                          Anmelden zum Antworten
                          • Älteste zuerst
                          • Neuste zuerst
                          • Meiste Stimmen


                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          539

                          Online

                          32.6k

                          Benutzer

                          81.9k

                          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