Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Gerätenamen mit Leerzeichen verarbeiten

    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

    [gelöst] Gerätenamen mit Leerzeichen verarbeiten

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

      Hallo zusammen,

      ich habe ein Skript geschrieben, dass meine Sonoff Geräte auflistet.

      Dazu habe ich folgendes Thema erstellt: Automatische Übersicht aller Sonoff Geräte .

      Das Ganze ist immer noch im Test-Stadium.

      Aktuell hat ein tester das Problem, dass er leerzeichen im Gerätenamen verwendet hat.

      Meine Javascript Kenntnisse reichen leider nicht aus, um dieses Problem zu beheben.

      kann jemand unterstützen?

      Hier die aktuelle Version von meinem Skript:

      //schedule('*/10 * * * * *', function (obj) {
      schedule('* * * * *', function (obj) {
         createState('Sonoff-Devices.Anzahl', 0, { name: 'Anzahl', desc: 'Anzahl der Devices', type: 'number', unit: '', min: '0', max: '255', role: '',read: true, write: true });
         var counter =0;
      
      
         var cacheSelector = $('[id=sonoff.0.*.INFO.Hostname]');
         counter = counter+1;
         cacheSelector.each(function(id, i) {        
             var devicename = getObject(id).common.name; 
      
             var devicenameName=devicename;
             var devicename_array = devicenameName.split(' ');        
             devicenameName = devicename_array[0];
           
             //Gerätetatus
             var connected_devices = getState("sonoff.0.info.connection").val;
             if(connected_devices.includes(devicenameName)){var status = true}
             else{var status = false}
             
             //Infos abfragen
             if(status == true ) {
                 var status = "1"
                 
                 //Version
                 var version = getState("sonoff.0." + devicenameName + ".INFO" + ".Version").val;
                 if(version.indexOf("(sonoff)")){var version = version.replace("(sonoff)", "")}
                 if(version.indexOf("(tasmota)")){var version = version.replace("(tasmota)", "")}
                 // Version als INT für den Vergleich
                 var version_1 = parseInt(version)
      
                 //Uptime aus dem DP UptimeSec (ab Tasmota 7.x)
                 if(version_1 > 6) {
                     var uptime = getState("sonoff.0." + devicenameName + ".UptimeSec").val;
                     var tage = Math.floor(uptime / (24*3600));
                     var stunden = Math.floor((uptime % (24*3600))/3600);
                     var minuten = Math.floor((uptime % (3600))/60);
                     //var sekunden = Math.floor(uptime % 60);      
                     if (stunden < 10) {stunden = "0"+stunden};
                     if (minuten < 10) {minuten = "0"+minuten};				
                     if (tage == 1) {uptime = tage.toString()+" Tag, "+stunden.toString()+" Std, "+minuten.toString()+" Min ";};
                     if (tage != 1) {uptime = tage.toString()+" Tage, "+stunden.toString()+" Std, "+minuten.toString()+" Min ";}
                 }     
                 
      
                 //Uptime für Gartenbewässerung (Tasmota 6)
                 if(devicenameName == "Bewaesserung") {uptime = getState("javascript.0.uptime.sonoff_bewaesserung").val;}
                 
                 //IP-Adresse
                 var ip = getState("sonoff.0." + devicenameName + ".INFO" + ".IPAddress").val;
      
                 //Typ
                 var geraet = getState("sonoff.0." + devicenameName + ".INFO" + ".Module").val;
      
                 //Powerschalter für Sonoff S20 / Sonoff Basic
                 if(geraet == "Sonoff S2X" || geraet == "Sonoff Basic"){var powerschalter = "sonoff.0." + devicenameName + ".POWER"};
                 
             }
             if(status == false){
                 var status = "0"
                 var uptime = ""
                 var version = ""
                 var ip = ""
                 var geraet = ""
                 var powerschalter = ""
             }
             
      
      
             //DPs befüllen
      
             // Device-Name
             devicename="Sonoff-Devices.Device_"+counter.toString()+".Device-Name";
             createState(devicename, 'empty', { name: 'Device-Name', desc: '', type: 'string', role: '',read: true, write: true }); 
             setStateDelayed(devicename, devicenameName, 800);
             // Uptime
             devicename="Sonoff-Devices.Device_"+counter.toString()+".Uptime"; 
             createState(devicename, 'empty', { name: 'Uptime', desc: '', type: 'string', role: '',read: true, write: true });
             setStateDelayed(devicename, uptime, 800);
             // Status
             devicename="Sonoff-Devices.Device_"+counter.toString()+".Status";
             createState(devicename, 'empty', { name: 'Status', desc: '', type: 'string', role: '',read: true, write: true }); 
             setStateDelayed(devicename, status, 800);
             // Version
             devicename="Sonoff-Devices.Device_"+counter.toString()+".Version";
             createState(devicename, 'empty', { name: 'Version', desc: '', type: 'string', role: '',read: true, write: true }); 
             setStateDelayed(devicename, version, 800);
             // IP
             devicename="Sonoff-Devices.Device_"+counter.toString()+".IP";
             createState(devicename, 'empty', { name: 'IP', desc: '', type: 'string', role: '',read: true, write: true }); 
             setStateDelayed(devicename, ip, 800);
             // Gereatetyp
             devicename="Sonoff-Devices.Device_"+counter.toString()+".Geraet";
             createState(devicename, 'empty', { name: 'Geraet', desc: '', type: 'string', role: '',read: true, write: true }); 
             setStateDelayed(devicename, geraet, 800);
             //Powerschalter
             if(geraet == "Sonoff S2X" || geraet == "Sonoff Basic")  {
                 devicename="Sonoff-Devices.Device_"+counter.toString()+".Powerschalter";
                 createState(devicename, 'empty', { name: 'Powerschalter', desc: '', type: 'string', role: '',read: true, write: true }); 
                 setStateDelayed(devicename, powerschalter, 800);
             }
         
             counter = counter+1;
             //console.log(devicenameName + " - " + uptime);
      
             
         }); 
      
         // Wegen sonoff.0.info muss vom Counter 1 abgezogen werden
         counter = counter - 1
         setStateDelayed('Sonoff-Devices.Anzahl', counter, 800);
      
         //Letzte aktualisierung
         var datum = new Date();
         var heute = datum.getDate()+ "." + (datum.getMonth()+ 1)+"." + datum.getFullYear()+" " +datum.getHours() +":" + datum.getMinutes() +":" + datum.getSeconds() + " Uhr" ;
         createState('Sonoff-Devices.Letztes_Update', 0, { name: 'Letztes_Update', desc: '', type: 'string', role: '',read: true, write: true }); 
         setStateDelayed('Sonoff-Devices.Letztes_Update', heute, 800);
      
         	
      }); 
      
      

      1 Reply Last reply Reply Quote 0
      • T
        ticaki Developer last edited by ticaki

        var devicenameName=devicename;
        var devicename_array = devicenameName.split(' ');        
        devicenameName = devicename_array[0];
        

        Ich weiß nicht warum du das hier tust aber diese 3 Zeilen machen das:

        Ein guten Beispiel
        0: Ein
        1: gutes
        2: Beispiel
        
        devicenameName = Ein
        

        versuche es mal so:

        var devicenameName=devicename;
        //var devicename_array = devicenameName.split(' ');        
        //devicenameName = devicename_array[0];
        
        K 1 Reply Last reply Reply Quote 0
        • K
          Kuddel @ticaki last edited by Kuddel

          @ticaki wenn ich es so mache wie du, steht im Datenpumnkt "Device-name" folgendes: Sonoff-S20 INFO Hostname

          Mit meiner Lösung steht da nur "Sonoff-S20".

          Wenn ich das reichtig verstehe, schneiden meine Befehle nach dem ersten Leerzeichen ab.

          Ich versuche es mal mit erstzen, damit die Leerzeichen nicht abgeschnitten werden.

          EDIT: @ticaki vielen Dank für den Hinweis. Habe es jetzt hinbekommen.

          var devicename = getObject(id).common.name;
          var devicename = devicename.replace(" INFO ", "")
          var devicename = devicename.replace(" Hostname", "")
          var devicenameName=devicename;
          
          1 Reply Last reply Reply Quote 0
          • First post
            Last post

          Support us

          ioBroker
          Community Adapters
          Donate

          399
          Online

          31.9k
          Users

          80.2k
          Topics

          1.3m
          Posts

          2
          3
          188
          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