Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. jampr

    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

    J
    • Profile
    • Following 1
    • Followers 0
    • Topics 17
    • Posts 69
    • Best 6
    • Groups 1

    jampr

    @jampr

    6
    Reputation
    70
    Profile views
    69
    Posts
    0
    Followers
    1
    Following
    Joined Last Online

    jampr Follow
    Starter

    Best posts made by jampr

    • RE: Solvis Adapter inkompatibel mit js-Controller 5.0

      @mcm57

      genau das ist er. https://github.com/anarchocactus/ioBroker.solvis

      Ich stelle ein Request. Da es aber nix besseres gab, habe ich lieber den Adapter von Github genommen.

      posted in ioBroker Allgemein
      J
      jampr
    • RE: index_m.html - wo und wie werden die Werte gespeichtert?

      Aaah. Im Instance-Folder is das. Danke.
      Also brauche ich für den Adapter selbst gar kein State mit den 'grundlegenden' Einstellungen.

      Dann weiß ich erstmal bescheid.

      posted in Entwicklung
      J
      jampr
    • RE: [gelöst] TR-064 Telefonbuch auslesen

      @d3ltoroxp

      Hi zusammen,
      sorry, ich lese hier nicht regelmäßig mit. Hier nochmal das aktuelle Script für den JavaScript-Adapter. Wichtig ist, das der TR-064-Adapter installiert ist. Dann sollte direkt über tr-064.0.states.command das GetPhonebookList abgerufen werden:

      var xml2js = require('xml2js');
      /*var vCardsJS = require('vcards-js');*/
      
      var options = {
          explicitArray: false,
          mergeAttrs: true
      };
      var xml2jsParser = new xml2js.Parser(options);
      
      var phonebook = JSON.parse("[]");
      var phonebookVCard = "";
      var phonebookListDetail = JSON.parse("[]");
      
      createState('javascript.0.FritzBox.phonebook' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
          function() {
              setState ('javascript.0.FritzBox.phonebook', '');
          });
      createState('javascript.0.FritzBox.phonebookList' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          function() {
              setState ('javascript.0.FritzBox.phonebookList', '');
          });
      createState('javascript.0.FritzBox.phonebookListDetail' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          function() {
              setState ('javascript.0.FritzBox.phonebookListDetail', '');
          });
      createState('javascript.0.FritzBox.phonebookSelected' , {'name':'Status', 'type':'number', 'read':true, 'write':true, 'role':'state', 'def':0 },
          function() {
              setState ('javascript.0.FritzBox.phonebookSelected', 0);
          });
      createState('javascript.0.FritzBox.phonebookVCard' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
          function() {
              setState ('javascript.0.FritzBox.phonebookVCard', '');
          });
      
      
      on({ id: "javascript.0.FritzBox.phonebookList"
      } , function (obj) {
          //console.log(obj.state.val); 
          if (obj.state.val){
              JSON.parse(obj.state.val).NewPhonebookList.split(/\s*,\s*/).forEach(function(myString) {
                  
                  setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebook","params": {"NewPhonebookID":'+Number(myString)+'}}');
              });
          }
      });   
      
      on({ id: "javascript.0.FritzBox.phonebookSelected"
      } , function (obj) {
          phonebook = JSON.parse("[]");
          phonebookVCard = "";
          for (let i = 0; i < 1000; i++) {
              setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookEntry","params": {"NewPhonebookID":'+obj.state.val+', "NewPhonebookEntryID" : '+ i +' }}');
              //console.log('{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookEntry","params": {"NewPhonebookID":'+obj.state.val+', "NewPhonebookEntryID" : '+ i +' }}'); 
          }
          //console.log("getPhonebook ID "+obj.state.val+" completed");
          
      });
      
      on({ id: "tr-064.0.states.commandResult"
      } , function (obj) {
          
          var commRes = JSON.parse(getState('tr-064.0.states.commandResult').val);
      
          switch (true){
              case commRes.hasOwnProperty('NewPhonebookEntryData'):
              {
                  //console.log(JSON.stringify(commRes));
                  var res = commRes.NewPhonebookEntryData;
      
                  xml2jsParser.parseString(res, function (err, result) {
                      let foundIt = phonebook.find(el => el.contact.uniqueid === result.contact.uniqueid);
                      if (foundIt ){
                          //console.log(foundIt);
                      }else{
                          phonebook.push(result);
      
      
                  /*fill vcard  
                  var vCard = vCardsJS();
                  vCard.firstName = result.contact.person.realName;
                  
                  for (let j=0; j < result.contact.telephony.number.length;j++){
                      result.contact.telephony.number[j]._
                      switch (result.contact.telephony.number[j].type){
                          case 'work':
                              if( vCard.workPhone.length >0 ){
                              
                              }else{
                                  vCard.workPhone = result.contact.telephony.number[j]._;
                              }
                          break;
                          case 'home':
                              if( vCard.homePhone.length >0 ){
                              
                              }else{
                                  vCard.homePhone = result.contact.telephony.number[j]._;
                              }
                          break;
                          case 'mobile':
                              if( vCard.cellPhone.length >0 ){
                              
                              }else{
                                  vCard.cellPhone = result.contact.telephony.number[j]._;
                              }
                          break;
                      }
                  }
                  phonebookVCard += '\n'+vCard.getFormattedString();
              
          
                  setState ('javascript.0.FritzBox.phonebookVCard', JSON.stringify(phonebookVCard));
      
      */
      
                      }
                  });            
      
                  // sort by name
                  phonebook.sort(function(a, b) {
                    var nameA = a.contact.person.realName.toUpperCase(); // ignore upper and lowercase
                    var nameB = b.contact.person.realName.toUpperCase(); // ignore upper and lowercase
                    if (nameA < nameB) {
                      return -1;
                    }
                    if (nameA > nameB) {
                      return 1;
                    }
                    // names must be equal
                    return 0;
                  });
                  
                  setState ('javascript.0.FritzBox.phonebook', JSON.stringify(phonebook));
      
      
                  break;
              }
              case commRes.hasOwnProperty('NewPhonebookList'): 
              {
                  setState ('javascript.0.FritzBox.phonebookList',  JSON.stringify(commRes));
                  break;
              }
              case commRes.hasOwnProperty('NewPhonebookURL'): 
              {
      
                  commRes.NewPhonebookExtraID=commRes.NewPhonebookURL.substr(commRes.NewPhonebookURL.length-1);
                  phonebookListDetail.push(commRes);
                  setState ('javascript.0.FritzBox.phonebookListDetail',  JSON.stringify(phonebookListDetail));
                  //console.log(JSON.stringify(commRes));
                  break;
              }
          }    
      });
      
      setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookList","params": {}}');
      
      

      Die Anzeige habe ich auch etwas verändert:

      <style>
      body {
        background-color: #ababab;
      }
      table {
        border: 1px solid black;
        border-collapse: collapse;
      }
       th, td {
        border: 1px solid black;
      }
      </style>
      <div id="prev2"></div> 
      <div id="prev1"></div> 
      
      <script>
      
      
      function updateStat (btn){
          var objID1 = "javascript.0.FritzBox.phonebookSelected";
          this.servConn._socket.emit('setState', objID1, btn.value ); 
      }
      
      vis.conn._socket.emit('getState', "javascript.0.FritzBox.phonebookListDetail", function (err, state) {
          let phonebookListDetail =JSON.parse(state.val);
          var phonebookID = 1;
          
          var text ="";
          
          for (var i = 0; i < phonebookListDetail.length;  i+=1){
              text += '<button style="width: 100%; height: 100%; text-align: left;" value=\"'+ phonebookListDetail[i].NewPhonebookExtraID +'\" onclick=updateStat(this)>'+ phonebookListDetail[i].NewPhonebookName +'</button>';
          }
          
          document.getElementById("prev2").innerHTML = text;
      });
      
      
      vis.conn._socket.emit('getState', "javascript.0.FritzBox.phonebook", function (err, state) {
          let phonebook =JSON.parse(state.val);
          var text ="";
          
          text += "<table width=100% style=\"border:1px solid black;border-collapse: collapse;\"><tr><td>Name</td><td>TelNr 1</td><td>TelNr 2</td><td>TelNr 3</td></tr>";
          for (let i = 0; i < phonebook.length;  i+=1) {
              
              text += "<tr>";
              
               text +=  "<td>"+phonebook[i].contact.person.realName+"</td>";
              //text += "</tr><tr><td>&nbsp;</td>"; 
              var j = 0;
               if (phonebook[i].contact.telephony.number.length){
                  
                  for (j=0;j < phonebook[i].contact.telephony.number.length;j+=1) {
                      text += "<td>"+phonebook[i].contact.telephony.number[j]._+"</td>";
                  }
               }else { 
                  text += "<td>"+phonebook[i].contact.telephony.number._+"</td>";
                  j+=1;
               }
               for(j; j<3; j+=1){
                   text += "<td>&nbsp;</td>";
               }
              text += "</tr>";
          }
          text += "</table>";
          document.getElementById("prev1").innerHTML = text;
          document.getElementById("prev").innerHTML += "<pre>"+ JSON.stringify(phonebook, null, 3) + "</pre>";
      });
      
      </script>
      
      <!--
      <div  style="display:none">{javascript.0.FritzBox.phonebook}</div>
      <div  style="display:none">{javascript.0.FritzBox.phonebookListDetail}</div> 
      -->
      

      Allerdings habe ich da seit längerem nicht viel weiter gebaut.

      posted in JavaScript
      J
      jampr
    • RE: Realisierung eines Multiroomsystem

      @medoc
      moin,
      der Thread hier is zwar schon etwas älter, aber ich benutze seit einiger Zeit das Snapcast als Streaming-Server und Client für einen ZeroW und einen Raspi4. Zur Steuerung nutze ich noch das snapWeb

      posted in ioBroker Allgemein
      J
      jampr
    • RE: [neuer Adapter] snapcast

      beim Punkt 2. bin ich etwas weiter gekommen. Ich habe die Datei-Liste erstmal in einem basic-html gebaut und will das dann in ein eigenes Widget im Adapter packen.

      Allerdings habe ich da noch einige Probleme. Zum Einen wird der Zurück-Knopf machmal zwei Mal dargestellt.

      <div id="prev"></div> <br>
      <div id="pathList"></div> 
      
      <script>
      
      function updateStat (btn){
          var objID1 = "snapcast.0.currentPath";
          this.servConn._socket.emit('setState', objID1, btn.value );
      }
      
      vis.conn._socket.emit('getState', "snapcast.0.currentPath", function (err, state) {
              var pathAndFile =state.val;
              var prevPath = pathAndFile.substring(0, pathAndFile.lastIndexOf('/'));
              var table = "<table>";        
              table += "<tr> ";
              table += '<td><button style="width: 100%; height: 100%;" value=\"'+ prevPath +'\" onclick=updateStat(this)>&nbsp; <<----&nbsp;&nbsp;'+prevPath+' &nbsp;</button></td>';
              table += '<td>'+ '&nbsp;' +'</td>'; 
              table += "</tr> ";  
              table += "</table>";
              document.getElementById("prev").innerHTML += table;
              document.getElementById("prev").innerHTML += pathAndFile.substring(pathAndFile.lastIndexOf('/')+1, pathAndFile.length);
      });
      
      vis.conn._socket.emit('getState', "snapcast.0.currentPathList", function (err, state) {
          
          var data = JSON.parse(state.val);
          var table = "<table>";
          
          for (var i = 0; i < data.length; i++) {
              var lbl = "";
       
              if (data[i][Object.keys(data[i])[2]] =="mp3" || data[i][Object.keys(data[i])[2]] == "directory"){
                  table += '<tr>';
             	    if (data[i][Object.keys(data[i])[2]] == "directory"){
          	        lbl = "---->>&nbsp;&nbsp;";
          	    }
          	    var pathAndFile = data[i][Object.keys(data[i])[0]] +"/" +  data[i][Object.keys(data[i])[1]];
                  table += '<td><button style="width: 100%; height: 100%; text-align: left;" value=\"'+ pathAndFile +'\" onclick=updateStat(this)>'+ lbl + data[i][Object.keys(data[i])[1]] +'</button></td>';
                  table += '</tr>';
              }
          }
          table += " </table>";
                  
          document.getElementById("pathList").innerHTML += table;
      });
       
       
      </script>
      
      <!--
      <div  style="display:none">{snapcast.0.currentPathList}</div>
      <div  style="display:none">{snapcast.0.currentPath}</div>
      -->
      

      Und zum Anderen fehlt mir etwas das Verständnis des Widget-Templates.

      • woher kommen die Werte für <%= this.data.attr('wid') %> und <%== this.data.attr('class') %>, also das data?
      • wie funktioniert das Aktualisieren bei einer Änderung am State
      posted in Entwicklung
      J
      jampr
    • RE: [neuer Adapter] snapcast

      Ich schäme mich zwar etwas, aber hier der Adapter:
      https://github.com/jampr21/ioBroker.snapcast

      posted in Entwicklung
      J
      jampr

    Latest posts made by jampr

    • tvheadend xmltv EPG - Anzeige über IOBroker

      Hi zusammen,
      hat jemand zufällig schon den xmltv EPG in IOBroker eingebunden? Ich habe von meinem TVHeadend den EPG vom DVB-S2. siehe auch: https://github.com/tvheadend/tvheadend/blob/master/docs/markdown/url.md
      Viele Grüße

      posted in ioBroker Allgemein
      J
      jampr
    • RE: SMA Werte abfragen?

      Hi zusammen,

      nur zur Info: Ich bin jetzt auch auf Modbus umgestiegen. Denn js-controller 5 ist nicht mehr kompatibel mit dem sma-speedwire Adapter.

      Mein Script im 5. post weiter oben ist ziemlich gleich geblieben. Ich habe nur sma-speedwire.0.SPOT_PACTOT mit modbus.0.inputRegisters.30775_Wirkleistung_gesamt_(W) ersetzt.

      posted in ioBroker Allgemein
      J
      jampr
    • RE: Solvis Adapter inkompatibel mit js-Controller 5.0

      @mcm57

      genau das ist er. https://github.com/anarchocactus/ioBroker.solvis

      Ich stelle ein Request. Da es aber nix besseres gab, habe ich lieber den Adapter von Github genommen.

      posted in ioBroker Allgemein
      J
      jampr
    • Solvis Adapter inkompatibel mit js-Controller 5.0

      Hi zusammen, ich bin gerade umgestiegen auf js-controller 5 und natürlich hat ein Adapter (Solvis Adapter) nicht überlebt. Ich muss gestehen, ich habe keine Ahnung wo der herkommt. Der läuft schon jahrelang. Weiß jemand, wie ich den wieder zum Laufen bekomme? Habe auch mal einen Blick auf https://github.com/peak3d/iobroker.solvisremote geworfen, bekomme den aber auch nicht installiert.
      Oder muss ich mir jetzt ein eigenes JavaScript bauen, um die Heizwerte zu bekommen?

      Ich habe einen Solvis max futur Pufferspeicher mit Solvis Control 2 (MA115) und solvis remote. Mit einem Relais wird der Solarüberschuss in einen Heizstab gejagt. Und wir benutzen die Werte, da ein wasserführender Holzofen die Wärmezufur übernimmt (müssen wir Holz nachlegen oder ist Puffer voll).

      LG

      posted in ioBroker Allgemein
      J
      jampr
    • RE: Test Adapter OpenKNX 0.6.x

      @killroy2
      danke, jetzt ist es Ok. Das war noch vom KNX-Objekte-Laden. Ich habe mich nicht getraut, daran was zu verändern.

      posted in Tester
      J
      jampr
    • RE: Test Adapter OpenKNX 0.6.x

      Hi zusammen,

      ich versuche gerade einen Wert vom Aktor abzurufen.
      So sieht er aus:

      {
        "_id": "openknx.0.Obergeschoss.Heizungsraum.Wirkleistung_A",
        "type": "state",
        "common": {
          "name": "Wirkleistung A",
          "type": "number",
          "read": true,
          "write": false,
          "role": "value"
        },
        "native": {
          "dpt": "DPT14.056",
          "address": "2/5/11",
          "answer_groupValueResponse": false,
          "autoread": true
        },
        "acl": {
          "object": 1636,
          "state": 1636,
          "owner": "system.user.admin",
          "ownerGroup": "system.group.administrator"
        },
        "from": "system.adapter.admin.0",
        "user": "system.user.admin",
        "ts": 1646756139273
      }
      

      wenn ich den aber abrufe mit setState(Wirkleistung_A, {val: 0, ack: false, q:0x10}); wird mein Log zugespammt mit

      	Read-only state "openknx.0.Obergeschoss.Heizungsraum.Wirkleistung_A" has been written without ack-flag with value "0"
      

      Wenn ich ACK auf true setze, bekomme ich nur die 0 ausgelesen. Ist also keine Option. Hat jemand einen Tipp, wie ich die Meldung im Log weg bekomme?

      LG

      posted in Tester
      J
      jampr
    • RE: [gelöst] TR-064 Telefonbuch auslesen

      @d3ltoroxp

      Hi zusammen,
      sorry, ich lese hier nicht regelmäßig mit. Hier nochmal das aktuelle Script für den JavaScript-Adapter. Wichtig ist, das der TR-064-Adapter installiert ist. Dann sollte direkt über tr-064.0.states.command das GetPhonebookList abgerufen werden:

      var xml2js = require('xml2js');
      /*var vCardsJS = require('vcards-js');*/
      
      var options = {
          explicitArray: false,
          mergeAttrs: true
      };
      var xml2jsParser = new xml2js.Parser(options);
      
      var phonebook = JSON.parse("[]");
      var phonebookVCard = "";
      var phonebookListDetail = JSON.parse("[]");
      
      createState('javascript.0.FritzBox.phonebook' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
          function() {
              setState ('javascript.0.FritzBox.phonebook', '');
          });
      createState('javascript.0.FritzBox.phonebookList' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          function() {
              setState ('javascript.0.FritzBox.phonebookList', '');
          });
      createState('javascript.0.FritzBox.phonebookListDetail' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state'},
          function() {
              setState ('javascript.0.FritzBox.phonebookListDetail', '');
          });
      createState('javascript.0.FritzBox.phonebookSelected' , {'name':'Status', 'type':'number', 'read':true, 'write':true, 'role':'state', 'def':0 },
          function() {
              setState ('javascript.0.FritzBox.phonebookSelected', 0);
          });
      createState('javascript.0.FritzBox.phonebookVCard' , {'name':'Status', 'type':'string', 'read':true, 'write':true, 'role':'state', 'def':'' },
          function() {
              setState ('javascript.0.FritzBox.phonebookVCard', '');
          });
      
      
      on({ id: "javascript.0.FritzBox.phonebookList"
      } , function (obj) {
          //console.log(obj.state.val); 
          if (obj.state.val){
              JSON.parse(obj.state.val).NewPhonebookList.split(/\s*,\s*/).forEach(function(myString) {
                  
                  setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebook","params": {"NewPhonebookID":'+Number(myString)+'}}');
              });
          }
      });   
      
      on({ id: "javascript.0.FritzBox.phonebookSelected"
      } , function (obj) {
          phonebook = JSON.parse("[]");
          phonebookVCard = "";
          for (let i = 0; i < 1000; i++) {
              setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookEntry","params": {"NewPhonebookID":'+obj.state.val+', "NewPhonebookEntryID" : '+ i +' }}');
              //console.log('{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookEntry","params": {"NewPhonebookID":'+obj.state.val+', "NewPhonebookEntryID" : '+ i +' }}'); 
          }
          //console.log("getPhonebook ID "+obj.state.val+" completed");
          
      });
      
      on({ id: "tr-064.0.states.commandResult"
      } , function (obj) {
          
          var commRes = JSON.parse(getState('tr-064.0.states.commandResult').val);
      
          switch (true){
              case commRes.hasOwnProperty('NewPhonebookEntryData'):
              {
                  //console.log(JSON.stringify(commRes));
                  var res = commRes.NewPhonebookEntryData;
      
                  xml2jsParser.parseString(res, function (err, result) {
                      let foundIt = phonebook.find(el => el.contact.uniqueid === result.contact.uniqueid);
                      if (foundIt ){
                          //console.log(foundIt);
                      }else{
                          phonebook.push(result);
      
      
                  /*fill vcard  
                  var vCard = vCardsJS();
                  vCard.firstName = result.contact.person.realName;
                  
                  for (let j=0; j < result.contact.telephony.number.length;j++){
                      result.contact.telephony.number[j]._
                      switch (result.contact.telephony.number[j].type){
                          case 'work':
                              if( vCard.workPhone.length >0 ){
                              
                              }else{
                                  vCard.workPhone = result.contact.telephony.number[j]._;
                              }
                          break;
                          case 'home':
                              if( vCard.homePhone.length >0 ){
                              
                              }else{
                                  vCard.homePhone = result.contact.telephony.number[j]._;
                              }
                          break;
                          case 'mobile':
                              if( vCard.cellPhone.length >0 ){
                              
                              }else{
                                  vCard.cellPhone = result.contact.telephony.number[j]._;
                              }
                          break;
                      }
                  }
                  phonebookVCard += '\n'+vCard.getFormattedString();
              
          
                  setState ('javascript.0.FritzBox.phonebookVCard', JSON.stringify(phonebookVCard));
      
      */
      
                      }
                  });            
      
                  // sort by name
                  phonebook.sort(function(a, b) {
                    var nameA = a.contact.person.realName.toUpperCase(); // ignore upper and lowercase
                    var nameB = b.contact.person.realName.toUpperCase(); // ignore upper and lowercase
                    if (nameA < nameB) {
                      return -1;
                    }
                    if (nameA > nameB) {
                      return 1;
                    }
                    // names must be equal
                    return 0;
                  });
                  
                  setState ('javascript.0.FritzBox.phonebook', JSON.stringify(phonebook));
      
      
                  break;
              }
              case commRes.hasOwnProperty('NewPhonebookList'): 
              {
                  setState ('javascript.0.FritzBox.phonebookList',  JSON.stringify(commRes));
                  break;
              }
              case commRes.hasOwnProperty('NewPhonebookURL'): 
              {
      
                  commRes.NewPhonebookExtraID=commRes.NewPhonebookURL.substr(commRes.NewPhonebookURL.length-1);
                  phonebookListDetail.push(commRes);
                  setState ('javascript.0.FritzBox.phonebookListDetail',  JSON.stringify(phonebookListDetail));
                  //console.log(JSON.stringify(commRes));
                  break;
              }
          }    
      });
      
      setState ('tr-064.0.states.command', '{"service": "urn:dslforum-org:service:X_AVM-DE_OnTel:1","action": "GetPhonebookList","params": {}}');
      
      

      Die Anzeige habe ich auch etwas verändert:

      <style>
      body {
        background-color: #ababab;
      }
      table {
        border: 1px solid black;
        border-collapse: collapse;
      }
       th, td {
        border: 1px solid black;
      }
      </style>
      <div id="prev2"></div> 
      <div id="prev1"></div> 
      
      <script>
      
      
      function updateStat (btn){
          var objID1 = "javascript.0.FritzBox.phonebookSelected";
          this.servConn._socket.emit('setState', objID1, btn.value ); 
      }
      
      vis.conn._socket.emit('getState', "javascript.0.FritzBox.phonebookListDetail", function (err, state) {
          let phonebookListDetail =JSON.parse(state.val);
          var phonebookID = 1;
          
          var text ="";
          
          for (var i = 0; i < phonebookListDetail.length;  i+=1){
              text += '<button style="width: 100%; height: 100%; text-align: left;" value=\"'+ phonebookListDetail[i].NewPhonebookExtraID +'\" onclick=updateStat(this)>'+ phonebookListDetail[i].NewPhonebookName +'</button>';
          }
          
          document.getElementById("prev2").innerHTML = text;
      });
      
      
      vis.conn._socket.emit('getState', "javascript.0.FritzBox.phonebook", function (err, state) {
          let phonebook =JSON.parse(state.val);
          var text ="";
          
          text += "<table width=100% style=\"border:1px solid black;border-collapse: collapse;\"><tr><td>Name</td><td>TelNr 1</td><td>TelNr 2</td><td>TelNr 3</td></tr>";
          for (let i = 0; i < phonebook.length;  i+=1) {
              
              text += "<tr>";
              
               text +=  "<td>"+phonebook[i].contact.person.realName+"</td>";
              //text += "</tr><tr><td>&nbsp;</td>"; 
              var j = 0;
               if (phonebook[i].contact.telephony.number.length){
                  
                  for (j=0;j < phonebook[i].contact.telephony.number.length;j+=1) {
                      text += "<td>"+phonebook[i].contact.telephony.number[j]._+"</td>";
                  }
               }else { 
                  text += "<td>"+phonebook[i].contact.telephony.number._+"</td>";
                  j+=1;
               }
               for(j; j<3; j+=1){
                   text += "<td>&nbsp;</td>";
               }
              text += "</tr>";
          }
          text += "</table>";
          document.getElementById("prev1").innerHTML = text;
          document.getElementById("prev").innerHTML += "<pre>"+ JSON.stringify(phonebook, null, 3) + "</pre>";
      });
      
      </script>
      
      <!--
      <div  style="display:none">{javascript.0.FritzBox.phonebook}</div>
      <div  style="display:none">{javascript.0.FritzBox.phonebookListDetail}</div> 
      -->
      

      Allerdings habe ich da seit längerem nicht viel weiter gebaut.

      posted in JavaScript
      J
      jampr
    • RE: iobroker auf Sysnology NAS

      @glasfaser
      Beim Anlegen des Containers kann nach Drücken des Knopfes 'Advanced Settings' auf dem Reiter 'Network' sollte der Haken 'use the same network as Docker Host' gesetzt werden. Sonst binden sich die Ports an die Docker-eigene IP.

      posted in ioBroker Allgemein
      J
      jampr
    • RE: Realisierung eines Multiroomsystem

      @medoc
      moin,
      der Thread hier is zwar schon etwas älter, aber ich benutze seit einiger Zeit das Snapcast als Streaming-Server und Client für einen ZeroW und einen Raspi4. Zur Steuerung nutze ich noch das snapWeb

      posted in ioBroker Allgemein
      J
      jampr
    • RE: Test Adapter sma-em v0.5.x

      @qlink uuups? Warum bin ich noch auf Version 0.5.7? Ich checke das mal. Daaaanke 🙂

      posted in Tester
      J
      jampr
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo