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. ioBroker Allgemein
  4. snapcast und HTTP-API

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

snapcast und HTTP-API

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
iobrokerrest api
4 Beiträge 1 Kommentatoren 1.2k 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.
  • J Offline
    J Offline
    jampr
    schrieb am zuletzt editiert von
    #1

    Hi zusammen,
    ich bin gerade dabei ein kleines Multiroom-System mit Snapcast aufzubauen.

    Das funktioniert bisher mit einem Server, zwei Clients und zwei Fifo-Gruppen super. Nun möchte ich das gerne noch in die Vis einbinden und die Gruppen und Clients steuern. Dafür gibt es ja eine API, die auch über Postman erreichbar ist.
    POST -> http://snapcast-server:1780/jsonrpc
    {"id":1,"jsonrpc":"2.0","method":"Server.GetStatus"}

    Jetzt kommt da natürlich ne ordentliche JSON-Datei zurück. Wie würdet ihr da jetzt weiter vorgehen? Soll ich mir ein eigenen Adapter dafür bauen? Oder ist es besser, sowas wie socket.io zu benutzen? Wobei mir da etwas der Horizont fehlt, um das sinnvoll zu bestücken.

    Also grundsätzlich fehlt mir ehrlich gesagt, das Knowhow, um den richtigen/besten Weg zu finden.

    Eigentlich steht in dem Status schon drin, welche Gruppen es gibt und welche Clients gerade wo angemeldet sind. Und die weiteren API-Requests sind ja auch selbsterklärend. Aber wie packe ich das jetzt am Besten in sinnvolle Stati und Objekte?

    Ich bin für jeden Tipp dankbar.
    Also schon mal liebe Grüße

    1 Antwort Letzte Antwort
    0
    • J Offline
      J Offline
      jampr
      schrieb am zuletzt editiert von
      #2

      so, ich bin einen Schritt weiter gekommen.
      ich habe den Javascript Adapter installiert und konnte schonmal die API ansprechen:

      var server = 'http://snapcast-server:1780/jsonrpc'; // IP  
      
      var body_sent = {"id":"1","jsonrpc":"2.0","method":"Server.GetStatus"}
       
      request.post({
              url: server,
              headers: {'Content-Type': 'application/json'},
              json:    body_sent
          
          }, function(error, response, body) {        
                  log(JSON.stringify(body));
          }
      );
      
      1 Antwort Letzte Antwort
      0
      • J Offline
        J Offline
        jampr
        schrieb am zuletzt editiert von
        #3

        Die states habe ich jetzt erstmal angelegt. Für Audio habe ich eine eigene view angelegt. Aber wie starte ich das script, sobald der Knopf 'navigation - view' gedrückt wird?

        var realm = 'snapcast';
        var server = 'http://snapcast-server:1780/jsonrpc'; // IP  
        
        var body_sent = {"id":"1","jsonrpc":"2.0","method":"Server.GetStatus"} 
        
        // löschen aller Werte (Gruppen, Streams, usw.)
        $("[id=javascript.0."+realm+"]").each(function (id) {
            deleteState(id);
        })
        
        // Init
        request.post({
                url: server,
                headers: {'Content-Type': 'application/json'},
                json:    body_sent    
            },    
            function(error, response, body) {
        
                for (let i in body.result.server.streams) { 
                    let stream = body.result.server.streams[i];
                    let state = realm + '.Streams.' + stream.id; 
        
                    createState(state, {'name':'Stream ' + i, 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                    function() {
                        setState (state, stream.uri.raw);
                        let state1 = state + '.status';
        
                        createState(state1 , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                        function() {
                            setState (state1, stream.status);
                        });
                    });
                }      
        
                let server_state = realm + '.Server';
                		
        		// server.host.arch
        		let server_arch_state = server_state +'.host.arch';
        		createState(server_arch_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_arch_state , body.result.server.server.host.arch);
        			}
        		);
        		
        		// server.host.ip
        		let server_ip_state = server_state +'.host.ip';
        		createState(server_ip_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_ip_state , body.result.server.server.host.ip);
        			}
        		);
        		
        		// server.host.mac
        		let server_mac_state = server_state +'.host.mac';
        		createState(server_mac_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_mac_state , body.result.server.server.host.mac);
        			}
        		);
        		
        		// server.host.name
        		let server_clientname_state = server_state +'.host.name';
        		createState(server_clientname_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_clientname_state , body.result.server.server.host.name);
        			}
        		);
        		
        		// server_server.host.os
        		let server_os_state = server_state +'.host.os';
        		createState(server_os_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_os_state , body.result.server.server.host.os);
        			}
        		);
        		
        		
        		// snapserver.controlProtocolVersion
        		let server_snapserver_controlProtocolVersion = server_state +'.snapserver.controlProtocolVersion';
        		createState(server_snapserver_controlProtocolVersion, {'name':'Server', 'type':'number', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_snapserver_controlProtocolVersion , body.result.server.server.snapserver.controlProtocolVersion);
        			}
        		);
        		
        		// snapserver.name
        		let server_snapserver_name = server_state +'.snapserver.name';
        		createState(server_snapserver_name, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_snapserver_name , body.result.server.server.snapserver.name);
        			}
        		);
        
        		// snapserver.protocolVersion
        		let server_snapserver_protocolVersion = server_state +'.snapserver.protocolVersion';
        		createState(server_snapserver_protocolVersion, {'name':'Server', 'type':'number', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_snapserver_protocolVersion , body.result.server.server.snapserver.protocolVersion);
        			}
        		);
        		
        		// snapserver.version
        		let server_snapserver_version = server_state +'.snapserver.version';
        		createState(server_snapserver_version, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
        			function() {
        				setState (server_snapserver_version , body.result.server.server.snapserver.version);
        			}
        		);
        
                for (let i in body.result.server.groups) { 
                    let group = body.result.server.groups[i];
                    let group_state = realm + '.Groups.' + group.id;
        
                    createState(group_state, {'name':'Gruppe ' + i, 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                        function() {
        
                                        // group_muted
                                        let group_muted_state = group_state +'.muted';
                                        createState(group_muted_state, {'name':'Group ' + i, 'type':'boolean', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (group_muted_state , group.muted);
                                            }
                                        );
        
                                        // group_name
                                        let group_name_state = group_state +'.name';
                                        createState(group_name_state, {'name':'Group ' + i, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (group_name_state , group.name);
                                            }
                                        );
        
                                        // group_stream_id
                                        let group_stream_id_state = group_state +'.stream_id';
                                        createState(group_stream_id_state, {'name':'Group ' + i, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (group_stream_id_state , group.stream_id);
                                            }
                                        );
        
                            for (let j in group.clients) { 
                                let client  = group.clients[j]; 
                                let client_state = group_state + '.' + client.id;
                                createState(client_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                                    function() {
        
                                        // client.config.instance
                                        let instance_state = client_state +'.config.instance';
                                        createState(instance_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (instance_state , client.config.instance);
                                            }
                                        );
        
                                        // client.config.latency
                                        let latency_state = client_state +'.config.latency';
                                        createState(latency_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (latency_state , client.config.latency);
                                            }
                                        );
        
                                        // client.config.name
                                        let name_state = client_state +'.config.name';
                                        createState(name_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (name_state , client.config.name);
                                            }
                                        );
                                        
                                        // client.config.volume.muted
                                        let muted_state = client_state +'.config.volume.muted';
                                        createState(muted_state, {'name':'Client ' + j, 'type':'boolean', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (muted_state , client.config.volume.muted);
                                            }
                                        );
        
                                        // client.config.volume.percent
                                        let percent_state = client_state +'.config.volume.percent';
                                        createState(percent_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (percent_state , client.config.volume.percent);
                                            }
                                        );
                                        
                                        // client.connected
                                        let connected_state = client_state +'.connected';
                                        createState(connected_state, {'name':'Client ' + j, 'type':'boolean', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (connected_state , client.connected);
                                            }
                                        );
                                        
                                        // client.host.arch
                                        let arch_state = client_state +'.host.arch';
                                        createState(arch_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (arch_state , client.host.arch);
                                            }
                                        );
        
                                        // client.host.ip
                                        let ip_state = client_state +'.host.ip';
                                        createState(ip_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (ip_state , client.host.ip);
                                            }
                                        );
        
                                        // client.host.mac
                                        let mac_state = client_state +'.host.mac';
                                        createState(mac_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (mac_state , client.host.mac);
                                            }
                                        );
                                        
                                        // client.host.name
                                        let clientname_state = client_state +'.host.name';
                                        createState(clientname_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (clientname_state , client.host.name);
                                            }
                                        );
                                        
                                        // client.host.os
                                        let os_state = client_state +'.host.os';
                                        createState(os_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (os_state , client.host.os);
                                            }
                                        );
                                        
                                        // client.lastSeen.sec
                                        let lastseen_sec_state = client_state +'.lastSeen.sec';
                                        createState(lastseen_sec_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (lastseen_sec_state , client.lastSeen.sec);
                                            }
                                        );
                                        
                                        // client.lastSeen.usec
                                        let lastseen_usec_state = client_state +'.lastSeen.usec';
                                        createState(lastseen_usec_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (lastseen_usec_state , client.lastSeen.usec);
                                            }
                                        );
                                        
                                        // client.snapclient.name
                                        let snapclient_name_state = client_state +'.snapclient.name';
                                        createState(snapclient_name_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (snapclient_name_state , client.snapclient.name);
                                            }
                                        );                                
                                        
                                        // client.snapclient.protocolVersion
                                        let snapclient_protocolVersion_state = client_state +'.snapclient.protocolVersion';
                                        createState(snapclient_protocolVersion_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (snapclient_protocolVersion_state , client.snapclient.protocolVersion);
                                            }
                                        );                            
                                        
                                        // client.snapclient.version
                                        let snapclient_version_state = client_state +'.snapclient.version';
                                        createState(snapclient_version_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                            function() {
                                                setState (snapclient_version_state , client.snapclient.version);
                                            }
                                        );
                                    }
                                );
        
                            }
                        }
                    );  
                }  
            }
        );
         
        
        1 Antwort Letzte Antwort
        0
        • J Offline
          J Offline
          jampr
          schrieb am zuletzt editiert von jampr
          #4

          so, der für mich ausreichende Stand ist der unten angehängte. Ist vielleicht nicht optimal, aber mir reicht es.

          Das Initialisieren läuft nun beim Drücken eines Knopfes.
          Bei mir gibt es nur eine Gruppe pro Client. Daher ist mein Script darauf ausgelegt.

          Es kann per Dropdown einen Host vorgeben und dessen Lautstärke ändern und die aus der response vorgegebenen Streams wechseln. Nach der Aktion wird wieder das Init ausgeführt.

          die beiden Dropdowns habe ich per Binding bestückt:

          EDIT: host_selected korrigiert:
          Volume javascript.0.snapcast.ui.host_selected
          Wert/Text {javascript.0.snapcast.snapserver_response.Groups.host_ids_list} / {javascript.0.snapcast.snapserver_response.Groups.hosts_list}
          Stream javascript.0.snapcast.ui.stream_id_selected
          Wert/Text {javascript.0.snapcast.snapserver_response.Streams.streamsArray}

          Ich persönlich habe nur zwei Streams. Einen, der vom MPD gesteuert wird, und einen, den ich manuell bestücke.

          snapcast.jpg

          states.jpg

          var server = 'http://snapcast-server:1780/jsonrpc'; // IP  
          
          var top_realm = 'snapcast';
          var fq_top_realm = 'javascript.0.' + top_realm;
          var realm = fq_top_realm + '.snapserver_response'; 
          
          var body_sent = {"id":"1","jsonrpc":"2.0","method":"Server.GetStatus"} 
          
          createState(fq_top_realm, {'name':'Snapcast', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' });
          
          let update_state = fq_top_realm+'.update';
          createState(update_state, {'name':'Stream ', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' });
          
          let delete_state = fq_top_realm+'.delete';
          createState(delete_state, {'name':'Stream ', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' });
           
          let html_state = fq_top_realm+'.html';
          createState(html_state, {'name':'Stream ', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' });
          
          let ui_state = fq_top_realm+ '.ui';
          createState(ui_state, {'name':'ui', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' });
          
          let volume_percent_selected = fq_top_realm + '.ui.Volume_percent_selected';
          createState(volume_percent_selected, {'name':'selected Volume', 'type':'number', 'read':true, 'write':true, 'role':'state', 'def':0 });
          
          let stream_id_selected = fq_top_realm + '.ui.stream_id_selected';
          createState(stream_id_selected, {'name':'Stream Id', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':0 });
          
          let group_id_selected = fq_top_realm + '.ui.group_id_selected';
          createState(group_id_selected, {'name':'group Id', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':0 });
          
          let host_selected = fq_top_realm + '.ui.host_selected';
          createState(host_selected, {'name':'selected Host', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
              function() {
                  //setState (groups_array_state , {val: groups});
                  setState (host_selected ,  ''); 
          });
          
          on({ id: host_selected 
          } , function (obj) {
              var lst = [];
              var lst1 = [];
              $("[id=*clientid*]").each (function (id) { 
                  lst.push(id);
                  //setState (html_state,'<br>'+lst.join(";")+'<br><br>'+ lst1.join("<br>"));
                  if (getState(id).val === obj.state.val){  
                      setState (group_id_selected,  getState(id.replace( 'Client' + getState(id.replace('.clientid', '.client_count_nbr')).val+'.clientid', 'groupid')).val);
                      setState (volume_percent_selected, getState(id.replace('.clientid', '.config.volume.percent')).val );
                      setState (stream_id_selected,  getState(id.replace( 'Client' + getState(id.replace('.clientid', '.client_count_nbr')).val+'.clientid', 'stream_id')).val);
                  }  
              }) 
          });
          
          on({ id: volume_percent_selected 
          } , function (obj) { 
              
              var setVolume_body = {"id":8,"jsonrpc":"2.0","method":"Client.SetVolume","params":{"id": getState (host_selected).val,"volume":{"muted":false,"percent": obj.state.val}}}
          
              request.post({
                  url: server,
                  headers: {'Content-Type': 'application/json'},
                  json:    setVolume_body    
              },    
              function(error, response, body) {   
              setState(update_state, '');
              }
              );
          });
          
          on({ id: stream_id_selected 
          } , function (obj) { 
              
              var setVolume_body = {"id":4,"jsonrpc":"2.0","method":"Group.SetStream","params":{"id":getState (group_id_selected).val,"stream_id":obj.state.val}}
          
              request.post({
                  url: server,
                  headers: {'Content-Type': 'application/json'},
                  json:    setVolume_body    
              },    
              function(error, response, body) {   
              setState(update_state, '');
              }
              );
          });
          
          
          function renderJSON(obj) {
              'use strict';
              var keys = [],
                  retValue = "";
              for (var key in obj) {
                  if (typeof obj[key] === 'object') {
                      retValue += "<div class='tree'>" + key;
                      retValue += renderJSON(obj[key]);
                      retValue += "</div>";
                  } else {
                      retValue += "<div class='tree'>" + key + " = " + obj[key] + "</div>";
                  }
          
                  keys.push(key);
              }
              return retValue;
          }
          
          on({ id: delete_state,
              change: 'any'
          } , function (obj) {
              // hier mit dem Inhalt des Objektes (obj.state.val)
              
              // löschen aller Werte (Gruppen, Streams, usw.)
              $("[id="+realm+"]").each(function (id) {
                  deleteState(id);
              })
          });
          
          on({ id: update_state,
              change: 'any'
          } , function (obj) {
          // Init
              request.post({
                  url: server,
                  headers: {'Content-Type': 'application/json'},
                  json:    body_sent    
              },    
              function(error, response, body) {        
                  let streams_array = [];
                  for (let i in body.result.server.streams) { 
                      let stream = body.result.server.streams[i];
                      let state = realm + '.Streams.' + stream.id; 
          
                      streams_array.push(stream.id);
          
                      createState(state, {'name':'Stream ' + i, 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                      function() {
                          setState (state, stream.uri.raw);
                          let state1 = state + '.status';
          
                          createState(state1 , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                          function() {
                              setState (state1, stream.status);
                          });
                      });
                  }      
          
                  let server_state = realm + '.Server';
                  		
          		// server.host.arch
          		let server_arch_state = server_state +'.host.arch';
          		createState(server_arch_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_arch_state , body.result.server.server.host.arch);
          			}
          		);
          		
          		// server.host.ip
          		let server_ip_state = server_state +'.host.ip';
          		createState(server_ip_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_ip_state , body.result.server.server.host.ip);
          			}
          		);
          		
          		// server.host.mac
          		let server_mac_state = server_state +'.host.mac';
          		createState(server_mac_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_mac_state , body.result.server.server.host.mac);
          			}
          		);
          		
          		// server.host.name
          		let server_clientname_state = server_state +'.host.name';
          		createState(server_clientname_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_clientname_state , body.result.server.server.host.name);
          			}
          		);
          		
          		// server_server.host.os
          		let server_os_state = server_state +'.host.os';
          		createState(server_os_state, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_os_state , body.result.server.server.host.os);
          			}
          		);
          		
          		
          		// snapserver.controlProtocolVersion
          		let server_snapserver_controlProtocolVersion = server_state +'.snapserver.controlProtocolVersion';
          		createState(server_snapserver_controlProtocolVersion, {'name':'Server', 'type':'number', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_snapserver_controlProtocolVersion , body.result.server.server.snapserver.controlProtocolVersion);
          			}
          		);
          		
          		// snapserver.name
          		let server_snapserver_name = server_state +'.snapserver.name';
          		createState(server_snapserver_name, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_snapserver_name , body.result.server.server.snapserver.name);
          			}
          		);
          
          		// snapserver.protocolVersion
          		let server_snapserver_protocolVersion = server_state +'.snapserver.protocolVersion';
          		createState(server_snapserver_protocolVersion, {'name':'Server', 'type':'number', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_snapserver_protocolVersion , body.result.server.server.snapserver.protocolVersion);
          			}
          		);
          		
          		// snapserver.version
          		let server_snapserver_version = server_state +'.snapserver.version';
          		createState(server_snapserver_version, {'name':'Server', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          			function() {
          				setState (server_snapserver_version , body.result.server.server.snapserver.version);
          			}
          		);
          
                  let host_names_array = [];
                  let host_ids_array = [];     
                  for (let i in body.result.server.groups) { 
                      let group = body.result.server.groups[i];
                      let group_state = realm + '.Groups.Group' + i;
          
                      createState(group_state, {'name':'Gruppe ' + i, 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                          function() {
                                          // group_id
                                          let group_id_state = group_state +'.groupid';
                                          createState(group_id_state, {'name':'Group ID', 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (group_id_state , group.id);
                                              }
                                          );
                                          // group_muted
                                          let group_muted_state = group_state +'.muted';
                                          createState(group_muted_state, {'name':'Group ' + i, 'type':'boolean', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (group_muted_state , group.muted);
                                              }
                                          );
          
                                          // group_name
                                          let group_name_state = group_state +'.name';
                                          createState(group_name_state, {'name':'Group ' + i, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (group_name_state , group.name);
                                              }
                                          );
          
                                          // group_stream_id
                                          let group_stream_id_state = group_state +'.stream_id';
                                          createState(group_stream_id_state, {'name':'Group ' + i, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (group_stream_id_state , group.stream_id);
                                              }
                                          );
                  
                              for (let j in group.clients) { 
                                  let client  = group.clients[j];                         
                                  let client_state = group_state + '.Client' + j;
                                  
                                  host_names_array.push(client.host.name);
                                  host_ids_array.push(client.id);
          
                                  createState(client_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                                      function() {
          
                                          // client.id
                                          let id_state = client_state +'.clientid';
                                          createState(id_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (id_state , client.id);
                                              }
                                          );
          
          
                                          // client.id
                                          let client_count_nbr_state = client_state +'.client_count_nbr';
                                          createState(client_count_nbr_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (client_count_nbr_state , j);
                                              }
                                          );
          
                                          // client.config.instance
                                          let instance_state = client_state +'.config.instance';
                                          createState(instance_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (instance_state , client.config.instance);
                                              }
                                          );
          
                                          // client.config.latency
                                          let latency_state = client_state +'.config.latency';
                                          createState(latency_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (latency_state , client.config.latency);
                                              }
                                          );
          
                                          // client.config.name
                                          let name_state = client_state +'.config.name';
                                          createState(name_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (name_state , client.config.name);
                                              }
                                          );
                                          
                                          // client.config.volume.muted
                                          let muted_state = client_state +'.config.volume.muted';
                                          createState(muted_state, {'name':'Client ' + j, 'type':'boolean', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (muted_state , client.config.volume.muted);
                                              }
                                          );
          
                                          // client.config.volume.percent
                                          let percent_state = client_state +'.config.volume.percent';
                                          createState(percent_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (percent_state , client.config.volume.percent);
                                              }
                                          );
                                          
                                          // client.connected
                                          let connected_state = client_state +'.connected';
                                          createState(connected_state, {'name':'Client ' + j, 'type':'boolean', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (connected_state , client.connected);
                                              }
                                          );
                                          
                                          // client.host.arch
                                          let arch_state = client_state +'.host.arch';
                                          createState(arch_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (arch_state , client.host.arch);
                                              }
                                          );
          
                                          // client.host.ip
                                          let ip_state = client_state +'.host.ip';
                                          createState(ip_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (ip_state , client.host.ip);
                                              }
                                          );
          
                                          // client.host.mac
                                          let mac_state = client_state +'.host.mac';
                                          createState(mac_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (mac_state , client.host.mac);
                                              }
                                          );
                                          
                                          // client.host.name
                                          
                                          let clientname_state = client_state +'.host.name';
                                          createState(clientname_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (clientname_state , client.host.name);
                                              }
                                          );
                                          
                                          // client.host.os
                                          let os_state = client_state +'.host.os';
                                          createState(os_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (os_state , client.host.os);
                                              }
                                          );
                                          
                                          // client.lastSeen.sec
                                          let lastseen_sec_state = client_state +'.lastSeen.sec';
                                          createState(lastseen_sec_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (lastseen_sec_state , client.lastSeen.sec);
                                              }
                                          );
                                          
                                          // client.lastSeen.usec
                                          let lastseen_usec_state = client_state +'.lastSeen.usec';
                                          createState(lastseen_usec_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (lastseen_usec_state , client.lastSeen.usec);
                                              }
                                          );
                                          
                                          // client.snapclient.name
                                          let snapclient_name_state = client_state +'.snapclient.name';
                                          createState(snapclient_name_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (snapclient_name_state , client.snapclient.name);
                                              }
                                          );                                
                                          
                                          // client.snapclient.protocolVersion
                                          let snapclient_protocolVersion_state = client_state +'.snapclient.protocolVersion';
                                          createState(snapclient_protocolVersion_state, {'name':'Client ' + j, 'type':'number', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (snapclient_protocolVersion_state , client.snapclient.protocolVersion);
                                              }
                                          );                            
                                          
                                          // client.snapclient.version
                                          let snapclient_version_state = client_state +'.snapclient.version';
                                          createState(snapclient_version_state, {'name':'Client ' + j, 'type':'string', 'read':true, 'write':true, 'role':'state'},
                                              function() {
                                                  setState (snapclient_version_state , client.snapclient.version);
                                              }
                                          );
                                      }
                                  );
          
                              }                
                              let host_ids_list_state = realm + '.Groups.host_ids_list';
                              createState(host_ids_list_state, {'name':'connected hosts', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                                  function() {
                                      //setState (groups_array_state , {val: groups});
                                      setState (host_ids_list_state ,  host_ids_array.join(";")); 
                              });    
                  
                              let hosts_list_state = realm + '.Groups.hosts_list';
                              createState(hosts_list_state, {'name':'connected hosts', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                                  function() {
                                      //setState (groups_array_state , {val: groups});
                                      setState (hosts_list_state ,  host_names_array.join(";")); 
                              });
          
          
                          }
                      );  
                  }  
           
                  let streams_array_state= realm + '.Streams.streamsArray';        
                  createState(streams_array_state, {'name':'Stream ', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
                      function() {
                          //für arrays (type:array):
                          //setState (groups_array_state , {val: groups});
                          setState (streams_array_state ,  streams_array.join(";")); 
                  });
           
                  setState (html_state,'<pre>'+ JSON.stringify(body.result,  null, 2) + '</pre>');        
                  //setState (html_state,renderJSON(body.result));
              }); 
          });
          
          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
          FAQ Cloud / IOT
          HowTo: Node.js-Update
          HowTo: Backup/Restore
          Downloads
          BLOG

          758

          Online

          32.5k

          Benutzer

          81.6k

          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