NEWS

[gelöst] Subscription auf Sub-Channel Änderung?


  • Moin !

    Kann ich eine Subscription erzeugen in JavaScript um auf das erstellen eines Channels zu reagieren?
    Ich versuche damit gerade dem Spotify Adapter ein paar Probleme abzugewöhnen ...

    Ich habe folgendes Object (Channel): spotify-premium.0.devices
    Wenn dort jetzt ein Sub-Channel (im Beispiel Channel1 oder Channel2) eingefügt oder gelöscht wird würde ich da gerne drauf reagieren.

    Beispiel:

    spotify-premium.0.devices            (zu ueberwachender Channel)
    spotify-premium.0.devices.Channel1 
    spotify-premium.0.devices.Channel2
    

    Versucht habe ich es so:

    // mittels Regex
    on({id: /^spotify-premium\.0\.devices$/, change: "ne"}, refreshDeviceListRegex);
    // Zusammenkopiert :-)
    on('channel:spotify-premium.0.devices.*', refreshDeviceListRegex);
    

    Aber leider lösen beide Subscriptions nie aus.

    Grüße Dominik


  • @moelski Vielleicht mal so:

    on({id: Array.prototype.slice.apply($("channel[state.id=spotify-premium.0.devices.*]")), change: "ne"}, function (obj) {
    var value = obj.state.val;
    var oldValue = obj.oldState.val;
    refreshDeviceListRegex;
    }
    });

    Für jeden einzelnen Channel statt devices.* -> devices.*1 oder devices.*2 probieren.


  • @MCU
    Ok werde ich gleich mal testen. Die Syntax sieht schon ... sagen wir mal ... gescheidig kompliziert aus 🙂

    Grüße & Danke


  • @moelski Habe es einfach von einem BLOCKLY Beispiel auf Dein Channel umgesetzt.

    iobroker-channel-logik.PNG


  • @moelski sagte:

    ein Sub-Channel (im Beispiel Channel1 oder Channel2) eingefügt oder gelöscht wird würde ich da gerne drauf reagieren.

    Es kann nur auf Datenpunkte getriggert werden. Gelöschte Datenpunkte triggern nicht mehr.


  • Hmm ok, dann macht es eher Sinn wenn ich die Liste einfach alle 10 Minuten neu erstellen lasse.
    Denn die wichtigen Devices in der Spotify Liste sind eh fest. Es geht mir nur um das entfernen der Browser Devices wenn die nicht mehr verfügbar sind.
    Die Lösung wäre dann diese:

    ListScheduler = schedule('*/10 * * * *', refreshDeviceList);
    

    Nicht ganz so elegant, aber für meine Zwecke ausreichend.

    Danke trotzdem für die Hilfe.

    Grüße Dominik

Suggested Topics

  • 15
  • 3
  • 2
  • 11
  • 19
  • 12
  • 7
  • 8

2.0k
Online

36.8k
Users

42.5k
Topics

589.4k
Posts