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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Sonoff Geräte als HTML Tabelle - Vis

NEWS

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

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

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

Sonoff Geräte als HTML Tabelle - Vis

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptmonitoringtemplate
632 Beiträge 34 Kommentatoren 134.0k Aufrufe 39 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

    meine sorgenkinder

    Image 6.png

    crunchipC Abwesend
    crunchipC Abwesend
    crunchip
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #24

    @liv-in-sky 4 kanal hab ich keinen, dein King Art wird bei dir angezeigt, meiner nicht

    umgestiegen von Proxmox auf Unraid

    liv-in-skyL 1 Antwort Letzte Antwort
    0
    • crunchipC crunchip

      @liv-in-sky 4 kanal hab ich keinen, dein King Art wird bei dir angezeigt, meiner nicht

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

      @crunchip kommt noch

      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

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

        @crunchip kommt noch

        ChaotC Offline
        ChaotC Offline
        Chaot
        schrieb am zuletzt editiert von Chaot
        #26

        @liv-in-sky
        Jetzt läuft ein Fehler auf:

        
        javascript.0	2020-01-14 20:56:16.877	error	(560) at Script.runInContext (vm.js:133:20)
        javascript.0	2020-01-14 20:56:16.877	error	(560) at script.js.Systeminfo.TasmotasNeu:412:2
        javascript.0	2020-01-14 20:56:16.877	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:56:16.877	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:56:16.877	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
        javascript.0	2020-01-14 20:56:16.877	error	(560) TypeError: Cannot read property 'replace' of null
        javascript.0	2020-01-14 20:56:16.877	error	(560) ^
        javascript.0	2020-01-14 20:56:16.876	error	(560) val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"") //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
        javascript.0	2020-01-14 20:56:16.876	error	(560) script.js.Systeminfo.TasmotasNeu: script.js.Systeminfo.TasmotasNeu:229
        javascript.0	2020-01-14 20:56:16.875	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
        javascript.0	2020-01-14 20:56:16.875	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:56:16.875	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:56:16.874	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
        javascript.0	2020-01-14 20:56:16.874	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
        javascript.0	2020-01-14 20:56:16.873	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
        javascript.0	2020-01-14 20:56:16.873	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:56:16.873	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:56:16.873	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
        javascript.0	2020-01-14 20:56:16.871	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
        javascript.0	2020-01-14 20:55:20.015	error	(560) at tryOnTimeout (timers.js:300:5)
        javascript.0	2020-01-14 20:55:20.015	error	(560) at ontimeout (timers.js:436:11)
        javascript.0	2020-01-14 20:55:20.014	error	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
        javascript.0	2020-01-14 20:55:20.014	error	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
        javascript.0	2020-01-14 20:55:20.014	error	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
        javascript.0	2020-01-14 20:55:20.014	error	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
        javascript.0	2020-01-14 20:55:20.014	error	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
        javascript.0	2020-01-14 20:55:20.014	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:55:20.013	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:55:20.013	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
        javascript.0	2020-01-14 20:55:20.013	error	(560) Error in callback: TypeError: Cannot read property 'replace' of null
        javascript.0	2020-01-14 20:55:20.012	warn	(560) at Timer.processTimers (timers.js:223:10)
        javascript.0	2020-01-14 20:55:20.012	warn	(560) at listOnTimeout (timers.js:263:5)
        javascript.0	2020-01-14 20:55:20.012	warn	(560) at tryOnTimeout (timers.js:300:5)
        javascript.0	2020-01-14 20:55:20.012	warn	(560) at ontimeout (timers.js:436:11)
        javascript.0	2020-01-14 20:55:20.012	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
        javascript.0	2020-01-14 20:55:20.012	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
        javascript.0	2020-01-14 20:55:20.011	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
        javascript.0	2020-01-14 20:55:20.011	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
        javascript.0	2020-01-14 20:55:20.011	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
        javascript.0	2020-01-14 20:55:20.011	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:55:20.011	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:55:20.010	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
        javascript.0	2020-01-14 20:55:20.009	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
        javascript.0	2020-01-14 20:55:20.009	warn	(560) at Timer.processTimers (timers.js:223:10)
        javascript.0	2020-01-14 20:55:20.009	warn	(560) at listOnTimeout (timers.js:263:5)
        javascript.0	2020-01-14 20:55:20.009	warn	(560) at tryOnTimeout (timers.js:300:5)
        javascript.0	2020-01-14 20:55:20.008	warn	(560) at ontimeout (timers.js:436:11)
        javascript.0	2020-01-14 20:55:20.008	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
        javascript.0	2020-01-14 20:55:20.008	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
        javascript.0	2020-01-14 20:55:20.008	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
        javascript.0	2020-01-14 20:55:20.008	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
        javascript.0	2020-01-14 20:55:20.008	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
        javascript.0	2020-01-14 20:55:20.007	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:55:20.007	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:55:20.007	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
        javascript.0	2020-01-14 20:55:20.006	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
        javascript.0	2020-01-14 20:55:00.017	error	(560) at tryOnTimeout (timers.js:300:5)
        javascript.0	2020-01-14 20:55:00.017	error	(560) at ontimeout (timers.js:436:11)
        javascript.0	2020-01-14 20:55:00.017	error	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
        javascript.0	2020-01-14 20:55:00.017	error	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
        javascript.0	2020-01-14 20:55:00.017	error	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
        javascript.0	2020-01-14 20:55:00.016	error	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
        javascript.0	2020-01-14 20:55:00.016	error	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
        javascript.0	2020-01-14 20:55:00.016	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:55:00.016	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:55:00.016	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
        javascript.0	2020-01-14 20:55:00.015	error	(560) Error in callback: TypeError: Cannot read property 'replace' of null
        javascript.0	2020-01-14 20:55:00.014	warn	(560) at Timer.processTimers (timers.js:223:10)
        javascript.0	2020-01-14 20:55:00.014	warn	(560) at listOnTimeout (timers.js:263:5)
        javascript.0	2020-01-14 20:55:00.014	warn	(560) at tryOnTimeout (timers.js:300:5)
        javascript.0	2020-01-14 20:55:00.014	warn	(560) at ontimeout (timers.js:436:11)
        javascript.0	2020-01-14 20:55:00.014	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
        javascript.0	2020-01-14 20:55:00.013	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
        javascript.0	2020-01-14 20:55:00.013	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
        javascript.0	2020-01-14 20:55:00.013	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
        javascript.0	2020-01-14 20:55:00.013	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
        javascript.0	2020-01-14 20:55:00.013	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:55:00.013	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:55:00.012	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
        javascript.0	2020-01-14 20:55:00.012	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
        javascript.0	2020-01-14 20:55:00.011	warn	(560) at Timer.processTimers (timers.js:223:10)
        javascript.0	2020-01-14 20:55:00.011	warn	(560) at listOnTimeout (timers.js:263:5)
        javascript.0	2020-01-14 20:55:00.011	warn	(560) at tryOnTimeout (timers.js:300:5)
        javascript.0	2020-01-14 20:55:00.011	warn	(560) at ontimeout (timers.js:436:11)
        javascript.0	2020-01-14 20:55:00.011	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
        javascript.0	2020-01-14 20:55:00.011	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
        javascript.0	2020-01-14 20:55:00.011	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
        javascript.0	2020-01-14 20:55:00.010	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
        javascript.0	2020-01-14 20:55:00.010	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
        javascript.0	2020-01-14 20:55:00.010	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:55:00.009	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:55:00.007	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
        javascript.0	2020-01-14 20:55:00.006	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
        

        javascript.0	2020-01-14 20:58:25.771	error	(560) at Script.runInContext (vm.js:133:20)
        javascript.0	2020-01-14 20:58:25.771	error	(560) at script.js.Systeminfo.TasmotasNeu:412:2
        javascript.0	2020-01-14 20:58:25.771	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:58:25.770	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:58:25.770	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
        javascript.0	2020-01-14 20:58:25.770	error	(560) TypeError: Cannot read property 'replace' of null
        javascript.0	2020-01-14 20:58:25.770	error	(560) ^
        javascript.0	2020-01-14 20:58:25.770	error	(560) val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"") //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
        javascript.0	2020-01-14 20:58:25.769	error	(560) script.js.Systeminfo.TasmotasNeu: script.js.Systeminfo.TasmotasNeu:229
        javascript.0	2020-01-14 20:58:25.769	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
        javascript.0	2020-01-14 20:58:25.769	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:58:25.768	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:58:25.768	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
        javascript.0	2020-01-14 20:58:25.767	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
        javascript.0	2020-01-14 20:58:25.767	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
        javascript.0	2020-01-14 20:58:25.766	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
        javascript.0	2020-01-14 20:58:25.766	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
        javascript.0	2020-01-14 20:58:25.766	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
        javascript.0	2020-01-14 20:58:25.765	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
        

        ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

        liv-in-skyL 1 Antwort Letzte Antwort
        0
        • ChaotC Chaot

          @liv-in-sky
          Jetzt läuft ein Fehler auf:

          
          javascript.0	2020-01-14 20:56:16.877	error	(560) at Script.runInContext (vm.js:133:20)
          javascript.0	2020-01-14 20:56:16.877	error	(560) at script.js.Systeminfo.TasmotasNeu:412:2
          javascript.0	2020-01-14 20:56:16.877	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:56:16.877	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:56:16.877	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
          javascript.0	2020-01-14 20:56:16.877	error	(560) TypeError: Cannot read property 'replace' of null
          javascript.0	2020-01-14 20:56:16.877	error	(560) ^
          javascript.0	2020-01-14 20:56:16.876	error	(560) val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"") //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
          javascript.0	2020-01-14 20:56:16.876	error	(560) script.js.Systeminfo.TasmotasNeu: script.js.Systeminfo.TasmotasNeu:229
          javascript.0	2020-01-14 20:56:16.875	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
          javascript.0	2020-01-14 20:56:16.875	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:56:16.875	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:56:16.874	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
          javascript.0	2020-01-14 20:56:16.874	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
          javascript.0	2020-01-14 20:56:16.873	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
          javascript.0	2020-01-14 20:56:16.873	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:56:16.873	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:56:16.873	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
          javascript.0	2020-01-14 20:56:16.871	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
          javascript.0	2020-01-14 20:55:20.015	error	(560) at tryOnTimeout (timers.js:300:5)
          javascript.0	2020-01-14 20:55:20.015	error	(560) at ontimeout (timers.js:436:11)
          javascript.0	2020-01-14 20:55:20.014	error	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
          javascript.0	2020-01-14 20:55:20.014	error	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
          javascript.0	2020-01-14 20:55:20.014	error	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
          javascript.0	2020-01-14 20:55:20.014	error	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
          javascript.0	2020-01-14 20:55:20.014	error	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
          javascript.0	2020-01-14 20:55:20.014	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:55:20.013	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:55:20.013	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
          javascript.0	2020-01-14 20:55:20.013	error	(560) Error in callback: TypeError: Cannot read property 'replace' of null
          javascript.0	2020-01-14 20:55:20.012	warn	(560) at Timer.processTimers (timers.js:223:10)
          javascript.0	2020-01-14 20:55:20.012	warn	(560) at listOnTimeout (timers.js:263:5)
          javascript.0	2020-01-14 20:55:20.012	warn	(560) at tryOnTimeout (timers.js:300:5)
          javascript.0	2020-01-14 20:55:20.012	warn	(560) at ontimeout (timers.js:436:11)
          javascript.0	2020-01-14 20:55:20.012	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
          javascript.0	2020-01-14 20:55:20.012	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
          javascript.0	2020-01-14 20:55:20.011	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
          javascript.0	2020-01-14 20:55:20.011	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
          javascript.0	2020-01-14 20:55:20.011	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
          javascript.0	2020-01-14 20:55:20.011	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:55:20.011	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:55:20.010	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
          javascript.0	2020-01-14 20:55:20.009	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
          javascript.0	2020-01-14 20:55:20.009	warn	(560) at Timer.processTimers (timers.js:223:10)
          javascript.0	2020-01-14 20:55:20.009	warn	(560) at listOnTimeout (timers.js:263:5)
          javascript.0	2020-01-14 20:55:20.009	warn	(560) at tryOnTimeout (timers.js:300:5)
          javascript.0	2020-01-14 20:55:20.008	warn	(560) at ontimeout (timers.js:436:11)
          javascript.0	2020-01-14 20:55:20.008	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
          javascript.0	2020-01-14 20:55:20.008	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
          javascript.0	2020-01-14 20:55:20.008	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
          javascript.0	2020-01-14 20:55:20.008	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
          javascript.0	2020-01-14 20:55:20.008	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
          javascript.0	2020-01-14 20:55:20.007	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:55:20.007	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:55:20.007	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
          javascript.0	2020-01-14 20:55:20.006	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
          javascript.0	2020-01-14 20:55:00.017	error	(560) at tryOnTimeout (timers.js:300:5)
          javascript.0	2020-01-14 20:55:00.017	error	(560) at ontimeout (timers.js:436:11)
          javascript.0	2020-01-14 20:55:00.017	error	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
          javascript.0	2020-01-14 20:55:00.017	error	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
          javascript.0	2020-01-14 20:55:00.017	error	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
          javascript.0	2020-01-14 20:55:00.016	error	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
          javascript.0	2020-01-14 20:55:00.016	error	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
          javascript.0	2020-01-14 20:55:00.016	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:55:00.016	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:55:00.016	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
          javascript.0	2020-01-14 20:55:00.015	error	(560) Error in callback: TypeError: Cannot read property 'replace' of null
          javascript.0	2020-01-14 20:55:00.014	warn	(560) at Timer.processTimers (timers.js:223:10)
          javascript.0	2020-01-14 20:55:00.014	warn	(560) at listOnTimeout (timers.js:263:5)
          javascript.0	2020-01-14 20:55:00.014	warn	(560) at tryOnTimeout (timers.js:300:5)
          javascript.0	2020-01-14 20:55:00.014	warn	(560) at ontimeout (timers.js:436:11)
          javascript.0	2020-01-14 20:55:00.014	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
          javascript.0	2020-01-14 20:55:00.013	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
          javascript.0	2020-01-14 20:55:00.013	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
          javascript.0	2020-01-14 20:55:00.013	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
          javascript.0	2020-01-14 20:55:00.013	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
          javascript.0	2020-01-14 20:55:00.013	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:55:00.013	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:55:00.012	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
          javascript.0	2020-01-14 20:55:00.012	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
          javascript.0	2020-01-14 20:55:00.011	warn	(560) at Timer.processTimers (timers.js:223:10)
          javascript.0	2020-01-14 20:55:00.011	warn	(560) at listOnTimeout (timers.js:263:5)
          javascript.0	2020-01-14 20:55:00.011	warn	(560) at tryOnTimeout (timers.js:300:5)
          javascript.0	2020-01-14 20:55:00.011	warn	(560) at ontimeout (timers.js:436:11)
          javascript.0	2020-01-14 20:55:00.011	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
          javascript.0	2020-01-14 20:55:00.011	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
          javascript.0	2020-01-14 20:55:00.011	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
          javascript.0	2020-01-14 20:55:00.010	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
          javascript.0	2020-01-14 20:55:00.010	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
          javascript.0	2020-01-14 20:55:00.010	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:55:00.009	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:55:00.007	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
          javascript.0	2020-01-14 20:55:00.006	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
          

          javascript.0	2020-01-14 20:58:25.771	error	(560) at Script.runInContext (vm.js:133:20)
          javascript.0	2020-01-14 20:58:25.771	error	(560) at script.js.Systeminfo.TasmotasNeu:412:2
          javascript.0	2020-01-14 20:58:25.771	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:58:25.770	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:58:25.770	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
          javascript.0	2020-01-14 20:58:25.770	error	(560) TypeError: Cannot read property 'replace' of null
          javascript.0	2020-01-14 20:58:25.770	error	(560) ^
          javascript.0	2020-01-14 20:58:25.770	error	(560) val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"") //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
          javascript.0	2020-01-14 20:58:25.769	error	(560) script.js.Systeminfo.TasmotasNeu: script.js.Systeminfo.TasmotasNeu:229
          javascript.0	2020-01-14 20:58:25.769	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
          javascript.0	2020-01-14 20:58:25.769	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:58:25.768	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:58:25.768	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
          javascript.0	2020-01-14 20:58:25.767	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
          javascript.0	2020-01-14 20:58:25.767	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
          javascript.0	2020-01-14 20:58:25.766	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
          javascript.0	2020-01-14 20:58:25.766	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
          javascript.0	2020-01-14 20:58:25.766	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
          javascript.0	2020-01-14 20:58:25.765	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
          
          liv-in-skyL Offline
          liv-in-skyL Offline
          liv-in-sky
          schrieb am zuletzt editiert von
          #27

          @Chaot ok müßte die stelle 229 sein

          hast du mal ein json von diesem datenpunkt - es müßte ein generic typ sein

          du könntest auch versuchen, das replace mal wegzunehmen

          zeile 229
          von

           val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"") 
          

          nach

           val2=getState(id.replace("Module","Version")).val) 
          

          wenn das nicht geht fehlt evtl der datenpunkt version - da könntest du mal einen wert von hand eintragen, falls du das device findest

          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

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

            @Chaot ok müßte die stelle 229 sein

            hast du mal ein json von diesem datenpunkt - es müßte ein generic typ sein

            du könntest auch versuchen, das replace mal wegzunehmen

            zeile 229
            von

             val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"") 
            

            nach

             val2=getState(id.replace("Module","Version")).val) 
            

            wenn das nicht geht fehlt evtl der datenpunkt version - da könntest du mal einen wert von hand eintragen, falls du das device findest

            ChaotC Offline
            ChaotC Offline
            Chaot
            schrieb am zuletzt editiert von
            #28

            @liv-in-sky Ich kann dir das hier anbieten:
            sonoff.0.json

            Da sind alle drin. Vielleicht hilft dir das beim Script weiter, weil ich auch DEV und SV verwende

            ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

            liv-in-skyL 2 Antworten Letzte Antwort
            0
            • ChaotC Chaot

              @liv-in-sky Ich kann dir das hier anbieten:
              sonoff.0.json

              Da sind alle drin. Vielleicht hilft dir das beim Script weiter, weil ich auch DEV und SV verwende

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

              @Chaot habe gerade festgestellt, das ich ohne dp inhalte(states) nix finde - ich suche nach einem sonoff - eingestellt als generic - und der muss im info.module irgendwas falsches oder nichts stehen haben

              glaubst du, du kannst den finden?

              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
              • ChaotC Chaot

                @liv-in-sky Ich kann dir das hier anbieten:
                sonoff.0.json

                Da sind alle drin. Vielleicht hilft dir das beim Script weiter, weil ich auch DEV und SV verwende

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

                @Chaot ansonsten dieses log aktivieren und im das script kurz starten und wiedewr stoppen - danach im log nachsehen welche id noch geschrieben wurde bevor der error kommt

                Image 7.png

                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

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

                  @Chaot ansonsten dieses log aktivieren und im das script kurz starten und wiedewr stoppen - danach im log nachsehen welche id noch geschrieben wurde bevor der error kommt

                  Image 7.png

                  ChaotC Offline
                  ChaotC Offline
                  Chaot
                  schrieb am zuletzt editiert von
                  #31

                  @liv-in-sky
                  Log:

                  javascript.0	2020-01-14 21:27:45.514	error	(560) at Script.runInContext (vm.js:133:20)
                  javascript.0	2020-01-14 21:27:45.514	error	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                  javascript.0	2020-01-14 21:27:45.514	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                  javascript.0	2020-01-14 21:27:45.513	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                  javascript.0	2020-01-14 21:27:45.513	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
                  javascript.0	2020-01-14 21:27:45.513	error	(560) TypeError: Cannot read property 'replace' of null
                  javascript.0	2020-01-14 21:27:45.513	error	(560) ^
                  javascript.0	2020-01-14 21:27:45.513	error	(560) val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"") //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                  javascript.0	2020-01-14 21:27:45.512	error	(560) script.js.Systeminfo.TasmotasNeu: script.js.Systeminfo.TasmotasNeu:229
                  javascript.0	2020-01-14 21:27:45.512	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                  javascript.0	2020-01-14 21:27:45.511	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                  javascript.0	2020-01-14 21:27:45.511	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                  javascript.0	2020-01-14 21:27:45.511	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
                  javascript.0	2020-01-14 21:27:45.510	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
                  javascript.0	2020-01-14 21:27:45.509	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                  javascript.0	2020-01-14 21:27:45.509	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                  javascript.0	2020-01-14 21:27:45.509	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                  javascript.0	2020-01-14 21:27:45.508	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                  javascript.0	2020-01-14 21:27:45.506	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
                  

                  Am Sonoff Eingang steht Generic und bei Radar steht ebenfalls Generic

                  ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                  liv-in-skyL 1 Antwort Letzte Antwort
                  0
                  • ChaotC Chaot

                    @liv-in-sky
                    Log:

                    javascript.0	2020-01-14 21:27:45.514	error	(560) at Script.runInContext (vm.js:133:20)
                    javascript.0	2020-01-14 21:27:45.514	error	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                    javascript.0	2020-01-14 21:27:45.514	error	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                    javascript.0	2020-01-14 21:27:45.513	error	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                    javascript.0	2020-01-14 21:27:45.513	error	(560) at script.js.Systeminfo.TasmotasNeu:229:60
                    javascript.0	2020-01-14 21:27:45.513	error	(560) TypeError: Cannot read property 'replace' of null
                    javascript.0	2020-01-14 21:27:45.513	error	(560) ^
                    javascript.0	2020-01-14 21:27:45.513	error	(560) val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"") //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                    javascript.0	2020-01-14 21:27:45.512	error	(560) script.js.Systeminfo.TasmotasNeu: script.js.Systeminfo.TasmotasNeu:229
                    javascript.0	2020-01-14 21:27:45.512	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                    javascript.0	2020-01-14 21:27:45.511	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                    javascript.0	2020-01-14 21:27:45.511	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                    javascript.0	2020-01-14 21:27:45.511	warn	(560) at script.js.Systeminfo.TasmotasNeu:229:16
                    javascript.0	2020-01-14 21:27:45.510	warn	(560) getState "sonoff.0.Radar.INFO.Version" not found (3)
                    javascript.0	2020-01-14 21:27:45.509	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                    javascript.0	2020-01-14 21:27:45.509	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                    javascript.0	2020-01-14 21:27:45.509	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                    javascript.0	2020-01-14 21:27:45.508	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                    javascript.0	2020-01-14 21:27:45.506	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
                    

                    Am Sonoff Eingang steht Generic und bei Radar steht ebenfalls Generic

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

                    @Chaot und was steht bei denen unter INFO.Module

                    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

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

                      @Chaot und was steht bei denen unter INFO.Module

                      ChaotC Offline
                      ChaotC Offline
                      Chaot
                      schrieb am zuletzt editiert von
                      #33

                      @liv-in-sky
                      Dort steht Generic.

                      Ich habe jetzt den Radar gelöscht so das unter Radar.info momentan nichts steht und jetzt kommt das:

                      javascript.0	2020-01-14 21:42:20.011	warn	(560) at Timer.processTimers (timers.js:223:10)
                      javascript.0	2020-01-14 21:42:20.011	warn	(560) at listOnTimeout (timers.js:263:5)
                      javascript.0	2020-01-14 21:42:20.010	warn	(560) at tryOnTimeout (timers.js:300:5)
                      javascript.0	2020-01-14 21:42:20.010	warn	(560) at ontimeout (timers.js:436:11)
                      javascript.0	2020-01-14 21:42:20.010	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
                      javascript.0	2020-01-14 21:42:20.010	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
                      javascript.0	2020-01-14 21:42:20.009	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
                      javascript.0	2020-01-14 21:42:20.009	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
                      javascript.0	2020-01-14 21:42:20.009	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
                      javascript.0	2020-01-14 21:42:20.009	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                      javascript.0	2020-01-14 21:42:20.009	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                      javascript.0	2020-01-14 21:42:20.009	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                      javascript.0	2020-01-14 21:42:20.008	warn	(560) getState "sonoff.0.Sender.POWER" not found (3)
                      javascript.0	2020-01-14 21:42:20.008	warn	(560) at Timer.processTimers (timers.js:223:10)
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at listOnTimeout (timers.js:263:5)
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at tryOnTimeout (timers.js:300:5)
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at ontimeout (timers.js:436:11)
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
                      javascript.0	2020-01-14 21:42:20.007	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                      javascript.0	2020-01-14 21:42:20.006	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                      javascript.0	2020-01-14 21:42:20.006	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                      javascript.0	2020-01-14 21:42:20.005	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
                      javascript.0	2020-01-14 21:42:17.681	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                      javascript.0	2020-01-14 21:42:17.680	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                      javascript.0	2020-01-14 21:42:17.680	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                      javascript.0	2020-01-14 21:42:17.680	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                      javascript.0	2020-01-14 21:42:17.680	warn	(560) getState "sonoff.0.Sender.POWER" not found (3)
                      javascript.0	2020-01-14 21:42:17.679	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                      javascript.0	2020-01-14 21:42:17.679	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                      javascript.0	2020-01-14 21:42:17.679	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                      javascript.0	2020-01-14 21:42:17.679	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                      javascript.0	2020-01-14 21:42:17.677	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
                      

                      Kann ich eigentlich die Geräte irgendwo selbst eintragen?
                      Also
                      Sonoff SV
                      Sonoff T1 1CH
                      oder Sonoff DEV

                      Mit der Zeile beim replace:

                      val2=getState(id.replace("Module","Version")).val) 
                      

                      funktioniert das scheinbar nicht.

                      ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                      liv-in-skyL 1 Antwort Letzte Antwort
                      0
                      • ChaotC Chaot

                        @liv-in-sky
                        Dort steht Generic.

                        Ich habe jetzt den Radar gelöscht so das unter Radar.info momentan nichts steht und jetzt kommt das:

                        javascript.0	2020-01-14 21:42:20.011	warn	(560) at Timer.processTimers (timers.js:223:10)
                        javascript.0	2020-01-14 21:42:20.011	warn	(560) at listOnTimeout (timers.js:263:5)
                        javascript.0	2020-01-14 21:42:20.010	warn	(560) at tryOnTimeout (timers.js:300:5)
                        javascript.0	2020-01-14 21:42:20.010	warn	(560) at ontimeout (timers.js:436:11)
                        javascript.0	2020-01-14 21:42:20.010	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
                        javascript.0	2020-01-14 21:42:20.010	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
                        javascript.0	2020-01-14 21:42:20.009	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
                        javascript.0	2020-01-14 21:42:20.009	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
                        javascript.0	2020-01-14 21:42:20.009	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
                        javascript.0	2020-01-14 21:42:20.009	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                        javascript.0	2020-01-14 21:42:20.009	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                        javascript.0	2020-01-14 21:42:20.009	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                        javascript.0	2020-01-14 21:42:20.008	warn	(560) getState "sonoff.0.Sender.POWER" not found (3)
                        javascript.0	2020-01-14 21:42:20.008	warn	(560) at Timer.processTimers (timers.js:223:10)
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at listOnTimeout (timers.js:263:5)
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at tryOnTimeout (timers.js:300:5)
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at ontimeout (timers.js:436:11)
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1319:34)
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at Object.<anonymous> (script.js.Systeminfo.TasmotasNeu:409:2)
                        javascript.0	2020-01-14 21:42:20.007	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                        javascript.0	2020-01-14 21:42:20.006	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                        javascript.0	2020-01-14 21:42:20.006	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                        javascript.0	2020-01-14 21:42:20.005	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
                        javascript.0	2020-01-14 21:42:17.681	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                        javascript.0	2020-01-14 21:42:17.680	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                        javascript.0	2020-01-14 21:42:17.680	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                        javascript.0	2020-01-14 21:42:17.680	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                        javascript.0	2020-01-14 21:42:17.680	warn	(560) getState "sonoff.0.Sender.POWER" not found (3)
                        javascript.0	2020-01-14 21:42:17.679	warn	(560) at script.js.Systeminfo.TasmotasNeu:412:2
                        javascript.0	2020-01-14 21:42:17.679	warn	(560) at writeHTML (script.js.Systeminfo.TasmotasNeu:217:30)
                        javascript.0	2020-01-14 21:42:17.679	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                        javascript.0	2020-01-14 21:42:17.679	warn	(560) at script.js.Systeminfo.TasmotasNeu:231:22
                        javascript.0	2020-01-14 21:42:17.677	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
                        

                        Kann ich eigentlich die Geräte irgendwo selbst eintragen?
                        Also
                        Sonoff SV
                        Sonoff T1 1CH
                        oder Sonoff DEV

                        Mit der Zeile beim replace:

                        val2=getState(id.replace("Module","Version")).val) 
                        

                        funktioniert das scheinbar nicht.

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

                        @Chaot ich bin ein tr..tel - unter version ist der wichtige wert - was steht da drin

                        und kannst du bitte dieses script verwenden - ist das neuste - ist einfacher zum fehler finden - du müßtest aber noch einen datenpunkt anlegen - für die anzahl der geräte (dpAnzahl) und den anderen datenpunkt wieder angleichen

                        //@liv-in-sky Januar 2020
                        
                        //HIER WIRD PFAD UND FILENAME DEFINIERT
                        const path = "/htmlakku.html";                   //FIlenamen definieren
                        const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                        let   braucheEinFile=false;                          // 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="controll-own.0.TABELLEN.SONOFF"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                        let dpAnzahl="controll-own.0.TABELLEN.AnzahlSonoff";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                        let htmlColorDeviceUeberschrift="#00BFFF"
                        var battAlarm=30;                                     //alarm batterie wert
                        var battAlarmWarning=55;                                     //warnungen batterie wert
                        
                        // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                        var pow=true;
                        var generic=true;
                        var basic=true;
                        var externalMitInfo=false; //noch nicht integriert
                        var externalOhneInfo=false;  //noch nicht integriert
                        var schalter2ch=true;                                               
                        var rfbridge=true;
                        var stdoseS2X=true;
                        var ohneInfo=false;
                        //Sonderfall
                        var linganSteckdose =true;
                        
                        
                        
                        var filterArray=["Sonoff Pow","Generic","Sonoff Basic","Sonoff T1 2CH","Sonoff S2X","Lingan SWA1"]; //hier arten eintragen - muss gefiltert werden für geräte ohne INFO
                        
                        let mySchedule="  * * * * * "; 
                        
                        //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                        var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                        var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                        var htmlFeld3='Version';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                        var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                        var htmlFeld5='IP';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                        var htmlFeld6='';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                        var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                        var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                        
                        //-----------------------------------
                        
                        
                        
                        //hier werden die styles für die tabelle definiert
                        //ÜBERSCHRIFT ÜBER TABELLE
                        let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                        let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                        const htmlFeldUeber='Sonoff Devices';              // Ü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=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                        const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                        const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                        //GANZE TABELLE
                        let abstandZelle="1";
                        let weite="auto";                                     //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="#BDBDBD";                  // SchriftFarbe der Felder
                        const htmlFarbFelderschrift2="#D8D8D8";                 // 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="gray";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                        let htmlRahmenLinien="cols";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                        const htmlTabUeber3="</tr>";
                        
                        
                        //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                        
                        
                        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><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&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;"+htmlFeld3+
                                           "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                           "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld8+"&ensp;</td>";
                                               //------------------------------------------------------
                        
                        var anzahl;
                        var AkkuAlarm=[];
                        var htmlOut="";
                        var mix;
                        var counter;
                        var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7;
                        var htmlTabUeber="";
                        function writeHTML(){
                        
                        
                        anzahl=0;
                        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+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,val3,val4!!!------------------------------------------------------------
                        //--------------------------------------------------------------------------------------------------------------------------------------------------
                        
                        var myColl=[];
                        var val1help;
                        
                          
                          if (pow){
                        
                                     // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              tabelleAusbessern();
                              counter=0;
                              val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=0;
                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>SONOFF POW</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Today";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                        
                        //sonoff.0.SonoffPow1.INFO.Module
                         $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                           
                              if (getState(id).val=="Sonoff Pow") {
                                 // log (id)
                                 anzahl++;
                                var ida = id.split('.');
                               
                                  counter++; 
                                    //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                  val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                  val4=getState(id.replace("Module","IPAddress")).val
                                  val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                  val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                  val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                  val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                
                                  if (!getState(id.replace("INFO.Module","alive")).val) {
                                      val1="❌";
                                      val4=(" <font color=\"red\"> ")+val1;
                                      val2=(" <font color=\"red\"> ")+val2;
                                      val3=(" <font color=\"red\"> ")+" 0 %";
                                      val5=(" <font color=\"red\"> ")+" --- ";
                                      val6=(" <font color=\"red\"> ")+" --- ";
                                      val7=(" <font color=\"red\"> ")+" --- ";
                                      val0=(" <font color=\"red\"> ")+val0} 
                                  else{
                                      val1="✅";
                                     // val1=(" <font color=\"lightgreen\"> ")+val1
                                     // val2=(" <font color=\"green\"> ")+val2
                                     // val3=(" <font color=\"green\"> ")+val3
                                     // val0=(" <font color=\"green\"> ")+val0
                                     }
                        
                        
                                 
                           
                             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 fritzdect
                        
                         if (generic){
                                     // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              tabelleAusbessern();
                              counter=0;
                              val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=0;
                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Generic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                        
                        //sonoff.0.SonoffPow1.INFO.Module
                         $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                           
                              if (getState(id).val=="Generic") {
                                 //log (id)
                                 anzahl++;
                                var ida = id.split('.');
                               
                                  counter++; 
                                    //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                  val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                  val4=getState(id.replace("Module","IPAddress")).val
                                  val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                  val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                  val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                  
                                 // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                  //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                 // val6=""
                                   val6="";
                                
                                  if (!getState(id.replace("INFO.Module","alive")).val) {
                                      val1="❌";
                                      val4=(" <font color=\"red\"> ")+val4;
                                      val2=(" <font color=\"red\"> ")+val2;
                                      val3=(" <font color=\"red\"> ")+" 0 %";
                                      val5=(" <font color=\"red\"> ")+" --- ";
                                      val6=(" <font color=\"red\"> ")+" --- ";
                                      val7=(" <font color=\"red\"> ")+" --- ";
                                      val0=(" <font color=\"red\"> ")+val0} 
                                  else{
                                      val1="✅";
                                     // val1=(" <font color=\"lightgreen\"> ")+val1
                                     // val2=(" <font color=\"green\"> ")+val2
                                     // val3=(" <font color=\"green\"> ")+val3
                                     // val0=(" <font color=\"green\"> ")+val0
                                     }
                                 
                              
                           
                             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 xiaomi
                        
                        if (basic){
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              tabelleAusbessern();
                              counter=0;
                              val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=0;
                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Basic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                        
                        //sonoff.0.SonoffPow1.INFO.Module
                         $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                           
                              if (getState(id).val=="Sonoff Basic") {
                               //  log (id)
                                var ida = id.split('.');
                               anzahl++;
                                  counter++; 
                                    //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                  val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                  val4=getState(id.replace("Module","IPAddress")).val
                                  val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                  val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                               //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                               //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                               //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                  //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                  val6=""
                                  val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                
                                  if (!getState(id.replace("INFO.Module","alive")).val) {
                                      val1="❌";
                                      val4=(" <font color=\"red\"> ")+val4;
                                      val2=(" <font color=\"red\"> ")+val2;
                                      val3=(" <font color=\"red\"> ")+" 0 %";
                                      val5=(" <font color=\"red\"> ")+" --- ";
                                      val6=(" <font color=\"red\"> ")+" --- ";
                                      val7=(" <font color=\"red\"> ")+" --- ";
                                      val0=(" <font color=\"red\"> ")+val0} 
                                  else{
                                      val1="✅";
                                     // val1=(" <font color=\"lightgreen\"> ")+val1
                                     // val2=(" <font color=\"green\"> ")+val2
                                     // val3=(" <font color=\"green\"> ")+val3
                                     // val0=(" <font color=\"green\"> ")+val0
                                     }
                                 
                              
                           
                             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 xiaomi
                        
                        if (schalter2ch){
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              tabelleAusbessern();
                              counter=0;
                              val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=0;
                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 2Ch</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 2"
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                        
                        //sonoff.0.SonoffPow1.INFO.Module
                         $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                           
                              if (getState(id).val=="Sonoff T1 2CH") {
                               //  log (id)
                               anzahl++;
                                var ida = id.split('.');
                               
                                  counter++; 
                                    //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                  val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                  val4=getState(id.replace("Module","IPAddress")).val
                                  val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                  val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                  val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                  let val6_1=getState(id.replace("INFO.Module","POWER1")).val;        
                                  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                  let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                                  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                               //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                  //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                //  val6=""
                                  
                                
                                  if (!getState(id.replace("INFO.Module","alive")).val) {
                                      val1="❌";
                                      val4=(" <font color=\"red\"> ")+val4;
                                      val2=(" <font color=\"red\"> ")+val2;
                                      val3=(" <font color=\"red\"> ")+" 0 %";
                                      val5=(" <font color=\"red\"> ")+" --- ";
                                      val6=(" <font color=\"red\"> ")+" --- ";
                                      val7=(" <font color=\"red\"> ")+" --- ";
                                      val0=(" <font color=\"red\"> ")+val0} 
                                  else{
                                      val1="✅";
                                     // val1=(" <font color=\"lightgreen\"> ")+val1
                                     // val2=(" <font color=\"green\"> ")+val2
                                     // val3=(" <font color=\"green\"> ")+val3
                                     // val0=(" <font color=\"green\"> ")+val0
                                     }
                                 
                              
                           
                             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 xiaomi
                        
                         
                        
                        if (stdoseS2X){
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              tabelleAusbessern();
                              counter=0;
                              val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=0;
                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Steckdose S2X</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                        
                        //sonoff.0.SonoffPow1.INFO.Module
                         $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                           
                              if (getState(id).val=="Sonoff S2X") {
                               //  log (id)
                               anzahl++;
                                var ida = id.split('.');
                               
                                  counter++; 
                                    //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                  val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                  val4=getState(id.replace("Module","IPAddress")).val
                                  val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                  val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                  val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                  
                               //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                               //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                  //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                  val6=""
                                  
                                
                                  if (!getState(id.replace("INFO.Module","alive")).val) {
                                      val1="❌";
                                      val4=(" <font color=\"red\"> ")+val4;
                                      val2=(" <font color=\"red\"> ")+val2;
                                      val3=(" <font color=\"red\"> ")+" 0 %";
                                      val5=(" <font color=\"red\"> ")+" --- ";
                                      val6=(" <font color=\"red\"> ")+" --- ";
                                      val7=(" <font color=\"red\"> ")+" --- ";
                                      val0=(" <font color=\"red\"> ")+val0} 
                                  else{
                                      val1="✅";
                                     // val1=(" <font color=\"lightgreen\"> ")+val1
                                     // val2=(" <font color=\"green\"> ")+val2
                                     // val3=(" <font color=\"green\"> ")+val3
                                     // val0=(" <font color=\"green\"> ")+val0
                                     }
                                 
                              
                           
                             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 xiaomi
                        
                        if (linganSteckdose){
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              tabelleAusbessern();
                              counter=0;
                              val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=0;
                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Lingan Steckdose</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                        
                        //sonoff.0.SonoffPow1.INFO.Module
                         $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                           
                              if (getState(id).val=="Lingan SWA1") {
                               //  log (id)
                                var ida = id.split('.');
                                  anzahl++;
                                  counter++; 
                                    //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                  val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                  val4=getState(id.replace("Module","IPAddress")).val
                                  val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                  val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                  val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                  
                               //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                               //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                  //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                  val6=""
                                  
                                
                                  if (!getState(id.replace("INFO.Module","alive")).val) {
                                      val1="❌";
                                      val4=(" <font color=\"red\"> ")+val4;
                                      val2=(" <font color=\"red\"> ")+val2;
                                      val3=(" <font color=\"red\"> ")+" 0 %";
                                      val5=(" <font color=\"red\"> ")+" --- ";
                                      val6=(" <font color=\"red\"> ")+" --- ";
                                      val7=(" <font color=\"red\"> ")+" --- ";
                                      val0=(" <font color=\"red\"> ")+val0} 
                                  else{
                                      val1="✅";
                                     // val1=(" <font color=\"lightgreen\"> ")+val1
                                     // val2=(" <font color=\"green\"> ")+val2
                                     // val3=(" <font color=\"green\"> ")+val3
                                     // val0=(" <font color=\"green\"> ")+val0
                                     }
                                 
                              
                           
                             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 xiaomi
                        
                         
                        if (rfbridge){
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              tabelleAusbessern();
                              counter=0;
                              val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=0;
                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>RF Bridge</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Received";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                        
                        //sonoff.0.SonoffPow1.INFO.Module
                         $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                           
                              if (getState(id).val=="Sonoff Bridge") {
                               //  log (id)
                                var ida = id.split('.');
                               anzahl++;
                                  counter++; 
                                    //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                  val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                  val4=getState(id.replace("Module","IPAddress")).val
                                  val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                  val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                               //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                               //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                               //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                  //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                  val6=getState(id.replace("INFO.Module","RfReceived_Data")).val;
                                  val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                
                                  if (!getState(id.replace("INFO.Module","alive")).val) {
                                      val1="❌";
                                      val4=(" <font color=\"red\"> ")+val4;
                                      val2=(" <font color=\"red\"> ")+val2;
                                      val3=(" <font color=\"red\"> ")+" 0 %";
                                      val5=(" <font color=\"red\"> ")+" --- ";
                                      val6=(" <font color=\"red\"> ")+" --- ";
                                      val7=(" <font color=\"red\"> ")+" --- ";
                                      val0=(" <font color=\"red\"> ")+val0} 
                                  else{
                                      val1="✅";
                                     // val1=(" <font color=\"lightgreen\"> ")+val1
                                     // val2=(" <font color=\"green\"> ")+val2
                                     // val3=(" <font color=\"green\"> ")+val3
                                     // val0=(" <font color=\"green\"> ")+val0
                                     }
                                 
                              
                           
                             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 xiaomi
                        
                        
                         if (ohneInfo){
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              tabelleAusbessern();
                              counter=0;
                              val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=0;
                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonderfälle ohne INFO</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                        var arrFilt=[];
                        //sonoff.0.SonoffPow1.INFO.Module
                        
                         $('sonoff.*.*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                        
                                var ida = id.split('.');
                        
                                //  log(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress")
                        
                                  $(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress").each(function(id, i) {   // kontrolliere ob  vorhanden
                                    
                                      var idc = id.split('.');
                                      if(!arrFilt.includes(idc[2])){
                                    //  log(idc[2])
                                   arrFilt.push(idc[2])}
                                   });
                                  
                        });
                        
                        //log("filter: "+arrFilt.toString())
                        //sonoff.0.ShellyWC.alive
                         $('sonoff.*.*.alive').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                        
                           var ida = id.split('.');
                           //log(ida[2])
                              //  log (" hier die werte: "+id)
                            //  if (filterArray.includes) {
                                  if (!arrFilt.includes(ida[2])) {
                              //   log (id)
                              
                               anzahl++;
                                  counter++; 
                                    //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                  val1=getState(id).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                  val4=" na "; //getState(id.replace("Module","IPAddress")).val
                                  val2=" na "; //getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                  val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                  val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                  val7="na" // let val7_1=getState(id.replace("alive","POWER")).val;        
                                 // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                  
                               //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                               //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                  //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                  ida[2].includes("Bridge") ?  val6=getState(id.replace("alive","RfReceived_Data")).val : val6="";
                                  
                                  
                                
                                  if (!getState(id).val) {
                                      val1="❌";
                                      val4=(" <font color=\"red\"> ")+val4;
                                      val2=(" <font color=\"red\"> ")+val1;
                                      val3=(" <font color=\"red\"> ")+" 0 %";
                                      val5=(" <font color=\"red\"> ")+" --- ";
                                      val6=(" <font color=\"red\"> ")+" --- ";
                                      val7=(" <font color=\"red\"> ")+" --- ";
                                      val0=(" <font color=\"red\"> ")+val0} 
                                  else{
                                      val1="✅";
                                     // val1=(" <font color=\"lightgreen\"> ")+val1
                                     // val2=(" <font color=\"green\"> ")+val2
                                     // val3=(" <font color=\"green\"> ")+val3
                                     // val0=(" <font color=\"green\"> ")+val0
                                     }
                                 
                              
                           
                             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 xiaomi
                        
                         //   if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                           // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                        //-------------------------------------------------------------------------------------------------------------------------------------------------
                        //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                        //-------------------------------------------------------------------------------------------------------------------------------------------------
                        
                            tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                        
                            setState(dpAnzahl,anzahl); 
                         
                           
                        
                        } // function ende
                        
                        
                        
                        //MAIN:
                         
                        schedule(mySchedule,  function () {
                         writeHTML();
                         if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                        }); 
                         writeHTML();
                        
                           				 function tabelleBind(){
                             //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                           
                               switch (mehrfachTabelle) {  
                                 case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>"; break;
                                case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} break;
                                                           
                                case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                 } break;
                        
                        
                                case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                          else {if(counter%2==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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";} 
                                                                       else    {if(counter%2==1 && 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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                         else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                 } break;
                        
                             } //switch ende
                        
                        
                        
                        }
                        
                        function tabelleAusbessern() {
                                    switch (mehrfachTabelle) {  
                                 case 1:    break;
                                 case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                            break;
                                 case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                            if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                            break;
                                 case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                            if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                            if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                            break; }
                        }
                        
                        function tabelleFinish() {
                        
                              // tabelle fertigstellen
                               switch (mehrfachTabelle) {  
                                 case 1:    break;
                                 case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                            break;
                                 case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                            if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                            break;
                                 case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                            if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                            if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                            if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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="";
                                  //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

                        ChaotC ? 3 Antworten Letzte Antwort
                        0
                        • liv-in-skyL liv-in-sky

                          @Chaot ich bin ein tr..tel - unter version ist der wichtige wert - was steht da drin

                          und kannst du bitte dieses script verwenden - ist das neuste - ist einfacher zum fehler finden - du müßtest aber noch einen datenpunkt anlegen - für die anzahl der geräte (dpAnzahl) und den anderen datenpunkt wieder angleichen

                          //@liv-in-sky Januar 2020
                          
                          //HIER WIRD PFAD UND FILENAME DEFINIERT
                          const path = "/htmlakku.html";                   //FIlenamen definieren
                          const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                          let   braucheEinFile=false;                          // 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="controll-own.0.TABELLEN.SONOFF"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                          let dpAnzahl="controll-own.0.TABELLEN.AnzahlSonoff";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                          let htmlColorDeviceUeberschrift="#00BFFF"
                          var battAlarm=30;                                     //alarm batterie wert
                          var battAlarmWarning=55;                                     //warnungen batterie wert
                          
                          // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                          var pow=true;
                          var generic=true;
                          var basic=true;
                          var externalMitInfo=false; //noch nicht integriert
                          var externalOhneInfo=false;  //noch nicht integriert
                          var schalter2ch=true;                                               
                          var rfbridge=true;
                          var stdoseS2X=true;
                          var ohneInfo=false;
                          //Sonderfall
                          var linganSteckdose =true;
                          
                          
                          
                          var filterArray=["Sonoff Pow","Generic","Sonoff Basic","Sonoff T1 2CH","Sonoff S2X","Lingan SWA1"]; //hier arten eintragen - muss gefiltert werden für geräte ohne INFO
                          
                          let mySchedule="  * * * * * "; 
                          
                          //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                          var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                          var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                          var htmlFeld3='Version';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                          var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                          var htmlFeld5='IP';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                          var htmlFeld6='';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                          var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                          var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                          
                          //-----------------------------------
                          
                          
                          
                          //hier werden die styles für die tabelle definiert
                          //ÜBERSCHRIFT ÜBER TABELLE
                          let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                          let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                          const htmlFeldUeber='Sonoff Devices';              // Ü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=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                          const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                          const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                          //GANZE TABELLE
                          let abstandZelle="1";
                          let weite="auto";                                     //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="#BDBDBD";                  // SchriftFarbe der Felder
                          const htmlFarbFelderschrift2="#D8D8D8";                 // 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="gray";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                          let htmlRahmenLinien="cols";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                          const htmlTabUeber3="</tr>";
                          
                          
                          //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                          
                          
                          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><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&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;"+htmlFeld3+
                                             "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                             "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld8+"&ensp;</td>";
                                                 //------------------------------------------------------
                          
                          var anzahl;
                          var AkkuAlarm=[];
                          var htmlOut="";
                          var mix;
                          var counter;
                          var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7;
                          var htmlTabUeber="";
                          function writeHTML(){
                          
                          
                          anzahl=0;
                          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+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,val3,val4!!!------------------------------------------------------------
                          //--------------------------------------------------------------------------------------------------------------------------------------------------
                          
                          var myColl=[];
                          var val1help;
                          
                            
                            if (pow){
                          
                                       // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                tabelleAusbessern();
                                counter=0;
                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=0;
                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>SONOFF POW</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Today";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=-1
                          
                          //sonoff.0.SonoffPow1.INFO.Module
                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                             
                                if (getState(id).val=="Sonoff Pow") {
                                   // log (id)
                                   anzahl++;
                                  var ida = id.split('.');
                                 
                                    counter++; 
                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                    val4=getState(id.replace("Module","IPAddress")).val
                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                    val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                    val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                  
                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                        val1="❌";
                                        val4=(" <font color=\"red\"> ")+val1;
                                        val2=(" <font color=\"red\"> ")+val2;
                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                        val5=(" <font color=\"red\"> ")+" --- ";
                                        val6=(" <font color=\"red\"> ")+" --- ";
                                        val7=(" <font color=\"red\"> ")+" --- ";
                                        val0=(" <font color=\"red\"> ")+val0} 
                                    else{
                                        val1="✅";
                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                       // val2=(" <font color=\"green\"> ")+val2
                                       // val3=(" <font color=\"green\"> ")+val3
                                       // val0=(" <font color=\"green\"> ")+val0
                                       }
                          
                          
                                   
                             
                               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 fritzdect
                          
                           if (generic){
                                       // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                tabelleAusbessern();
                                counter=0;
                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=0;
                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Generic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=-1
                          
                          //sonoff.0.SonoffPow1.INFO.Module
                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                             
                                if (getState(id).val=="Generic") {
                                   //log (id)
                                   anzahl++;
                                  var ida = id.split('.');
                                 
                                    counter++; 
                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                    val4=getState(id.replace("Module","IPAddress")).val
                                    val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                  //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                  //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                    
                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                   // val6=""
                                     val6="";
                                  
                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                        val1="❌";
                                        val4=(" <font color=\"red\"> ")+val4;
                                        val2=(" <font color=\"red\"> ")+val2;
                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                        val5=(" <font color=\"red\"> ")+" --- ";
                                        val6=(" <font color=\"red\"> ")+" --- ";
                                        val7=(" <font color=\"red\"> ")+" --- ";
                                        val0=(" <font color=\"red\"> ")+val0} 
                                    else{
                                        val1="✅";
                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                       // val2=(" <font color=\"green\"> ")+val2
                                       // val3=(" <font color=\"green\"> ")+val3
                                       // val0=(" <font color=\"green\"> ")+val0
                                       }
                                   
                                
                             
                               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 xiaomi
                          
                          if (basic){
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                tabelleAusbessern();
                                counter=0;
                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=0;
                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Basic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=-1
                          
                          //sonoff.0.SonoffPow1.INFO.Module
                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                             
                                if (getState(id).val=="Sonoff Basic") {
                                 //  log (id)
                                  var ida = id.split('.');
                                 anzahl++;
                                    counter++; 
                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                    val4=getState(id.replace("Module","IPAddress")).val
                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                 //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                    val6=""
                                    val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                  
                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                        val1="❌";
                                        val4=(" <font color=\"red\"> ")+val4;
                                        val2=(" <font color=\"red\"> ")+val2;
                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                        val5=(" <font color=\"red\"> ")+" --- ";
                                        val6=(" <font color=\"red\"> ")+" --- ";
                                        val7=(" <font color=\"red\"> ")+" --- ";
                                        val0=(" <font color=\"red\"> ")+val0} 
                                    else{
                                        val1="✅";
                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                       // val2=(" <font color=\"green\"> ")+val2
                                       // val3=(" <font color=\"green\"> ")+val3
                                       // val0=(" <font color=\"green\"> ")+val0
                                       }
                                   
                                
                             
                               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 xiaomi
                          
                          if (schalter2ch){
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                tabelleAusbessern();
                                counter=0;
                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=0;
                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 2Ch</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 2"
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=-1
                          
                          //sonoff.0.SonoffPow1.INFO.Module
                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                             
                                if (getState(id).val=="Sonoff T1 2CH") {
                                 //  log (id)
                                 anzahl++;
                                  var ida = id.split('.');
                                 
                                    counter++; 
                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                    val4=getState(id.replace("Module","IPAddress")).val
                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                    val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                    let val6_1=getState(id.replace("INFO.Module","POWER1")).val;        
                                    val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                    let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                  //  val6=""
                                    
                                  
                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                        val1="❌";
                                        val4=(" <font color=\"red\"> ")+val4;
                                        val2=(" <font color=\"red\"> ")+val2;
                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                        val5=(" <font color=\"red\"> ")+" --- ";
                                        val6=(" <font color=\"red\"> ")+" --- ";
                                        val7=(" <font color=\"red\"> ")+" --- ";
                                        val0=(" <font color=\"red\"> ")+val0} 
                                    else{
                                        val1="✅";
                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                       // val2=(" <font color=\"green\"> ")+val2
                                       // val3=(" <font color=\"green\"> ")+val3
                                       // val0=(" <font color=\"green\"> ")+val0
                                       }
                                   
                                
                             
                               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 xiaomi
                          
                           
                          
                          if (stdoseS2X){
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                tabelleAusbessern();
                                counter=0;
                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=0;
                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Steckdose S2X</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=-1
                          
                          //sonoff.0.SonoffPow1.INFO.Module
                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                             
                                if (getState(id).val=="Sonoff S2X") {
                                 //  log (id)
                                 anzahl++;
                                  var ida = id.split('.');
                                 
                                    counter++; 
                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                    val4=getState(id.replace("Module","IPAddress")).val
                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                    val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                    
                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                    val6=""
                                    
                                  
                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                        val1="❌";
                                        val4=(" <font color=\"red\"> ")+val4;
                                        val2=(" <font color=\"red\"> ")+val2;
                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                        val5=(" <font color=\"red\"> ")+" --- ";
                                        val6=(" <font color=\"red\"> ")+" --- ";
                                        val7=(" <font color=\"red\"> ")+" --- ";
                                        val0=(" <font color=\"red\"> ")+val0} 
                                    else{
                                        val1="✅";
                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                       // val2=(" <font color=\"green\"> ")+val2
                                       // val3=(" <font color=\"green\"> ")+val3
                                       // val0=(" <font color=\"green\"> ")+val0
                                       }
                                   
                                
                             
                               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 xiaomi
                          
                          if (linganSteckdose){
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                tabelleAusbessern();
                                counter=0;
                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=0;
                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Lingan Steckdose</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=-1
                          
                          //sonoff.0.SonoffPow1.INFO.Module
                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                             
                                if (getState(id).val=="Lingan SWA1") {
                                 //  log (id)
                                  var ida = id.split('.');
                                    anzahl++;
                                    counter++; 
                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                    val4=getState(id.replace("Module","IPAddress")).val
                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                    val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                    val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                    
                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                    val6=""
                                    
                                  
                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                        val1="❌";
                                        val4=(" <font color=\"red\"> ")+val4;
                                        val2=(" <font color=\"red\"> ")+val2;
                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                        val5=(" <font color=\"red\"> ")+" --- ";
                                        val6=(" <font color=\"red\"> ")+" --- ";
                                        val7=(" <font color=\"red\"> ")+" --- ";
                                        val0=(" <font color=\"red\"> ")+val0} 
                                    else{
                                        val1="✅";
                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                       // val2=(" <font color=\"green\"> ")+val2
                                       // val3=(" <font color=\"green\"> ")+val3
                                       // val0=(" <font color=\"green\"> ")+val0
                                       }
                                   
                                
                             
                               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 xiaomi
                          
                           
                          if (rfbridge){
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                tabelleAusbessern();
                                counter=0;
                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=0;
                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>RF Bridge</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Received";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=-1
                          
                          //sonoff.0.SonoffPow1.INFO.Module
                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                             
                                if (getState(id).val=="Sonoff Bridge") {
                                 //  log (id)
                                  var ida = id.split('.');
                                 anzahl++;
                                    counter++; 
                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                    val4=getState(id.replace("Module","IPAddress")).val
                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                 //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                 //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                    val6=getState(id.replace("INFO.Module","RfReceived_Data")).val;
                                    val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                  
                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                        val1="❌";
                                        val4=(" <font color=\"red\"> ")+val4;
                                        val2=(" <font color=\"red\"> ")+val2;
                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                        val5=(" <font color=\"red\"> ")+" --- ";
                                        val6=(" <font color=\"red\"> ")+" --- ";
                                        val7=(" <font color=\"red\"> ")+" --- ";
                                        val0=(" <font color=\"red\"> ")+val0} 
                                    else{
                                        val1="✅";
                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                       // val2=(" <font color=\"green\"> ")+val2
                                       // val3=(" <font color=\"green\"> ")+val3
                                       // val0=(" <font color=\"green\"> ")+val0
                                       }
                                   
                                
                             
                               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 xiaomi
                          
                          
                           if (ohneInfo){
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                tabelleAusbessern();
                                counter=0;
                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=0;
                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonderfälle ohne INFO</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                tabelleAusbessern();
                                counter=-1
                          var arrFilt=[];
                          //sonoff.0.SonoffPow1.INFO.Module
                          
                           $('sonoff.*.*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                          
                                  var ida = id.split('.');
                          
                                  //  log(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress")
                          
                                    $(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress").each(function(id, i) {   // kontrolliere ob  vorhanden
                                      
                                        var idc = id.split('.');
                                        if(!arrFilt.includes(idc[2])){
                                      //  log(idc[2])
                                     arrFilt.push(idc[2])}
                                     });
                                    
                          });
                          
                          //log("filter: "+arrFilt.toString())
                          //sonoff.0.ShellyWC.alive
                           $('sonoff.*.*.alive').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                          
                             var ida = id.split('.');
                             //log(ida[2])
                                //  log (" hier die werte: "+id)
                              //  if (filterArray.includes) {
                                    if (!arrFilt.includes(ida[2])) {
                                //   log (id)
                                
                                 anzahl++;
                                    counter++; 
                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                    val1=getState(id).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                    val4=" na "; //getState(id.replace("Module","IPAddress")).val
                                    val2=" na "; //getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                    val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                    val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                    val7="na" // let val7_1=getState(id.replace("alive","POWER")).val;        
                                   // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                    
                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                    ida[2].includes("Bridge") ?  val6=getState(id.replace("alive","RfReceived_Data")).val : val6="";
                                    
                                    
                                  
                                    if (!getState(id).val) {
                                        val1="❌";
                                        val4=(" <font color=\"red\"> ")+val4;
                                        val2=(" <font color=\"red\"> ")+val1;
                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                        val5=(" <font color=\"red\"> ")+" --- ";
                                        val6=(" <font color=\"red\"> ")+" --- ";
                                        val7=(" <font color=\"red\"> ")+" --- ";
                                        val0=(" <font color=\"red\"> ")+val0} 
                                    else{
                                        val1="✅";
                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                       // val2=(" <font color=\"green\"> ")+val2
                                       // val3=(" <font color=\"green\"> ")+val3
                                       // val0=(" <font color=\"green\"> ")+val0
                                       }
                                   
                                
                             
                               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 xiaomi
                          
                           //   if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                             // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                          //-------------------------------------------------------------------------------------------------------------------------------------------------
                          //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                          //-------------------------------------------------------------------------------------------------------------------------------------------------
                          
                              tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                          
                              setState(dpAnzahl,anzahl); 
                           
                             
                          
                          } // function ende
                          
                          
                          
                          //MAIN:
                           
                          schedule(mySchedule,  function () {
                           writeHTML();
                           if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                          }); 
                           writeHTML();
                          
                             				 function tabelleBind(){
                               //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                             
                                 switch (mehrfachTabelle) {  
                                   case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>"; break;
                                  case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} break;
                                                             
                                  case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                   } break;
                          
                          
                                  case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                            else {if(counter%2==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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";} 
                                                                         else    {if(counter%2==1 && 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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                           else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                   } break;
                          
                               } //switch ende
                          
                          
                          
                          }
                          
                          function tabelleAusbessern() {
                                      switch (mehrfachTabelle) {  
                                   case 1:    break;
                                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                              break;
                                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                              break;
                                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                              break; }
                          }
                          
                          function tabelleFinish() {
                          
                                // tabelle fertigstellen
                                 switch (mehrfachTabelle) {  
                                   case 1:    break;
                                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                              break;
                                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                              break;
                                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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="";
                                    //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);
                           
                          
                          
                          }
                          
                          
                          
                          

                          ChaotC Offline
                          ChaotC Offline
                          Chaot
                          schrieb am zuletzt editiert von
                          #35

                          @liv-in-sky Ok, kein Error mehr. Nur noch warn:

                          javascript.0	2020-01-14 22:05:38.356	warn	(560) at script.js.Systeminfo.Tasmotas:702:2
                          javascript.0	2020-01-14 22:05:38.356	warn	(560) at writeHTML (script.js.Systeminfo.Tasmotas:221:30)
                          javascript.0	2020-01-14 22:05:38.356	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                          javascript.0	2020-01-14 22:05:38.355	warn	(560) at script.js.Systeminfo.Tasmotas:236:22
                          javascript.0	2020-01-14 22:05:38.355	warn	(560) getState "sonoff.0.Sender.POWER" not found (3)
                          javascript.0	2020-01-14 22:05:38.354	warn	(560) at script.js.Systeminfo.Tasmotas:702:2
                          javascript.0	2020-01-14 22:05:38.354	warn	(560) at writeHTML (script.js.Systeminfo.Tasmotas:221:30)
                          javascript.0	2020-01-14 22:05:38.354	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                          javascript.0	2020-01-14 22:05:38.354	warn	(560) at script.js.Systeminfo.Tasmotas:236:22
                          javascript.0	2020-01-14 22:05:38.352	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
                          

                          Das liegt daran das die Geräte zwei Ausgänge schalten. Also Power1 und Power2 . Unter Power steht deshalb kein Wert.

                          ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                          liv-in-skyL 1 Antwort Letzte Antwort
                          0
                          • ChaotC Chaot

                            @liv-in-sky Ok, kein Error mehr. Nur noch warn:

                            javascript.0	2020-01-14 22:05:38.356	warn	(560) at script.js.Systeminfo.Tasmotas:702:2
                            javascript.0	2020-01-14 22:05:38.356	warn	(560) at writeHTML (script.js.Systeminfo.Tasmotas:221:30)
                            javascript.0	2020-01-14 22:05:38.356	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                            javascript.0	2020-01-14 22:05:38.355	warn	(560) at script.js.Systeminfo.Tasmotas:236:22
                            javascript.0	2020-01-14 22:05:38.355	warn	(560) getState "sonoff.0.Sender.POWER" not found (3)
                            javascript.0	2020-01-14 22:05:38.354	warn	(560) at script.js.Systeminfo.Tasmotas:702:2
                            javascript.0	2020-01-14 22:05:38.354	warn	(560) at writeHTML (script.js.Systeminfo.Tasmotas:221:30)
                            javascript.0	2020-01-14 22:05:38.354	warn	(560) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:846:29)
                            javascript.0	2020-01-14 22:05:38.354	warn	(560) at script.js.Systeminfo.Tasmotas:236:22
                            javascript.0	2020-01-14 22:05:38.352	warn	(560) getState "sonoff.0.Eingang.POWER" not found (3)
                            

                            Das liegt daran das die Geräte zwei Ausgänge schalten. Also Power1 und Power2 . Unter Power steht deshalb kein Wert.

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

                            @Chaot
                            kommentiere die 2 zeilen aus: 236 und 237
                            und schreibe darunter val7="";

                                     //   let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                     //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                          val7="";
                            

                            dann überlegen wir morgen, was wird da machen

                            wäre schön, wenn das script noch ohne fehler liefe

                            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

                              @Chaot ich bin ein tr..tel - unter version ist der wichtige wert - was steht da drin

                              und kannst du bitte dieses script verwenden - ist das neuste - ist einfacher zum fehler finden - du müßtest aber noch einen datenpunkt anlegen - für die anzahl der geräte (dpAnzahl) und den anderen datenpunkt wieder angleichen

                              //@liv-in-sky Januar 2020
                              
                              //HIER WIRD PFAD UND FILENAME DEFINIERT
                              const path = "/htmlakku.html";                   //FIlenamen definieren
                              const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                              let   braucheEinFile=false;                          // 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="controll-own.0.TABELLEN.SONOFF"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                              let dpAnzahl="controll-own.0.TABELLEN.AnzahlSonoff";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                              let htmlColorDeviceUeberschrift="#00BFFF"
                              var battAlarm=30;                                     //alarm batterie wert
                              var battAlarmWarning=55;                                     //warnungen batterie wert
                              
                              // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                              var pow=true;
                              var generic=true;
                              var basic=true;
                              var externalMitInfo=false; //noch nicht integriert
                              var externalOhneInfo=false;  //noch nicht integriert
                              var schalter2ch=true;                                               
                              var rfbridge=true;
                              var stdoseS2X=true;
                              var ohneInfo=false;
                              //Sonderfall
                              var linganSteckdose =true;
                              
                              
                              
                              var filterArray=["Sonoff Pow","Generic","Sonoff Basic","Sonoff T1 2CH","Sonoff S2X","Lingan SWA1"]; //hier arten eintragen - muss gefiltert werden für geräte ohne INFO
                              
                              let mySchedule="  * * * * * "; 
                              
                              //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                              var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                              var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                              var htmlFeld3='Version';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                              var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                              var htmlFeld5='IP';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                              var htmlFeld6='';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                              var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                              var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                              
                              //-----------------------------------
                              
                              
                              
                              //hier werden die styles für die tabelle definiert
                              //ÜBERSCHRIFT ÜBER TABELLE
                              let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                              let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                              const htmlFeldUeber='Sonoff Devices';              // Ü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=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                              const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                              const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                              //GANZE TABELLE
                              let abstandZelle="1";
                              let weite="auto";                                     //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="#BDBDBD";                  // SchriftFarbe der Felder
                              const htmlFarbFelderschrift2="#D8D8D8";                 // 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="gray";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                              let htmlRahmenLinien="cols";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                              const htmlTabUeber3="</tr>";
                              
                              
                              //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                              
                              
                              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><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&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;"+htmlFeld3+
                                                 "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                                 "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld8+"&ensp;</td>";
                                                     //------------------------------------------------------
                              
                              var anzahl;
                              var AkkuAlarm=[];
                              var htmlOut="";
                              var mix;
                              var counter;
                              var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7;
                              var htmlTabUeber="";
                              function writeHTML(){
                              
                              
                              anzahl=0;
                              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+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,val3,val4!!!------------------------------------------------------------
                              //--------------------------------------------------------------------------------------------------------------------------------------------------
                              
                              var myColl=[];
                              var val1help;
                              
                                
                                if (pow){
                              
                                           // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                    tabelleAusbessern();
                                    counter=0;
                                    val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=0;
                                    val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>SONOFF POW</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Today";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=-1
                              
                              //sonoff.0.SonoffPow1.INFO.Module
                               $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                 
                                    if (getState(id).val=="Sonoff Pow") {
                                       // log (id)
                                       anzahl++;
                                      var ida = id.split('.');
                                     
                                        counter++; 
                                          //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                        val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                        val4=getState(id.replace("Module","IPAddress")).val
                                        val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                        val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                        let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                        val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                        val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                        val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                      
                                        if (!getState(id.replace("INFO.Module","alive")).val) {
                                            val1="❌";
                                            val4=(" <font color=\"red\"> ")+val1;
                                            val2=(" <font color=\"red\"> ")+val2;
                                            val3=(" <font color=\"red\"> ")+" 0 %";
                                            val5=(" <font color=\"red\"> ")+" --- ";
                                            val6=(" <font color=\"red\"> ")+" --- ";
                                            val7=(" <font color=\"red\"> ")+" --- ";
                                            val0=(" <font color=\"red\"> ")+val0} 
                                        else{
                                            val1="✅";
                                           // val1=(" <font color=\"lightgreen\"> ")+val1
                                           // val2=(" <font color=\"green\"> ")+val2
                                           // val3=(" <font color=\"green\"> ")+val3
                                           // val0=(" <font color=\"green\"> ")+val0
                                           }
                              
                              
                                       
                                 
                                   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 fritzdect
                              
                               if (generic){
                                           // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                    tabelleAusbessern();
                                    counter=0;
                                    val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=0;
                                    val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Generic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=-1
                              
                              //sonoff.0.SonoffPow1.INFO.Module
                               $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                 
                                    if (getState(id).val=="Generic") {
                                       //log (id)
                                       anzahl++;
                                      var ida = id.split('.');
                                     
                                        counter++; 
                                          //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                        val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                        val4=getState(id.replace("Module","IPAddress")).val
                                        val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                        val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                        val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                        let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                        val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                      //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                      //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                        
                                       // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                        //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                       // val6=""
                                         val6="";
                                      
                                        if (!getState(id.replace("INFO.Module","alive")).val) {
                                            val1="❌";
                                            val4=(" <font color=\"red\"> ")+val4;
                                            val2=(" <font color=\"red\"> ")+val2;
                                            val3=(" <font color=\"red\"> ")+" 0 %";
                                            val5=(" <font color=\"red\"> ")+" --- ";
                                            val6=(" <font color=\"red\"> ")+" --- ";
                                            val7=(" <font color=\"red\"> ")+" --- ";
                                            val0=(" <font color=\"red\"> ")+val0} 
                                        else{
                                            val1="✅";
                                           // val1=(" <font color=\"lightgreen\"> ")+val1
                                           // val2=(" <font color=\"green\"> ")+val2
                                           // val3=(" <font color=\"green\"> ")+val3
                                           // val0=(" <font color=\"green\"> ")+val0
                                           }
                                       
                                    
                                 
                                   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 xiaomi
                              
                              if (basic){
                                              // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                    tabelleAusbessern();
                                    counter=0;
                                    val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=0;
                                    val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Basic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=-1
                              
                              //sonoff.0.SonoffPow1.INFO.Module
                               $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                 
                                    if (getState(id).val=="Sonoff Basic") {
                                     //  log (id)
                                      var ida = id.split('.');
                                     anzahl++;
                                        counter++; 
                                          //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                        val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                        val4=getState(id.replace("Module","IPAddress")).val
                                        val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                        val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                        let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                        val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                     //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                     //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                     //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                     //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                       // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                        //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                        val6=""
                                        val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                      
                                        if (!getState(id.replace("INFO.Module","alive")).val) {
                                            val1="❌";
                                            val4=(" <font color=\"red\"> ")+val4;
                                            val2=(" <font color=\"red\"> ")+val2;
                                            val3=(" <font color=\"red\"> ")+" 0 %";
                                            val5=(" <font color=\"red\"> ")+" --- ";
                                            val6=(" <font color=\"red\"> ")+" --- ";
                                            val7=(" <font color=\"red\"> ")+" --- ";
                                            val0=(" <font color=\"red\"> ")+val0} 
                                        else{
                                            val1="✅";
                                           // val1=(" <font color=\"lightgreen\"> ")+val1
                                           // val2=(" <font color=\"green\"> ")+val2
                                           // val3=(" <font color=\"green\"> ")+val3
                                           // val0=(" <font color=\"green\"> ")+val0
                                           }
                                       
                                    
                                 
                                   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 xiaomi
                              
                              if (schalter2ch){
                                              // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                    tabelleAusbessern();
                                    counter=0;
                                    val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=0;
                                    val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 2Ch</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 2"
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=-1
                              
                              //sonoff.0.SonoffPow1.INFO.Module
                               $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                 
                                    if (getState(id).val=="Sonoff T1 2CH") {
                                     //  log (id)
                                     anzahl++;
                                      var ida = id.split('.');
                                     
                                        counter++; 
                                          //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                        val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                        val4=getState(id.replace("Module","IPAddress")).val
                                        val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                        val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                        val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                        let val6_1=getState(id.replace("INFO.Module","POWER1")).val;        
                                        val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                        let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                                        val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                     //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                     //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                       // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                        //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                      //  val6=""
                                        
                                      
                                        if (!getState(id.replace("INFO.Module","alive")).val) {
                                            val1="❌";
                                            val4=(" <font color=\"red\"> ")+val4;
                                            val2=(" <font color=\"red\"> ")+val2;
                                            val3=(" <font color=\"red\"> ")+" 0 %";
                                            val5=(" <font color=\"red\"> ")+" --- ";
                                            val6=(" <font color=\"red\"> ")+" --- ";
                                            val7=(" <font color=\"red\"> ")+" --- ";
                                            val0=(" <font color=\"red\"> ")+val0} 
                                        else{
                                            val1="✅";
                                           // val1=(" <font color=\"lightgreen\"> ")+val1
                                           // val2=(" <font color=\"green\"> ")+val2
                                           // val3=(" <font color=\"green\"> ")+val3
                                           // val0=(" <font color=\"green\"> ")+val0
                                           }
                                       
                                    
                                 
                                   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 xiaomi
                              
                               
                              
                              if (stdoseS2X){
                                              // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                    tabelleAusbessern();
                                    counter=0;
                                    val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=0;
                                    val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Steckdose S2X</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=-1
                              
                              //sonoff.0.SonoffPow1.INFO.Module
                               $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                 
                                    if (getState(id).val=="Sonoff S2X") {
                                     //  log (id)
                                     anzahl++;
                                      var ida = id.split('.');
                                     
                                        counter++; 
                                          //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                        val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                        val4=getState(id.replace("Module","IPAddress")).val
                                        val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                        val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                        val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                        let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                        val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                        
                                     //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                     //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                       // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                        //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                        val6=""
                                        
                                      
                                        if (!getState(id.replace("INFO.Module","alive")).val) {
                                            val1="❌";
                                            val4=(" <font color=\"red\"> ")+val4;
                                            val2=(" <font color=\"red\"> ")+val2;
                                            val3=(" <font color=\"red\"> ")+" 0 %";
                                            val5=(" <font color=\"red\"> ")+" --- ";
                                            val6=(" <font color=\"red\"> ")+" --- ";
                                            val7=(" <font color=\"red\"> ")+" --- ";
                                            val0=(" <font color=\"red\"> ")+val0} 
                                        else{
                                            val1="✅";
                                           // val1=(" <font color=\"lightgreen\"> ")+val1
                                           // val2=(" <font color=\"green\"> ")+val2
                                           // val3=(" <font color=\"green\"> ")+val3
                                           // val0=(" <font color=\"green\"> ")+val0
                                           }
                                       
                                    
                                 
                                   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 xiaomi
                              
                              if (linganSteckdose){
                                              // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                    tabelleAusbessern();
                                    counter=0;
                                    val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=0;
                                    val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Lingan Steckdose</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=-1
                              
                              //sonoff.0.SonoffPow1.INFO.Module
                               $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                 
                                    if (getState(id).val=="Lingan SWA1") {
                                     //  log (id)
                                      var ida = id.split('.');
                                        anzahl++;
                                        counter++; 
                                          //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                        val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                        val4=getState(id.replace("Module","IPAddress")).val
                                        val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                        val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                        val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                        let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                        val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                        
                                     //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                     //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                       // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                        //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                        val6=""
                                        
                                      
                                        if (!getState(id.replace("INFO.Module","alive")).val) {
                                            val1="❌";
                                            val4=(" <font color=\"red\"> ")+val4;
                                            val2=(" <font color=\"red\"> ")+val2;
                                            val3=(" <font color=\"red\"> ")+" 0 %";
                                            val5=(" <font color=\"red\"> ")+" --- ";
                                            val6=(" <font color=\"red\"> ")+" --- ";
                                            val7=(" <font color=\"red\"> ")+" --- ";
                                            val0=(" <font color=\"red\"> ")+val0} 
                                        else{
                                            val1="✅";
                                           // val1=(" <font color=\"lightgreen\"> ")+val1
                                           // val2=(" <font color=\"green\"> ")+val2
                                           // val3=(" <font color=\"green\"> ")+val3
                                           // val0=(" <font color=\"green\"> ")+val0
                                           }
                                       
                                    
                                 
                                   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 xiaomi
                              
                               
                              if (rfbridge){
                                              // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                    tabelleAusbessern();
                                    counter=0;
                                    val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=0;
                                    val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>RF Bridge</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Received";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=-1
                              
                              //sonoff.0.SonoffPow1.INFO.Module
                               $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                 
                                    if (getState(id).val=="Sonoff Bridge") {
                                     //  log (id)
                                      var ida = id.split('.');
                                     anzahl++;
                                        counter++; 
                                          //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                        val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                        val4=getState(id.replace("Module","IPAddress")).val
                                        val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                        val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                        let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                        val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                     //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                     //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                     //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                     //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                       // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                        //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                        val6=getState(id.replace("INFO.Module","RfReceived_Data")).val;
                                        val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                      
                                        if (!getState(id.replace("INFO.Module","alive")).val) {
                                            val1="❌";
                                            val4=(" <font color=\"red\"> ")+val4;
                                            val2=(" <font color=\"red\"> ")+val2;
                                            val3=(" <font color=\"red\"> ")+" 0 %";
                                            val5=(" <font color=\"red\"> ")+" --- ";
                                            val6=(" <font color=\"red\"> ")+" --- ";
                                            val7=(" <font color=\"red\"> ")+" --- ";
                                            val0=(" <font color=\"red\"> ")+val0} 
                                        else{
                                            val1="✅";
                                           // val1=(" <font color=\"lightgreen\"> ")+val1
                                           // val2=(" <font color=\"green\"> ")+val2
                                           // val3=(" <font color=\"green\"> ")+val3
                                           // val0=(" <font color=\"green\"> ")+val0
                                           }
                                       
                                    
                                 
                                   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 xiaomi
                              
                              
                               if (ohneInfo){
                                              // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                    tabelleAusbessern();
                                    counter=0;
                                    val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=0;
                                    val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonderfälle ohne INFO</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                    tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    tabelleAusbessern();
                                    counter=-1
                              var arrFilt=[];
                              //sonoff.0.SonoffPow1.INFO.Module
                              
                               $('sonoff.*.*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                              
                                      var ida = id.split('.');
                              
                                      //  log(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress")
                              
                                        $(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress").each(function(id, i) {   // kontrolliere ob  vorhanden
                                          
                                            var idc = id.split('.');
                                            if(!arrFilt.includes(idc[2])){
                                          //  log(idc[2])
                                         arrFilt.push(idc[2])}
                                         });
                                        
                              });
                              
                              //log("filter: "+arrFilt.toString())
                              //sonoff.0.ShellyWC.alive
                               $('sonoff.*.*.alive').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                              
                                 var ida = id.split('.');
                                 //log(ida[2])
                                    //  log (" hier die werte: "+id)
                                  //  if (filterArray.includes) {
                                        if (!arrFilt.includes(ida[2])) {
                                    //   log (id)
                                    
                                     anzahl++;
                                        counter++; 
                                          //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                        val1=getState(id).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                        val4=" na "; //getState(id.replace("Module","IPAddress")).val
                                        val2=" na "; //getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                        val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                        val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                        val7="na" // let val7_1=getState(id.replace("alive","POWER")).val;        
                                       // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                        
                                     //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                     //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                       // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                        //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                        ida[2].includes("Bridge") ?  val6=getState(id.replace("alive","RfReceived_Data")).val : val6="";
                                        
                                        
                                      
                                        if (!getState(id).val) {
                                            val1="❌";
                                            val4=(" <font color=\"red\"> ")+val4;
                                            val2=(" <font color=\"red\"> ")+val1;
                                            val3=(" <font color=\"red\"> ")+" 0 %";
                                            val5=(" <font color=\"red\"> ")+" --- ";
                                            val6=(" <font color=\"red\"> ")+" --- ";
                                            val7=(" <font color=\"red\"> ")+" --- ";
                                            val0=(" <font color=\"red\"> ")+val0} 
                                        else{
                                            val1="✅";
                                           // val1=(" <font color=\"lightgreen\"> ")+val1
                                           // val2=(" <font color=\"green\"> ")+val2
                                           // val3=(" <font color=\"green\"> ")+val3
                                           // val0=(" <font color=\"green\"> ")+val0
                                           }
                                       
                                    
                                 
                                   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 xiaomi
                              
                               //   if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                                 // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                              //-------------------------------------------------------------------------------------------------------------------------------------------------
                              //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                              //-------------------------------------------------------------------------------------------------------------------------------------------------
                              
                                  tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                              
                                  setState(dpAnzahl,anzahl); 
                               
                                 
                              
                              } // function ende
                              
                              
                              
                              //MAIN:
                               
                              schedule(mySchedule,  function () {
                               writeHTML();
                               if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                              }); 
                               writeHTML();
                              
                                 				 function tabelleBind(){
                                   //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                                 
                                     switch (mehrfachTabelle) {  
                                       case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>"; break;
                                      case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} break;
                                                                 
                                      case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                       } break;
                              
                              
                                      case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                else {if(counter%2==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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";} 
                                                                             else    {if(counter%2==1 && 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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                               else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                       } break;
                              
                                   } //switch ende
                              
                              
                              
                              }
                              
                              function tabelleAusbessern() {
                                          switch (mehrfachTabelle) {  
                                       case 1:    break;
                                       case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                  if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                  break;
                                       case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                  if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                  if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                  break;
                                       case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                  if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                  if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                  if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                  break; }
                              }
                              
                              function tabelleFinish() {
                              
                                    // tabelle fertigstellen
                                     switch (mehrfachTabelle) {  
                                       case 1:    break;
                                       case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                  if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                  break;
                                       case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                  if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                  if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                  break;
                                       case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                  if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                  if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                  if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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="";
                                        //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);
                               
                              
                              
                              }
                              
                              
                              
                              

                              ChaotC Offline
                              ChaotC Offline
                              Chaot
                              schrieb am zuletzt editiert von
                              #37

                              @liv-in-sky

                              Bisheriges Resultat:
                              SonoffDevices1.png

                              Es fehlen:
                              .158: Sonoff SV
                              .159 Sonoff TH1 1CH
                              .160 Sonoff SV
                              .161 Sonoff SV
                              .168 Sonoff SV
                              .169 Sonoff Dev

                              Ich hau mich jetzt aufs Ohr. Klasse Arbeit von dir

                              ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

                              liv-in-skyL 1 Antwort Letzte Antwort
                              0
                              • ChaotC Chaot

                                @liv-in-sky

                                Bisheriges Resultat:
                                SonoffDevices1.png

                                Es fehlen:
                                .158: Sonoff SV
                                .159 Sonoff TH1 1CH
                                .160 Sonoff SV
                                .161 Sonoff SV
                                .168 Sonoff SV
                                .169 Sonoff Dev

                                Ich hau mich jetzt aufs Ohr. Klasse Arbeit von dir

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

                                @Chaot dito

                                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

                                ChaotC ? 3 Antworten Letzte Antwort
                                0
                                • liv-in-skyL liv-in-sky

                                  @Chaot dito

                                  ChaotC Offline
                                  ChaotC Offline
                                  Chaot
                                  schrieb am zuletzt editiert von
                                  #39

                                  @liv-in-sky
                                  Mit der letzten Änderung läuft es jetzt auch ohne Warnung.

                                  ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

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

                                    @Chaot dito

                                    ? Offline
                                    ? Offline
                                    Ein ehemaliger Benutzer
                                    schrieb am zuletzt editiert von
                                    #40

                                    @liv-in-sky darf ich mich wieder einklinken? Habe interessiert mitgelesen. Kann ich das letzte Script auch schon nehmen oder abwarten noch? Dank

                                    liv-in-skyL 1 Antwort Letzte Antwort
                                    0
                                    • ? Ein ehemaliger Benutzer

                                      @liv-in-sky darf ich mich wieder einklinken? Habe interessiert mitgelesen. Kann ich das letzte Script auch schon nehmen oder abwarten noch? Dank

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

                                      @Alina kannst du gerne ausprobieren

                                      aber datenpunkt anlegen nicht vergessen - für die anzahl

                                      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

                                        @Chaot dito

                                        ChaotC Offline
                                        ChaotC Offline
                                        Chaot
                                        schrieb am zuletzt editiert von
                                        #42

                                        @liv-in-sky
                                        Das hat mir jetzt keine Ruhe gelassen.
                                        Kannst du mal über das Script schauen:

                                        //@liv-in-sky Januar 2020
                                        
                                        //HIER WIRD PFAD UND FILENAME DEFINIERT
                                        const path = "/htmlakku.html";                   //FIlenamen definieren
                                        const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                                        let   braucheEinFile=false;                          // 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="vis.0.TABELLEN.SONOFF"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                        let dpAnzahl="vis.0.TABELLEN.AnzahlSonoff";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                                        let htmlColorDeviceUeberschrift="#00BFFF"
                                        var battAlarm=30;                                     //alarm batterie wert
                                        var battAlarmWarning=55;                                     //warnungen batterie wert
                                        
                                        // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                                        var pow=true;
                                        var generic=true;
                                        var basic=true;
                                        var externalMitInfo=false; //noch nicht integriert
                                        var externalOhneInfo=false;  //noch nicht integriert
                                        var schalter2ch=true;                                               
                                        var rfbridge=true;
                                        var stdoseS2X=true;
                                        var ohneInfo=false;
                                        //Sonderfall
                                        var linganSteckdose =true;
                                        
                                        
                                        
                                        var filterArray=["Sonoff Pow","Generic","Sonoff Basic","Sonoff T1 1CH","Sonoff SV","Sonoff Dev","BlitzWolf SHP"]; //hier arten eintragen - muss gefiltert werden für geräte ohne INFO
                                        
                                        let mySchedule="*/20 * * * * * "; 
                                        
                                        //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                                        var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                        var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                        var htmlFeld3='Version';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                        var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                                        var htmlFeld5='IP';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                        var htmlFeld6='';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                        var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                        var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                        
                                        //-----------------------------------
                                        
                                        
                                        
                                        //hier werden die styles für die tabelle definiert
                                        //ÜBERSCHRIFT ÜBER TABELLE
                                        let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                                        let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                        const htmlFeldUeber='Sonoff Devices';              // Ü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=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                        const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                        const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                                        //GANZE TABELLE
                                        let abstandZelle="1";
                                        let weite="auto";                                     //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="12px";
                                        //FELDER UND RAHMEN
                                        let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                                        const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
                                        const htmlFarbFelderschrift2="#D8D8D8";                 // 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="gray";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                        let htmlRahmenLinien="cols";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                                        const htmlTabUeber3="</tr>";
                                        
                                        
                                        //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                                        
                                        
                                        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><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&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;"+htmlFeld3+
                                                          "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                                          "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld8+"&ensp;</td>";
                                                              //------------------------------------------------------
                                        
                                        var anzahl;
                                        var AkkuAlarm=[];
                                        var htmlOut="";
                                        var mix;
                                        var counter;
                                        var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7;
                                        var htmlTabUeber="";
                                        function writeHTML(){
                                        
                                        
                                        anzahl=0;
                                        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+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,val3,val4!!!------------------------------------------------------------
                                        //--------------------------------------------------------------------------------------------------------------------------------------------------
                                        
                                        var myColl=[];
                                        var val1help;
                                        
                                         
                                         if (pow){
                                        
                                                    // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>BlitzWolf SHP</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Today";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                        
                                        //sonoff.0.SonoffPow1.INFO.Module
                                        $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                             if (getState(id).val=="BlitzWolf SHP") {
                                                // log (id)
                                                anzahl++;
                                               var ida = id.split('.');
                                              
                                                 counter++; 
                                                   //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                 val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val4=getState(id.replace("Module","IPAddress")).val
                                                 val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                 val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                 let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                                 val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                                 val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                               
                                                 if (!getState(id.replace("INFO.Module","alive")).val) {
                                                     val1="❌";
                                                     val4=(" <font color=\"red\"> ")+val1;
                                                     val2=(" <font color=\"red\"> ")+val2;
                                                     val3=(" <font color=\"red\"> ")+" 0 %";
                                                     val5=(" <font color=\"red\"> ")+" --- ";
                                                     val6=(" <font color=\"red\"> ")+" --- ";
                                                     val7=(" <font color=\"red\"> ")+" --- ";
                                                     val0=(" <font color=\"red\"> ")+val0} 
                                                 else{
                                                     val1="✅";
                                                    // val1=(" <font color=\"lightgreen\"> ")+val1
                                                    // val2=(" <font color=\"green\"> ")+val2
                                                    // val3=(" <font color=\"green\"> ")+val3
                                                    // val0=(" <font color=\"green\"> ")+val0
                                                    }
                                        
                                        
                                                
                                          
                                            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 fritzdect
                                        
                                        if (generic){
                                                    // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Generic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                        
                                        //sonoff.0.SonoffPow1.INFO.Module
                                        $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                             if (getState(id).val=="Generic") {
                                                //log (id)
                                                anzahl++;
                                               var ida = id.split('.');
                                              
                                                 counter++; 
                                                   //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                 val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val4=getState(id.replace("Module","IPAddress")).val
                                                 val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                 val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                 val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                 //let val7_1=getState(id.replace("INFO.Module","alive")).val;        
                                                 //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 val7="";
                                               //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                               //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                 
                                                // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                 //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                // val6=""
                                                  val6="";
                                               
                                                 if (!getState(id.replace("INFO.Module","alive")).val) {
                                                     val1="❌";
                                                     val4=(" <font color=\"red\"> ")+val4;
                                                     val2=(" <font color=\"red\"> ")+val2;
                                                     val3=(" <font color=\"red\"> ")+" 0 %";
                                                     val5=(" <font color=\"red\"> ")+" --- ";
                                                     val6=(" <font color=\"red\"> ")+" --- ";
                                                     val7=(" <font color=\"red\"> ")+" --- ";
                                                     val0=(" <font color=\"red\"> ")+val0} 
                                                 else{
                                                     val1="✅";
                                                    // val1=(" <font color=\"lightgreen\"> ")+val1
                                                    // val2=(" <font color=\"green\"> ")+val2
                                                    // val3=(" <font color=\"green\"> ")+val3
                                                    // val0=(" <font color=\"green\"> ")+val0
                                                    }
                                                
                                             
                                          
                                            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 xiaomi
                                        
                                        if (basic){
                                                    // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Generic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                        
                                        //sonoff.0.SonoffPow1.INFO.Module
                                        $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                             if (getState(id).val=="Sonoff Basic") {
                                                //log (id)
                                                anzahl++;
                                               var ida = id.split('.');
                                              
                                                 counter++; 
                                                   //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                 val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val4=getState(id.replace("Module","IPAddress")).val
                                                 val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                 val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                 val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                 //let val7_1=getState(id.replace("INFO.Module","alive")).val;        
                                                 //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 val7="";
                                               //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                               //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                 
                                                // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                 //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                // val6=""
                                                  val6="";
                                               
                                                 if (!getState(id.replace("INFO.Module","alive")).val) {
                                                     val1="❌";
                                                     val4=(" <font color=\"red\"> ")+val4;
                                                     val2=(" <font color=\"red\"> ")+val2;
                                                     val3=(" <font color=\"red\"> ")+" 0 %";
                                                     val5=(" <font color=\"red\"> ")+" --- ";
                                                     val6=(" <font color=\"red\"> ")+" --- ";
                                                     val7=(" <font color=\"red\"> ")+" --- ";
                                                     val0=(" <font color=\"red\"> ")+val0} 
                                                 else{
                                                     val1="✅";
                                                    // val1=(" <font color=\"lightgreen\"> ")+val1
                                                    // val2=(" <font color=\"green\"> ")+val2
                                                    // val3=(" <font color=\"green\"> ")+val3
                                                    // val0=(" <font color=\"green\"> ")+val0
                                                    }
                                                
                                             
                                          
                                            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 xiaomi
                                        
                                        
                                        if (schalter2ch){
                                                    // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                        
                                        //sonoff.0.SonoffPow1.INFO.Module
                                        $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                             if (getState(id).val=="Sonoff T1 1CH") {
                                                //log (id)
                                                anzahl++;
                                               var ida = id.split('.');
                                              
                                                 counter++; 
                                                   //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                 val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val4=getState(id.replace("Module","IPAddress")).val
                                                 val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                 val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                 val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                 //let val7_1=getState(id.replace("INFO.Module","alive")).val;        
                                                 //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 val7="";
                                               //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                               //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                 
                                                // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                 //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                // val6=""
                                                  val6="";
                                               
                                                 if (!getState(id.replace("INFO.Module","alive")).val) {
                                                     val1="❌";
                                                     val4=(" <font color=\"red\"> ")+val4;
                                                     val2=(" <font color=\"red\"> ")+val2;
                                                     val3=(" <font color=\"red\"> ")+" 0 %";
                                                     val5=(" <font color=\"red\"> ")+" --- ";
                                                     val6=(" <font color=\"red\"> ")+" --- ";
                                                     val7=(" <font color=\"red\"> ")+" --- ";
                                                     val0=(" <font color=\"red\"> ")+val0} 
                                                 else{
                                                     val1="✅";
                                                    // val1=(" <font color=\"lightgreen\"> ")+val1
                                                    // val2=(" <font color=\"green\"> ")+val2
                                                    // val3=(" <font color=\"green\"> ")+val3
                                                    // val0=(" <font color=\"green\"> ")+val0
                                                    }
                                                
                                             
                                          
                                            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 xiaomi
                                        
                                        if (stdoseS2X){
                                                    // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonoff DEV</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                        
                                        //sonoff.0.SonoffPow1.INFO.Module
                                        $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                             if (getState(id).val=="Sonoff Dev") {
                                                //log (id)
                                                anzahl++;
                                               var ida = id.split('.');
                                              
                                                 counter++; 
                                                   //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                 val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val4=getState(id.replace("Module","IPAddress")).val
                                                 val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                 val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                 val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                 //let val7_1=getState(id.replace("INFO.Module","alive")).val;        
                                                 //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 val7="";
                                               //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                               //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                 
                                                // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                 //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                // val6=""
                                                  val6="";
                                               
                                                 if (!getState(id.replace("INFO.Module","alive")).val) {
                                                     val1="❌";
                                                     val4=(" <font color=\"red\"> ")+val4;
                                                     val2=(" <font color=\"red\"> ")+val2;
                                                     val3=(" <font color=\"red\"> ")+" 0 %";
                                                     val5=(" <font color=\"red\"> ")+" --- ";
                                                     val6=(" <font color=\"red\"> ")+" --- ";
                                                     val7=(" <font color=\"red\"> ")+" --- ";
                                                     val0=(" <font color=\"red\"> ")+val0} 
                                                 else{
                                                     val1="✅";
                                                    // val1=(" <font color=\"lightgreen\"> ")+val1
                                                    // val2=(" <font color=\"green\"> ")+val2
                                                    // val3=(" <font color=\"green\"> ")+val3
                                                    // val0=(" <font color=\"green\"> ")+val0
                                                    }
                                                
                                             
                                          
                                            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 xiaomi
                                        
                                        if (linganSteckdose){
                                                    // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonoff SV</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                        
                                        //sonoff.0.SonoffPow1.INFO.Module
                                        $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                             if (getState(id).val=="Sonoff SV") {
                                                //log (id)
                                                anzahl++;
                                               var ida = id.split('.');
                                              
                                                 counter++; 
                                                   //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                 val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val4=getState(id.replace("Module","IPAddress")).val
                                                 val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                 val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                 val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                 //let val7_1=getState(id.replace("INFO.Module","alive")).val;        
                                                 //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 val7="";
                                               //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                               //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                 
                                                // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                 //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                // val6=""
                                                  val6="";
                                               
                                                 if (!getState(id.replace("INFO.Module","alive")).val) {
                                                     val1="❌";
                                                     val4=(" <font color=\"red\"> ")+val4;
                                                     val2=(" <font color=\"red\"> ")+val2;
                                                     val3=(" <font color=\"red\"> ")+" 0 %";
                                                     val5=(" <font color=\"red\"> ")+" --- ";
                                                     val6=(" <font color=\"red\"> ")+" --- ";
                                                     val7=(" <font color=\"red\"> ")+" --- ";
                                                     val0=(" <font color=\"red\"> ")+val0} 
                                                 else{
                                                     val1="✅";
                                                    // val1=(" <font color=\"lightgreen\"> ")+val1
                                                    // val2=(" <font color=\"green\"> ")+val2
                                                    // val3=(" <font color=\"green\"> ")+val3
                                                    // val0=(" <font color=\"green\"> ")+val0
                                                    }
                                                
                                             
                                          
                                            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 xiaomi
                                        
                                        if (ohneInfo){
                                                       // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonderfälle ohne INFO</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                        var arrFilt=[];
                                        //sonoff.0.SonoffPow1.INFO.Module
                                        
                                        $('sonoff.*.*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        
                                               var ida = id.split('.');
                                        
                                               //  log(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress")
                                        
                                                 $(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress").each(function(id, i) {   // kontrolliere ob  vorhanden
                                                   
                                                     var idc = id.split('.');
                                                     if(!arrFilt.includes(idc[2])){
                                                   //  log(idc[2])
                                                  arrFilt.push(idc[2])}
                                                  });
                                                 
                                        });
                                        
                                        //log("filter: "+arrFilt.toString())
                                        //sonoff.0.ShellyWC.alive
                                        $('sonoff.*.*.alive').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        
                                          var ida = id.split('.');
                                          //log(ida[2])
                                             //  log (" hier die werte: "+id)
                                           //  if (filterArray.includes) {
                                                 if (!arrFilt.includes(ida[2])) {
                                             //   log (id)
                                             
                                              anzahl++;
                                                 counter++; 
                                                   //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                 val1=getState(id).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val4=" na "; //getState(id.replace("Module","IPAddress")).val
                                                 val2=" na "; //getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                 val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                 val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                 val7="na" // let val7_1=getState(id.replace("alive","POWER")).val;        
                                                // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 
                                              //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                              //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                 //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                // ida[2].includes("Bridge") ?  val6=getState(id.replace("alive","RfReceived_Data")).val : val6="";
                                                 
                                                 
                                               
                                                 if (!getState(id).val) {
                                                     val1="❌";
                                                     val4=(" <font color=\"red\"> ")+val4;
                                                     val2=(" <font color=\"red\"> ")+val1;
                                                     val3=(" <font color=\"red\"> ")+" 0 %";
                                                     val5=(" <font color=\"red\"> ")+" --- ";
                                                     val6=(" <font color=\"red\"> ")+" --- ";
                                                     val7=(" <font color=\"red\"> ")+" --- ";
                                                     val0=(" <font color=\"red\"> ")+val0} 
                                                 else{
                                                     val1="✅";
                                                    // val1=(" <font color=\"lightgreen\"> ")+val1
                                                    // val2=(" <font color=\"green\"> ")+val2
                                                    // val3=(" <font color=\"green\"> ")+val3
                                                    // val0=(" <font color=\"green\"> ")+val0
                                                    }
                                                
                                             
                                          
                                            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 xiaomi
                                        
                                        //   if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                                          // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                                        //-------------------------------------------------------------------------------------------------------------------------------------------------
                                        //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                        //-------------------------------------------------------------------------------------------------------------------------------------------------
                                        
                                           tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                        
                                           setState(dpAnzahl,anzahl); 
                                        
                                          
                                        
                                        } // function ende
                                        
                                        
                                        
                                        //MAIN:
                                        
                                        schedule(mySchedule,  function () {
                                        writeHTML();
                                        if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                        }); 
                                        writeHTML();
                                        
                                          				 function tabelleBind(){
                                            //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                                          
                                              switch (mehrfachTabelle) {  
                                                case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>"; break;
                                               case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} break;
                                                                          
                                               case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                                } break;
                                        
                                        
                                               case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                         else {if(counter%2==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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";} 
                                                                                      else    {if(counter%2==1 && 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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                                        else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                                } break;
                                        
                                            } //switch ende
                                        
                                        
                                        
                                        }
                                        
                                        function tabelleAusbessern() {
                                                   switch (mehrfachTabelle) {  
                                                case 1:    break;
                                                case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                           break;
                                                case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                           if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                           break;
                                                case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                           if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                           if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                           break; }
                                        }
                                        
                                        function tabelleFinish() {
                                        
                                             // tabelle fertigstellen
                                              switch (mehrfachTabelle) {  
                                                case 1:    break;
                                                case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                           break;
                                                case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                           if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                           break;
                                                case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                           if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                           if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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="";
                                                 //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);
                                        
                                        
                                        
                                        }
                                        
                                        
                                        
                                        
                                        


                                        Ich habe die Power Werte ganz weggelassen. Die benötige ich nicht, da ich eigentlich nur die Übersicht möchte. Also von Spalte 1 bis Spalte 6. Aber ich schaffe es nicht die Spalten zu löschen.

                                        ioBroker auf NUC unter Proxmox; VIS: 12" Touchscreen und 17" Touch; Lichtsteuerung, Thermometer und Sensoren: Tasmota (39); Ambiente Beleuchtung: WLED (9); Heizung: DECT Thermostate (9) an Fritz 6690; EMS-ESP; 1 Echo V2; 3 Echo DOT; 1 Echo Connect; 2 Echo Show 5; Unifi Ap-Ac Lite.

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

                                          @Chaot ich bin ein tr..tel - unter version ist der wichtige wert - was steht da drin

                                          und kannst du bitte dieses script verwenden - ist das neuste - ist einfacher zum fehler finden - du müßtest aber noch einen datenpunkt anlegen - für die anzahl der geräte (dpAnzahl) und den anderen datenpunkt wieder angleichen

                                          //@liv-in-sky Januar 2020
                                          
                                          //HIER WIRD PFAD UND FILENAME DEFINIERT
                                          const path = "/htmlakku.html";                   //FIlenamen definieren
                                          const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                                          let   braucheEinFile=false;                          // 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="controll-own.0.TABELLEN.SONOFF"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                          let dpAnzahl="controll-own.0.TABELLEN.AnzahlSonoff";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                                          let htmlColorDeviceUeberschrift="#00BFFF"
                                          var battAlarm=30;                                     //alarm batterie wert
                                          var battAlarmWarning=55;                                     //warnungen batterie wert
                                          
                                          // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                                          var pow=true;
                                          var generic=true;
                                          var basic=true;
                                          var externalMitInfo=false; //noch nicht integriert
                                          var externalOhneInfo=false;  //noch nicht integriert
                                          var schalter2ch=true;                                               
                                          var rfbridge=true;
                                          var stdoseS2X=true;
                                          var ohneInfo=false;
                                          //Sonderfall
                                          var linganSteckdose =true;
                                          
                                          
                                          
                                          var filterArray=["Sonoff Pow","Generic","Sonoff Basic","Sonoff T1 2CH","Sonoff S2X","Lingan SWA1"]; //hier arten eintragen - muss gefiltert werden für geräte ohne INFO
                                          
                                          let mySchedule="  * * * * * "; 
                                          
                                          //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                                          var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                          var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                          var htmlFeld3='Version';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                          var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                                          var htmlFeld5='IP';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                          var htmlFeld6='';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                          var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                          var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                          
                                          //-----------------------------------
                                          
                                          
                                          
                                          //hier werden die styles für die tabelle definiert
                                          //ÜBERSCHRIFT ÜBER TABELLE
                                          let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                                          let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                          const htmlFeldUeber='Sonoff Devices';              // Ü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=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                          const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                          const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
                                          //GANZE TABELLE
                                          let abstandZelle="1";
                                          let weite="auto";                                     //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="#BDBDBD";                  // SchriftFarbe der Felder
                                          const htmlFarbFelderschrift2="#D8D8D8";                 // 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="gray";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                          let htmlRahmenLinien="cols";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                                          const htmlTabUeber3="</tr>";
                                          
                                          
                                          //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                                          
                                          
                                          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><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&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;"+htmlFeld3+
                                                             "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                                             "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld8+"&ensp;</td>";
                                                                 //------------------------------------------------------
                                          
                                          var anzahl;
                                          var AkkuAlarm=[];
                                          var htmlOut="";
                                          var mix;
                                          var counter;
                                          var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7;
                                          var htmlTabUeber="";
                                          function writeHTML(){
                                          
                                          
                                          anzahl=0;
                                          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+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,val3,val4!!!------------------------------------------------------------
                                          //--------------------------------------------------------------------------------------------------------------------------------------------------
                                          
                                          var myColl=[];
                                          var val1help;
                                          
                                            
                                            if (pow){
                                          
                                                       // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>SONOFF POW</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Today";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                          
                                          //sonoff.0.SonoffPow1.INFO.Module
                                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             
                                                if (getState(id).val=="Sonoff Pow") {
                                                   // log (id)
                                                   anzahl++;
                                                  var ida = id.split('.');
                                                 
                                                    counter++; 
                                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                    val4=getState(id.replace("Module","IPAddress")).val
                                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                    val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                                    val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                  
                                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                                        val1="❌";
                                                        val4=(" <font color=\"red\"> ")+val1;
                                                        val2=(" <font color=\"red\"> ")+val2;
                                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                                        val5=(" <font color=\"red\"> ")+" --- ";
                                                        val6=(" <font color=\"red\"> ")+" --- ";
                                                        val7=(" <font color=\"red\"> ")+" --- ";
                                                        val0=(" <font color=\"red\"> ")+val0} 
                                                    else{
                                                        val1="✅";
                                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                                       // val2=(" <font color=\"green\"> ")+val2
                                                       // val3=(" <font color=\"green\"> ")+val3
                                                       // val0=(" <font color=\"green\"> ")+val0
                                                       }
                                          
                                          
                                                   
                                             
                                               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 fritzdect
                                          
                                           if (generic){
                                                       // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Generic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                          
                                          //sonoff.0.SonoffPow1.INFO.Module
                                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             
                                                if (getState(id).val=="Generic") {
                                                   //log (id)
                                                   anzahl++;
                                                  var ida = id.split('.');
                                                 
                                                    counter++; 
                                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                    val4=getState(id.replace("Module","IPAddress")).val
                                                    val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                  //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                  //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                    
                                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                   // val6=""
                                                     val6="";
                                                  
                                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                                        val1="❌";
                                                        val4=(" <font color=\"red\"> ")+val4;
                                                        val2=(" <font color=\"red\"> ")+val2;
                                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                                        val5=(" <font color=\"red\"> ")+" --- ";
                                                        val6=(" <font color=\"red\"> ")+" --- ";
                                                        val7=(" <font color=\"red\"> ")+" --- ";
                                                        val0=(" <font color=\"red\"> ")+val0} 
                                                    else{
                                                        val1="✅";
                                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                                       // val2=(" <font color=\"green\"> ")+val2
                                                       // val3=(" <font color=\"green\"> ")+val3
                                                       // val0=(" <font color=\"green\"> ")+val0
                                                       }
                                                   
                                                
                                             
                                               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 xiaomi
                                          
                                          if (basic){
                                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Basic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                          
                                          //sonoff.0.SonoffPow1.INFO.Module
                                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             
                                                if (getState(id).val=="Sonoff Basic") {
                                                 //  log (id)
                                                  var ida = id.split('.');
                                                 anzahl++;
                                                    counter++; 
                                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                    val4=getState(id.replace("Module","IPAddress")).val
                                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                 //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                    val6=""
                                                    val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                  
                                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                                        val1="❌";
                                                        val4=(" <font color=\"red\"> ")+val4;
                                                        val2=(" <font color=\"red\"> ")+val2;
                                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                                        val5=(" <font color=\"red\"> ")+" --- ";
                                                        val6=(" <font color=\"red\"> ")+" --- ";
                                                        val7=(" <font color=\"red\"> ")+" --- ";
                                                        val0=(" <font color=\"red\"> ")+val0} 
                                                    else{
                                                        val1="✅";
                                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                                       // val2=(" <font color=\"green\"> ")+val2
                                                       // val3=(" <font color=\"green\"> ")+val3
                                                       // val0=(" <font color=\"green\"> ")+val0
                                                       }
                                                   
                                                
                                             
                                               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 xiaomi
                                          
                                          if (schalter2ch){
                                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 2Ch</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 2"
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                          
                                          //sonoff.0.SonoffPow1.INFO.Module
                                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             
                                                if (getState(id).val=="Sonoff T1 2CH") {
                                                 //  log (id)
                                                 anzahl++;
                                                  var ida = id.split('.');
                                                 
                                                    counter++; 
                                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                    val4=getState(id.replace("Module","IPAddress")).val
                                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                    val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                    let val6_1=getState(id.replace("INFO.Module","POWER1")).val;        
                                                    val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                    let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                  //  val6=""
                                                    
                                                  
                                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                                        val1="❌";
                                                        val4=(" <font color=\"red\"> ")+val4;
                                                        val2=(" <font color=\"red\"> ")+val2;
                                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                                        val5=(" <font color=\"red\"> ")+" --- ";
                                                        val6=(" <font color=\"red\"> ")+" --- ";
                                                        val7=(" <font color=\"red\"> ")+" --- ";
                                                        val0=(" <font color=\"red\"> ")+val0} 
                                                    else{
                                                        val1="✅";
                                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                                       // val2=(" <font color=\"green\"> ")+val2
                                                       // val3=(" <font color=\"green\"> ")+val3
                                                       // val0=(" <font color=\"green\"> ")+val0
                                                       }
                                                   
                                                
                                             
                                               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 xiaomi
                                          
                                           
                                          
                                          if (stdoseS2X){
                                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Steckdose S2X</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                          
                                          //sonoff.0.SonoffPow1.INFO.Module
                                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             
                                                if (getState(id).val=="Sonoff S2X") {
                                                 //  log (id)
                                                 anzahl++;
                                                  var ida = id.split('.');
                                                 
                                                    counter++; 
                                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                    val4=getState(id.replace("Module","IPAddress")).val
                                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                    val5=val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                    
                                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                    val6=""
                                                    
                                                  
                                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                                        val1="❌";
                                                        val4=(" <font color=\"red\"> ")+val4;
                                                        val2=(" <font color=\"red\"> ")+val2;
                                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                                        val5=(" <font color=\"red\"> ")+" --- ";
                                                        val6=(" <font color=\"red\"> ")+" --- ";
                                                        val7=(" <font color=\"red\"> ")+" --- ";
                                                        val0=(" <font color=\"red\"> ")+val0} 
                                                    else{
                                                        val1="✅";
                                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                                       // val2=(" <font color=\"green\"> ")+val2
                                                       // val3=(" <font color=\"green\"> ")+val3
                                                       // val0=(" <font color=\"green\"> ")+val0
                                                       }
                                                   
                                                
                                             
                                               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 xiaomi
                                          
                                          if (linganSteckdose){
                                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Lingan Steckdose</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                          
                                          //sonoff.0.SonoffPow1.INFO.Module
                                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             
                                                if (getState(id).val=="Lingan SWA1") {
                                                 //  log (id)
                                                  var ida = id.split('.');
                                                    anzahl++;
                                                    counter++; 
                                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                    val4=getState(id.replace("Module","IPAddress")).val
                                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                    val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                    val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                    
                                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                    val6=""
                                                    
                                                  
                                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                                        val1="❌";
                                                        val4=(" <font color=\"red\"> ")+val4;
                                                        val2=(" <font color=\"red\"> ")+val2;
                                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                                        val5=(" <font color=\"red\"> ")+" --- ";
                                                        val6=(" <font color=\"red\"> ")+" --- ";
                                                        val7=(" <font color=\"red\"> ")+" --- ";
                                                        val0=(" <font color=\"red\"> ")+val0} 
                                                    else{
                                                        val1="✅";
                                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                                       // val2=(" <font color=\"green\"> ")+val2
                                                       // val3=(" <font color=\"green\"> ")+val3
                                                       // val0=(" <font color=\"green\"> ")+val0
                                                       }
                                                   
                                                
                                             
                                               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 xiaomi
                                          
                                           
                                          if (rfbridge){
                                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>RF Bridge</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Received";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                          
                                          //sonoff.0.SonoffPow1.INFO.Module
                                           $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             
                                                if (getState(id).val=="Sonoff Bridge") {
                                                 //  log (id)
                                                  var ida = id.split('.');
                                                 anzahl++;
                                                    counter++; 
                                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                    val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                    val4=getState(id.replace("Module","IPAddress")).val
                                                    val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                    val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                    let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                                    val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                 //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                 //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                    val6=getState(id.replace("INFO.Module","RfReceived_Data")).val;
                                                    val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                  
                                                    if (!getState(id.replace("INFO.Module","alive")).val) {
                                                        val1="❌";
                                                        val4=(" <font color=\"red\"> ")+val4;
                                                        val2=(" <font color=\"red\"> ")+val2;
                                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                                        val5=(" <font color=\"red\"> ")+" --- ";
                                                        val6=(" <font color=\"red\"> ")+" --- ";
                                                        val7=(" <font color=\"red\"> ")+" --- ";
                                                        val0=(" <font color=\"red\"> ")+val0} 
                                                    else{
                                                        val1="✅";
                                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                                       // val2=(" <font color=\"green\"> ")+val2
                                                       // val3=(" <font color=\"green\"> ")+val3
                                                       // val0=(" <font color=\"green\"> ")+val0
                                                       }
                                                   
                                                
                                             
                                               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 xiaomi
                                          
                                          
                                           if (ohneInfo){
                                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonderfälle ohne INFO</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                          var arrFilt=[];
                                          //sonoff.0.SonoffPow1.INFO.Module
                                          
                                           $('sonoff.*.*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                                  var ida = id.split('.');
                                          
                                                  //  log(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress")
                                          
                                                    $(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress").each(function(id, i) {   // kontrolliere ob  vorhanden
                                                      
                                                        var idc = id.split('.');
                                                        if(!arrFilt.includes(idc[2])){
                                                      //  log(idc[2])
                                                     arrFilt.push(idc[2])}
                                                     });
                                                    
                                          });
                                          
                                          //log("filter: "+arrFilt.toString())
                                          //sonoff.0.ShellyWC.alive
                                           $('sonoff.*.*.alive').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                             var ida = id.split('.');
                                             //log(ida[2])
                                                //  log (" hier die werte: "+id)
                                              //  if (filterArray.includes) {
                                                    if (!arrFilt.includes(ida[2])) {
                                                //   log (id)
                                                
                                                 anzahl++;
                                                    counter++; 
                                                      //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                                    val1=getState(id).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                    val4=" na "; //getState(id.replace("Module","IPAddress")).val
                                                    val2=" na "; //getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                                    val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                                    val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                                    val7="na" // let val7_1=getState(id.replace("alive","POWER")).val;        
                                                   // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                    
                                                 //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                                                 //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                                   // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                                    //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                                    ida[2].includes("Bridge") ?  val6=getState(id.replace("alive","RfReceived_Data")).val : val6="";
                                                    
                                                    
                                                  
                                                    if (!getState(id).val) {
                                                        val1="❌";
                                                        val4=(" <font color=\"red\"> ")+val4;
                                                        val2=(" <font color=\"red\"> ")+val1;
                                                        val3=(" <font color=\"red\"> ")+" 0 %";
                                                        val5=(" <font color=\"red\"> ")+" --- ";
                                                        val6=(" <font color=\"red\"> ")+" --- ";
                                                        val7=(" <font color=\"red\"> ")+" --- ";
                                                        val0=(" <font color=\"red\"> ")+val0} 
                                                    else{
                                                        val1="✅";
                                                       // val1=(" <font color=\"lightgreen\"> ")+val1
                                                       // val2=(" <font color=\"green\"> ")+val2
                                                       // val3=(" <font color=\"green\"> ")+val3
                                                       // val0=(" <font color=\"green\"> ")+val0
                                                       }
                                                   
                                                
                                             
                                               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 xiaomi
                                          
                                           //   if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                                             // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                                          //-------------------------------------------------------------------------------------------------------------------------------------------------
                                          //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                          //-------------------------------------------------------------------------------------------------------------------------------------------------
                                          
                                              tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                          
                                              setState(dpAnzahl,anzahl); 
                                           
                                             
                                          
                                          } // function ende
                                          
                                          
                                          
                                          //MAIN:
                                           
                                          schedule(mySchedule,  function () {
                                           writeHTML();
                                           if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                          }); 
                                           writeHTML();
                                          
                                             				 function tabelleBind(){
                                               //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                                             
                                                 switch (mehrfachTabelle) {  
                                                   case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>"; break;
                                                  case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} break;
                                                                             
                                                  case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                                   } break;
                                          
                                          
                                                  case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                            else {if(counter%2==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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";} 
                                                                                         else    {if(counter%2==1 && 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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                                           else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                                   } break;
                                          
                                               } //switch ende
                                          
                                          
                                          
                                          }
                                          
                                          function tabelleAusbessern() {
                                                      switch (mehrfachTabelle) {  
                                                   case 1:    break;
                                                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                              break;
                                                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                              break;
                                                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                              break; }
                                          }
                                          
                                          function tabelleFinish() {
                                          
                                                // tabelle fertigstellen
                                                 switch (mehrfachTabelle) {  
                                                   case 1:    break;
                                                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                              break;
                                                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                              break;
                                                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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="";
                                                    //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);
                                           
                                          
                                          
                                          }
                                          
                                          
                                          
                                          

                                          ? Offline
                                          ? Offline
                                          Ein ehemaliger Benutzer
                                          schrieb am zuletzt editiert von
                                          #43

                                          @liv-in-sky Hallo, nur ganz kurz. Meine beiden Geräte werden jetzt angezeigt; aber das liegt sicher auch daran, dass meine Versionen <8.x.x.x sind.

                                          Nur zur Info mein Screen:
                                          Bildschirmfoto 2020-01-15 um 06.02.01.JPG

                                          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

                                          192

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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