Navigation

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

    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

    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 3
    • Best 0
    • Groups 1

    zaunermax

    @zaunermax

    Starter

    0
    Reputation
    6
    Profile views
    3
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    zaunermax Follow
    Starter

    Latest posts made by zaunermax

    • RE: Selektor $ Datenpunkte refresh Problem

      @paul53 Ja so in etwa hätte ich das gemacht, nur gibts dann das Problem, dass beim Skript restart wieder die "alten" Datenpunkte auftauchen, also hätte ich einmal alle 5 Alarme gelöscht und 3 neue hinzugefügt, so würde der $ mir die 5 alten bereits gelöschten datenpunkte liefern, solange, bis ich den ganzen JS adapter restarte.

      Da hilfts ja auch nicht, wenn ich mir die Datenpunkte zwischendurch merke, weil ich ja während dem Development das script auch manchmal neu starten muss.

      posted in JavaScript
      zaunermax
      zaunermax
    • RE: [Neu] Diverse async-Funktionen im JavaScript-Adapter

      Mega nice, ich werde gleich alle meine synchronen calls auswechseln. Ich hab sogar vorher einen primitiven Promise wrapper gehabt, aber nativ das ganze zu haben ist sehr geil 🙌

      posted in JavaScript
      zaunermax
      zaunermax
    • Selektor $ Datenpunkte refresh Problem

      Hi Leute, dies ist mein erster Post, wenn also was nicht ganz konform ist pls have mercy 😜

      Zu aller erst einmal mein usecase:

      Ich möchte ein Skript schreiben, dass auf einen Channel schaut und darauf reagiert, wenn neue Objekte angelegt werden. In dem Fall ein Alexa Device, welches im Channel Alarms die Alarme drin hat. Wenn ich das Skript starte, soll es also alle Datenpunkte im Alarm Channel durchsehen, ob es einen aktiven Alarm gibt. Wenn ja soll ein schedule erstellt werden, der mir das Licht schon 30 Min vor dem Wecker an macht.

      Das Problem

      Jetzt ist mit beim Verwenden des $ selektors aber aufgefallen, dass dieser einmal beim JS-Adapter restart alle Objekte zu merken scheint und sich danach nicht mehr updated. Wenn ich also einen Alarm lösche oder einen neuen hinzufüge, merkt dies der $ Selektor nicht. Sogar wenn ich das Skript neu starte, erkennt der Selektor die neuen Werte nicht. Erst bei einem kompletten Adapter restart werden die neuen Werte erkannt.

      Ist das per design so? Gibts da einen Workaround?

      Trying to fix it

      Wenn ich nun die on() subscribe Funktion mit einer Regex verwende, geht dies einwandfrei neue noch nicht existierende Objekte zu erkennen. Jedoch kann die on methode ja nicht bei script start schon alle Alarme des devices durchsehen, sondern nur auf changes reagieren 🤔

      Let's see the code

      Ich denke ein paar Zeilen code sagen mehr als 1000 worte, deswegen hier mein Skript code:

      const timeSelector = $(`channel[state.id=${ECHO_ALARM_PFAD}.*.time]`);
      
      // gibt mir nur die alarme aus, die zum JS-Adapter restart verfügbar waren
      timeSelector.each(async (val) => {
          const enabledId = val.replace('time', 'enabled');
          const devicePath = val.replace('.time', '');
      
          const enabled = (await getStateAsync(enabledId)).val;
          const time = (await getStateAsync(val)).val.split(':');
          
          removeOrRefreshSchedule(devicePath, time, enabled);
      });
      

      Was allerdings schon funzt ist, wenn das script mal läuft, dann kann ich mit der on Funktion auf neu hinzugefügte Alarme sehr wohl reagieren, doch das problem ist, sobald man das Script restarted, werden die neuen Alarme wieder gelöscht, weil die Datenpunkte ja erst im nachhinein hinzugefügt wurden 🤔

      // das hier funzt einwandfrei wenn man neue datenpunkte added/removed
      on({ id: enabledRegex, change: 'ne' }, async ({ id, state: { val } }) => {
          const timeId = id.replace('enabled', 'time');
          const devicePath = id.replace('.enabled', '');
      
          const time = (await getStateAsync(timeId)).val.split(':');
      
          removeOrRefreshSchedule(devicePath, time, val);
      });
      

      Vielen Dank im Voraus schon mal für eure Antworten 🙌

      posted in JavaScript
      zaunermax
      zaunermax
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo