trivum HTTP-Schnittstelle
25.07.2023
Die HTTP-Schnittstelle trivum nimmt Anfragen entgegen, die einfach mit einem Webbrowser getestet werden können, und gibt Antworten im XML-Format zurück.
1. Befehle
1.1. ZoneCommand
Ermöglicht grundlegende Dinge wie das Ausschalten einer Zone oder das Ändern der Lautstärke.
/xml/zone/runCommand.xml?zone=@zoneId&command=commandNumber
zoneId
Die ID einer Zone. Die Liste der möglichen IDs finden Sie in der Webkonfiguration unter
Automation /trivum API
oder unten im Beispiel getAll.xml.
Einige Aktoren adressieren die erste Zone aufgrund interner, nicht verwendeter Konfigurationsdatei(en) möglicherweise nicht mit @0, sondern mit @1. Um dies zu beheben, können Sie die gesamte Konfiguration wie folgt zurücksetzen: |
Anstelle von „@0“ kann der Zonenname angegeben werden. Wenn es Sonderzeichen enthält, schreiben Sie diese mit „%“ um:
/xml/zone/runCommand.xml?zone=living%20room&command=…
Befehlsnummer
Dies ist ein numerischer Befehl mit diesen möglichen Werten:
ZONECMD_POWER_OFF 001 ZONECMD_MUTE 002 toggle mute ZONECMD_MUTE_ON 680 since v9.29 ZONECMD_MUTE_OFF 681 since v9.29 ZONECMD_VOLUME_INC 003 ZONECMD_VOLUME_DEC 004 ZONECMD_VOLUME_INC2 009 ZONECMD_VOLUME_DEC2 010 ZONECMD_VOLUME_INC5 011 ZONECMD_VOLUME_DEC5 012 ZONECMD_ALLOFF 015 ZONECMD_SNOOZE 017 ZONECMD_LOCAL_SOURCE 019 if present (LineIn) ZONECMD_USE_PREV_SOURCE 029 see Zones / zone / KNX/HTTP sources ZONECMD_JOIN 030 ZONECMD_UNJOIN 031 ZONECMD_USE_NEXT_SOURCE 041 see Zones / zone / KNX/HTTP sources ZONECMD_USE_NEXT_ZONE 042 see Zones / zone / KNX/HTTP sources ZONECMD_DEFAULT_STREAMING 050 if present ZONECMD_DEFAULT_TUNER 051 if present ZONECMD_VOLUME_DEC_1 080 ZONECMD_VOLUME_DEC_10 089 ZONECMD_VOLUME_INC_1 090 ZONECMD_VOLUME_INC_10 099 MULTIKEY_BASIC_FORWARD 400 skip to next track, preset MULTIKEY_BASIC_BACKWARD 401 skip to prev. track, preset MULTIKEY_BASIC_FASTFORWARD 402 MULTIKEY_BASIC_FASTBACKWARD 403 MULTIKEY_BASIC_PLAYPAUSE 406 MULTIKEY_PLAY 431 MULTIKEY_PAUSE 432 MULTIKEY_STOP 433 MULTIKEY_STATION_DOWN 490 MULTIKEY_STATION_UP 491 MULTIKEY_NEXT_ALBUM 493 MULTIKEY_PREVIOUS_ALBUM 494 MULTIKEY_NEXT_PLAYLIST 495 MULTIKEY_PREVIOUS_PLAYLIST 496 ZONECMD_START_PAGING_1 500 ZONECMD_START_PAGING_32 531 ZONECMD_STOP_PAGING_1 550 ZONECMD_STOP_PAGING_32 581 ZONECMD_STOP_PAGING_ALL 599 ZONECMD_PRESET_1 600 ZONECMD_PRESET_7 606 ZONECMD_GROUP_START_1 621 ZONECMD_GROUP_START_8 628 ZONECMD_GROUP_STOP 630 ZONECMD_GROUP_STOP_1 631 ZONECMD_GROUP_STOP_8 638 ZONECMD_GROUP_STOP_ALL 639 ZONECMD_STREAMING_NOPLAY 641 ZONECMD_VOLUME_00 900 ZONECMD_VOLUME_99 999 ZONECMD_ROOM_VOLUME_00 1000 ZONECMD_ROOM_VOLUME_99 1099
Beispiele
anruf | function |
---|---|
|
Listen Sie alle möglichen Zonen-IDs auf. |
|
Erhalten Sie den Status einer einzelnen Zone. Optionale Parameter sind: &addSourceBasicData &addSourceStatusData |
|
Zonen mit vollständigen Gruppeninformationen auflisten. |
|
Schalten Sie die erste Zone auf Standard-Streaming um. |
|
Schalten Sie die erste Zone aus. |
|
Alle Zonen ausschalten. |
|
Stummschalten on |
|
Stummschaltung aus |
1.2. Stellen Sie die Zonenquelle ein
Wählen Sie eine Zonenquelle nach Kurznamen aus
/xml/zone/set.xml?zone=@0&source=@shortSourceName
shortSourceName
text | Aktion | Bemerkung |
---|---|---|
|
erster analoger Eingang |
Je nach Gerätemodell 0 bis 8 analoge Eingänge s werden unterstützt. |
|
erste FM-Tuner-Voreinstellung |
Erfordert, dass ein Standard-FM-Tuner für die Zone konfiguriert ist. |
|
erster trivum Favorit |
|
|
erste trivum Playlist |
|
|
erster Tunein-Preset |
|
|
Standard-Stream-Quelle der Zone |
aktuelle Auswahl abspielen |
|
Standard-FM-Tuner der Zone |
aktuelle Frequenz abspielen |
Beispiele
API-Aufruf |
Bemerkung |
|
auf ersten Analogeingang umschalten |
|
Wechseln Sie zum Standard-UKW-Tuner der Zone und spielen Sie die aktuelle Frequenz ab |
|
Wechseln Sie zum Standard-FM-Tuner der Zone und spielen Sie den voreingestellten Sender 3 |
ab |
Wechseln Sie zum Standard-Streaming der Zone und spielen Sie trivum Favoriten 2 |
ab |
Wechseln Sie zum Standard-Streaming der Zone und spielen Sie die TuneIn-Webradio-Voreinstellung 5 |
ab |
Nur C4: Verwenden Sie eine Quelle über Kartensteckplatz n. (n >= 0) |
|
Alle Zonen ausschalten. |
1.3. Stellen Sie Zonenattribut ein
Ändern Sie Grundwerte in einer Zone wie Lautstärke, Stummschaltung, Balance oder Bass.
API-Aufruf |
Bemerkung |
|
Lautstärke einstellen (0 … 100) |
|
Identisch mit „/xml/zone/runCommand.xml“, um einen numerischen Befehl auszuführen, in diesem Fall „ZONECMD_POWER_OFF (1)“ |
|
Balance einstellen, von -15 (ganz links) bis 15 (ganz rechts) |
|
Stellen Sie die Bassreduzierung oder -verstärkung ein, von -15 bis 15 |
|
Stellen Sie die Höhenreduzierung oder -anhebung von -15 bis 15 ein |
1.4. trivum Favoriten
Um trivum Favoriten zu erstellen:
-
Spielen Sie einige Musikinhalte ab, z. B. ein NAS-Album
-
Wählen Sie dann
…
oben rechts -
Wählen Sie dann "Zu trivum Favoriten hinzufügen".
Holen Sie sich die Liste der trivum Favoriten:
/api/v1/trivum/favorite.xml
Spiele einen trivum-Favoriten:
/xml/zone/set.xml?source=@f1&zone=@0
Sie können auch Optionen hinzufügen:
Option |
Bemerkung |
|
Wählen Sie einen zufälligen Starttrack |
|
Spiele in permanent zufälliger Reihenfolge |
1.5. trivum Wiedergabelisten
Holen Sie sich die Liste der trivum Wiedergabelisten:
/api/v1/trivum/playlist.xml
Spielen Sie eine trivum-Wiedergabeliste:
/xml/zone/set.xml?source=@y1&zone=@0
Sie können auch Optionen hinzufügen:
Option |
Bemerkung |
|
um bei einem zufälligen Track |
zu beginnen |
um nur zufällige Titel abzuspielen |
1.6. TuneIn Favoriten
Diese können auch über „…“ oben rechts erstellt werden, während ein TuneIn-Sender spielt.
Holen Sie sich die Liste der TuneIn-Favoriten:
/api/v1/tunein/favorite.xml
Spielen Sie einen TuneIn-Favoriten:
/xml/zone/set.xml?source=@i1&zone=@0
1.7. FM-Voreinstellungen
FM-Presets auflisten:
/xml/system/getTunerStationList.xml
Auf C4 zeigt dies die systemweite Liste der FM-Voreinstellungen, aber keine lokalen Voreinstellungen, die pro FM-Tunerkarte gespeichert sind.
1.8. NAS-Status und Kontrolle
API-Aufruf |
Bemerkung |
|
NAS-Bibliotheksstatus abrufen |
|
Führen Sie den vollständigen NAS-Scan erneut aus |
1.9. Gruppenmanagement
Gruppen können durch einen Aufruf erstellt, geändert oder entfernt werden:
/xml/zone/createGroup.xml?zone=zVisu&oldgroup=zMaster&members=++----------
Parameter:
Name |
Bemerkung |
zVisu |
Index der aktuellen Zone des Visualisierungsclient |
zMaster |
Index des Gruppenmasters, dessen Musik verwendet werden soll (wenn beide Zonen gerade unterschiedliche Quellen spielen) |
+/- |
Zeichen, die grafisch angeben, welche Zonen an einer Gruppe teilnehmen sollen. Geben Sie beispielsweise bei einem 4-Zonen-System 4 Zeichen oder weniger ein (wird automatisch mit „-“ aufgefüllt). |
Beispiel: Die zweite Zone schließt sich der Wiedergabe der ersten Zone an
-
Die erste Zone spielt einen Stream, die zweite Zone spielt UKW-Tuner, alle anderen Zonen sind ausgeschaltet.
-
Die zweite Zone sollte zu einer Gruppe mit der ersten Zone
hinzugefügt werden und die Musik aus der ersten Zone (dem Stream) übernehmen.
/xml/zone/createGroup.xml?zone=1&oldgroup=0&members=++--
Ergebnis: Die zweite Zone spielt den gleichen Stream wie die erste Zone.
Beispiel: Die erste Zone schließt sich der Wiedergabe der zweiten Zone an
-
Die erste Zone spielt einen Stream, die zweite Zone spielt UKW-Tuner, alle anderen Zonen sind ausgeschaltet.
-
Die erste Zone sollte einer Gruppe mit der zweiten Zone hinzugefügt werden und die Musik aus der zweiten Zone (dem Tuner) übernehmen.
/xml/zone/createGroup.xml?zone=0&oldgroup=1&members=++--
Ergebnis: In der ersten Zone wird derselbe FM-Tuner wie in der zweiten Zone abgespielt.
Das heißt, wenn beide Zonen unterschiedliche Quellen abspielen, entscheidet
"oldgroup", welche Musik abgespielt wird, nachdem die Gruppe beigetreten ist.
Beispiel: Die zweite Zone sollte die Gruppe verlassen
/xml/zone/createGroup.xml?zone=0&oldgroup=0&members=+---
Relevant ist hier die Änderung von +
nach -
in der Mitgliederliste.
Ändern Sie die Lautstärke innerhalb einer Gruppe
Innerhalb einer Gruppe verwenden Zonen normalerweise keine isolierten Lautstärkepegel,
, aber eine Änderung der Lautstärke wirkt sich auf alle Gruppenmitglieder aus.
Diese gegenseitige Abhängigkeit wird durch den Aufruf behandelt:
/xml/zone/setVolume.xml
Standardmäßig wird dieser Aufruf nicht einfach einen absoluten Lautstärkepegel einstellen, sondern ein Stückchen in Richtung einer bestimmten Ziellautstärke gehen. Dies lässt sich am besten mit der Schaltfläche „+“ oder „-“ in Ihrer Visualisierung verwenden.
API-Aufruf |
Bemerkung |
|
Verringern Sie die Gruppenlautstärke für die gesamte Gruppe. id ist eine beliebige Zonen-ID aus der Gruppe. Die Lautstärke aller Zonenmitglieder wird um einige Schritte verringert. |
|
Erhöhen Sie die Gruppenlautstärke für die gesamte Gruppe. Die Lautstärke aller Zonenmitglieder wird um einige Schritte erhöht. |
|
Erhöhen Sie die Lautstärke einer einzelnen Zone schrittweise, ohne Auswirkungen auf andere Gruppenmitglieder. |
|
Verringern Sie die Lautstärke einer einzelnen Zone schrittweise, ohne Auswirkungen auf andere Gruppenmitglieder. |
|
Lautstärkeschritt sofort stoppen. |
|
Legen Sie die absolute Lautstärke für eine einzelne Zone fest, isoliert von anderen Gruppenmitgliedern. (Vorsichtig verwenden.) |
Um die neuen Lautstärkeinformationen innerhalb einer Gruppe zu erhalten, rufen Sie getChanges auf und sehen Sie sich die Lautstärkestatusliste an.
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2&now
Beispiel Ausgang, wenn gruppiert, unter Zone/Status:
<zone> ... <status> <volume>17</volume> - volume of zone making the getChanges call ... <group> <zone>0</zone> <volume>17</volume> - volume for zone id 0 </group> <group> <zone>1</zone> <volume>26</volume> - volume for zone id 1 </group> <group> ... </group> <groupMembers>2</groupMembers> </status> </zone>
Eine vollständige Erklärung von getChanges finden Sie unter Holen Sie sich den Zonenstatus.
1.10. Paging
Pagings müssen in der Webkonfiguration konfiguriert werden. Dann können folgende Aufrufe verwendet werden:
Paging starten
/xml/paging/start.xml
Parameter
Name | Beschreibung |
---|---|
|
Paging-ID, 0 - 31 |
|
optional, 5 - 100, falls nicht angegeben, wird die konfigurierte Paging-Lautstärkestufe verwendet. |
|
optional, 5 - 100 Sekunden. Falls nicht angegeben, werden die konfigurierten Stoppeinstellungen verwendet. |
Beispiel
/xml/paging/start.xml?id=0&volume=10&autostoptime=10
Ein Paging stoppt automatisch nach der definierten Zeit, Sie können es jedoch auch früher stoppen, indem Sie Folgendes aufrufen:
/xml/paging/stop.xml?id=0
2. Interaktive Musikauswahl
Beginnt mit:
/xml/system/getWebTouchMenu.xml?which=music&zone=@0&visuid=90
Dadurch entstehen Datensätze wie:
<row> <type>action</type> <mode>menu</mode> <action>/xml/system/getWebTouchMenu.xml?which=trivumFavorites&keypad=4</action> <icon>/imgs/visuIconServiceFavorites_128px.png</icon> <text>trivum_20favorites</text> </row>
dann pro Datensatz:
-
decodieren und zeigen Sie das Textfeld in Ihrer Visualisierung an.
„_20“ bedeutet ein Zeichen mit dem ASCII-Code 0x20 (ein Leerzeichen). -
Berühren Sie die Aktions-URL und zeigen Sie die nächste Menüebene an.
Verlassen Sie sich nicht auf die permanente Verfügbarkeit bestimmter Menüebenen. |
3. Holen Sie sich den Zonenstatus
3.1. Synchron
Fragen Sie den Status einer Zone mit einem kurzen API-Aufruf ab:
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2&now
Parameter
Name |
Funktion |
|
eine Zahl von 1 bis 99 zur Identifizierung Ihrer externen Visualisierungsinstanz. |
|
sollte immer 2 sein. Dadurch werden „Button“-XML-Objekte unter „Keypad/Basic“ erzeugt. |
|
weist den Server an, den neuen Zonenstatus sofort zurückzugeben und die Verbindung zu schließen. |
|
Wenn zwei Visualisierungen mit derselben -Visuid auf denselben Server zugreifen, wird möglicherweise der Fehler "zweimal verwendet" angezeigt. In diesem Fall sollte die aktuellste -Visu beim ersten Aufruf „&reload=1“ hinzufügen, um eindeutig mitzuteilen, dass es sich um die aktuellste Visualisierung handelt. |
Über Steuereinheiten (Visualisierungen)
Wenn Sie Anfragen mit visuid=90
senden, wird ein Control Unit-Objekt mit der ID 90 im Server erstellt.
Die Liste der aktuellen Control Units erhalten Sie in der Webkonfiguration unter Control Units.
Nach dem ersten Zugriff wird das Gerät als "Nicht konfiguriert" aufgeführt. Sobald Sie die Konfiguration ändern, indem Sie zum Beispiel die Option "Aus durch einen kurzen Druck auf Power" setzen, wird sie als Konfiguriert bezeichnet und bei späteren Bereinigungen der Liste der Steuereinheiten wird diese nicht gelöscht.
Wenn für dieses Gerät keine Anfragen vorliegen, wird es nach einiger Zeit unter "aktuell inaktive Steuergeräte" aufgeführt.
3.2. Asynchron
Dies bedeutet, dass ein HTTP-Aufruf nicht sofort zurückkehrt, sondern blockiert, bis sich etwas ändert.
Beispiel:
/xml/zone/getChanges.xml?zone=@0&visuid=90&apiLevel=2
Beachten Sie, dass & now
fehlt. Folgendes wird passieren:
beim ersten API-Aufruf:
Eine Steuereinheit mit der ID 90 wird erstellt und mit der ersten Zone verknüpft.
Der API-Aufruf kehrt sofort mit vollständigen Statusdaten der Zone zurück.
bei allen weiteren API-Aufrufen:
Die vorhandene Steuereinheit 90 wird wiederverwendet. Der API-Aufruf kann blockieren, bis:
-
ein Timeout erreicht ist (ca. 10 Sekunden). In diesem Fall erhalten Sie eine Antwort wie:
<rows><system><timeout>1</timeout>
-
oder bis sich etwas geändert hat, zum Beispiel die Lautstärke in der Zone.
Wenn sich zwischen zwei getChanges-Aufrufen (viele) Statusdaten am Server geändert haben, blockiert der Aufruf möglicherweise gar nicht, sondern gibt sofort den neuen Status zurück.
Wenn Sie eine Zeitüberschreitung erhalten, führen Sie getChanges einfach sofort erneut aus. Das bedeutet, dass Sie getChanges endlos in einer Schleife ausführen können, beispielsweise in einem separaten I/O-Thread. Da eine Anfrage nur bei Änderungen zurückkehrt, verursacht dies keine Lastprobleme mit dem Server.
Wenn Sie kein Timeout erhalten, d. h. der Aufruf sofort oder nach einigen Sekunden zurückkehrt (sobald sich etwas geändert hat), verarbeiten Sie die Statusdaten und führen Sie dann die Anforderung getChanges erneut aus.
3.3. Anhang: schematisches Beispiel für eine Visu-Client-Anwendung
3.3.1. Single-Thread-Anwendung
Dies erfordert, dass Sie in Ihrer Programmiersprache testen können, ob Antwortdaten für einen Socket vorhanden sind (per select()-Aufruf).
Hauptthread
-
Start: sende
/xml/zone/getChanges.xml?visuid=90&now
-
Schleifenanfang: Aktualisieren Sie die GUI.
-
Verarbeiten Sie Eingabeereignisse vom Benutzer.
-
Synchrone Befehle senden wie:
/xml/zone/runCommand.xml?…
Antwort empfangen, RC prüfen UND XML-Statusdaten verarbeiten
(dasselbe wie bei getChanges-Antworten) -
Überprüfen Sie, ob Antwortdaten für den laufenden getChanges-Aufruf vorhanden sind
(im C-Code: select()-Aufruf auf Socket)
WENN Daten vom trivum-Server vorhanden sind:-
Suchen Sie nach „<userdata name="rc">0</userdata>“.
Falls NICHT vorhanden
_ Verarbeiten Sie den Fehler und warten Sie einige Sekunden.
Sonst, wenn KEIN Timeout auftritt
_ XML-Antwort verarbeiten (Statusdaten)
Endif
asynchroner Aufruf (einfach senden)
/xml/zone/getChanges.xml&visuid=90&onlyChanges
Endif
-
-
wenn innerhalb einer Minute keine Daten vom Server eintreffen
-
asynchroner Aufruf (einfach senden)
/xml/zone/getChanges.xml&visuid=90&onlyChanges
endif
-
-
Schleife erneut ausführen
-
3.3.2. Beispiel für eine Zwei-Thread-Anwendung
Kann verwendet werden, wenn Sie es vorziehen, blockierende Empfangsvorgänge auf Sockets in einem separaten I/O-Thread auszuführen.
Hauptthread
-
Aktualisieren Sie die GUI.
-
Verarbeiten Sie Eingabeereignisse vom Benutzer.
-
Synchrone Befehle senden wie:
/xml/zone/runCommand.xml?…
Antwort empfangen, RC prüfen UND XML-Statusdaten verarbeiten
(dasselbe wie bei getChanges-Antworten) -
Statusdaten und Fehler vom Status-Thread empfangen.
-
Führen Sie diese Schleife erneut aus.
Status-Thread
-
IF in der ersten Schleife:
-
sende „/xml/zone/getChanges.xml?visuid=90&now“
ELSE -
Senden Sie „/xml/zone/getChanges.xml?visuid=90&onlyChanges“.
-
-
Antwort erhalten (diese wird bis zu 10 Sekunden blockiert)
-
Suchen Sie nach „<userdata name="rc">0</userdata>“.
Wenn dies NICHT vorhanden ist, liegt ein Fehler vor.
Stellen Sie sicher, dass Sie die Schleife bei Fehlern nicht einfach erneut ausführen,
, sondern warten Sie zumindest ein paar Sekunden und teilen Sie dies dem Haupt-Thread mit. -
Suchen Sie nach „<rows><system><timeout>1</timeout>“.
WENN dies vorhanden ist-
Führen Sie die Schleife sofort erneut aus.
SONST -
Verarbeiten Sie die Antwortstatusdaten
und kopieren Sie neue Statusdaten in den Hauptthread.
-
-
Führen Sie diese Schleife erneut aus.