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:
System/Backup/Restore/Reset all configuration data

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

/xml/zone/getAll.xml

Listen Sie alle möglichen Zonen-IDs auf.

/xml/zone/get.xml?zone=@0

Erhalten Sie den Status einer einzelnen Zone. Optionale Parameter sind: &addSourceBasicData &addSourceStatusData

/xml/zone/getSelection.xml?grouped

Zonen mit vollständigen Gruppeninformationen auflisten.

/xml/zone/runCommand.xml?zone=@0&command=50

Schalten Sie die erste Zone auf Standard-Streaming um.

/xml/zone/runCommand.xml?zone=@0&command=1

Schalten Sie die erste Zone aus.

/xml/zone/runCommand.xml?zone=@0&command=15

Alle Zonen ausschalten.

/xml/zone/runCommand.xml?zone=@0&command=680

Stummschalten on

/xml/zone/runCommand.xml?zone=@0&command=681

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

a

a1
a3

erster analoger Eingang
erster analoger Eingang
dritter analoger Eingang

Je nach Gerätemodell 0 bis 8 analoge Eingänge s werden unterstützt.

p

p5

erste FM-Tuner-Voreinstellung
fünfte FM-Tuner-Voreinstellung

Erfordert, dass ein Standard-FM-Tuner für die Zone konfiguriert ist.

f

f2

erster trivum Favorit
zweiter trivum Favorit

y

y2

erste trivum Playlist
zweite trivum Playlist

i

i2

erster Tunein-Preset
zweiter Tunein-Preset

s

Standard-Stream-Quelle der Zone

aktuelle Auswahl abspielen

t

Standard-FM-Tuner der Zone

aktuelle Frequenz abspielen

Beispiele

API-Aufruf

Bemerkung

/xml/zone/set.xml?zone=@0&source=@a1

auf ersten Analogeingang umschalten

/xml/zone/set.xml?zone=@0&source=@t

Wechseln Sie zum Standard-UKW-Tuner der Zone und spielen Sie die aktuelle Frequenz ab

/xml/zone/set.xml?zone=@0&source=@p3

Wechseln Sie zum Standard-FM-Tuner der Zone und spielen Sie den voreingestellten Sender 3

ab /xml/zone/set.xml?zone=@0&source=@f2

Wechseln Sie zum Standard-Streaming der Zone und spielen Sie trivum Favoriten 2

ab /xml/zone/set.xml?zone=@0&source=@i5

Wechseln Sie zum Standard-Streaming der Zone und spielen Sie die TuneIn-Webradio-Voreinstellung 5

ab /xml/zone/set.xml?zone=@1@source=@n

Nur C4: Verwenden Sie eine Quelle über Kartensteckplatz n. (n >= 0)

/xml/zone/runCommand.xml?zone=@0&command=15

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

/xml/zone/set.xml?zone=@0&volume=10

Lautstärke einstellen (0 …​ 100)

/xml/zone/set.xml?zone=@0&action=1

Identisch mit „/xml/zone/runCommand.xml“, um einen numerischen Befehl auszuführen, in diesem Fall „ZONECMD_POWER_OFF (1)“

/xml/zone/set.xml?zone=@0&balance=0

Balance einstellen, von -15 (ganz links) bis 15 (ganz rechts)

/xml/zone/set.xml?zone=@0&bass=-5

Stellen Sie die Bassreduzierung oder -verstärkung ein, von -15 bis 15

/xml/zone/set.xml?zone=@0&treble=5

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

&sequence=random-sequential

Wählen Sie einen zufälligen Starttrack

&sequence=random-random

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

&sequence=random-sequential

um bei einem zufälligen Track

zu beginnen &sequence=random-random

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

/xml/system/getMusicCenterStatus.xml

NAS-Bibliotheksstatus abrufen

/xml/system/scanMusicCenterShares.xml

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

/xml/zone/setVolume.xml?id=@0&volume=0

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.

/xml/zone/setVolume.xml?id=@0&volume=99

Erhöhen Sie die Gruppenlautstärke für die gesamte Gruppe. Die Lautstärke aller Zonenmitglieder wird um einige Schritte erhöht.

/xml/zone/setVolume.xml?id=@0&groupMemberVolume=99

Erhöhen Sie die Lautstärke einer einzelnen Zone schrittweise, ohne Auswirkungen auf andere Gruppenmitglieder.

/xml/zone/setVolume.xml?id=@0&groupMemberVolume=0

Verringern Sie die Lautstärke einer einzelnen Zone schrittweise, ohne Auswirkungen auf andere Gruppenmitglieder.

/xml/zone/setVolume.xml?id=@0&stop

Lautstärkeschritt sofort stoppen.

/xml/zone/setVolume.xml?id=@0&groupMemberVolume=50&absolute

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

id

Paging-ID, 0 - 31

volume

optional, 5 - 100, falls nicht angegeben, wird die konfigurierte Paging-Lautstärkestufe verwendet.

autostoptime

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&amp;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.
Insbesondere die von Musikdiensten bereitgestellten Menüs können sich im Laufe der Zeit ändern.

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

visuid

eine Zahl von 1 bis 99 zur Identifizierung Ihrer externen Visualisierungsinstanz.
In diesem API-Dokument wird visuid=90 für Testanfragen verwendet.

apiLevel

sollte immer 2 sein. Dadurch werden „Button“-XML-Objekte unter „Keypad/Basic“ erzeugt.

now

weist den Server an, den neuen Zonenstatus sofort zurückzugeben und die Verbindung zu schließen.
Ohne „&now“ würde der Anruf bis zu einem Timeout oder bis einer Änderung der Zonenstatusinformationen blockiert werden.

reload=1

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.