Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. snapcast und HTTP-API

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    snapcast und HTTP-API

    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jampr last edited by

      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 Reply Last reply Reply Quote 0
      • J
        jampr last edited by

        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 Reply Last reply Reply Quote 0
        • J
          jampr last edited by

          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 Reply Last reply Reply Quote 0
          • J
            jampr last edited by jampr

            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 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate
            FAQ Cloud / IOT
            HowTo: Node.js-Update
            HowTo: Backup/Restore
            Downloads
            BLOG

            887
            Online

            31.9k
            Users

            80.2k
            Topics

            1.3m
            Posts

            iobroker rest api
            1
            4
            1064
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo