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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. Auslesen IP -Adressen

NEWS

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

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

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

Auslesen IP -Adressen

Geplant Angeheftet Gesperrt Verschoben Visualisierung
vis
541 Beiträge 17 Kommentatoren 99.8k Aufrufe 22 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.
  • liv-in-skyL liv-in-sky

    @Homoran super - jetzt weiß ich, an wen ich mich wenden muss, wenn mal wieder regex gefragt ist

    jetzt dauerts wieder ein bischen - muss den rest vom script angleichen

    @Negalein - irgendwie erinnert mich deine .112 an unifi - ein gerät, das sich anmeldet und keine ip hat - sollte ok sein, wenn es nicht aufgelistet ist - eine fehlerquelle weniger

    NegaleinN Offline
    NegaleinN Offline
    Negalein
    Global Moderator
    schrieb am zuletzt editiert von
    #252

    @liv-in-sky sagte in Auslesen IP -Adressen:

    ein gerät, das sich anmeldet und keine ip hat

    IP hat der Akku, aber mehr nicht

    ° Node.js: 20.17.0 NPM: 10.8.2
    ° Proxmox, Ubuntu 22.04.3 LTS
    ° Fixer ---> iob fix

    1 Antwort Letzte Antwort
    0
    • liv-in-skyL liv-in-sky

      @Homoran super - jetzt weiß ich, an wen ich mich wenden muss, wenn mal wieder regex gefragt ist

      jetzt dauerts wieder ein bischen - muss den rest vom script angleichen

      @Negalein - irgendwie erinnert mich deine .112 an unifi - ein gerät, das sich anmeldet und keine ip hat - sollte ok sein, wenn es nicht aufgelistet ist - eine fehlerquelle weniger

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #253

      @liv-in-sky sagte in Auslesen IP -Adressen:

      jetzt dauerts wieder ein bischen

      ich fürchte ich habe die MAC-Adressen falsch zugeordnet.

      kommen die als letztes?

      Das bekomme ich gerade nicht hin

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      liv-in-skyL 1 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @liv-in-sky sagte in Auslesen IP -Adressen:

        jetzt dauerts wieder ein bischen

        ich fürchte ich habe die MAC-Adressen falsch zugeordnet.

        kommen die als letztes?

        Das bekomme ich gerade nicht hin

        liv-in-skyL Offline
        liv-in-skyL Offline
        liv-in-sky
        schrieb am zuletzt editiert von
        #254

        @Homoran ich dachte die mac sind nicht erwünscht ? ich mach jetzt erstnmal ohne - mit mac muss ich ein anderes html template nehmen

        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

        HomoranH 1 Antwort Letzte Antwort
        0
        • liv-in-skyL liv-in-sky

          @Homoran ich dachte die mac sind nicht erwünscht ? ich mach jetzt erstnmal ohne - mit mac muss ich ein anderes html template nehmen

          HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von Homoran
          #255

          @liv-in-sky Dann lass mich da schon mal am RegEx frickeln

          ist ein Datensatz:

          Nmap scan report for Device_007.fritz.box (192.168.178.123)
          Host is up (0.030s latency).
          MAC Address: AB:12:CD:34:EF:56 (Unknown)
          

          Also die MAC-Adresse zum Schluss?

          @liv-in-sky sagte in Auslesen IP -Adressen:

          die mac sind nicht erwünscht ?

          na so hart bin ich mit denen nicht umgegangen - nicht nötig - schöne Zusatzinfo bei "unbekannten" IP

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          liv-in-skyL 1 Antwort Letzte Antwort
          0
          • HomoranH Homoran

            @liv-in-sky Dann lass mich da schon mal am RegEx frickeln

            ist ein Datensatz:

            Nmap scan report for Device_007.fritz.box (192.168.178.123)
            Host is up (0.030s latency).
            MAC Address: AB:12:CD:34:EF:56 (Unknown)
            

            Also die MAC-Adresse zum Schluss?

            @liv-in-sky sagte in Auslesen IP -Adressen:

            die mac sind nicht erwünscht ?

            na so hart bin ich mit denen nicht umgegangen - nicht nötig - schöne Zusatzinfo bei "unbekannten" IP

            liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            schrieb am zuletzt editiert von
            #256

            @Homoran ok - egal wo die sie hinschreibst - ich muss sie eh filtern - ist aber kein thema

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            HomoranH 1 Antwort Letzte Antwort
            0
            • liv-in-skyL liv-in-sky

              @Homoran ok - egal wo die sie hinschreibst - ich muss sie eh filtern - ist aber kein thema

              HomoranH Nicht stören
              HomoranH Nicht stören
              Homoran
              Global Moderator Administrators
              schrieb am zuletzt editiert von
              #257

              @liv-in-sky sagte in Auslesen IP -Adressen:

              @Homoran ok - egal wo die sie hinschreibst - ich muss sie eh filtern - ist aber kein thema

              nicht hinschreiben - wo spuckt nMap die MAC zu der IP aus? Vorher oder hinter der IP?

              Dann würde ich/du das mit einem separaten RegEx machen?
              Aber wie dann zuordnen?

              kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              liv-in-skyL 2 Antworten Letzte Antwort
              0
              • HomoranH Homoran

                @liv-in-sky sagte in Auslesen IP -Adressen:

                @Homoran ok - egal wo die sie hinschreibst - ich muss sie eh filtern - ist aber kein thema

                nicht hinschreiben - wo spuckt nMap die MAC zu der IP aus? Vorher oder hinter der IP?

                Dann würde ich/du das mit einem separaten RegEx machen?
                Aber wie dann zuordnen?

                liv-in-skyL Offline
                liv-in-skyL Offline
                liv-in-sky
                schrieb am zuletzt editiert von
                #258

                @Homoran

                das ist der block

                MAC Address: 00:14:97:28:98:99 (Zhiyuan Eletronics)
                Nmap scan report for iPhone.fritz.box (10.0.1.115)
                Host is up (0.089s latency).
                

                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                HomoranH 1 Antwort Letzte Antwort
                0
                • HomoranH Homoran

                  @liv-in-sky sagte in Auslesen IP -Adressen:

                  @Homoran ok - egal wo die sie hinschreibst - ich muss sie eh filtern - ist aber kein thema

                  nicht hinschreiben - wo spuckt nMap die MAC zu der IP aus? Vorher oder hinter der IP?

                  Dann würde ich/du das mit einem separaten RegEx machen?
                  Aber wie dann zuordnen?

                  liv-in-skyL Offline
                  liv-in-skyL Offline
                  liv-in-sky
                  schrieb am zuletzt editiert von
                  #259

                  @Homoran müßte man wohl den zeilenumbruch entfernen damit alle sin einer zeile steht

                  oder man macht ein zweites array - mit eigener suche und verbindet das - dann müßten die array längen verglichen werden

                  nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                  1 Antwort Letzte Antwort
                  0
                  • liv-in-skyL liv-in-sky

                    @Homoran

                    das ist der block

                    MAC Address: 00:14:97:28:98:99 (Zhiyuan Eletronics)
                    Nmap scan report for iPhone.fritz.box (10.0.1.115)
                    Host is up (0.089s latency).
                    
                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von Homoran
                    #260

                    @liv-in-sky Gottseidank - so herum bekomme ich es hin

                    In der Testdatei von nega ist der Router NICHT von tp-Link???
                    Da hängt die IP dahinter

                    Anders hängt es irgendwo weil ich ja kein \n nehmen darf

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    NegaleinN 1 Antwort Letzte Antwort
                    0
                    • HomoranH Homoran

                      @liv-in-sky Gottseidank - so herum bekomme ich es hin

                      In der Testdatei von nega ist der Router NICHT von tp-Link???
                      Da hängt die IP dahinter

                      Anders hängt es irgendwo weil ich ja kein \n nehmen darf

                      NegaleinN Offline
                      NegaleinN Offline
                      Negalein
                      Global Moderator
                      schrieb am zuletzt editiert von
                      #261

                      @Homoran sagte in Auslesen IP -Adressen:

                      In der Testdatei von nega ist der Router NICHT von tp-Link???

                      Doch, 1er schon

                      Nmap scan report for Router-Nega-Wohnzimmer.fritz.box (10.0.1.4)
                      Host is up (0.00027s latency).
                      

                      ° Node.js: 20.17.0 NPM: 10.8.2
                      ° Proxmox, Ubuntu 22.04.3 LTS
                      ° Fixer ---> iob fix

                      HomoranH 1 Antwort Letzte Antwort
                      0
                      • NegaleinN Negalein

                        @Homoran sagte in Auslesen IP -Adressen:

                        In der Testdatei von nega ist der Router NICHT von tp-Link???

                        Doch, 1er schon

                        Nmap scan report for Router-Nega-Wohnzimmer.fritz.box (10.0.1.4)
                        Host is up (0.00027s latency).
                        
                        HomoranH Nicht stören
                        HomoranH Nicht stören
                        Homoran
                        Global Moderator Administrators
                        schrieb am zuletzt editiert von
                        #262

                        @Negalein sagte in Auslesen IP -Adressen:

                        @Homoran sagte in Auslesen IP -Adressen:

                        In der Testdatei von nega ist der Router NICHT von tp-Link???

                        Doch, 1er schon

                        Nmap scan report for Router-Nega-Wohnzimmer.fritz.box (10.0.1.4)
                        Host is up (0.00027s latency).
                        

                        und darunter steht die MAC dazu, oder?

                        Aber MAC macht keinen Spaß - ich habe in meinem nMap gar keinie, dann tut der RegEx es nicht, ebenso wie bei der Batterie von nega - da setzt dann die Erkennung der MAC von dem Gerät davor aus :-(

                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                        NegaleinN 1 Antwort Letzte Antwort
                        0
                        • HomoranH Homoran

                          @Negalein sagte in Auslesen IP -Adressen:

                          @Homoran sagte in Auslesen IP -Adressen:

                          In der Testdatei von nega ist der Router NICHT von tp-Link???

                          Doch, 1er schon

                          Nmap scan report for Router-Nega-Wohnzimmer.fritz.box (10.0.1.4)
                          Host is up (0.00027s latency).
                          

                          und darunter steht die MAC dazu, oder?

                          Aber MAC macht keinen Spaß - ich habe in meinem nMap gar keinie, dann tut der RegEx es nicht, ebenso wie bei der Batterie von nega - da setzt dann die Erkennung der MAC von dem Gerät davor aus :-(

                          NegaleinN Offline
                          NegaleinN Offline
                          Negalein
                          Global Moderator
                          schrieb am zuletzt editiert von
                          #263

                          @Homoran sagte in Auslesen IP -Adressen:

                          und darunter steht die MAC dazu, oder?

                          Ja

                          Nmap scan report for Router-Nega-Wohnzimmer.fritz.box (10.0.1.4)
                          Host is up (0.00029s latency).
                          MAC Address: F4:F2:6D:CA:D1:DE (Tp-link Technologies)
                          

                          Aber MAC macht keinen Spaß - ich habe in meinem nMap gar keinie, dann tut der RegEx es nicht, ebenso wie bei der Batterie von nega - da setzt dann die Erkennung der MAC von dem Gerät davor aus 😞

                          Also, ich brauch in der liste keine MAC. Kann gerne weg.

                          ° Node.js: 20.17.0 NPM: 10.8.2
                          ° Proxmox, Ubuntu 22.04.3 LTS
                          ° Fixer ---> iob fix

                          HomoranH 1 Antwort Letzte Antwort
                          0
                          • NegaleinN Negalein

                            @Homoran sagte in Auslesen IP -Adressen:

                            und darunter steht die MAC dazu, oder?

                            Ja

                            Nmap scan report for Router-Nega-Wohnzimmer.fritz.box (10.0.1.4)
                            Host is up (0.00029s latency).
                            MAC Address: F4:F2:6D:CA:D1:DE (Tp-link Technologies)
                            

                            Aber MAC macht keinen Spaß - ich habe in meinem nMap gar keinie, dann tut der RegEx es nicht, ebenso wie bei der Batterie von nega - da setzt dann die Erkennung der MAC von dem Gerät davor aus 😞

                            Also, ich brauch in der liste keine MAC. Kann gerne weg.

                            HomoranH Nicht stören
                            HomoranH Nicht stören
                            Homoran
                            Global Moderator Administrators
                            schrieb am zuletzt editiert von
                            #264

                            @Negalein sagte in Auslesen IP -Adressen:

                            Ja

                            Anders hätte das auch IMHO keinen Sinn ergeben - ein Drucker von TP-Link :rolling_on_the_floor_laughing:

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            liv-in-skyL 1 Antwort Letzte Antwort
                            0
                            • HomoranH Homoran

                              @Negalein sagte in Auslesen IP -Adressen:

                              Ja

                              Anders hätte das auch IMHO keinen Sinn ergeben - ein Drucker von TP-Link :rolling_on_the_floor_laughing:

                              liv-in-skyL Offline
                              liv-in-skyL Offline
                              liv-in-sky
                              schrieb am zuletzt editiert von liv-in-sky
                              #265

                              @Homoran @Negalein

                              mach jetzt langsam feierabend aber zum test noch - settings umstellen nicht vergessen :-)

                              //@liv-in-sky Januar 2020 2.2-20:39
                              
                              
                              //HIER WIRD PFAD UND FILENAME DEFINIERT
                              const path = "/htmlip.html";                   //FIlenamen definieren
                              const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                              let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                              let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                              let dpVIS="0_userdata.0.Tabellen.IPDevices"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                              let mySchedule="  */30 * * * * * ";                       //jede minute  
                              const domainName="fritz.box";
                              const ipbereich="192.168.178.0/24";
                              const dnsServer="192.168.178.1"
                              const waitTime=15000;
                              const lastZellColorSetting="lightgreen"
                              
                              var symbolOK="🟢";     // auch möglich: ="✅"  
                              var symbolKO="💀";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz  oder : ="❌"  ⚪  ⚫ ⭕  🔴 🔵 ⏱ 💀 👍 👎 📑 💲 👀
                              var symbolWARN="ℹ️";    // ="⚠️" oder info: "ℹ️"
                              var externalOhneInfo=false;  //noch nicht integriert
                              //---------------------------------------
                              
                              //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                              var htmlFeld1='Name';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                              var htmlFeld2='IP';        var Feld2lAlign="left";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                              var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                              //-----------------------------------
                              
                              
                              //ÜBERSCHRIFT ÜBER TABELLE
                              let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                              let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                              const htmlFeldUeber='IP Devices List';              // Überschrift und Signature
                              const htmlFarbUber="white";                         // Farbe der Überschrift
                              const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                              const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                              //MEHRERE TABELLEN NEBENEINANDER
                              let   mehrfachTabelle=3;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                              const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
                              const farbetrennungsLinie="white";
                              const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                              const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                              //ÜBERSCHRIFT SPALTEN
                              const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
                              const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
                              const farbeLinieUnterUeberschrift="white";
                              const groesseUeberschrift=16;
                              const UeberschriftStyle="normal"                     // möglich "bold"
                              //GANZE TABELLE
                              let abstandZelle="1";
                              let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                              let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                              let weite="1200";                                     //Weite der Tabelle
                              let zentriert=true;                                   //ganze tabelle zentriert
                              const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                              const htmlSchriftart="Helvetica";
                              const htmlSchriftgroesse="14px";
                              //FELDER UND RAHMEN
                              let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                              const htmlFarbFelderschrift="#D8D8D8";                  // SchriftFarbe der Felder
                              const htmlFarbFelderschrift2="#BDBDBD";                 // SchriftFarbe der Felder für jede 2te Tabelle
                              const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                              const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                              const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                              let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                              const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
                              
                              // HIER NICHTS  ÄNDERN
                              
                              let borderHelpBottum;
                              let borderHelpRight;
                              let htmlcenterHelp;
                              let htmlcenterHelp2;
                              
                              if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                              if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                              if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                              if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                              zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                              zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                              
                              
                              const htmlZentriert='<center>'
                              const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                                 "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                                 " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                                // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                                 " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                                 " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                                 "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                                 " </style></head><body>"; // <div>";
                              //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                              const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                                    "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                              const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\"; style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
                              const htmlTabUeber3="</tr>";
                              /*
                              table td:first-child {}  //1
                              table td:nth-child(2) {} //2
                              table td:nth-child(3) {} //3
                              table td:last-child {}   //4
                              */
                              
                              //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                              
                              var htmlTabUeber2=  "<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                              var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                 "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                              //------------------------------------------------------
                              var rootcount=true;
                              var myObjOld=[];
                              var htmlTabUeber="";
                              var htmlOut="";
                              var mix;
                              var counter;
                              //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                              var val1; var val0; var val2;
                              
                              function writeHTML(){
                              
                              
                              htmlOut="";
                              
                              counter=-1;
                              htmlTabUeber="";
                              switch (mehrfachTabelle) { 
                                 case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                 case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                 case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                 case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                              };   
                              if (!UeberschriftSpalten) {htmlTabUeber=""}
                              
                              
                              //--------------------------------------------------------------------------------------------------------------------------------------------------
                              //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                              //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                              //--------------------------------------------------------------------------------------------------------------------------------------------------
                              var myData="xxxxx"; 
                              //let myData=getState("0_userdata.0.DeviceIP").val
                              exec("nmap -sPR --dns-servers "+dnsServer+" "+ipbereich  , function (error, result, stderr) {
                                 myData=result
                               //  setState("0_userdata.0.Tabellen.IPDeviceERROR", result)
                              });
                              let timeout = setTimeout(function () {
                              
                               if (!myData.includes("xxxx")) {
                              
                              var myTimeScanArr=myData.match(/(scanned in) (\d+\.\d+ seconds)/g); //log(myTimeScan)
                              
                              let myArr=myData.match(/for\s+([A-Za-z0-9-_]+).f[^(]+\((\d+.\d+.\d+.\d+)\)|(fritz.\w+)\s+\((\d+.\d+.\d+.\d+)\)|(\d+.\d+.\d+.\d+)$/g)
                              
                              let var1; let var2; let var3;
                              var myObj=[]
                              for(var i=0;i<myArr.length;i++) {
                                 var1=myArr[i].replace(/(for .+) \(\d+\.\d+\.\d+\.\d+\)/,"$1") 
                                // log(var1)
                                  var1=var1.replace(/(.+)\(.+\)/," $1")
                                 var2=myArr[i].replace(/for .+ \((\d+\.\d+\.\d+\.\d+)\)/,"$1");//log(var2)
                                 var2=var2.replace(/.+\((.+)\)/,"$1")
                                 var3="true"
                                let help=[var1,var2,var3]
                                myObj.push(help)
                                if (rootcount) myObjOld.push(help)
                              }
                              
                              
                              //setState("0_userdata.0.Tabellen.IPDeviceERROR", myObj.toString())
                                 
                                 let varhelp1; let varhelp2; let varhelp3="true";    //neue erkannt geräte zu datenbank hinzufügen
                                for (var i=0;i<myObj.length;i++){ 
                                     //  log(myObj[i][0]+"-----"+myObjOld[i][0])
                                         if (!myObjOld.toString().includes(myObj[i][0]))  {  varhelp1=myObj[i][0] ; varhelp2=myObj[i][1]; varhelp3="true"; 
                                                                                  let help=[varhelp1,varhelp2,varhelp3]
                                                                                  myObjOld.push(help)               
                                                                   }                       }
                              
                                for (var i=0;i<myObjOld.length;i++){                // ist gerät noch da ???
                                     //  log(myObj[i][0]+"-----"+myObjOld[i][0])
                                         if (!myObj.toString().includes(myObjOld[i][0]))  {  varhelp1=myObjOld[i][0] ; varhelp2=myObjOld[i][1]; varhelp3="false"; 
                                                                                  let help=[varhelp1,varhelp2,varhelp3]
                                                                                  myObj.push(help)               
                                                                   }                      }
                               
                                 // log("------------------------------------------------"+myObjOld[1].toString())
                              
                                 var1="scanned in" //nur scanned seconds
                                 var3="true"
                                 var2=myTimeScanArr[0].replace(/.+ (\d+\.\d+.+$)/,"$1");//log(var2)
                                let help=[var1,var2,var3]
                                myObj.push(help)
                              
                                
                              //log(myObj[0][0])
                              for(var i=0;i<myObj.length;i++) {            // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                    //  var ida = id.split('.');
                                   //   if( !(id.includes("vis") || id.includes("devices")  ||  id.includes("sssss"))){
                                        counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                      //  log(myObj[i][0].toString())
                                        val0=myObj[i][0].replace("for","")
                                        val0=val0.replace("."+domainName,"")
                                          if (val0.length>=23)  val0=val0.substring(0,23)+" ..." 
                                        val1=myObj[i][1]
                                      
                                        var val2help=myObj[i][2]
                                    
                                        if (val2help=="false") {val2=symbolKO;val0=(" <font color=\"red\"> ")+val0 ;val1=(" <font color=\"red\"> ")+val1}  else{val2=symbolOK}           //<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+"
                              
                                        if(val0=="scanned in") {val2=symbolWARN;val0="<font color=\""+lastZellColorSetting+"\"><i>"+" Anzahl "+counter+"</i>"; val1="<font color=\""+lastZellColorSetting+"\"><i>"+val1+"</i>"}
                              
                                   
                                 
                                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                  
                                 //}
                              }; //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
                              
                              //-------------------------------------------------------------------------------------------------------------------------------------------------
                              //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                              //-------------------------------------------------------------------------------------------------------------------------------------------------
                              
                                    // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                    let timeout = setTimeout(function () {
                                         tabelleFinish();
                                     if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                     }, 1000); 
                                     } else {log("no Data","warn")}
                                     rootcount=false;
                              }, waitTime); 
                              
                              } // function ende
                              
                              //MAIN:
                               
                              schedule(mySchedule,  function () { 
                               writeHTML();
                              // if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                              }); 
                              writeHTML();                                   //     <tdalign
                              
                               function tabelleBind(){
                                 //  counter=counter+mehrfachTabelle;
                                     switch (mehrfachTabelle) { 
                              
                                       case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                                                        {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
                                       case 2: if(counter%4==0){
                                                  if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                      ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                             else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                    }else{
                                                              if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                      ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                             else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                                                  
                                       case 3:if(counter%2==0)   {
                                                  if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                      ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                             else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                              else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                        } break;}else{
                                                  if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                      ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                             else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                              else     {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                        } break;}                                          
                              
                              
                                       case 4:  // counter=counter+8;
                                                 if(counter%8==0)   {
                                                 if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                                                 else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                                              else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                                                else    {htmlOut =htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                                        } break;}else{
                                                 if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                                                 else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                                              else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                                                else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                                        } break;}                                    
                                      } //switch ende
                              
                              }
                              
                              function tabelleFinish() {
                              
                              switch (mehrfachTabelle) {  
                                     case 1:    break;
                              
                                     case 2:    
                                                if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                              
                                                break;
                              
                                     case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                               if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                                               if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                             
                                                break;
                                     case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                               if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                               if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                               if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                                               break; }
                                   
                                       var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                     var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                                      
                                      if (!htmlSignature) htmlUnter="";
                              
                                    //  log(" ist htmlUnter - signature "+htmlUnter)
                                        //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                         var htmlOutVIS="";
                                       //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                          if (htmlUberschrift) 
                                              { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                              
                                            } else {
                                             zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                              
                                               }
                                               
                              
                                // log("bin raus aus tabelleBind");
                                         if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                         
                              
                               var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                               var htmlEnd="</table>"+htmlUnter+"</div></body>";
                               if (!htmlSignature) htmlUnter="";
                              
                               //mit oder ohne überschrift - zentriert oder links
                              htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                               //log(htmlOut);
                              
                              
                              }
                              
                              
                              
                              
                              
                              

                              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                              NegaleinN HomoranH 3 Antworten Letzte Antwort
                              0
                              • liv-in-skyL liv-in-sky

                                @Homoran @Negalein

                                mach jetzt langsam feierabend aber zum test noch - settings umstellen nicht vergessen :-)

                                //@liv-in-sky Januar 2020 2.2-20:39
                                
                                
                                //HIER WIRD PFAD UND FILENAME DEFINIERT
                                const path = "/htmlip.html";                   //FIlenamen definieren
                                const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                                let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                                let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                                let dpVIS="0_userdata.0.Tabellen.IPDevices"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                let mySchedule="  */30 * * * * * ";                       //jede minute  
                                const domainName="fritz.box";
                                const ipbereich="192.168.178.0/24";
                                const dnsServer="192.168.178.1"
                                const waitTime=15000;
                                const lastZellColorSetting="lightgreen"
                                
                                var symbolOK="🟢";     // auch möglich: ="✅"  
                                var symbolKO="💀";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz  oder : ="❌"  ⚪  ⚫ ⭕  🔴 🔵 ⏱ 💀 👍 👎 📑 💲 👀
                                var symbolWARN="ℹ️";    // ="⚠️" oder info: "ℹ️"
                                var externalOhneInfo=false;  //noch nicht integriert
                                //---------------------------------------
                                
                                //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                                var htmlFeld1='Name';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                var htmlFeld2='IP';        var Feld2lAlign="left";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                //-----------------------------------
                                
                                
                                //ÜBERSCHRIFT ÜBER TABELLE
                                let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                const htmlFeldUeber='IP Devices List';              // Überschrift und Signature
                                const htmlFarbUber="white";                         // Farbe der Überschrift
                                const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                //MEHRERE TABELLEN NEBENEINANDER
                                let   mehrfachTabelle=3;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
                                const farbetrennungsLinie="white";
                                const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                                //ÜBERSCHRIFT SPALTEN
                                const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
                                const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
                                const farbeLinieUnterUeberschrift="white";
                                const groesseUeberschrift=16;
                                const UeberschriftStyle="normal"                     // möglich "bold"
                                //GANZE TABELLE
                                let abstandZelle="1";
                                let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                let weite="1200";                                     //Weite der Tabelle
                                let zentriert=true;                                   //ganze tabelle zentriert
                                const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                                const htmlSchriftart="Helvetica";
                                const htmlSchriftgroesse="14px";
                                //FELDER UND RAHMEN
                                let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                                const htmlFarbFelderschrift="#D8D8D8";                  // SchriftFarbe der Felder
                                const htmlFarbFelderschrift2="#BDBDBD";                 // SchriftFarbe der Felder für jede 2te Tabelle
                                const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                                const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                                const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                                const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
                                
                                // HIER NICHTS  ÄNDERN
                                
                                let borderHelpBottum;
                                let borderHelpRight;
                                let htmlcenterHelp;
                                let htmlcenterHelp2;
                                
                                if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                                if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                                if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                                if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                                zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                                zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                                
                                
                                const htmlZentriert='<center>'
                                const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                                   "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                                   " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                                  // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                                   " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                                   " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                                   "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                                   " </style></head><body>"; // <div>";
                                //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                                const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                                      "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                                const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\"; style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
                                const htmlTabUeber3="</tr>";
                                /*
                                table td:first-child {}  //1
                                table td:nth-child(2) {} //2
                                table td:nth-child(3) {} //3
                                table td:last-child {}   //4
                                */
                                
                                //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                                
                                var htmlTabUeber2=  "<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                                var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                   "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                                //------------------------------------------------------
                                var rootcount=true;
                                var myObjOld=[];
                                var htmlTabUeber="";
                                var htmlOut="";
                                var mix;
                                var counter;
                                //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                                var val1; var val0; var val2;
                                
                                function writeHTML(){
                                
                                
                                htmlOut="";
                                
                                counter=-1;
                                htmlTabUeber="";
                                switch (mehrfachTabelle) { 
                                   case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                   case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                   case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                   case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                };   
                                if (!UeberschriftSpalten) {htmlTabUeber=""}
                                
                                
                                //--------------------------------------------------------------------------------------------------------------------------------------------------
                                //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                                //--------------------------------------------------------------------------------------------------------------------------------------------------
                                var myData="xxxxx"; 
                                //let myData=getState("0_userdata.0.DeviceIP").val
                                exec("nmap -sPR --dns-servers "+dnsServer+" "+ipbereich  , function (error, result, stderr) {
                                   myData=result
                                 //  setState("0_userdata.0.Tabellen.IPDeviceERROR", result)
                                });
                                let timeout = setTimeout(function () {
                                
                                 if (!myData.includes("xxxx")) {
                                
                                var myTimeScanArr=myData.match(/(scanned in) (\d+\.\d+ seconds)/g); //log(myTimeScan)
                                
                                let myArr=myData.match(/for\s+([A-Za-z0-9-_]+).f[^(]+\((\d+.\d+.\d+.\d+)\)|(fritz.\w+)\s+\((\d+.\d+.\d+.\d+)\)|(\d+.\d+.\d+.\d+)$/g)
                                
                                let var1; let var2; let var3;
                                var myObj=[]
                                for(var i=0;i<myArr.length;i++) {
                                   var1=myArr[i].replace(/(for .+) \(\d+\.\d+\.\d+\.\d+\)/,"$1") 
                                  // log(var1)
                                    var1=var1.replace(/(.+)\(.+\)/," $1")
                                   var2=myArr[i].replace(/for .+ \((\d+\.\d+\.\d+\.\d+)\)/,"$1");//log(var2)
                                   var2=var2.replace(/.+\((.+)\)/,"$1")
                                   var3="true"
                                  let help=[var1,var2,var3]
                                  myObj.push(help)
                                  if (rootcount) myObjOld.push(help)
                                }
                                
                                
                                //setState("0_userdata.0.Tabellen.IPDeviceERROR", myObj.toString())
                                   
                                   let varhelp1; let varhelp2; let varhelp3="true";    //neue erkannt geräte zu datenbank hinzufügen
                                  for (var i=0;i<myObj.length;i++){ 
                                       //  log(myObj[i][0]+"-----"+myObjOld[i][0])
                                           if (!myObjOld.toString().includes(myObj[i][0]))  {  varhelp1=myObj[i][0] ; varhelp2=myObj[i][1]; varhelp3="true"; 
                                                                                    let help=[varhelp1,varhelp2,varhelp3]
                                                                                    myObjOld.push(help)               
                                                                     }                       }
                                
                                  for (var i=0;i<myObjOld.length;i++){                // ist gerät noch da ???
                                       //  log(myObj[i][0]+"-----"+myObjOld[i][0])
                                           if (!myObj.toString().includes(myObjOld[i][0]))  {  varhelp1=myObjOld[i][0] ; varhelp2=myObjOld[i][1]; varhelp3="false"; 
                                                                                    let help=[varhelp1,varhelp2,varhelp3]
                                                                                    myObj.push(help)               
                                                                     }                      }
                                 
                                   // log("------------------------------------------------"+myObjOld[1].toString())
                                
                                   var1="scanned in" //nur scanned seconds
                                   var3="true"
                                   var2=myTimeScanArr[0].replace(/.+ (\d+\.\d+.+$)/,"$1");//log(var2)
                                  let help=[var1,var2,var3]
                                  myObj.push(help)
                                
                                  
                                //log(myObj[0][0])
                                for(var i=0;i<myObj.length;i++) {            // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                      //  var ida = id.split('.');
                                     //   if( !(id.includes("vis") || id.includes("devices")  ||  id.includes("sssss"))){
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                        //  log(myObj[i][0].toString())
                                          val0=myObj[i][0].replace("for","")
                                          val0=val0.replace("."+domainName,"")
                                            if (val0.length>=23)  val0=val0.substring(0,23)+" ..." 
                                          val1=myObj[i][1]
                                        
                                          var val2help=myObj[i][2]
                                      
                                          if (val2help=="false") {val2=symbolKO;val0=(" <font color=\"red\"> ")+val0 ;val1=(" <font color=\"red\"> ")+val1}  else{val2=symbolOK}           //<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+"
                                
                                          if(val0=="scanned in") {val2=symbolWARN;val0="<font color=\""+lastZellColorSetting+"\"><i>"+" Anzahl "+counter+"</i>"; val1="<font color=\""+lastZellColorSetting+"\"><i>"+val1+"</i>"}
                                
                                     
                                   
                                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    
                                   //}
                                }; //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
                                
                                //-------------------------------------------------------------------------------------------------------------------------------------------------
                                //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                //-------------------------------------------------------------------------------------------------------------------------------------------------
                                
                                      // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                      let timeout = setTimeout(function () {
                                           tabelleFinish();
                                       if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                       }, 1000); 
                                       } else {log("no Data","warn")}
                                       rootcount=false;
                                }, waitTime); 
                                
                                } // function ende
                                
                                //MAIN:
                                 
                                schedule(mySchedule,  function () { 
                                 writeHTML();
                                // if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                }); 
                                writeHTML();                                   //     <tdalign
                                
                                 function tabelleBind(){
                                   //  counter=counter+mehrfachTabelle;
                                       switch (mehrfachTabelle) { 
                                
                                         case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                                                          {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
                                         case 2: if(counter%4==0){
                                                    if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                        ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                               else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                      }else{
                                                                if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                        ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                               else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                                                    
                                         case 3:if(counter%2==0)   {
                                                    if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                        ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                               else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                          } break;}else{
                                                    if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                        ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                               else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                else     {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                          } break;}                                          
                                
                                
                                         case 4:  // counter=counter+8;
                                                   if(counter%8==0)   {
                                                   if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                                                  else    {htmlOut =htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                                          } break;}else{
                                                   if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                                                  else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                                          } break;}                                    
                                        } //switch ende
                                
                                }
                                
                                function tabelleFinish() {
                                
                                switch (mehrfachTabelle) {  
                                       case 1:    break;
                                
                                       case 2:    
                                                  if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                
                                                  break;
                                
                                       case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                 if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                                                 if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                               
                                                  break;
                                       case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                 if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                                 if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                                 if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                                                 break; }
                                     
                                         var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                       var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                                        
                                        if (!htmlSignature) htmlUnter="";
                                
                                      //  log(" ist htmlUnter - signature "+htmlUnter)
                                          //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                           var htmlOutVIS="";
                                         //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                            if (htmlUberschrift) 
                                                { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                
                                              } else {
                                               zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                
                                                 }
                                                 
                                
                                  // log("bin raus aus tabelleBind");
                                           if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                           
                                
                                 var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                                 var htmlEnd="</table>"+htmlUnter+"</div></body>";
                                 if (!htmlSignature) htmlUnter="";
                                
                                 //mit oder ohne überschrift - zentriert oder links
                                htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                                 //log(htmlOut);
                                
                                
                                }
                                
                                
                                
                                
                                
                                

                                NegaleinN Offline
                                NegaleinN Offline
                                Negalein
                                Global Moderator
                                schrieb am zuletzt editiert von
                                #266

                                @liv-in-sky sagte in Auslesen IP -Adressen:

                                mach jetzt langsam feierabend aber zum test noch - settings umstellen nicht vergessen

                                20:23:32.612	info	javascript.0 (5348) Stop script script.js.common.Skript_2
                                20:23:39.482	info	javascript.0 (5348) Start javascript script.js.common.Skript_2
                                20:23:39.509	info	javascript.0 (5348) script.js.common.Skript_2: registered 0 subscriptions and 1 schedule
                                20:23:41.788	warn	javascript.0 (5348) at script.js.common.Skript_2:143:4
                                

                                vis (3).png

                                ° Node.js: 20.17.0 NPM: 10.8.2
                                ° Proxmox, Ubuntu 22.04.3 LTS
                                ° Fixer ---> iob fix

                                1 Antwort Letzte Antwort
                                0
                                • liv-in-skyL liv-in-sky

                                  @Homoran @Negalein

                                  mach jetzt langsam feierabend aber zum test noch - settings umstellen nicht vergessen :-)

                                  //@liv-in-sky Januar 2020 2.2-20:39
                                  
                                  
                                  //HIER WIRD PFAD UND FILENAME DEFINIERT
                                  const path = "/htmlip.html";                   //FIlenamen definieren
                                  const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                                  let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                                  let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                                  let dpVIS="0_userdata.0.Tabellen.IPDevices"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                  let mySchedule="  */30 * * * * * ";                       //jede minute  
                                  const domainName="fritz.box";
                                  const ipbereich="192.168.178.0/24";
                                  const dnsServer="192.168.178.1"
                                  const waitTime=15000;
                                  const lastZellColorSetting="lightgreen"
                                  
                                  var symbolOK="🟢";     // auch möglich: ="✅"  
                                  var symbolKO="💀";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz  oder : ="❌"  ⚪  ⚫ ⭕  🔴 🔵 ⏱ 💀 👍 👎 📑 💲 👀
                                  var symbolWARN="ℹ️";    // ="⚠️" oder info: "ℹ️"
                                  var externalOhneInfo=false;  //noch nicht integriert
                                  //---------------------------------------
                                  
                                  //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                                  var htmlFeld1='Name';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                  var htmlFeld2='IP';        var Feld2lAlign="left";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                  var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                  //-----------------------------------
                                  
                                  
                                  //ÜBERSCHRIFT ÜBER TABELLE
                                  let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                  let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                  const htmlFeldUeber='IP Devices List';              // Überschrift und Signature
                                  const htmlFarbUber="white";                         // Farbe der Überschrift
                                  const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                  const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                  //MEHRERE TABELLEN NEBENEINANDER
                                  let   mehrfachTabelle=3;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                  const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
                                  const farbetrennungsLinie="white";
                                  const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                  const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                                  //ÜBERSCHRIFT SPALTEN
                                  const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
                                  const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
                                  const farbeLinieUnterUeberschrift="white";
                                  const groesseUeberschrift=16;
                                  const UeberschriftStyle="normal"                     // möglich "bold"
                                  //GANZE TABELLE
                                  let abstandZelle="1";
                                  let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                  let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                  let weite="1200";                                     //Weite der Tabelle
                                  let zentriert=true;                                   //ganze tabelle zentriert
                                  const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                                  const htmlSchriftart="Helvetica";
                                  const htmlSchriftgroesse="14px";
                                  //FELDER UND RAHMEN
                                  let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                                  const htmlFarbFelderschrift="#D8D8D8";                  // SchriftFarbe der Felder
                                  const htmlFarbFelderschrift2="#BDBDBD";                 // SchriftFarbe der Felder für jede 2te Tabelle
                                  const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                                  const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                                  const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                  let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                                  const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
                                  
                                  // HIER NICHTS  ÄNDERN
                                  
                                  let borderHelpBottum;
                                  let borderHelpRight;
                                  let htmlcenterHelp;
                                  let htmlcenterHelp2;
                                  
                                  if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                                  if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                                  if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                                  if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                                  zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                                  zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                                  
                                  
                                  const htmlZentriert='<center>'
                                  const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                                     "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                                     " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                                    // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                                     " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                                     " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                                     "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                                     " </style></head><body>"; // <div>";
                                  //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                                  const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                                        "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                                  const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\"; style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
                                  const htmlTabUeber3="</tr>";
                                  /*
                                  table td:first-child {}  //1
                                  table td:nth-child(2) {} //2
                                  table td:nth-child(3) {} //3
                                  table td:last-child {}   //4
                                  */
                                  
                                  //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                                  
                                  var htmlTabUeber2=  "<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                                  var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                     "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                                  //------------------------------------------------------
                                  var rootcount=true;
                                  var myObjOld=[];
                                  var htmlTabUeber="";
                                  var htmlOut="";
                                  var mix;
                                  var counter;
                                  //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                                  var val1; var val0; var val2;
                                  
                                  function writeHTML(){
                                  
                                  
                                  htmlOut="";
                                  
                                  counter=-1;
                                  htmlTabUeber="";
                                  switch (mehrfachTabelle) { 
                                     case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                     case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                     case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                     case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                  };   
                                  if (!UeberschriftSpalten) {htmlTabUeber=""}
                                  
                                  
                                  //--------------------------------------------------------------------------------------------------------------------------------------------------
                                  //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                  //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                                  //--------------------------------------------------------------------------------------------------------------------------------------------------
                                  var myData="xxxxx"; 
                                  //let myData=getState("0_userdata.0.DeviceIP").val
                                  exec("nmap -sPR --dns-servers "+dnsServer+" "+ipbereich  , function (error, result, stderr) {
                                     myData=result
                                   //  setState("0_userdata.0.Tabellen.IPDeviceERROR", result)
                                  });
                                  let timeout = setTimeout(function () {
                                  
                                   if (!myData.includes("xxxx")) {
                                  
                                  var myTimeScanArr=myData.match(/(scanned in) (\d+\.\d+ seconds)/g); //log(myTimeScan)
                                  
                                  let myArr=myData.match(/for\s+([A-Za-z0-9-_]+).f[^(]+\((\d+.\d+.\d+.\d+)\)|(fritz.\w+)\s+\((\d+.\d+.\d+.\d+)\)|(\d+.\d+.\d+.\d+)$/g)
                                  
                                  let var1; let var2; let var3;
                                  var myObj=[]
                                  for(var i=0;i<myArr.length;i++) {
                                     var1=myArr[i].replace(/(for .+) \(\d+\.\d+\.\d+\.\d+\)/,"$1") 
                                    // log(var1)
                                      var1=var1.replace(/(.+)\(.+\)/," $1")
                                     var2=myArr[i].replace(/for .+ \((\d+\.\d+\.\d+\.\d+)\)/,"$1");//log(var2)
                                     var2=var2.replace(/.+\((.+)\)/,"$1")
                                     var3="true"
                                    let help=[var1,var2,var3]
                                    myObj.push(help)
                                    if (rootcount) myObjOld.push(help)
                                  }
                                  
                                  
                                  //setState("0_userdata.0.Tabellen.IPDeviceERROR", myObj.toString())
                                     
                                     let varhelp1; let varhelp2; let varhelp3="true";    //neue erkannt geräte zu datenbank hinzufügen
                                    for (var i=0;i<myObj.length;i++){ 
                                         //  log(myObj[i][0]+"-----"+myObjOld[i][0])
                                             if (!myObjOld.toString().includes(myObj[i][0]))  {  varhelp1=myObj[i][0] ; varhelp2=myObj[i][1]; varhelp3="true"; 
                                                                                      let help=[varhelp1,varhelp2,varhelp3]
                                                                                      myObjOld.push(help)               
                                                                       }                       }
                                  
                                    for (var i=0;i<myObjOld.length;i++){                // ist gerät noch da ???
                                         //  log(myObj[i][0]+"-----"+myObjOld[i][0])
                                             if (!myObj.toString().includes(myObjOld[i][0]))  {  varhelp1=myObjOld[i][0] ; varhelp2=myObjOld[i][1]; varhelp3="false"; 
                                                                                      let help=[varhelp1,varhelp2,varhelp3]
                                                                                      myObj.push(help)               
                                                                       }                      }
                                   
                                     // log("------------------------------------------------"+myObjOld[1].toString())
                                  
                                     var1="scanned in" //nur scanned seconds
                                     var3="true"
                                     var2=myTimeScanArr[0].replace(/.+ (\d+\.\d+.+$)/,"$1");//log(var2)
                                    let help=[var1,var2,var3]
                                    myObj.push(help)
                                  
                                    
                                  //log(myObj[0][0])
                                  for(var i=0;i<myObj.length;i++) {            // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        //  var ida = id.split('.');
                                       //   if( !(id.includes("vis") || id.includes("devices")  ||  id.includes("sssss"))){
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                          //  log(myObj[i][0].toString())
                                            val0=myObj[i][0].replace("for","")
                                            val0=val0.replace("."+domainName,"")
                                              if (val0.length>=23)  val0=val0.substring(0,23)+" ..." 
                                            val1=myObj[i][1]
                                          
                                            var val2help=myObj[i][2]
                                        
                                            if (val2help=="false") {val2=symbolKO;val0=(" <font color=\"red\"> ")+val0 ;val1=(" <font color=\"red\"> ")+val1}  else{val2=symbolOK}           //<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+"
                                  
                                            if(val0=="scanned in") {val2=symbolWARN;val0="<font color=\""+lastZellColorSetting+"\"><i>"+" Anzahl "+counter+"</i>"; val1="<font color=\""+lastZellColorSetting+"\"><i>"+val1+"</i>"}
                                  
                                       
                                     
                                       tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                      
                                     //}
                                  }; //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
                                  
                                  //-------------------------------------------------------------------------------------------------------------------------------------------------
                                  //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                  //-------------------------------------------------------------------------------------------------------------------------------------------------
                                  
                                        // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                        let timeout = setTimeout(function () {
                                             tabelleFinish();
                                         if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                         }, 1000); 
                                         } else {log("no Data","warn")}
                                         rootcount=false;
                                  }, waitTime); 
                                  
                                  } // function ende
                                  
                                  //MAIN:
                                   
                                  schedule(mySchedule,  function () { 
                                   writeHTML();
                                  // if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                  }); 
                                  writeHTML();                                   //     <tdalign
                                  
                                   function tabelleBind(){
                                     //  counter=counter+mehrfachTabelle;
                                         switch (mehrfachTabelle) { 
                                  
                                           case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                                                            {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
                                           case 2: if(counter%4==0){
                                                      if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                          ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                 else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                        }else{
                                                                  if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                          ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                 else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                                                      
                                           case 3:if(counter%2==0)   {
                                                      if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                          ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                 else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                  else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                            } break;}else{
                                                      if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                          ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                 else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                  else     {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                            } break;}                                          
                                  
                                  
                                           case 4:  // counter=counter+8;
                                                     if(counter%8==0)   {
                                                     if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                                                     else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                                                  else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                                                    else    {htmlOut =htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                                            } break;}else{
                                                     if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                                                     else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                                                  else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                                                    else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                                            } break;}                                    
                                          } //switch ende
                                  
                                  }
                                  
                                  function tabelleFinish() {
                                  
                                  switch (mehrfachTabelle) {  
                                         case 1:    break;
                                  
                                         case 2:    
                                                    if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                  
                                                    break;
                                  
                                         case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                   if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                                                   if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                                 
                                                    break;
                                         case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                   if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                                   if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                                   if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                                                   break; }
                                       
                                           var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                         var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                                          
                                          if (!htmlSignature) htmlUnter="";
                                  
                                        //  log(" ist htmlUnter - signature "+htmlUnter)
                                            //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                             var htmlOutVIS="";
                                           //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                              if (htmlUberschrift) 
                                                  { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                  
                                                } else {
                                                 zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                  
                                                   }
                                                   
                                  
                                    // log("bin raus aus tabelleBind");
                                             if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                             
                                  
                                   var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                                   var htmlEnd="</table>"+htmlUnter+"</div></body>";
                                   if (!htmlSignature) htmlUnter="";
                                  
                                   //mit oder ohne überschrift - zentriert oder links
                                  htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                                   //log(htmlOut);
                                  
                                  
                                  }
                                  
                                  
                                  
                                  
                                  
                                  

                                  HomoranH Nicht stören
                                  HomoranH Nicht stören
                                  Homoran
                                  Global Moderator Administrators
                                  schrieb am zuletzt editiert von
                                  #267

                                  @liv-in-sky

                                  20:26:58.740	warn	javascript.0 (17494) at script.js.nmap-Testing.v03:143:4
                                  

                                  Habe "brauche ein widget" auf false

                                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                  NegaleinN liv-in-skyL 2 Antworten Letzte Antwort
                                  0
                                  • HomoranH Homoran

                                    @liv-in-sky

                                    20:26:58.740	warn	javascript.0 (17494) at script.js.nmap-Testing.v03:143:4
                                    

                                    Habe "brauche ein widget" auf false

                                    NegaleinN Offline
                                    NegaleinN Offline
                                    Negalein
                                    Global Moderator
                                    schrieb am zuletzt editiert von
                                    #268

                                    @Homoran sagte in Auslesen IP -Adressen:

                                    Habe "brauche ein widget" auf false

                                    ich habe "brauche ein File" auf false

                                    selber Fehler

                                    ° Node.js: 20.17.0 NPM: 10.8.2
                                    ° Proxmox, Ubuntu 22.04.3 LTS
                                    ° Fixer ---> iob fix

                                    LatziL 1 Antwort Letzte Antwort
                                    0
                                    • HomoranH Homoran

                                      @liv-in-sky

                                      20:26:58.740	warn	javascript.0 (17494) at script.js.nmap-Testing.v03:143:4
                                      

                                      Habe "brauche ein widget" auf false

                                      liv-in-skyL Offline
                                      liv-in-skyL Offline
                                      liv-in-sky
                                      schrieb am zuletzt editiert von
                                      #269

                                      @Homoran @Negalein

                                      bitte zeile143 auskommentieren - war nur bei mir für test - ist nicht relevant

                                       //  setState("0_userdata.0.Tabellen.IPDeviceERROR", result)
                                      

                                      nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                      1 Antwort Letzte Antwort
                                      0
                                      • NegaleinN Negalein

                                        @Homoran sagte in Auslesen IP -Adressen:

                                        Habe "brauche ein widget" auf false

                                        ich habe "brauche ein File" auf false

                                        selber Fehler

                                        LatziL Online
                                        LatziL Online
                                        Latzi
                                        schrieb am zuletzt editiert von
                                        #270

                                        @Negalein , @Homoran
                                        DP 0_userdata.0.Tabellen.IPDeviceERROR anlegen oder Zeile auskommentieren, damit läuft´s bei mir

                                        HomoranH 1 Antwort Letzte Antwort
                                        0
                                        • liv-in-skyL liv-in-sky

                                          @Homoran @Negalein

                                          mach jetzt langsam feierabend aber zum test noch - settings umstellen nicht vergessen :-)

                                          //@liv-in-sky Januar 2020 2.2-20:39
                                          
                                          
                                          //HIER WIRD PFAD UND FILENAME DEFINIERT
                                          const path = "/htmlip.html";                   //FIlenamen definieren
                                          const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                                          let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                                          let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                                          let dpVIS="0_userdata.0.Tabellen.IPDevices"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                          let mySchedule="  */30 * * * * * ";                       //jede minute  
                                          const domainName="fritz.box";
                                          const ipbereich="192.168.178.0/24";
                                          const dnsServer="192.168.178.1"
                                          const waitTime=15000;
                                          const lastZellColorSetting="lightgreen"
                                          
                                          var symbolOK="🟢";     // auch möglich: ="✅"  
                                          var symbolKO="💀";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz  oder : ="❌"  ⚪  ⚫ ⭕  🔴 🔵 ⏱ 💀 👍 👎 📑 💲 👀
                                          var symbolWARN="ℹ️";    // ="⚠️" oder info: "ℹ️"
                                          var externalOhneInfo=false;  //noch nicht integriert
                                          //---------------------------------------
                                          
                                          //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                                          var htmlFeld1='Name';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                          var htmlFeld2='IP';        var Feld2lAlign="left";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                          var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                          //-----------------------------------
                                          
                                          
                                          //ÜBERSCHRIFT ÜBER TABELLE
                                          let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                          let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                          const htmlFeldUeber='IP Devices List';              // Überschrift und Signature
                                          const htmlFarbUber="white";                         // Farbe der Überschrift
                                          const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                          const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                          //MEHRERE TABELLEN NEBENEINANDER
                                          let   mehrfachTabelle=3;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                          const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
                                          const farbetrennungsLinie="white";
                                          const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                          const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                                          //ÜBERSCHRIFT SPALTEN
                                          const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
                                          const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
                                          const farbeLinieUnterUeberschrift="white";
                                          const groesseUeberschrift=16;
                                          const UeberschriftStyle="normal"                     // möglich "bold"
                                          //GANZE TABELLE
                                          let abstandZelle="1";
                                          let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                          let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                          let weite="1200";                                     //Weite der Tabelle
                                          let zentriert=true;                                   //ganze tabelle zentriert
                                          const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                                          const htmlSchriftart="Helvetica";
                                          const htmlSchriftgroesse="14px";
                                          //FELDER UND RAHMEN
                                          let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                                          const htmlFarbFelderschrift="#D8D8D8";                  // SchriftFarbe der Felder
                                          const htmlFarbFelderschrift2="#BDBDBD";                 // SchriftFarbe der Felder für jede 2te Tabelle
                                          const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                                          const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                                          const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                          let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                                          const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
                                          
                                          // HIER NICHTS  ÄNDERN
                                          
                                          let borderHelpBottum;
                                          let borderHelpRight;
                                          let htmlcenterHelp;
                                          let htmlcenterHelp2;
                                          
                                          if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                                          if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                                          if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                                          if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                                          zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                                          zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                                          
                                          
                                          const htmlZentriert='<center>'
                                          const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                                             "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                                             " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                                            // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                                             " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                                             " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                                             "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                                             " </style></head><body>"; // <div>";
                                          //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                                          const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                                                "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                                          const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\"; style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
                                          const htmlTabUeber3="</tr>";
                                          /*
                                          table td:first-child {}  //1
                                          table td:nth-child(2) {} //2
                                          table td:nth-child(3) {} //3
                                          table td:last-child {}   //4
                                          */
                                          
                                          //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                                          
                                          var htmlTabUeber2=  "<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                                          var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                             "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                                          //------------------------------------------------------
                                          var rootcount=true;
                                          var myObjOld=[];
                                          var htmlTabUeber="";
                                          var htmlOut="";
                                          var mix;
                                          var counter;
                                          //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                                          var val1; var val0; var val2;
                                          
                                          function writeHTML(){
                                          
                                          
                                          htmlOut="";
                                          
                                          counter=-1;
                                          htmlTabUeber="";
                                          switch (mehrfachTabelle) { 
                                             case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                             case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                             case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                             case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                          };   
                                          if (!UeberschriftSpalten) {htmlTabUeber=""}
                                          
                                          
                                          //--------------------------------------------------------------------------------------------------------------------------------------------------
                                          //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                          //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                                          //--------------------------------------------------------------------------------------------------------------------------------------------------
                                          var myData="xxxxx"; 
                                          //let myData=getState("0_userdata.0.DeviceIP").val
                                          exec("nmap -sPR --dns-servers "+dnsServer+" "+ipbereich  , function (error, result, stderr) {
                                             myData=result
                                           //  setState("0_userdata.0.Tabellen.IPDeviceERROR", result)
                                          });
                                          let timeout = setTimeout(function () {
                                          
                                           if (!myData.includes("xxxx")) {
                                          
                                          var myTimeScanArr=myData.match(/(scanned in) (\d+\.\d+ seconds)/g); //log(myTimeScan)
                                          
                                          let myArr=myData.match(/for\s+([A-Za-z0-9-_]+).f[^(]+\((\d+.\d+.\d+.\d+)\)|(fritz.\w+)\s+\((\d+.\d+.\d+.\d+)\)|(\d+.\d+.\d+.\d+)$/g)
                                          
                                          let var1; let var2; let var3;
                                          var myObj=[]
                                          for(var i=0;i<myArr.length;i++) {
                                             var1=myArr[i].replace(/(for .+) \(\d+\.\d+\.\d+\.\d+\)/,"$1") 
                                            // log(var1)
                                              var1=var1.replace(/(.+)\(.+\)/," $1")
                                             var2=myArr[i].replace(/for .+ \((\d+\.\d+\.\d+\.\d+)\)/,"$1");//log(var2)
                                             var2=var2.replace(/.+\((.+)\)/,"$1")
                                             var3="true"
                                            let help=[var1,var2,var3]
                                            myObj.push(help)
                                            if (rootcount) myObjOld.push(help)
                                          }
                                          
                                          
                                          //setState("0_userdata.0.Tabellen.IPDeviceERROR", myObj.toString())
                                             
                                             let varhelp1; let varhelp2; let varhelp3="true";    //neue erkannt geräte zu datenbank hinzufügen
                                            for (var i=0;i<myObj.length;i++){ 
                                                 //  log(myObj[i][0]+"-----"+myObjOld[i][0])
                                                     if (!myObjOld.toString().includes(myObj[i][0]))  {  varhelp1=myObj[i][0] ; varhelp2=myObj[i][1]; varhelp3="true"; 
                                                                                              let help=[varhelp1,varhelp2,varhelp3]
                                                                                              myObjOld.push(help)               
                                                                               }                       }
                                          
                                            for (var i=0;i<myObjOld.length;i++){                // ist gerät noch da ???
                                                 //  log(myObj[i][0]+"-----"+myObjOld[i][0])
                                                     if (!myObj.toString().includes(myObjOld[i][0]))  {  varhelp1=myObjOld[i][0] ; varhelp2=myObjOld[i][1]; varhelp3="false"; 
                                                                                              let help=[varhelp1,varhelp2,varhelp3]
                                                                                              myObj.push(help)               
                                                                               }                      }
                                           
                                             // log("------------------------------------------------"+myObjOld[1].toString())
                                          
                                             var1="scanned in" //nur scanned seconds
                                             var3="true"
                                             var2=myTimeScanArr[0].replace(/.+ (\d+\.\d+.+$)/,"$1");//log(var2)
                                            let help=[var1,var2,var3]
                                            myObj.push(help)
                                          
                                            
                                          //log(myObj[0][0])
                                          for(var i=0;i<myObj.length;i++) {            // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                                //  var ida = id.split('.');
                                               //   if( !(id.includes("vis") || id.includes("devices")  ||  id.includes("sssss"))){
                                                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                  //  log(myObj[i][0].toString())
                                                    val0=myObj[i][0].replace("for","")
                                                    val0=val0.replace("."+domainName,"")
                                                      if (val0.length>=23)  val0=val0.substring(0,23)+" ..." 
                                                    val1=myObj[i][1]
                                                  
                                                    var val2help=myObj[i][2]
                                                
                                                    if (val2help=="false") {val2=symbolKO;val0=(" <font color=\"red\"> ")+val0 ;val1=(" <font color=\"red\"> ")+val1}  else{val2=symbolOK}           //<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+"
                                          
                                                    if(val0=="scanned in") {val2=symbolWARN;val0="<font color=\""+lastZellColorSetting+"\"><i>"+" Anzahl "+counter+"</i>"; val1="<font color=\""+lastZellColorSetting+"\"><i>"+val1+"</i>"}
                                          
                                               
                                             
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                              
                                             //}
                                          }; //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
                                          
                                          //-------------------------------------------------------------------------------------------------------------------------------------------------
                                          //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                          //-------------------------------------------------------------------------------------------------------------------------------------------------
                                          
                                                // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                                let timeout = setTimeout(function () {
                                                     tabelleFinish();
                                                 if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                                 }, 1000); 
                                                 } else {log("no Data","warn")}
                                                 rootcount=false;
                                          }, waitTime); 
                                          
                                          } // function ende
                                          
                                          //MAIN:
                                           
                                          schedule(mySchedule,  function () { 
                                           writeHTML();
                                          // if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                          }); 
                                          writeHTML();                                   //     <tdalign
                                          
                                           function tabelleBind(){
                                             //  counter=counter+mehrfachTabelle;
                                                 switch (mehrfachTabelle) { 
                                          
                                                   case 1: if(counter%2==0)         {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}else    
                                                                                    {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;}
                                                   case 2: if(counter%4==0){
                                                              if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                                  ";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                         else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                                }else{
                                                                          if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                                  ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                         else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;}
                                                                              
                                                   case 3:if(counter%2==0)   {
                                                              if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                                  ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                         else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                          else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                                    } break;}else{
                                                              if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                                                                  ";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                         else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                          else     {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                                    } break;}                                          
                                          
                                          
                                                   case 4:  // counter=counter+8;
                                                             if(counter%8==0)   {
                                                             if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } // teil1
                                                                             else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} //teil 2
                                                                                          else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} //teil 4
                                                                                                            else    {htmlOut =htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                                                    } break;}else{
                                                             if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } //teil 1
                                                                             else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} // teil 2
                                                                                          else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} // teil 4
                                                                                                            else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}} //teil 3
                                                                                    } break;}                                    
                                                  } //switch ende
                                          
                                          }
                                          
                                          function tabelleFinish() {
                                          
                                          switch (mehrfachTabelle) {  
                                                 case 1:    break;
                                          
                                                 case 2:    
                                                            if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                          
                                                            break;
                                          
                                                 case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                           if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");        
                                                           if(counter%3==0)      htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                                         
                                                            break;
                                                 case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                           if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                                           if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                                           if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                                                           break; }
                                               
                                                   var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                                 var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                                                  
                                                  if (!htmlSignature) htmlUnter="";
                                          
                                                //  log(" ist htmlUnter - signature "+htmlUnter)
                                                    //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                                     var htmlOutVIS="";
                                                   //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                                      if (htmlUberschrift) 
                                                          { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                          
                                                        } else {
                                                         zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                          
                                                           }
                                                           
                                          
                                            // log("bin raus aus tabelleBind");
                                                     if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                                     
                                          
                                           var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                                           var htmlEnd="</table>"+htmlUnter+"</div></body>";
                                           if (!htmlSignature) htmlUnter="";
                                          
                                           //mit oder ohne überschrift - zentriert oder links
                                          htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                                           //log(htmlOut);
                                          
                                          
                                          }
                                          
                                          
                                          
                                          
                                          
                                          

                                          HomoranH Nicht stören
                                          HomoranH Nicht stören
                                          Homoran
                                          Global Moderator Administrators
                                          schrieb am zuletzt editiert von
                                          #271

                                          @liv-in-sky

                                          sieht schon gut aus, aber der selbe "Fehler" wie bei der alten Version mit "sed"

                                          nmap_v3.png

                                          Die Handys-die aus irgendeinem Grund nicht den Namen aus der Fritte bekommen sind nicht drin:

                                          Nmap scan report for 192.168.138.143
                                          Host is up (0.033s latency).
                                          Nmap scan report for 192.168.138.144
                                          Host is up (0.076s latency).
                                          
                                          

                                          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                          NegaleinN 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

                                          860

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          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