Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. [Frage] Denon Heos (Multiroom WIFI Speaker)

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    9
    1
    102

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

[Frage] Denon Heos (Multiroom WIFI Speaker)

Geplant Angeheftet Gesperrt Verschoben Visualisierung
16 Beiträge 8 Kommentatoren 5.9k Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    Sebastian
    schrieb am zuletzt editiert von
    #1

    Guten Morgen,

    Ich versuche gerade meine Denon Heos Boxen über ioBroker zu kontrollieren um z.B. die Musik mit meinen HM 6-fach Schaltern zu steuern.

    Da es ja leider noch keinen Adapter dafür gibt bin ich bei meiner Suche auf folgende Node.js Module gestoßen. Konnte mich aber bis jetzt nicht entscheiden welches für mich b.z.w. ioBroker besser geeignet ist.

    https://github.com/WeeJeWel/node-denon-heos

    https://github.com/camme/heos

    Da meine Programmierkünste etwas eingeschränkt sind wollte ich mal fragen ob schon jemand etwas in die Richtung gebaut hat?

    Beide obigen Module sind eigentlich ganz ok und ich konnte damit Infos aus den Boxen auslesen. Weiter bin ich aber bisher aus Zeitmangel nicht gekommen.

    Gruß

    Sebastian

    1 Antwort Letzte Antwort
    0
    • Y Offline
      Y Offline
      ykuendig
      schrieb am zuletzt editiert von
      #2

      Lies doch mal hier: http://forum.iobroker.net/viewtopic.php?f=8&t=5673

      Ev. kanst Du dich dort beteiligen. Da geht es um einen universellen upnp Adapter, welcher dann verschiedene Systeme steuern könnte.

      Allenfalls könntest Du auch mit den Modulen und dem Node-Red oder JavaScript Adapter etwas machen.

      Gruss Yves

      1 Antwort Letzte Antwort
      0
      • Jey CeeJ Online
        Jey CeeJ Online
        Jey Cee
        Developer
        schrieb am zuletzt editiert von
        #3

        Welche Funktionen Brauchst du?

        Eventuell ist das http://forum.iobroker.net/viewtopic.php?f=8&t=5673 hilfreich für dich sein kann.

        Für mich wäre es auf jedenfall Hilfreich wenn du das Sonos Script aus dem ersten Post nimmst und Testest was davon beim Heos System geht und was nicht.

        ykuendig war schneller

        Persönlicher Support
        Spenden -> paypal.me/J3YC33

        1 Antwort Letzte Antwort
        0
        • B Offline
          B Offline
          Brati
          schrieb am zuletzt editiert von
          #4

          http://forum.iobroker.net/viewtopic.php?f=30&t=5693#p115554

          CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

          1 Antwort Letzte Antwort
          0
          • S Offline
            S Offline
            Sebastian
            schrieb am zuletzt editiert von
            #5

            Hey, erstmal vielen Dank für die vielen Antworten.

            Bin leider erstmal ein paar tage weg, werde mir dann aber alles mal genauer ansehen.

            @Jey Cee, werde mal testen was das Script mit den Heos anstellt

            Als Funktionen würde ich gerne natürlich die Lautstärke individuell für einzelne Boxen und für Gruppen regeln, bestimmte Boxen zur TV Soundbar hinzufügen und dann noch bestimmte Soundquellen aktivieren. Ja, sicherlich für den Anfang etwas viel. Erstmal bin ich über alles froh was funktioniert. Play, Stop, Laut/Leise und Anzeige der aktuellen Musik/Quelle. Aber das ist ja in allen genannten Varianten auch schon umgesetzt.

            @Brati bin etwas überrascht, dass Heos Telnet verwendet. Kann man die Boxen tatsächlich über Konsole steuern?

            Ich sehen schon die Abende in nächster Zeit sind gerettet. Da gibt's ja einiges zum Spielen und Testen.

            Gruß

            Sebastian

            1 Antwort Letzte Antwort
            0
            • S Offline
              S Offline
              spielberger32
              schrieb am zuletzt editiert von
              #6

              Ein Adapter wäre super cool, aber bis es soweit ist, ist ein recht einfacher Work-Around "mit vorhandenen Tools" aktuell eine TCP-Node via NodeRed, da die Heos-Geräte ja per Telnet-Befehl ansteuerbar sind. Diese Node(s) überträgt bei mir aktuell die Einstellungen für Volume und Play_State sobald sie im ioBroker geändert werden (jeder Heos ist bei mir als Objekt angelegt). Es gibt zwar keinen auslesbaren "Rückkanal", der mir den Status des Lautsprechers anzeigt, aber für besagte rudimentäre Optionen erstmal ausreichend.

              Ich habe für die "außergewöhnlichen" Befehle (also ein command-Item in meinem Heos-Objekt angelegt, in das einfach der gesamte Befehl geschickt wird. NodeRed schickt ihn dann weiter. Komplexere Befehle können so von JavaScripten aus abgerufen werden.

              Was man wissen muss ist die IP und die Player-ID. Letztere ist recht simpel abrufbar über den Telnet-Befehl get_players via Putty, denn dort "antwortet" der Heos auch lesbar. Dann kann man die Befehle wie in der Denon-Steuerprotokoll-Dokumentation ( http://rn.dmglobal.com/euheos/HEOS_CLI_ … cation.pdf ) beschrieben verschicken.

              Ein Befehl sieht so aus: > heos://player/set_play_state?pid=12345678&state=play_state

              Hoffe es hilft dem ein oder anderen ;)

              <size size="85">„Alte Knaben haben genauso ihr Spielzeug wie die jungen, der Unterschied liegt lediglich im Preis.“

              Benjamin Franklin</size>

              1 Antwort Letzte Antwort
              0
              • B Offline
                B Offline
                Brati
                schrieb am zuletzt editiert von
                #7

                Hallo,

                weil das HEOS System ja dynamisch ist und mit das anpassen der Expect Scripte doch etwas nervig war, habe ich mich am Denon Script aus diesem Thread probiert:

                http://forum.iobroker.net/viewtopic.php … =40#p82336

                Und Tatsache man kann die Boxen aus JS ansprechen. Einfach die "case" Varianten mit den Befehlen erweitern, diese werden aus vis über den State "javascript.1.Denon.Heos.Command" übergeben. Man könnte auch den ganzen Link aus vis übertragen, dann bräuchte man die case Abfrage nicht. Ich baue das bei Zeiten noch aus, die Auswertung des Status läuft bei mir noch über Expect.

                <size size="150">http://forum.iobroker.net/viewtopic.php?f=30&t=5693#p115554</size>

                ! ````
                var heosip = '19.16.178.63', //hier die IP der HEO Box eintragen*
                net = require('net'),
                client;
                ! on({id: "javascript.1.Denon.Heos.Command"/Commando für HEOS Aufruf/, change: "any"}, function (obj) {
                befehl = getState("javascript.1.Denon.Heos.Command").val; // Befehl gleich Name des aufzurufendem case

                if(!getState('javascript.1.Denon.Heos.Verbunden').val) 
                    checkIP(getState('javascript.1.Denon.Heos.IP_Adresse').val);    // Verbinden mit HEOS
                
                switch (befehl) {
                    case "dividing":
                        sendMessage('heos://browse/play_stream?pid=140815639&sid=1028&cid=CID-55&mid=s134548');
                        break;
                    case "morow":
                        sendMessage('heos://browse/play_stream?pid=140815639&sid=1028&cid=CID-55&mid=s17213');
                        break;
                    case "radio1":
                        sendMessage('heos://browse/play_stream?pid=140815639&sid=1028&cid=CID-55&mid=s25111');
                        break;
                    case "teddy":
                        sendMessage('heos://browse/play_stream?pid=140815639&url=http://streamtdy.ir-media-tec.com/live/mp3-128/web/play.mp33');
                        break;
                
                    default:
                        console.warn("HEOS Befehl nicht bekannt!");
                        // falls keine der case-Klauseln mit befehl übereinstimmt
                    break;
                }
                

                !
                });
                ! checkIP(getState('javascript.1.Denon.Heos.IP_Adresse').val);
                ! /** Funktion Verbindung zur Box---------------------------------------------------------- */
                function checkIP(IP){ //IP Adresse prüfen
                if(net.isIPv4(IP)){
                setTimeout(function () {
                client=Connect(IP);
                },2000);
                }
                else{console.error('ungültige IP Adresse')}
                }

                function Connect(IP){ // zur Box Verbinden

                var client = net.connect({host:IP, port:1255});
                    client.setKeepAlive(true,5000);
                
                console.log('Connectig...');
                
                client.on('error',function(error) {
                    console.error(error);
                    killClient(client);
                }); 
                
                client.on('connect', function () {          //Verbindung hergestellt
                {setState("javascript.1.Denon.Heos.Verbunden",val=true,akt=true);}
                console.log('Verbunden mit Denon Heos!');
                if (getState("javascript.1.Denon.Heos.Verbunden").val) console.log ("Variable ist true");
                
                });
                

                ! client.on('end', function () { //die Gegenseite hat die Verbindung geschlossen
                console.warn('Heos hat die Verbindung geschlossen !');
                killClient(client);
                });

                return client;
                }//end of Function Connect

                ! /** Funktion Nachricht Senden---------------------------------------------------------- /
                function sendMessage(message) {
                if(getState('javascript.1.Denon.Heos.Verbunden').val){
                client.write(message + "\n");
                console.log("Message versandt: "+ message);
                }
                else
                console.log("Keine Verbindung - keine Message versandt!");
                }
                ! /
                * Funktion Verbindung beenden---------------------------------------------------------- */
                function killClient(client){
                client.destroy();
                client.unref();
                setState("javascript.1.Denon.Heos.Verbunden"/javascript.1.Denon.Heos.Verbunden/, false);
                console.log('Connection closed!');
                }// end of Function CennectEnd
                ! onStop(function () {
                if(getState('javascript.1.Denon.Heos.Verbunden').val){killClient(client)};
                }, 2000 /ms/);
                ! createState('javascript.1.Denon.Heos.IP_Adresse', heosip,{type: "string", role: "HEOS IP Adresse"});
                createState('javascript.1.Denon.Heos.Verbunden', false, {
                name: 'Verbindung zu HEOS',
                desc: 'Verbindung zu HEOS',
                type: 'boolean',
                });
                ! ````

                Die IP und PID muss angepasst werden und das Script läuft bei mir in der 2. JS Instanz also javascript.1….

                Grüße

                Brati

                CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

                1 Antwort Letzte Antwort
                0
                • O Offline
                  O Offline
                  obakuhl
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  Hallo Brati, danke erstmal für deinen Denkanstoß Heos Geräte über Javascript zu steuern. Bei mir wird auch ein neuer Ordner im Bereits vorhanden Denon Ordner (erstellt durch das Denonscript) erstellt (arbeite mit einer javascript instanz, javascript.0)

                  3322_heos_denon.png

                  doch verstehe ich nicht wie es weiter geht. Ich habe das Script natürlich angepasst, die Verbindung scheint ja auch aufgebaut zu werden, doch wie kann ich nun etwas steuern? Also z.B. Pause oder Play?

                  Viele Grüße

                  Ben

                  1 Antwort Letzte Antwort
                  0
                  • S Offline
                    S Offline
                    Sebastian
                    schrieb am zuletzt editiert von
                    #9

                    Hallo obakuhl,

                    vielleicht kann ich hier etwas weiterhelfen. Brati hab dein Script noch etwas angepasst und erweitert. Danke für die Idee, ich komm damit sehr gut zurecht. Jetzt müsste ich bei Gelegenheit noch den Status aus den Boxen auslesen und anzeigen. Aber das sollte ja auch nicht all zu schwer sein.

                    Ich habe in vis die Widgets wie im Bild gebaut. Das Widget muss dann einfach die PID der zu bedienenden Box und den Befehl (aus den case abfrage) in die Objekte Command und CommandPID schreiben.

                    mein switch mit dem Befehlen, play, stop, Lautstärke, verschiedene streams und AUX in, Gruppen (funktioniert noch nicht richtig)

                    sieht so aus.

                    ! ````
                    createState('javascript.1.Denon.Heos.IP_Adresse', heosip,{type: "string", role: "HEOS IP Adresse"});
                    createState('javascript.1.Denon.Heos.Command', "getALLPlayersInfo");
                    createState('javascript.1.Denon.Heos.CommandPID', "1946911914");
                    createState('javascript.1.Denon.Heos.Return', "");
                    createState('javascript.1.Denon.Heos.Verbunden', false, {
                    name: 'Verbindung zu HEOS',
                    desc: 'Verbindung zu HEOS',
                    type: 'boolean',
                    });
                    ! on({id: "javascript.1.Denon.Heos.Command"/Commando für HEOS Aufruf/, change: "any"}, function (obj) {
                    befehl = getState("javascript.1.Denon.Heos.Command").val; // Befehl gleich Name des aufzurufendem case
                    var StreamURL = ""

                    if(!getState('javascript.1.Denon.Heos.Verbunden').val) 
                        checkIP(getState('javascript.1.Denon.Heos.IP_Adresse').val);    // Verbinden mit HEOS
                    
                    switch (befehl) {
                        case "muteTogglePlayer":
                            sendMessage('heos://player/toggle_mute?pid='+getState('javascript.1.Denon.Heos.CommandPID').val);
                            break;   
                        case "volUp":
                            sendMessage('heos://player/volume_up?pid='+getState('javascript.1.Denon.Heos.CommandPID').val+"/step=5");
                            break;    
                        case "volDown":
                            sendMessage('heos://player/volume_down?pid='+getState('javascript.1.Denon.Heos.CommandPID').val+"/step=5");
                            break; 
                         case "playPlayer":
                            sendMessage('heos://player/set_play_state?pid='+getState('javascript.1.Denon.Heos.CommandPID').val+'&state=play'); //play, pause, stop
                            break;   
                        case "stopPlayer":
                            sendMessage('heos://player/set_play_state?pid='+getState('javascript.1.Denon.Heos.CommandPID').val+'&state=stop'); //play, pause, stop
                            break;
                        case "stream_swr3":
                            StreamURL = "http://mp3-live.swr3.de/swr3_m.m3u";
                            sendMessage('heos://browse/play_stream?pid='+getState('javascript.1.Denon.Heos.CommandPID').val+'&url='+StreamURL);
                            break;
                        case "stream_rockantenne":
                            StreamURL = "http://www.rockantenne.de/webradio/rockantenne.m3u";
                            sendMessage('heos://browse/play_stream?pid='+getState('javascript.1.Denon.Heos.CommandPID').val+'&url='+StreamURL);
                            break;
                        case "groupEG":
                            sendMessage('heos://group/set_group?pid=-624821035,-570512098');
                            break;
                        case "unGroupEG":
                            sendMessage('heos://group/set_group?pid=-624821035');
                            break;
                         case "inputAUX":
                            sendMessage('heos://browse/play_input?pid='+getState('javascript.1.Denon.Heos.CommandPID').val+'&input=inputs/aux_in_1');
                            break;   
                    
                        default:
                            console.warn("HEOS Befehl nicht bekannt!");
                            // falls keine der case-Klauseln mit befehl übereinstimmt
                        break;
                    }
                    

                    !
                    });
                    ! ````

                    Hoffe das hilft etwas.

                    Gruß

                    Sebastian
                    1619_bildschirmfoto_2018-01-17_23-27-37.png

                    1 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      Brati
                      schrieb am zuletzt editiert von
                      #10

                      Nabend,

                      hab den Beitrag von heute morgen gelöscht und mich noch mal an das Script gesetzt. Der Status kann jetzt ausgelesen werden und vor allem das Album Cover finde ich genial :lol:

                      So sieht es aus:
                      709_heoscontrol.jpg

                      Das ist das Script:

                      ! ````
                      /** HEOS Control v 0.6 vom 25.01.2018

                      •  HEOS CLI Protokoll: http://rn.dmglobal.com/euheos/HEOS_CLI_ProtocolSpecification.pdf
                        
                      •  HowTo Infos zu HEOS auslesen: https://www.loxforum.com/forum/faqs-tutorials-howto-s/5665-howto-denon-heos-als-multiroom-l%C3%B6sung
                        
                      •  Funktion
                        
                      •  - IP und PID der Box im State unter Objekte ergänzen
                        
                      •  - LogIn Daten in den Objekten ergänzen
                        
                      •  - mittels Widget werden im State ...Denon.Heos.Command die auszuführenden Kommandos übergeben.
                        
                      •    jedes Kommando muss sich dann im switch/ case Teil wieder finden und dort die Links aus dem CLI Protokoll hinterlegt sein
                        

                      */

                      ! var heosip = getState('javascript.' + instance + '.Denon.Heos.IP_Adresse').val,
                      heospid = getState("javascript." + instance + ".Denon.Heos.PID").val,
                      logging = false, // true = Ausgabe im Log
                      net = require('net'),
                      befehl = "",
                      level = "",
                      volume = 0,
                      client ;
                      ! log('Script ' + name + ' started by ' + instance + '!');
                      ! /** Befehl aus dem State Command ausführen */
                      on({id: "javascript." + instance + ".Denon.Heos.Command"/Commando für HEOS Aufruf/, change: "any"}, function (obj) {
                      befehl = getState("javascript." + instance + ".Denon.Heos.Command").val; // Befehl gleich Name des aufzurufendem case

                      /** in diesem Bereich wird der Status bei Befehlsaufruf getriggert */
                      if(!getState('javascript.' + instance + '.Denon.Heos.Verbunden').val) 
                          checkIP(getState('javascript.' + instance + '.Denon.Heos.IP_Adresse').val);    // Verbinden mit HEOS
                      
                      if (befehl != "getvol" && befehl != "getstate" && befehl !="getmedia"){     // Status Infos Pollen
                          setStateDelayed("javascript." + instance + ".Denon.Heos.Command", 'getvol', 500, false);
                          setStateDelayed("javascript." + instance + ".Denon.Heos.Command", 'getstate', 2500, false);
                          setStateDelayed("javascript." + instance + ".Denon.Heos.Command", 'getmedia', 3500, false);
                      }
                      if (befehl == "getmedia"){                                                   // Status Infos Pollen
                          setStateDelayed("javascript." + instance + ".Denon.Heos.Command", 'getvol', 500, false);
                          setStateDelayed("javascript." + instance + ".Denon.Heos.Command", 'getstate', 2500, false);
                      
                      }
                      
                      switch (befehl) {
                          case "getvol":
                              sendMessage('heos://player/get_volume?pid=' + heospid + '');
                              break;  
                          case "getstate":
                              sendMessage('heos://player/get_play_state?pid=' + heospid + '');
                              break;        
                          case "getmedia":
                              sendMessage('heos://player/get_now_playing_media?pid=' + heospid + '');
                              break;
                          case "sign":	// Sign In der Box ausführen
                              sendMessage('heos://system/sign_in?un=' + getState('javascript.' + instance + '.Denon.Heos.Login').val + '&pw=' + getState('javascript.' + instance + '.Denon.Heos.LoginPW').val);
                              break;
                          case "play":   // Play Starten
                              sendMessage('heos://player/set_play_state?pid=' + heospid + '&state=play');
                              break;
                          case "pause":   // Box Pause
                              sendMessage('heos://player/set_play_state?pid=' + heospid + '&state=pause');
                              break;
                          case "stop":   // Box Stop
                              sendMessage('heos://player/set_play_state?pid=' + heospid + '&state=stop');
                              break;   
                          case "volslider":
                              sendMessage('heos://player/set_volume?pid=' + heospid + '&level=' + volume);
                              break;  
                          case "vol15":   // Volume auf 15
                              sendMessage('heos://player/set_volume?pid=' + heospid + '&level=15');
                              break;
                          case "vol20":   // Volume auf 20
                              sendMessage('heos://player/set_volume?pid=' + heospid + '&level=20');
                              break;
                          case "vol0":   // Volume auf 20
                              sendMessage('heos://player/set_volume?pid=' + heospid + '&level=0');
                              break;    
                          case "voldown":   // Volume 5 runter
                              sendMessage('heos://player/volume_down?pid=' + heospid + '&step=5');
                              break;
                          case "volup":   // Volume 5 runter
                              sendMessage('heos://player/volume_up?pid=' + heospid + '&step=5');
                              break;
                          case "dividing":// Dividing Line abspielen - TuneIn Heos Favorit   
                              sendMessage('heos://browse/play_stream?pid=' + heospid + '&sid=1028&cid=CID-55&mid=s134548');
                              break;
                          case "morow":   // Morow Prog FM abspielen - TuneIn Heos Favorit
                              sendMessage('heos://browse/play_stream?pid=' + heospid + '&sid=1028&cid=CID-55&mid=s17213');
                              break;
                          case "radio1":   // Radio1 abspielen - TuneIn Heos Favorit
                              sendMessage('heos://browse/play_stream?pid=' + heospid + '&sid=1028&cid=CID-55&mid=s25111');
                              break; 
                          case "teddy":   // Radio Teddy abspielen - TuneIn Heos Favorit
                              sendMessage('heos://browse/play_stream?pid=' + heospid + '&sid=1028&cid=CID-55&mid=s80044');
                              break;
                      
                          default:
                              console.warn("HEOS Befehl -- " + befehl + " -- nicht bekannt!");
                              // falls keine der case-Klauseln mit befehl übereinstimmt
                          break;
                      }
                      

                      !
                      });
                      ! checkIP(getState('javascript.' + instance + '.Denon.Heos.IP_Adresse').val);
                      ! /** Volume über Slider steuern---------------------------------------------------------- */
                      ! on({id: "javascript." + instance + ".Denon.Heos.Volume"/Commando für HEOS Aufruf/, change: "ne"}, function (obj) {

                      befehl  = getState("javascript." + instance + ".Denon.Heos.Command").val;      // Befehl gleich Name des aufzurufendem case
                      volume  = getState("javascript." + instance + ".Denon.Heos.Volume").val;       // neue Volume auslesen
                      
                      if (befehl != "getvol") setStateDelayed("javascript." + instance + ".Denon.Heos.Command", 'volslider', 1000, false);
                      
                      });
                      

                      ! /** Funktion Verbindung zur Box---------------------------------------------------------- */
                      function checkIP(IP){ //IP Adresse prüfen
                      if(net.isIPv4(IP)){
                      setTimeout(function () {
                      client=Connect(IP);
                      },2000);
                      }
                      else{console.error('ungültige IP Adresse')}
                      }

                      function Connect(IP){ // zur Box Verbinden

                      var client = net.connect({host:IP, port:1255});
                          client.setKeepAlive(true,5000);
                      
                      console.log('Connectig...');
                      
                      client.on('error',function(error) {
                          console.error(error);
                          killClient(client);
                      }); 
                      
                      client.on('connect', function () {          //Verbindung hergestellt
                      {setState("javascript." + instance + ".Denon.Heos.Verbunden",val=true,akt=true);}
                      console.log('Verbunden mit Denon Heos!');
                      if (getState("javascript." + instance + ".Denon.Heos.Verbunden").val) console.log ("Variable ist true");
                      
                      });
                      

                      ! client.on('end', function () { //die Gegenseite hat die Verbindung geschlossen
                      console.warn('Heos hat die Verbindung geschlossen !');
                      killClient(client);
                      });

                      client.on('data', function (data) {
                      
                          if (logging) console.log(data.toString());         //log für kommende Daten ################################################################################################
                      
                          response(data);
                      
                       });
                      

                      return client;
                      }//end of Function Connect

                      ! /** Funktion Nachricht Senden---------------------------------------------------------- /
                      function sendMessage(message) {
                      if(getState('javascript.' + instance + '.Denon.Heos.Verbunden').val){
                      client.write(message + "\n");
                      if (logging) console.log("Message versandt: "+ message);
                      }
                      else
                      console.log("Keine Verbindung - keine Message versandt!");
                      }
                      ! /
                      * Funktion Daten empfangen ---------------------------------------------------------- */
                      function response (data) {

                      var HEOS_Response=data.toString().replace(/[\n\r]/g, '');    // Steuerzeichen "CR" entfernen   
                      
                      messageJSON = JSON.parse(HEOS_Response);                          // JSON Objekt einlesen
                      
                      if (befehl == "getmedia") {                                 // aktuelle Medieninfo einlesen
                          try {    
                              setState('javascript.' + instance + '.Denon.Heos.song',messageJSON.payload.song);
                              setState('javascript.' + instance + '.Denon.Heos.station',messageJSON.payload.station);
                              setState('javascript.' + instance + '.Denon.Heos.Artist',messageJSON.payload.artist);
                              setState('javascript.' + instance + '.Denon.Heos.image_url',messageJSON.payload.image_url);
                              setState('javascript.' + instance + '.Denon.Heos.Artist',messageJSON.payload.artist);
                              setState('javascript.' + instance + '.Denon.Heos.type',messageJSON.payload.type);
                              }
                          catch(e){
                              log('HEOS get Media Error:' + e);
                              setState('javascript.' + instance + '.Denon.Heos.song', "fail");
                              setState('javascript.' + instance + '.Denon.Heos.station', "fail");
                              setState('javascript.' + instance + '.Denon.Heos.Artist', "fail"); 
                              }
                      
                      }
                      if (befehl == "getvol") {                                   // aktuelle Volume einlesen
                          try {
                              level = HEOS_Response.split('level=');
                              level = level[1].split('"');
                              setState('javascript.' + instance + '.Denon.Heos.Volume',level[0]);
                              }
                          catch(e){
                                  log('HEOS getVol Error:' + e);
                              }
                      }    
                      
                      if (befehl == "getstate") {                             // aktuelle PlayState einlesen
                          try {
                              level = HEOS_Response.split('state=');
                              level = level[1].split('"');
                              setState('javascript.' + instance + '.Denon.Heos.State',level[0]);
                          }
                          catch(e){
                                  log('HEOS getState Error:' + e);
                              }    
                      }
                      

                      }

                      ! /** Funktion Verbindung beenden---------------------------------------------------------- */
                      function killClient(client){
                      client.destroy();
                      client.unref();
                      setState("javascript." + instance + ".Denon.Heos.Verbunden"/javascript.1.Denon.Heos.Verbunden/, false);
                      console.log('Connection closed!');
                      }// end of Function CennectEnd
                      ! onStop(function () {
                      if(getState('javascript.' + instance + '.Denon.Heos.Verbunden').val){killClient(client)}
                      }, 2000 /ms/);
                      ! createState('javascript.' + instance + '.Denon.Heos.Command', "", {role: 'Commando für HEOS Aufruf'});
                      createState('javascript.' + instance + '.Denon.Heos.PID', "", {desc: 'PID für HEOS Box'});
                      createState('javascript.' + instance + '.Denon.Heos.Login', "", {role: 'Login HEOS Konto'});
                      createState('javascript.' + instance + '.Denon.Heos.LoginPW', "", {role: 'Passwort HEOS Konto'});
                      createState('javascript.' + instance + '.Denon.Heos.Volume', "", {role: 'Abgefragte Volume für HEOS'});
                      createState('javascript.' + instance + '.Denon.Heos.State', "", {role: 'State von HEOS'});
                      createState('javascript.' + instance + '.Denon.Heos.station', "", {role: 'aktuelles Medium von HEOS'});
                      createState('javascript.' + instance + '.Denon.Heos.Artist', "", {role: 'aktueller Artist von HEOS'});
                      createState('javascript.' + instance + '.Denon.Heos.song', "", {role: 'aktueller Song von HEOS'});
                      createState('javascript.' + instance + '.Denon.Heos.image_url', "", {role: 'aktuelle image_url von HEOS'});
                      createState('javascript.' + instance + '.Denon.Heos.type', "", {role: 'aktueller Quellen Type von HEOS'});
                      ! createState('javascript.' + instance + '.Denon.Heos.IP_Adresse', heosip,{type: "string", role: "HEOS IP Adresse"});
                      createState('javascript.' + instance + '.Denon.Heos.Verbunden', false, {
                      name: 'Verbindung zu HEOS',
                      desc: 'Verbindung zu HEOS',
                      type: 'boolean',
                      });
                      ! ````

                      Zur Funktion:

                      Über den State heos.command wird der Befehl übergeben, welcher mit einem Wert im switch/ case Teil übereinstimmen muss. Dort müssen die Links auf die eigenen Favoriten angepasst werden.

                      Dazu bitte die http://rn.dmglobal.com/euheos/HEOS_CLI_ProtocolSpecification.pdf verwenden und https://www.loxforum.com/forum/faqs-tutorials-howto-s/5665-howto-denon-heos-als-multiroom-l%C3%B6sung gibt es viele Infos zum Auslesen der PID usw.

                      ViewExport:

                      ! ````
                      [{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"volup","text":"","src":"/vis.0/main/img/svg/control_plus.svg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"7px","top":"80px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"voldown","text":"","src":"/vis.0/main/img/svg/control_minus.svg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"187px","top":"80px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"play","text":"","src":"/icons-mfd-svg/audio_play.svg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"7px","top":"8px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"pause","text":"","src":"/icons-mfd-svg/audio_pause.svg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"67px","top":"8px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"stop","text":"","src":"/icons-mfd-svg/audio_stop.svg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"127px","top":"8px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"dividing","text":"","src":"/vis.0/main/img/Dividing_Line.png","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"67px","top":"247px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"teddy","text":"","src":"/vis.0/main/img/Radio_Teddy.jpg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"7px","top":"247px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"morow","text":"","src":"/vis.0/main/img/morow.jpg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"127px","top":"247px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"radio1","text":"","src":"/vis.0/main/img/Radio1.jpg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"187px","top":"245px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplValueString","data":{"oid":"","visibility-cond":"==","visibility-val":1,"name":"Aktuelle Lautstärke","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"html_prepend":"Station: ","g_css_border":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"10px","top":"160px","width":"47px","height":"25px","color":"rgb(255, 255, 255)","font-size":"small","letter-spacing":"","word-spacing":"","line-height":"2","text-align":"left"},"widgetSet":"basic"},{"tpl":"tplFrame","data":{"g_fixed":false,"g_visibility":true,"g_css_font_text":false,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":"play","visibility-groups-action":"hide","title":"","title_color":"black","title_top":"-10","title_left":"15","header_height":"0","header_color":"black","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-oid":"javascript.1.Denon.Heos.State","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"24px","top":"64px","width":"15px","height":"5px","background":"green","border-radius":"3px"},"widgetSet":"basic"},{"tpl":"tplFrame","data":{"g_fixed":false,"g_visibility":true,"g_css_font_text":false,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":"pause","visibility-groups-action":"hide","title":"","title_color":"black","title_top":"-10","title_left":"15","header_height":"0","header_color":"black","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-oid":"javascript.1.Denon.Heos.State","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"84px","top":"64px","width":"15px","height":"5px","background":"darkorange","border-radius":"3px"},"widgetSet":"basic"},{"tpl":"tplFrame","data":{"g_fixed":false,"g_visibility":true,"g_css_font_text":false,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":"stop","visibility-groups-action":"hide","title":"","title_color":"black","title_top":"-10","title_left":"15","header_height":"0","header_color":"black","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-oid":"javascript.1.Denon.Heos.State","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"144px","top":"64px","width":"15px","height":"5px","background":"darkred","border-radius":"3px"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"","visibility-cond":"==","visibility-val":1,"name":"Aktuelle Lautstärke","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"html_prepend":"Artist: ","g_css_border":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"10px","top":"180px","width":"47px","height":"26px","color":"rgb(255, 255, 255)","font-size":"small","letter-spacing":"","word-spacing":"","line-height":"2","text-align":"left"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"","visibility-cond":"==","visibility-val":1,"name":"Aktuelle Lautstärke","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"html_prepend":"Song: ","g_css_border":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"10px","top":"200px","width":"47px","height":"26px","color":"rgb(255, 255, 255)","font-size":"small","letter-spacing":"","word-spacing":"","line-height":"2","text-align":"left"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"javascript.1.Denon.Heos.station","visibility-cond":"==","visibility-val":1,"name":"Aktuelle Lautstärke","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"html_prepend":"","g_css_border":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"60px","top":"160px","width":"270px","height":"26px","color":"rgb(255, 255, 255)","font-size":"small","letter-spacing":"","word-spacing":"","line-height":"2","text-align":"left"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"javascript.1.Denon.Heos.Artist","visibility-cond":"==","visibility-val":1,"name":"Aktuelle Lautstärke","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"html_prepend":"","g_css_border":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"60px","top":"180px","width":"270px","height":"26px","color":"rgb(255, 255, 255)","font-size":"small","letter-spacing":"","word-spacing":"","line-height":"2","text-align":"left"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"javascript.1.Denon.Heos.song","visibility-cond":"==","visibility-val":1,"name":"Aktuelle Lautstärke","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"html_prepend":"","g_css_border":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"60px","top":"200px","width":"270px","height":"26px","color":"rgb(255, 255, 255)","font-size":"small","letter-spacing":"","word-spacing":"","line-height":"2","text-align":"left"},"widgetSet":"basic"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"vol15","text":"15","src":"","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"67px","top":"80px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"vol20","text":"20","src":"","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"127px","top":"80px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplValueString","data":{"oid":"","visibility-cond":"==","visibility-val":1,"name":"Aktuelle Lautstärke","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"html_prepend":"Vol: ","g_css_border":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"10px","top":"140px","width":"47px","height":"25px","color":"rgb(255, 255, 255)","font-size":"small","letter-spacing":"","word-spacing":"","line-height":"2","text-align":"left"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"javascript.1.Denon.Heos.Volume","visibility-cond":"==","visibility-val":1,"name":"Aktuelle Lautstärke","visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"g_gestures":false,"html_prepend":"","g_css_border":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"60px","top":"140px","width":"270px","height":"26px","color":"rgb(255, 255, 255)","font-size":"small","letter-spacing":"","word-spacing":"","line-height":"2","text-align":"left"},"widgetSet":"basic"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"getmedia","text":"Status","src":"","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"350px","top":"9px","width":"50px","height":"50px","font-size":"small"},"widgetSet":"jqui"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"sign","text":"SignIn","src":"","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"290px","top":"9px","width":"50px","height":"50px","font-size":"small"},"widgetSet":"jqui"},{"tpl":"tplValueStringImg","data":{"oid":"javascript.1.Denon.Heos.image_url","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"60000","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"250px","top":"144px","width":"150px","height":"150px","position":""},"widgetSet":"basic"},{"tpl":"tplIconState","data":{"oid":"javascript.1.Denon.Heos.Command","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"value":"vol0","text":"","src":"/vis.0/main/img/svg/audio_volume_mute.svg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"247px","top":"80px","width":"50px","height":"50px"},"widgetSet":"jqui"},{"tpl":"tplIconStateBool","data":{"oid":"nothing_selected","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"false_src":"/vis.0/main/img/svg/control_plus.svg","click_id":"javascript.0.Denon.Heos.Command","click_value":"volup","true_src":"/vis.0/main/img/svg/control_plus.svg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"297px","top":"73px"},"widgetSet":"jqui"},{"tpl":"tplIconStateBool","data":{"oid":"nothing_selected","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"false_src":"/vis.0/main/img/svg/control_plus.svg","click_id":"javascript.0.Denon.Heos.Command","click_value":"volup","true_src":"/vis.0/main/img/svg/control_plus.svg","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"326px","top":"27px"},"widgetSet":"jqui"}]

                      
                      Was noch fehlt:
                      
                      - Gruppensteuerung
                      
                      - verschiedene Boxen steuern (hab momentan nur eine)
                      
                      - Status regelmäßig pollen
                      
                      Ich empfehle solche Scripte nicht in der 1\. Instanz von JS laufen zu lassen. Läuft beim Parsen was schief, stürzt die ganze Instanz ab und somit alle Scripte dort.
                      
                      ****<u>######## Updates#######</u>****
                      
                      V 0.6 vom 25.01.2018
                      
                      - das Script reagiert auf das Setzen des State "Volume" -> Einbindung Widget Slider möglich
                      
                      - JS Instanz wird automatisch ausgelesen 
                      
                      Grüße
                      
                      Brati

                      CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

                      1 Antwort Letzte Antwort
                      0
                      • O Offline
                        O Offline
                        obakuhl
                        Developer
                        schrieb am zuletzt editiert von
                        #11

                        Hallo Brati, hallo Sebastian,

                        Danke für Eure Ideen. Jetzt habe ich einen Ansatz an dem man weiter arbeiten kann. Dein Skript Brati sieht super aus. Auf den ersten Blick sind mir nur ein paar Rechtschreibfehler aufgefallen(z.B. "Connectig"), und beim Widget scheinst du 2 mal "javascript.0" noch zu verwenden. Ich habe schon angefangen, das Ganze für meine Bedürfnisse anzupassen. Die Steuerung über den Commandbefehl über Objekte ist problemlos möglich, ich denke das nächste Große sind die Gruppensteuerung sowie ein regelmäßiges abfragen der aktuellen Parameter. Werde das WE mal was probieren, wenn nicht bis dahin schon jemand von Euch eine saubere Lösung gefunden hat :)

                        Viele Grüße

                        Ben

                        1 Antwort Letzte Antwort
                        0
                        • B Offline
                          B Offline
                          Brati
                          schrieb am zuletzt editiert von
                          #12

                          Morjens,

                          vielleicht können wir ja zusammen ein Script weiter bauen, was sich nur in den case Befehlen unterscheidet. Alles andere Variable ist in States ausgelagert. Die JS Instanz kann man wohl auch variabel gestalten.

                          Regelmäßig abfragen geht einfach über schedule, ich würde das Intervall bei Playstate Stop aber länger setzen als bei Play.

                          Das Widget schau ich mir noch mal an, hab gar keine Objekte mehr in Javascript.0

                          Grüße Brati

                          Von unterwegs gesendet…

                          CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

                          1 Antwort Letzte Antwort
                          0
                          • O Offline
                            O Offline
                            obakuhl
                            Developer
                            schrieb am zuletzt editiert von
                            #13

                            Guten Morgen,

                            bei der Lautstärke habe ich mir überlegt, das es doch cleverer wäre, wenn diese über einen 'slider' als Vis Element gesteuert werden kann, der Werte zwischen 0 und z. B 30 (wäre dann in diesem Fall die max. Lautstärke) übergibt.

                            Gestern Abend habe ich aus dem Denon Skript die Schleife rauskopiert und in das Heos Skript eingebaut, aber noch nicht weiter angepasst. Ich denke mit dieser sollte es möglich sein. Wenn über Spotify Musik gehört wird gibt es sowieso ständigen Austausch zwischen der Box und dem Netzwerk, da wird ich eine weitere Abfrage, in welchem state die Box sich befindet nicht ins Gewicht fallen.

                            Das wird ein Bastel Wochenende ;)

                            Lg Ben

                            1 Antwort Letzte Antwort
                            0
                            • UhulaU Offline
                              UhulaU Offline
                              Uhula
                              schrieb am zuletzt editiert von
                              #14

                              Soll keine Konkurrenz sein, eher eine Alternative, welche auch mehrere HEOS Player unterstützt.

                              http://forum.iobroker.net/viewtopic.php … 03#p119303

                              Danke für die Inspiration hier.

                              Uhula - Leise und Weise
                              Ex: ioBroker on Gigabyte NUC Proxmox

                              1 Antwort Letzte Antwort
                              0
                              • B Offline
                                B Offline
                                Brati
                                schrieb am zuletzt editiert von
                                #15

                                @Uhula:

                                Soll keine Konkurrenz sein, eher eine Alternative, welche auch mehrere HEOS Player unterstützt.

                                http://forum.iobroker.net/viewtopic.php … 03#p119303

                                Danke für die Inspiration hier. `

                                Hut ab und gleich den richtigen Ansatz gewählt. Da ja HEOS alles auslesen lässt, muss man es ja auch intigrieren können.

                                Ich werde mich mit deinem Script weiter beschäftigen :).

                                CCU2 - 46 Geräte, ioBroker auf Intel NUC (DN2820FYKH) mit Tab als Frontend, Projekt Gartenhaus mit HM

                                W 1 Antwort Letzte Antwort
                                0
                                • B Brati

                                  @Uhula:

                                  Soll keine Konkurrenz sein, eher eine Alternative, welche auch mehrere HEOS Player unterstützt.

                                  http://forum.iobroker.net/viewtopic.php … 03#p119303

                                  Danke für die Inspiration hier. `

                                  Hut ab und gleich den richtigen Ansatz gewählt. Da ja HEOS alles auslesen lässt, muss man es ja auch intigrieren können.

                                  Ich werde mich mit deinem Script weiter beschäftigen :).

                                  W Offline
                                  W Offline
                                  withstu
                                  schrieb am zuletzt editiert von
                                  #16

                                  @Brati Btw. es gibt mittlerweile einen HEOS Adapter: https://github.com/withstu/ioBroker.heos

                                  1 Antwort Letzte Antwort
                                  0
                                  Antworten
                                  • In einem neuen Thema antworten
                                  Anmelden zum Antworten
                                  • Älteste zuerst
                                  • Neuste zuerst
                                  • Meiste Stimmen


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  839

                                  Online

                                  32.5k

                                  Benutzer

                                  81.7k

                                  Themen

                                  1.3m

                                  Beiträge
                                  Community
                                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                  ioBroker Community 2014-2025
                                  logo
                                  • Anmelden

                                  • Du hast noch kein Konto? Registrieren

                                  • Anmelden oder registrieren, um zu suchen
                                  • Erster Beitrag
                                    Letzter Beitrag
                                  0
                                  • Home
                                  • Aktuell
                                  • Tags
                                  • Ungelesen 0
                                  • Kategorien
                                  • Unreplied
                                  • Beliebt
                                  • GitHub
                                  • Docu
                                  • Hilfe