Nicht-numerischer Wert in einer Bedingung

Guten Abend,

Ich muss mich wohl falsch ausgedrückt haben ( :frowning: ), aber ich stecke in der Bedingung der folgenden Szene fest:

Wie kann ich den Zustand meiner Variablen « state » (die entweder « stop » oder « play » ist) testen?

Danke für eure Hilfe,
Schönen Abend noch,
Jean

Hallo @jean_bruder, du bist nicht verrückt, das ist aktuell nicht möglich :smiley:

Es gibt einen Feature-Request:

Hallo @pierre-gilles

Wie immer kommst du mir zu Hilfe :smiling_face_with_three_hearts:

Ich werde also warten müssen … Hast du eine Idee, wie lange es dauern wird, bis diese Änderung berücksichtigt wird, denn ich bin jetzt blockiert …

Wieder einmal kann ich dich nur für dieses wunderbare Produkt namens Gladys danken :heart:

Schönen Tag noch,
Jean

Da müssen wir wohl für diesen Antrag stimmen @jean_bruder :wink:

Hallo @mutmut

Es ist erledigt :+1:

Hallo @jean_bruder,

Kannst du mir genau erklären, was du versuchst zu tun?

Ich bin sicher, dass es Workarounds gibt, bis dahin :slight_smile:

Hallo @pierre-gilles

Ich habe den folgenden Knopf erworben: https://fr.aliexpress.com/item/1005007475312050.html

Er soll es ermöglichen, die Klangumgebung pro Raum zu steuern (Lautstärke +/-, Pause/Wiedergabe, Ambiente/Musikstück/Radio vorher/nächster Titel) je nach Bedienung: Klick, Doppelklick, Drehung links/rechts usw. …

Der grundlegendste Bedarf ist „Pause/Wiedergabe“, der durch einen einfachen Klick ausgeführt wird: Wenn es in Wiedergabe ist, wird es in Pause umgeschaltet und umgekehrt …

Dazu hole ich mir über eine Anfrage den Wiedergabezustand:

Und ich möchte daher den Rückgabewert von „state“ vergleichen, um Gladys reagieren zu lassen:

Aber das ist derzeit nicht möglich:-( Ich gebe zu, dass es weit davon entfernt ist, absolut notwendig zu sein, da ich den Ton von unseren jeweiligen Smartphones aus steuere (Anwendung MALP: https://play.google.com/store/apps/details?id=org.gateshipone.malp&hl=fr), aber ich mag es nicht, an einem dummen technischen Problem hängen zu bleiben:)-

Ich sehe, dass du eine „domotiks“-API aufrufst, nehme ich an, dass es sich dabei um einen lokalen Domoticz-Server handelt?

Kannst du mir die gesamte Szene zeigen? Was ist dein Trigger in Gladys?

Guten Abend @pierre-gilles

« Domotiks » ist einer meiner Mini-Server, die für containerisierte Anwendungen bestimmt sind, einschließlich einer Reihe von Mikrodiensten, darunter eine selbst entwickelte API zur Steuerung des « MPD »-Dämons (für die Audioausgabe von Ambient-Szenen). Also nichts mit « Domoticz » zu tun :stuck_out_tongue:

Der Auslöser ist wie folgt:

Danach folgt ein erster Block, der den aktuellen Zustand des Audio-Servers abruft:

Gefolgt von einer bedingten Prüfung, um den Zustand zu erkennen und den neuen Zustand zu definieren (Umschaltung « stop/start »):

Natürlich bin ich nicht weiter gegangen, da ich den Test nicht durchführen konnte …

Gute Nacht,
Jean

Danke für die Präzisierung :slight_smile:

Kannst du diese selbstgebaute API ändern?

Diese selbstgebaute API könnte eine ganze Zahl zurückgeben, anstatt eines Strings, was außerdem zu den aktuellen Musik-Funktionen passen würde, die wir in Gladys haben:

Die Nutzung dieser nativen Funktionen würde es dir außerdem ermöglichen, den Player auf dem Dashboard mit deinem MPD-Server zu verwenden:

Idealerweise, wenn du die selbstgebaute API ändern kannst, um Zustandsänderungen per MQTT an Gladys zu senden, könnte das Widget für Musik immer auf deinem Dashboard aktuell sein :slight_smile:

Falls dich das anspricht, kann ich dir den gesamten Ablauf erklären! Und ehrlich gesagt, denke ich, dass das eine bessere Lösung ist, als einen String zu verwenden, der in Gladys nichts bedeutet :slight_smile:

Hallo @pierre-gilles

Das klingt doch schon mal ganz gut. Ich hatte (falsch …) verstanden, dass dieser Player nur für Sonos geeignet ist :sweat_smile:

Jetzt muss ich nur noch verstehen, wie ich das alles anpassen kann?

Viele Grüße,
Jean

Top :slight_smile: Nein, in Gladys ist nichts nur für eine einzige Integration reserviert, alles ist entwickelt, um 100% offen zu sein.

Du kannst die MQTT-Integration verwenden, um ein „virtuelles“ Musikgerät zu erstellen:

Du kannst natürlich alle Funktionen hinzufügen, die mit Musik zusammenhängen. Derzeit unterstützen wir:

  • Play → „Push“-Funktion, deren einziger akzeptierter Zustand „1“ ist
  • Pause → „Push“-Funktion, deren einziger akzeptierter Zustand „1“ ist
  • Vorheriger → „Push“-Funktion, deren einziger akzeptierter Zustand „1“ ist
  • Nächster → „Push“-Funktion, deren einziger akzeptierter Zustand „1“ ist
  • Wiedergabestatus → Zwei mögliche Zustände:
    • „1“ = wird abgespielt
    • „0“ = pausiert

Anschließend musst du in deinem Heimserver den Wiedergabestatus an Gladys weiterleiten und auf eine Änderung bei Gladys hören.

Wiedergabestatus weiterleiten

Ich weiß nicht, in welcher Sprache dein Heimserver programmiert ist. Wenn es Node.js wäre, könntest du folgendes tun:

const mqtt = require("mqtt");
const client = mqtt.connect("mqtt://192.168.1.10", {
  username: 'gladys',
  password: 'aaaaaaaaa'
});

const PLAYBACK_TOPIC = "gladys/master/device/mqtt:serveur-mpd-musique/feature/mqtt:serveur-mpd-etat-lecture/state";

client.on("connect", () => {
    // Beispiel beim Abspielen
   client.publish(PLAYBACK_TOPIC, "1");
  // Beispiel bei Pause
   client.publish(PLAYBACK_TOPIC, "0");
});

Ich habe ein Video zum Thema MQTT-Integration gemacht: https://www.youtube.com/watch?v=o5yn_FnYtkc

Befehl an den MPD-Server senden

Anschließend gibt es zwei Optionen, um einen Befehl von Gladys aus zu senden:

  • Per MQTT
  • Per HTTP über eine Szene

Wenn dein Server ein MQTT-Topic abhören kann, kannst du einfach jedes Topic jedes Befehls (Play, Pause, etc.) abhören und auf jede Nachricht reagieren. Das ist meiner Meinung nach am praktischsten und effizientesten.

Andernfalls, wenn du es lieber per HTTP machen möchtest, kannst du eine Szene erstellen, die die Zustandsänderung jedes Knopfes abhört (du musst eine Szene pro Knopf erstellen, das ist weniger komfortabel als per MQTT):

Aber meiner Meinung nach kannst du das alles in wenigen Minuten integrieren :slight_smile:

Zögere nicht, wenn du Hilfe brauchst, wir können uns sogar anrufen, wenn du das mit mir debuggen möchtest.

@jean_bruder Hat es am Ende doch geklappt?

Guten Abend @pierre-gilles

Ich gebe zu, dass ich gerade etwas mit Außenarbeiten beschäftigt bin, dank der Jahreszeit, und ich hebe solche Beschäftigungen für die langen Abende am Kamin auf :wink: Aber ich werde dich auf jeden Fall auf dem Laufenden halten!

Schönen Abend allen Gladisten :slight_smile:

Hallo @pierre-gilles

Antwort, die dich vielleicht nicht zufriedenstellen wird, aber das JSON-Format, das vom Wrapper zurückgegeben wird, den ich für den Lesezustand von MPD verwende, basiert auf der „formellen“ Rückmeldung von MPD (beschrieben hier: Protocol — Music Player Daemon 0.25~git documentation), und der Zustand ist daher entweder „play“, „stop“ oder „pause“. Wir kommen also zur ursprünglichen Anfrage zurück, die es ermöglichen wird, einem anderen geäußerten Bedarf gerecht zu werden, nämlich die Möglichkeit, Bedingungenstests an Textwerten durchzuführen;-)

Ich erinnere daran, dass der Bedarf nicht darin besteht, eine grafische Oberfläche zu verwenden, sondern einen „drehbaren Mehrfachwahlknopf“, mit dem der Ton gesteuert werden kann (Klick = Pause/Wiedergabe, Drehung nach links = leiser, Drehung nach rechts = lauter, Klick+Drehung nach links = vorheriger Titel, Klick+Drehung nach rechts = nächster Titel usw. …).

Der Ball liegt nun im Feld der Entwickler … Vielen Dank im Voraus an sie :slight_smile:

Schönen Abend noch,
Jean

Ach, da haben wir uns wohl missverstanden, ich dachte, du hättest diesen Wrapper selbst entwickelt und könntest ihn daher ändern :slight_smile:

In der Zwischenzeit ist die Lösung, die ich dir vorgeschlagen habe, eine gute Workaround-Lösung. Das kann in Node-RED oder in einem benutzerdefinierten Skript gemacht werden. Zögere nicht, mich zu fragen, wenn du Hilfe dabei brauchst.

Guten Abend @pierre-gilles

Da ich nicht mit Node-RED herumfummeln wollte, habe ich die passende Änderung direkt im Wrapper vorgenommen, und jetzt funktioniert alles wie gewünscht.

Es bleibt nur, dass eine bedingte Prüfung auf eine Zeichenkette einfacher wäre, als Node-RED bemühen zu müssen :wink:

Schönen Abend noch,
Jean