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.3k

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

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

Sonoff Geräte als HTML Tabelle - Vis

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptmonitoringtemplate
632 Beiträge 34 Kommentatoren 134.2k 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.
  • 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
                                        • ? Offline
                                          ? Offline
                                          Ein ehemaliger Benutzer
                                          schrieb am zuletzt editiert von
                                          #44

                                          Hallo

                                          ich hänge mich auch mal dazu. Ich habe eine POW R2 und die wird nicht angezeigt. Einfach nur als Hinweis und Kritik. Ich hänge mal zwei Bildschirmauszüge an.
                                          Dazu noch wird bei der S2X und dem WLAN die uptime angezeigt :)

                                          Bildschirmfoto 2020-01-15 um 08.40.30.JPG

                                          Bildschirmfoto 2020-01-15 um 08.39.57.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

                                          740

                                          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