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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe

NEWS

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

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

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

[Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascripttemplatemonitoring
581 Beiträge 81 Kommentatoren 136.7k Aufrufe 84 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.
  • P Pittini

    @papaechokilo Ok, das nehm ich dann mit auf, auf "Ok" reagiert das Skript schon, normal is neu. Klick bei dem Datenpunkt bitte mal rechts auf den Bleistift, wähl dann das Register RAW und mach mir nen Screenshot davon.

    P Offline
    P Offline
    papaechokilo
    schrieb am zuletzt editiert von
    #421

    @pittini F45F419C-34C0-4B75-904B-2ECB5C6D051D.jpeg 3E686BAB-3BF6-45C2-84E7-4A5B31103675.jpeg

    P 1 Antwort Letzte Antwort
    0
    • P papaechokilo

      @pittini F45F419C-34C0-4B75-904B-2ECB5C6D051D.jpeg 3E686BAB-3BF6-45C2-84E7-4A5B31103675.jpeg

      P Offline
      P Offline
      Pittini
      Developer
      schrieb am zuletzt editiert von
      #422

      @papaechokilo Danke, ist ab sofort in der 1.7.4 integriert.

      P 1 Antwort Letzte Antwort
      0
      • P Pittini

        @papaechokilo Danke, ist ab sofort in der 1.7.4 integriert.

        P Offline
        P Offline
        papaechokilo
        schrieb am zuletzt editiert von
        #423

        @pittini Leider kommen wieder diese Fehlermeldungen.
        Fehler 2.JPG

        P 1 Antwort Letzte Antwort
        0
        • P papaechokilo

          @pittini Leider kommen wieder diese Fehlermeldungen.
          Fehler 2.JPG

          P Offline
          P Offline
          Pittini
          Developer
          schrieb am zuletzt editiert von
          #424

          @papaechokilo Seltsam. Kannste bitte mal im Skript logging aktivieren und mir nen komplettes startlog posten?

          P 3 Antworten Letzte Antwort
          0
          • P Pittini

            @papaechokilo Seltsam. Kannste bitte mal im Skript logging aktivieren und mir nen komplettes startlog posten?

            P Offline
            P Offline
            papaechokilo
            schrieb am zuletzt editiert von Negalein
            #425

            @pittini

            Ich denke die Zeile vor der Fehlermeldung, das es nicht existiert ist der Grund für die Fenlermeldung.

            2021-06-13 11:17:15.680  - info: javascript.0 (6146) Stop script script.js.common.System.Batteriestatus
            2021-06-13 11:17:15.691  - info: javascript.0 (6146) Start javascript script.js.common.System.Batteriestatus
            2021-06-13 11:17:15.722  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: starting Batterieüberwachung V.1.7.4
            2021-06-13 11:17:15.723  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching FillWelcheFunktionVerwenden
            2021-06-13 11:17:15.723  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Found Function BatterieSpannung_15
            2021-06-13 11:17:15.724  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Found Function BatterieSpannung_30
            2021-06-13 11:17:15.724  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: InitialSpannung 0 gesetzt auf 80%= 1.2
            2021-06-13 11:17:15.724  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: InitialSpannung 1 gesetzt auf 80%= 2.4
            2021-06-13 11:17:15.725  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: registered 0 subscriptions and 0 schedules
            2021-06-13 11:17:15.740  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: CreateStates fertig!
            2021-06-13 11:17:15.740  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching main()
            2021-06-13 11:17:15.740  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching init()
            2021-06-13 11:17:15.741  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: BattMinLimit Value conversion - success
            2021-06-13 11:17:15.741  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.742  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.742  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 0 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE99AD2C3.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.742  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.743  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.743  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 1 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE99AD8D7.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.743  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.744  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.744  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 2 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE99AD8DF.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.745  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.745  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.745  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 3 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE9A085C5.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.745  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.746  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.746  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 4 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE9A0966C.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.746  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.747  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.747  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 5 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE9A0967C.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.747  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.747  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.748  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 6 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE9A096D3.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.748  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.748  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.748  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 7 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE9A096D6.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.749  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.749  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.750  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 8 BatterieSpannung_15 found at hmip.0.devices.3014F711A000091A499214EF.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.750  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.751  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.751  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 9 BatterieSpannung_15 found at hmip.0.devices.3014F711A0000A9709904FDE.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.751  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.751  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.752  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 10 BatterieSpannung_15 found at hmip.0.devices.3014F711A0000ADA49920925.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.752  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.752  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.752  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 11 BatterieSpannung_15 found at hmip.0.devices.3014F711A0000E9BE998C39B.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.753  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.753  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.753  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 12 BatterieSpannung_15 found at hmip.0.devices.3014F711A0000E9BE998C56B.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.753  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.754  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.754  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 13 BatterieSpannung_15 found at hmip.0.devices.3014F711A0000E9BE998C6F1.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.754  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.754  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.755  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 14 BatterieSpannung_15 found at hmip.0.devices.3014F711A0000EDBE98B96D5.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.755  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.755  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.755  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 15 BatterieSpannung_15 found at hmip.0.devices.3014F711A0001898A993D7D5.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.755  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.756  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.756  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 16 BatterieSpannung_15 found at hmip.0.devices.3014F711A000189BE98FF201.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.756  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.757  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.757  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 17 BatterieSpannung_15 found at hmip.0.devices.3014F711A000189BE98FF2A1.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.757  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.757  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.758  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 18 BatterieSpannung_15 found at hue.0.Hue_motion_Vorzimmer.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.758  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.758  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.759  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 19 BatterieSpannung_15 found at hue.0.Hue_motion_Vorzimmer_Bild.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.759  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.759  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.759  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 20 BatterieSpannung_15 found at hue.0.Hue_temperature_sensor_1.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.760  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.760  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.760  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 21 BatterieSpannung_15 found at hue.0.Hue_temperature_sensor_2.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.760  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.761  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.761  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 22 BatterieSpannung_15 found at hue.0.Hue_dimmer_Iris_Peter_zzzz.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.761  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.761  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.761  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 23 BatterieSpannung_15 found at hue.0.Hue_ambient_light_sensor_2.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.762  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.762  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.762  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 24 BatterieSpannung_15 found at hue.0.Hue_ambient_light_sensor_1.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.762  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.763  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.763  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 25 BatterieSpannung_15 found at hue.0.Hue_Dimmer_Wohnzimmer.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.763  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.763  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.764  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 26 BatterieSpannung_15 found at hue.0.Hue_Dimmer_Vorzimmer_2.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.764  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=100
            2021-06-13 11:17:15.764  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=100 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.764  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 27 BatterieSpannung_15 found at hue.0.Hue_Dimmer_Vorzimmer.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.764  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=98
            2021-06-13 11:17:15.765  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=98 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.765  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 28 BatterieSpannung_15 found at hue.0.Hue_Dimmer_Iris_Peter.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.47 SensorProzent= 98
            2021-06-13 11:17:15.765  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=78
            2021-06-13 11:17:15.765  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=78 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.766  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 29 BatterieSpannung_15 found at hue.0.Hue_Dimmer_Iris_Krisztina.battery Umax= 1.5 BattMinLimit=1.2 Val= 1.17 SensorProzent= 78
            2021-06-13 11:17:15.766  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=33
            2021-06-13 11:17:15.766  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=33 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.767  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 30 BatterieSpannung_15 found at netatmo.0.VIE-(VIE-WZ).VIE-BZ.BatteryStatus Umax= 1.5 BattMinLimit=1.2 Val= 0.495 SensorProzent= 33
            2021-06-13 11:17:15.767  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=58
            2021-06-13 11:17:15.768  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=58 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.768  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 31 BatterieSpannung_15 found at netatmo.0.VIE-(VIE-WZ).VIE-KÜCHE.BatteryStatus Umax= 1.5 BattMinLimit=1.2 Val= 0.87 SensorProzent= 58
            2021-06-13 11:17:15.769  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=83
            2021-06-13 11:17:15.769  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=83 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.769  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 32 BatterieSpannung_15 found at netatmo.0.VIE-(VIE-WZ).VIE-OUTDOOR.BatteryStatus Umax= 1.5 BattMinLimit=1.2 Val= 1.2449999999999999 SensorProzent= 83
            2021-06-13 11:17:15.769  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=number getState(Sensor[counter]).val=63
            2021-06-13 11:17:15.770  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=63 TempUnit=% TypeOf=number
            2021-06-13 11:17:15.770  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 33 BatterieSpannung_15 found at netatmo.0.VIE-(VIE-WZ).VIE-SZ.BatteryStatus Umax= 1.5 BattMinLimit=1.2 Val= 0.945 SensorProzent= 63
            2021-06-13 11:17:15.770  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.771  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.771  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 34 BatterieSpannung_15 found at hmip.0.devices.3014F711A00000DBE99AD20D.channels.0.lowBat Umax= 1.5 BattMinLimit=1.2 Val= 1.5 SensorProzent= 100
            2021-06-13 11:17:15.771  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=string getState(Sensor[counter]).val=NORMAL
            2021-06-13 11:17:15.771  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=NaN TempUnit= TypeOf=number
            2021-06-13 11:17:15.771  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 35 BatterieSpannung_15 found at tado.0.650776.Rooms.12.devices.VA1891567616.info.batteryState Umax= 1.5 BattMinLimit=1.2 Val= NaN SensorProzent= NaN
            2021-06-13 11:17:15.772  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: BattMinLimit Value conversion - success
            2021-06-13 11:17:15.772  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: existsState(Sensor[counter])=true typeof (getState(Sensor[counter]).val)=boolean getState(Sensor[counter]).val=false
            2021-06-13 11:17:15.772  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Tempval=false TempUnit=undefined TypeOf=boolean
            2021-06-13 11:17:15.772  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: 36 BatterieSpannung_30 found at hmip.0.devices.3014F711A00000DBE9A0966C.channels.0.unreach Umax= 3 BattMinLimit=2.4 Val= 3 SensorProzent= 100
            2021-06-13 11:17:15.774  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching CheckDeadBatt()
            2021-06-13 11:17:15.775  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_motion_Vorzimmer is possibly dead, searching for second check
            2021-06-13 11:17:15.775  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_motion_Vorzimmer has second check, now checking
            2021-06-13 11:17:15.775  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=28 Device hue.0.Hue_motion_Vorzimmer second check at  hue.0.Hue_motion_Vorzimmer.reachable
            2021-06-13 11:17:15.775  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_motion_Vorzimmer seems to be really dead
            2021-06-13 11:17:15.775  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.776  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.776  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Vorzimmer bei Gerät Hue motion Vorzimmer
            2021-06-13 11:17:15.776  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_motion_Vorzimmer_Bild is possibly dead, searching for second check
            2021-06-13 11:17:15.777  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_motion_Vorzimmer_Bild has second check, now checking
            2021-06-13 11:17:15.777  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=29 Device hue.0.Hue_motion_Vorzimmer_Bild second check at  hue.0.Hue_motion_Vorzimmer_Bild.reachable
            2021-06-13 11:17:15.777  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_motion_Vorzimmer_Bild seems to be really dead
            2021-06-13 11:17:15.777  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.777  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.778  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Vorzimmer bei Gerät Hue motion Vorzimmer Bild
            2021-06-13 11:17:15.778  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_temperature_sensor_1 is possibly dead, searching for second check
            2021-06-13 11:17:15.778  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_temperature_sensor_1 has second check, now checking
            2021-06-13 11:17:15.778  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=30 Device hue.0.Hue_temperature_sensor_1 second check at  hue.0.Hue_temperature_sensor_1.reachable
            2021-06-13 11:17:15.778  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_temperature_sensor_1 seems to be really dead
            2021-06-13 11:17:15.778  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.779  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.779  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Vorzimmer bei Gerät Hue temperature sensor 1
            2021-06-13 11:17:15.779  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_temperature_sensor_2 is possibly dead, searching for second check
            2021-06-13 11:17:15.779  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_temperature_sensor_2 has second check, now checking
            2021-06-13 11:17:15.780  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=31 Device hue.0.Hue_temperature_sensor_2 second check at  hue.0.Hue_temperature_sensor_2.reachable
            2021-06-13 11:17:15.780  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_temperature_sensor_2 seems to be really dead
            2021-06-13 11:17:15.780  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.780  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.780  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Vorzimmer bei Gerät Hue temperature sensor 2
            2021-06-13 11:17:15.780  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_dimmer_Iris_Peter_zzzz is possibly dead, searching for second check
            2021-06-13 11:17:15.781  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_dimmer_Iris_Peter_zzzz has second check, now checking
            2021-06-13 11:17:15.781  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=27 Device hue.0.Hue_dimmer_Iris_Peter_zzzz second check at  hue.0.Hue_dimmer_Iris_Peter_zzzz.reachable
            2021-06-13 11:17:15.781  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_dimmer_Iris_Peter_zzzz seems to be really dead
            2021-06-13 11:17:15.781  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.781  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.782  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Schlafzimmer bei Gerät Hue dimmer Iris Peter zzzz
            2021-06-13 11:17:15.782  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_ambient_light_sensor_2 is possibly dead, searching for second check
            2021-06-13 11:17:15.782  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_ambient_light_sensor_2 has second check, now checking
            2021-06-13 11:17:15.782  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=26 Device hue.0.Hue_ambient_light_sensor_2 second check at  hue.0.Hue_ambient_light_sensor_2.reachable
            2021-06-13 11:17:15.782  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_ambient_light_sensor_2 seems to be really dead
            2021-06-13 11:17:15.782  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.783  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.783  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Vorzimmer bei Gerät Hue ambient light sensor 2
            2021-06-13 11:17:15.783  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_ambient_light_sensor_1 is possibly dead, searching for second check
            2021-06-13 11:17:15.783  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_ambient_light_sensor_1 has second check, now checking
            2021-06-13 11:17:15.783  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=25 Device hue.0.Hue_ambient_light_sensor_1 second check at  hue.0.Hue_ambient_light_sensor_1.reachable
            2021-06-13 11:17:15.783  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_ambient_light_sensor_1 seems to be really dead
            2021-06-13 11:17:15.784  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.784  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.784  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Vorzimmer bei Gerät Hue ambient light sensor 1
            2021-06-13 11:17:15.784  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_Dimmer_Wohnzimmer is possibly dead, searching for second check
            2021-06-13 11:17:15.784  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_Dimmer_Wohnzimmer has second check, now checking
            2021-06-13 11:17:15.785  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=24 Device hue.0.Hue_Dimmer_Wohnzimmer second check at  hue.0.Hue_Dimmer_Wohnzimmer.reachable
            2021-06-13 11:17:15.785  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_Dimmer_Wohnzimmer seems to be really dead
            2021-06-13 11:17:15.785  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.785  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.785  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Wohnzimmer bei Gerät Hue Dimmer Wohnzimmer
            2021-06-13 11:17:15.786  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_Dimmer_Vorzimmer_2 is possibly dead, searching for second check
            2021-06-13 11:17:15.786  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_Dimmer_Vorzimmer_2 has second check, now checking
            2021-06-13 11:17:15.786  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=23 Device hue.0.Hue_Dimmer_Vorzimmer_2 second check at  hue.0.Hue_Dimmer_Vorzimmer_2.reachable
            2021-06-13 11:17:15.786  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_Dimmer_Vorzimmer_2 seems to be really dead
            2021-06-13 11:17:15.786  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.786  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.787  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Vorzimmer bei Gerät Hue Dimmer Vorzimmer 2
            2021-06-13 11:17:15.787  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_Dimmer_Vorzimmer is possibly dead, searching for second check
            2021-06-13 11:17:15.787  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_Dimmer_Vorzimmer has second check, now checking
            2021-06-13 11:17:15.787  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=22 Device hue.0.Hue_Dimmer_Vorzimmer second check at  hue.0.Hue_Dimmer_Vorzimmer.reachable
            2021-06-13 11:17:15.787  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_Dimmer_Vorzimmer seems to be really dead
            2021-06-13 11:17:15.787  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.788  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.788  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Vorzimmer bei Gerät Hue Dimmer Vorzimmer
            2021-06-13 11:17:15.788  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_Dimmer_Iris_Peter is possibly dead, searching for second check
            2021-06-13 11:17:15.788  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Device hue.0.Hue_Dimmer_Iris_Peter has second check, now checking
            2021-06-13 11:17:15.789  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: z=21 Device hue.0.Hue_Dimmer_Iris_Peter second check at  hue.0.Hue_Dimmer_Iris_Peter.reachable
            2021-06-13 11:17:15.789  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Second check failed, hue.0.Hue_Dimmer_Iris_Peter seems to be really dead
            2021-06-13 11:17:15.789  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Peter...he's dead
            2021-06-13 11:17:15.789  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching Meldung()
            2021-06-13 11:17:15.789  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Ausfall oder disconnect im Schlafzimmer bei Gerät Hue Dimmer Iris Peter
            2021-06-13 11:17:15.790  - info: javascript.0 (6146) script.js.common.System.Batteriestatus: Reaching MakeTable
            2021-06-13 11:17:15.813  - warn: javascript.0 (6146) Object "tado.0.650776.Rooms.12.devices.VA1891567616.info" does not exist
            2021-06-13 11:17:15.816  - error: javascript.0 (6146) Error in callback: TypeError: Cannot read property 'common' of null
            2021-06-13 11:17:15.817  - error: javascript.0 (6146)     at MakeTable (script.js.common.System.Batteriestatus:548:111)
            2021-06-13 11:17:15.817  - error: javascript.0 (6146)     at CheckDeadBatt (script.js.common.System.Batteriestatus:351:13)
            2021-06-13 11:17:15.817  - error: javascript.0 (6146)     at main (script.js.common.System.Batteriestatus:235:5)
            2021-06-13 11:17:15.817  - error: javascript.0 (6146)     at Object.<anonymous> (script.js.common.System.Batteriestatus:106:13)
            2021-06-13 11:17:15.817  - error: javascript.0 (6146)     at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1976:38)
            2021-06-13 11:17:15.818  - error: javascript.0 (6146)     at processImmediate (internal/timers.js:463:21)
            2021-06-13 11:17:16.508  - info: weatherunderground.0 (12922) Terminated (NO_ERROR): Without reason
            

            Mod-Edit: Code in </> Code-Tag gepackt!

            1 Antwort Letzte Antwort
            0
            • P Pittini

              @papaechokilo Seltsam. Kannste bitte mal im Skript logging aktivieren und mir nen komplettes startlog posten?

              P Offline
              P Offline
              papaechokilo
              schrieb am zuletzt editiert von papaechokilo
              #426

              @pittini ich kann TADO auch aus dem Skript herausnehmen. Ist kein Problem, da ich die TADO Werte einzeln separat in der VIS anzeige.90BBA903-02BB-4710-AACA-E8AA334CBA96.jpeg

              P 1 Antwort Letzte Antwort
              0
              • P Pittini

                @papaechokilo Seltsam. Kannste bitte mal im Skript logging aktivieren und mir nen komplettes startlog posten?

                P Offline
                P Offline
                papaechokilo
                schrieb am zuletzt editiert von papaechokilo
                #427

                Doppel Beitrag - Inhalt von mir entfernt!

                1 Antwort Letzte Antwort
                0
                • P papaechokilo

                  @pittini ich kann TADO auch aus dem Skript herausnehmen. Ist kein Problem, da ich die TADO Werte einzeln separat in der VIS anzeige.90BBA903-02BB-4710-AACA-E8AA334CBA96.jpeg

                  P Offline
                  P Offline
                  Pittini
                  Developer
                  schrieb am zuletzt editiert von
                  #428

                  @papaechokilo sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

                  ich kann TADO auch aus dem Skript herausnehmen. Ist kein Problem, da ich die TADO Werte einzeln separat in der VIS anzeige.

                  Schon klar, aber is ja nich Sinn der Sache, das muß das Skript können, hab grad nur nich so viel Zeit, aber werd das mal nachstellen, kann ja nich sein.

                  F 1 Antwort Letzte Antwort
                  0
                  • P Pittini

                    @papaechokilo sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

                    ich kann TADO auch aus dem Skript herausnehmen. Ist kein Problem, da ich die TADO Werte einzeln separat in der VIS anzeige.

                    Schon klar, aber is ja nich Sinn der Sache, das muß das Skript können, hab grad nur nich so viel Zeit, aber werd das mal nachstellen, kann ja nich sein.

                    F Offline
                    F Offline
                    Frank579
                    schrieb am zuletzt editiert von Frank579
                    #429

                    @pittini
                    Hallo erst mal danke für das tolle Skipt :+1:
                    mir ist jetzt schon einige male aufgefallen das der Datenpunkt LastMessage nicht befüllt wird.
                    Hatte gerade wieder den Fall. habe mal einen Sceenshot von den DP`s und der vis Tabelle gemacht, wenn ich das skipt jetzt neu starte passt es wieder :) evtl. kannst du ja mal schauen.
                    Ist jetzt nicht tragich da er ja in der Vis Rot blinkt sieht man ja das was ist, muss halt nur in der Tabelle schauen wer es ist ;)
                    vis.png Batt DP.png

                    P 1 Antwort Letzte Antwort
                    0
                    • F Frank579

                      @pittini
                      Hallo erst mal danke für das tolle Skipt :+1:
                      mir ist jetzt schon einige male aufgefallen das der Datenpunkt LastMessage nicht befüllt wird.
                      Hatte gerade wieder den Fall. habe mal einen Sceenshot von den DP`s und der vis Tabelle gemacht, wenn ich das skipt jetzt neu starte passt es wieder :) evtl. kannst du ja mal schauen.
                      Ist jetzt nicht tragich da er ja in der Vis Rot blinkt sieht man ja das was ist, muss halt nur in der Tabelle schauen wer es ist ;)
                      vis.png Batt DP.png

                      P Offline
                      P Offline
                      Pittini
                      Developer
                      schrieb am zuletzt editiert von
                      #430

                      @frank579 Mach da bitte ein Issue bei Git, sonst geht das unter da ich grad kaum Zeit hab.

                      F 1 Antwort Letzte Antwort
                      0
                      • P Pittini

                        @frank579 Mach da bitte ein Issue bei Git, sonst geht das unter da ich grad kaum Zeit hab.

                        F Offline
                        F Offline
                        Frank579
                        schrieb am zuletzt editiert von
                        #431

                        @pittini danke für die schnelle Antwort 👍 okay muss ich mich dann aber mal rein arbeiten 🙈 hab ich noch nie gemacht ... Kommt aber ...

                        1 Antwort Letzte Antwort
                        0
                        • B Offline
                          B Offline
                          bkuerby
                          schrieb am zuletzt editiert von
                          #432

                          @Pittini Super Script. Läuft ohne Probleme. Ich nutze mehrere Telegram Instanzen bzw. möchte die Meldung auf einen User begrenzen. Für Alexa und Pushover gibt es Einstellmöglichkeiten im "User-Bereich" am Anfang des Scriptes. Für Telegram habe ich dort nichts gefunden und direkt im Code geändert. Habe ich etwas übersehen?

                          P 1 Antwort Letzte Antwort
                          0
                          • B bkuerby

                            @Pittini Super Script. Läuft ohne Probleme. Ich nutze mehrere Telegram Instanzen bzw. möchte die Meldung auf einen User begrenzen. Für Alexa und Pushover gibt es Einstellmöglichkeiten im "User-Bereich" am Anfang des Scriptes. Für Telegram habe ich dort nichts gefunden und direkt im Code geändert. Habe ich etwas übersehen?

                            P Offline
                            P Offline
                            Pittini
                            Developer
                            schrieb am zuletzt editiert von Pittini
                            #433

                            @bkuerby sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

                            @Pittini Super Script. Läuft ohne Probleme. Ich nutze mehrere Telegram Instanzen bzw. möchte die Meldung auf einen User begrenzen. Für Alexa und Pushover gibt es Einstellmöglichkeiten im "User-Bereich" am Anfang des Scriptes. Für Telegram habe ich dort nichts gefunden und direkt im Code geändert. Habe ich etwas übersehen?

                            Nein, da haste nix übersehen denk ich. Ich nutze das halt nicht selber (also das Skript schon, nur die Messaging Optionen nicht), sondern bau das ein wenn von Usern gewünscht. Wenn Du da was brauchst und es sogar schon umgesetzt hast, dann lass mir die Änderung zukommen und ich gugg mal das fürs nächste update zu übernehmen.

                            B 1 Antwort Letzte Antwort
                            0
                            • P Pittini

                              @bkuerby sagte in [Vorlage] Generische Batteriestandsüberwachung + Vis-ausgabe:

                              @Pittini Super Script. Läuft ohne Probleme. Ich nutze mehrere Telegram Instanzen bzw. möchte die Meldung auf einen User begrenzen. Für Alexa und Pushover gibt es Einstellmöglichkeiten im "User-Bereich" am Anfang des Scriptes. Für Telegram habe ich dort nichts gefunden und direkt im Code geändert. Habe ich etwas übersehen?

                              Nein, da haste nix übersehen denk ich. Ich nutze das halt nicht selber (also das Skript schon, nur die Messaging Optionen nicht), sondern bau das ein wenn von Usern gewünscht. Wenn Du da was brauchst und es sogar schon umgesetzt hast, dann lass mir die Änderung zukommen und ich gugg mal das fürs nächste update zu übernehmen.

                              B Offline
                              B Offline
                              bkuerby
                              schrieb am zuletzt editiert von bkuerby
                              #434

                              @pittini Aber gerne doch. Hier die Änderungen oder möchtest Du lieber das komplette Script? Ist getestet und hat funktioniert.

                              //Zeile 14 im Original-Script v1.8.1 gelöscht, jetzt im Telegram-Bereich
                              
                              //Eingefügt im Userbereich
                              //Variablen für Telegram
                              const UseTelegram = true; // Sollen Nachrichten via Telegram gesendet werden?
                              const TelegramInstance = "telegram.1"; //Telegraminstanz welche genutzt werden soll angeben
                              const TelegramUser = ''; //Welche User sollen die Nachricht bekommen? Leer lassen für alle User. Mehrere User getrennt durch Komma.
                              
                              //Ab Zeile 256 im Original-Script v1.8.1 angepasst:
                                  if (UseTelegram) {
                                      sendTo(TelegramInstance, "send", {
                                          user: TelegramUser,
                                          text: msg
                                      });
                                  };
                              
                              P 1 Antwort Letzte Antwort
                              0
                              • B bkuerby

                                @pittini Aber gerne doch. Hier die Änderungen oder möchtest Du lieber das komplette Script? Ist getestet und hat funktioniert.

                                //Zeile 14 im Original-Script v1.8.1 gelöscht, jetzt im Telegram-Bereich
                                
                                //Eingefügt im Userbereich
                                //Variablen für Telegram
                                const UseTelegram = true; // Sollen Nachrichten via Telegram gesendet werden?
                                const TelegramInstance = "telegram.1"; //Telegraminstanz welche genutzt werden soll angeben
                                const TelegramUser = ''; //Welche User sollen die Nachricht bekommen? Leer lassen für alle User. Mehrere User getrennt durch Komma.
                                
                                //Ab Zeile 256 im Original-Script v1.8.1 angepasst:
                                    if (UseTelegram) {
                                        sendTo(TelegramInstance, "send", {
                                            user: TelegramUser,
                                            text: msg
                                        });
                                    };
                                
                                P Offline
                                P Offline
                                Pittini
                                Developer
                                schrieb am zuletzt editiert von
                                #435

                                @bkuerby Und zack isses drin, V1.8.2. Danke.

                                1 Antwort Letzte Antwort
                                0
                                • J Offline
                                  J Offline
                                  JohnnyBahama
                                  schrieb am zuletzt editiert von
                                  #436

                                  Habe mir das skript nach Anleitung eingerichtet, aber ich bekomme folgende Fehlermeldung:

                                  22:10:33.513	error	javascript.0 (24872) at CheckNextLowBatt (script.js.common.Batteriestatus:379:91)
                                  22:10:33.513	error	javascript.0 (24872) at main (script.js.common.Batteriestatus:251:5)
                                  22:10:33.514	error	javascript.0 (24872) at Object.<anonymous> (script.js.common.Batteriestatus:110:13)
                                  

                                  Und im Log:

                                  javascript.0 2021-10-07 21:10:33.515	error	at processImmediate (internal/timers.js:463:21)
                                  javascript.0 2021-10-07 21:10:33.514	error	at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1988:38)
                                  javascript.0 2021-10-07 21:10:33.514	error	at Object.<anonymous> (script.js.common.Batteriestatus:110:13)
                                  javascript.0 2021-10-07 21:10:33.513	error	at main (script.js.common.Batteriestatus:251:5)
                                  javascript.0 2021-10-07 21:10:33.513	error	at CheckNextLowBatt (script.js.common.Batteriestatus:379:91)
                                  javascript.0 2021-10-07 21:10:33.511	error	Error in callback: TypeError: Cannot read property 'value' of undefined
                                  

                                  Und hier das Skript:

                                  const Version = "1.8.2"; // Batterieüberwachungsskript Stand 26.06.2021 - Git: https://github.com/Pittini/iobroker-Batterienauswertung - Forum: https://forum.iobroker.net/topic/31676/vorlage-generische-batteriestandsüberwachung-vis-ausgabe
                                  //Überwacht Batteriespannungen beliebig vieler Geräte 
                                  log("starting Batterieüberwachung V." + Version);
                                  //WICHTIG!!!
                                  //Vorraussetzungen: Den Gerätechannels müssen Räume, sowie die Funktion "BatterieSpannung_xx" für jeden entsprechenden Batteriespannungs Datenpunkt zugewiesen sein.
                                  //Bitte unbedingt Anleitung beachten
                                  // Nach der Zuweisung unbedingt den JS Adpter neu starten!
                                  
                                  //Grund Einstellungen
                                  const praefix = "javascript.0.BatterieUeberwachung."; //Grundpfad für Script DPs
                                  const logging = false; //Logging aktivieren?
                                  const FunktionBaseName = "BatterieSpannung_"; //Name der Funktion welche für die Batterieüberwachung genutzt wird
                                  const DeadFunktionName = "DeadCheck"; //Name der Funktion welche für den DeadCheck genutzt wird
                                  const UseMail = false; // Sollen Nachrichten via Mail gesendet werden?
                                  const UseSay = false; // Sollen Nachrichten via Say ausgegeben werden? Funktion des Authors, sollte bei Anwendern auf false gesetzt werden.
                                  const UseEventLog = false; // Sollen Nachrichten ins Eventlog geschreiben werden? Funktion des Authors, sollte bei Anwendern auf false gesetzt werden.
                                  const UsePopUp = false // Soll PopUp angezeigt werden? Funktion des Authors, sollte bei Anwendern auf false gesetzt werden.
                                  const ProzMeansLive = true; //Zeigen Prozentwerte des Gerätedatenpunktes Batteriekapazität oder restliche Lebensdauer?
                                  let DeadIsAfter = 360; // In Minuten - Zeit nach der ein Gerät als "tot" gewertet wird wenn keine Statusänderung (ts) erfolgte.
                                  const NotifyDeadDevices = true; //Sollen "tote" Geräte gemeldet werden?
                                  const NotifyWarnDevices = true;//Sollen Geräte unter Limit gemeldet werden?
                                  const DeconzNameFromDP = false; //Nimmt für Deconz den Namen aus dem Datenpunkt statt aus dem übergeordnetem Channel
                                  
                                  //Variablen für Alexa
                                  const UseAlexa = true; // Sollen Nachrichten via Alexa ausgegeben werden?
                                  const AlexaInstance = "alexa2.0";
                                  const AlexaId = "G090U61091870A1W"; // Die Alexa Seriennummer
                                  const AlexaVolume = "50"; // Lautstärke der Nachrichten. Wert von 1 bis 100
                                  
                                  //Variablen für Pushover
                                  const UsePushover = true; //Sollen Nachrichten via Pushover versendet werden?
                                  const PushoverDevice = 'All'; //Welches Gerät soll die Nachricht bekommen
                                  const PushoverInstance = "pushover.0"; //Pushoverinstanz welche genutzt werden soll angeben
                                  const PushOverTitle = 'Batterien überprüfen';
                                  
                                  //Variablen für Telegram
                                  const UseTelegram = false; // Sollen Nachrichten via Telegram gesendet werden?
                                  const TelegramInstance = "telegram.1"; //Telegraminstanz welche genutzt werden soll angeben
                                  const TelegramUser = ''; //Welche User sollen die Nachricht bekommen? Leer lassen für alle User. Mehrere User getrennt durch Komma.
                                  
                                  //Tabellen Einstellungen
                                  const TblOkBgColor = "#4caf50"; //Hintergrundfarbe für Batteriestatus Ok
                                  const TblInfoBgColor = "#ffc107"; //Hintergrundfarbe für Batteriestatus Info, also die leerste Batterie welche noch nicht das Limit unterschreitet
                                  const TblWarnBgColor = "#f44336"; //Hintergrundfarbe für Batteriestatus Warnung, also jene Batterie welche unter das Limit kam.
                                  const TblDeadBgColor = "grey"; //Hintergrundfarbe für Batterie/Geräte Status tot.
                                  const HeadBgColor = "dimgrey"; //Hintergrundfarbe des Tabellenkopfes
                                  const FontColor = "black"; //Textfarbe für Tabelleninhalt
                                  const HeadFontColor = "white"; //Textfarbe für Tabellenkopf
                                  const TblShowLfdCol = true; //Tabellenspalte mit laufender Nummer anzeigen?
                                  const TblShowDeviceIDCol = true; //Tabellenspalte mit Geräte ID anzeigen?
                                  const TblShowDeviceNameCol = true; //Tabellenspalte mit Gerätenamen anzeigen?
                                  const TblShowRoomCol = true; //Tabellenspalte mit Raum anzeigen?
                                  const TblShowUmaxCol = true; //Tabellenspalte mit Batterie Nennspannung anzeigen? 
                                  const TblShowUistCol = true; //Tabellenspalte mit aktueller Batteriespannung anzeigen?
                                  const TblShowUlimitCol = true; //Tabellenspalte mit unterer Batterielimit Spannung anzeigen?
                                  const TblShowProzbatCol = true; //Tabellenspalte mit Batteriestand in Prozent anzeigen?
                                  const TblShowProzliveCol = true; //Tabellenspalte mit Restlebensdauer unter Berücksichtigung der Limitspannung in Prozent anzeigen? Beispiel: Batterie hat 3V Nennspannung, Limit ist bei 2V, aktueller Batteriestand ist 2.5V, dann wäre die Restlebensdauer 50%
                                  const TblShowStatusCol = true; //Tabellenspalte mit Status ausgeben?
                                  const TblShowHasDeadCheck = true; //Tabellenspalte mit DeadCheckstatus ausgeben?
                                  
                                  //Ab hier nix mehr ändern
                                  /** @type {{ id: string, initial: any, forceCreation: boolean, common: iobJS.StateCommon }[]} */
                                  const States = []; //States Array initialisieren
                                  let DpCount = 0; //Zähler für anzulegende Datenpunkte
                                  const Sensor = [] //Sensoren Array initialisieren
                                  const BatteryMinLimitDp = []; //Array mit den generierten MinLimit Einstellungsdatenpunkten
                                  const WelcheFunktionVerwenden = []; // Array mit allen Einträgen aus Funktionen welche den FunktionBaseName beinhalten
                                  let AllBatterysOk = true;
                                  let LastMessageSeparator = "<br>";
                                  let NextExpectedLowBatt = "";
                                  let EmptyBatCount = 0;
                                  let DeadDeviceCount = 0;
                                  let TickerObj;
                                  let IsInit = true;
                                  //Datenpunkte anlegen in javascript.0.BatterieUeberwachung.
                                  States[DpCount] = { id: praefix + "AllBatterysOk", initial: true, forceCreation: false, common: { read: true, write: false, name: "Alle Batterien Ok?", type: "boolean", role: "state", def: false } }; //
                                  DpCount++;
                                  States[DpCount] = { id: praefix + "LastMessage", initial: "", forceCreation: false, common: { read: true, write: false, name: "Letzte Warnmeldung", type: "string", role: "state", def: "" } }; //
                                  DpCount++;
                                  FillWelcheFunktionVerwenden(); //Vorab Funktionen mit Umax Spannungen einlesen da diese für ID und Namen der MinLimit States benötigt werden
                                  
                                  for (let x = 0; x < WelcheFunktionVerwenden.length; x++) {
                                      let dummy = WelcheFunktionVerwenden[x].slice(FunktionBaseName.length) //Letzten Zeichen aus Funktionsnamen extrahieren
                                      let VoltInitial = CreateUmaxValueFromString(x) //Extrahierte Zeichen zu Kommazahl wandeln 
                                      VoltInitial = VoltInitial / 100 * 80; //Initialwert für Limit berechnen
                                      if (logging) log("InitialSpannung " + x + " gesetzt auf 80%= " + VoltInitial);
                                      States[DpCount] = { id: praefix + "BatteryMinLimit_" + dummy, initial: VoltInitial, forceCreation: false, common: { read: true, write: true, name: "Unteres Limit für Warnmeldung bei " + toFloat(dummy.slice(0, dummy.length - 1) + "." + dummy.slice(-1)) + "V Geräten", type: "number", role: "value", unit: "V", def: 2.6 } }; //
                                      BatteryMinLimitDp[x] = "BatteryMinLimit_" + dummy;
                                      DpCount++;
                                  };
                                  States[DpCount] = { id: praefix + "NextExpectedLowBatt", initial: "", forceCreation: false, common: { read: true, write: false, name: "Vorraussichtlich nächste zu wechselnde Batterie", type: "string", role: "state", def: "" } }; //
                                  DpCount++;
                                  States[DpCount] = { id: praefix + "OverviewTable", initial: "", forceCreation: false, common: { read: true, write: false, name: "Einfache HTML Übersichtstabelle", type: "string", role: "state", def: "" } }; //
                                  DpCount++;
                                  States[DpCount] = { id: praefix + "EmptyBatCount", initial: 0, forceCreation: false, common: { read: true, write: false, name: "Zähler für Anzahl der zu wechselnden Batterien", type: "number", role: "state", def: 0 } }; //
                                  DpCount++;
                                  States[DpCount] = { id: praefix + "DeadDeviceCount", initial: 0, forceCreation: false, common: { read: true, write: false, name: "Zähler für Anzahl der nicht mehr aktualisierenden Geräte", type: "number", role: "state", def: 0 } }; //
                                  DpCount++;
                                  States[DpCount] = { id: praefix + "DeviceCount", initial: 0, forceCreation: false, common: { read: true, write: false, name: "Zähler für Anzahl der überwachten Geräte", type: "number", role: "state", def: 0 } }; //
                                  DpCount++;
                                  States[DpCount] = { id: praefix + "DeadCheckCount", initial: 0, forceCreation: false, common: { read: true, write: false, name: "Zähler für Anzahl der gesetzten DeadChecks", type: "number", role: "state", def: 0 } }; //
                                  
                                  //Alle States anlegen, Main aufrufen wenn fertig
                                  let numStates = States.length;
                                  States.forEach(function (state) {
                                      createState(state.id, state.initial, state.forceCreation, state.common, function () {
                                          numStates--;
                                          if (numStates === 0) {
                                              if (logging) log("CreateStates fertig!");
                                              main();
                                          };
                                      });
                                  });
                                  
                                  function CreateUmaxValueFromString(x) {
                                      let dummy = WelcheFunktionVerwenden[x].slice(FunktionBaseName.length) //Aus der Funktionsbezeichnung die letzten Zeichen extrahieren= z.B. 33
                                      return toFloat(dummy.slice(0, dummy.length - 1) + "." + dummy.slice(-1)) //Die extrahierten Zeichen zu einer Kommazahl wandeln= z.B. 3.3
                                  }
                                  
                                  function Init() {
                                      if (logging) log("Reaching init()");
                                      let counter = 0; //Zähler für Devices
                                      let TempVal // Temporärer Sensorwert um nicht mehrere GetStates zu benötigen
                                      let TempUnit //Einheit für Unterscheidung ob % vorliegen
                                      //  let TempLiveWindow //Spannungsfensterbereich
                                      let Funktionen = getEnums('functions'); //Alle Funktionen der Aufzählung in Array Funktionen übertragen
                                      for (let x in Funktionen) {        // loop ueber alle Funktionen
                                          let Funktion = Funktionen[x].name; // Einzelne Funktion aus dem Array
                                          if (typeof Funktion == 'object') Funktion = Funktion.de; //Wenn Rückgabewert ein Objekt ist, ist die Funktion mehrsprachig und es wird die deutsche Bezeichnug verwendet
                                          let members = Funktionen[x].members; //Array mit allen Mitgliedern der Funktion erzeugen
                                          for (let z = 0; z < WelcheFunktionVerwenden.length; z++) { //Loop über alle Funktions welche zu WelcheFunktionVerwenden passen
                                              if (Funktion == WelcheFunktionVerwenden[z]) { //Wenn Function ist WelcheFunktionVerwenden (BatterieSpannung)
                                                  let Umax = CreateUmaxValueFromString(z) //Batteriesollspannung aus der Funktionsbezeichnung extrahieren
                                                  let BattMinLimitTemp = getState(praefix + "BatteryMinLimit_" + WelcheFunktionVerwenden[z].slice(FunktionBaseName.length)).val; //Temporäres (für den jeweiligen Schleifendurchlauf) MinLimit einlesen
                                                  if (typeof (BattMinLimitTemp == "string")) { //Falls MinLimit Wert String ist zu float wandeln
                                                      //log("BattMinLimit Value is String, trying to convert");
                                                      BattMinLimitTemp = parseFloat(BattMinLimitTemp);
                                                      if (typeof (BattMinLimitTemp == "number")) {
                                                          if (logging) log("BattMinLimit Value conversion - success");
                                                      };
                                                  };
                                                  for (let y in members) { // Loop über alle WelcheFunktionVerwenden Members
                                                      Sensor[counter] = {};
                                                      Sensor[counter].id = members[y]; //Treffer in SenorIDarray einlesen
                                                      TempVal = getState(Sensor[counter].id).val;//Wert vom Sensor in Tempval einlesen um wiederholte Getstates zu vermeiden
                                                      if (typeof (TempVal) == "undefined") TempVal = 0; //Bei leeren Feldern 0 setzen um Fehler zu vermeiden
                                                      if (typeof (TempVal) == "string") { //Wenn Wert als String deklariert obwohl Zahl
                                                          if (!isNaN(parseFloat(TempVal))) { //Wenn konvertierung kein NaN ergibt
                                                              TempVal = parseFloat(TempVal); //Konvertieren
                                                          };
                                                      };
                                                      if (logging) log("existsState(Sensor[counter].id)=" + existsState(Sensor[counter].id) + " typeof (getState(Sensor[counter].id).val)=" + typeof (getState(Sensor[counter].id).val) + " getState(Sensor[counter].id).val=" + getState(Sensor[counter].id).val)
                                                      Sensor[counter].state = "";
                                                      Sensor[counter].unit = GetUnit(counter);
                                                      if (logging) log("Tempval=" + TempVal + " TempUnit=" + TempUnit + " TypeOf=" + typeof (TempVal));
                                                      Sensor[counter].uMax = Umax; //Synchrones UmaxArray füllen
                                                      Sensor[counter].batteryMinLimit = BattMinLimitTemp;
                                  
                                                      MainCalc(TempVal, counter)
                                  
                                                      if (Sensor[counter].liveProz > 100) Sensor[counter].liveProz = 100; //Um bei übervollen Batterien mehr als 100% live zu vermeiden
                                                      if (logging) log(counter + " " + Funktion + ' found at ' + members[y] + " Umax= " + Sensor[counter].uMax + " BattMinLimit=" + BattMinLimitTemp + " Val= " + Sensor[counter].value + " SensorProzent= " + Sensor[counter].uProz);
                                                      counter++;
                                                  };
                                                  setState(praefix + "DeviceCount", counter, true);
                                              };
                                          };
                                      };
                                  }
                                  
                                  function MainCalc(TempVal, counter) {
                                      if (logging) log("Reaching MainCalc, TempVal=" + TempVal + " counter=" + counter);
                                  
                                      let TempLiveWindow = Sensor[counter].uMax - Sensor[counter].batteryMinLimit;
                                  
                                      switch (typeof (TempVal)) { //Wenn der Sensorwert bool ist (wenn nur LowBatt mit true/false vom Sensor gemeldet wird)
                                          case "boolean": //Sensorval ist Bool
                                              if (TempVal) { //Bei Lowbat=true
                                                  Sensor[counter].value = 0; //Batt wird als leer definiert und auf 0 gesetzt
                                                  Sensor[counter].uProz = 0; //Prozentwerte aus Umax und Sensorwert errechnen
                                                  Sensor[counter].liveProz = 0; //Lebensprozent auf 0%
                                              }
                                              else {
                                                  Sensor[counter].value = Sensor[counter].uMax; //Batt wird als voll definiert und auf Umax gesetzt
                                                  Sensor[counter].uProz = 100; //Prozentwerte aus Umax und Sensorwert errechnen
                                                  Sensor[counter].liveProz = 100; //Lebensprozent auf 100%
                                              };
                                              break;
                                          case "number": //Sensorval ist Zahl
                                              switch (Sensor[counter].unit) { //Bei Zahlen nach Einheit unterscheiden um % Angaben mit zu verarbeiten
                                                  case "%": //Bei Datenpunkt Unit = %
                                                      //if (logging) log("unit= " + TempUnit + " should be %");
                                                      if (ProzMeansLive) { // Wenn die Prozentangabe bereits Lebensdauer zeigt (Einstellungsoption)
                                                          Sensor[counter].liveProz = TempVal; //Direkt zuweisen aus Sensorwert
                                                          Sensor[counter].value = Sensor[counter].uMax - TempLiveWindow + (TempLiveWindow / 100 * Sensor[counter].liveProz);
                                                          Sensor[counter].uProz = (Sensor[counter].value / Sensor[counter].uMax) * 100 //Errechne Batteriekapazität
                                                      }
                                                      else if (!ProzMeansLive) { //Wenn die Prozentangabe Batteriekapazität darstellt  (Einstellungsoption)
                                                          Sensor[counter].uProz = TempVal; //Batteriekapazität in % bestimmen
                                                          Sensor[counter].value = Sensor[counter].uMax / 100 * Sensor[counter].uProz; //Sensorwert aus Umax und Prozentwert bestimmen
                                                          Sensor[counter].liveProz = (Sensor[counter].value - Sensor[counter].batteryMinLimit) / (Sensor[counter].uMax - Sensor[counter].batteryMinLimit) * 100; //Restlebensdauer in % ermitteln
                                                      };
                                  
                                                      break;
                                                  default: // In allen anderen Fällen
                                                      Sensor[counter].value = TempVal; //Spannung ist Wert vom DP
                                                      Sensor[counter].uProz = Sensor[counter].value / Sensor[counter].uMax * 100; //Prozentwerte aus Umax und Sensorwert errechnen
                                                      Sensor[counter].liveProz = (Sensor[counter].value - Sensor[counter].batteryMinLimit) / (Sensor[counter].uMax - Sensor[counter].batteryMinLimit) * 100; //Restlebensdauer in % ermitteln
                                              };
                                              break;
                                          case "string": //Sensorval ist Text
                                              if (TempVal == "ok" || TempVal == "NORMAL") {
                                                  Sensor[counter].value = Sensor[counter].uMax; //Batt wird als voll definiert und auf Umax gesetzt
                                                  Sensor[counter].uProz = 100; //Prozentwerte aus Umax und Sensorwert errechnen
                                                  Sensor[counter].liveProz = 100; //Lebensprozent auf 100%
                                              }
                                              else { //Bei BatteryState != ok
                                                  Sensor[counter].value = 0; //Batt wird als leer definiert und 0.1 unter MinLimit gesetzt
                                                  Sensor[counter].uProz = 0; //Prozentwerte aus Umax und Sensorwert errechnen
                                                  Sensor[counter].liveProz = 0; //Lebensprozent auf 0%
                                              };
                                              break;
                                          default:
                                      };
                                  
                                  }
                                  
                                  
                                  function FillWelcheFunktionVerwenden() {
                                      if (logging) log("Reaching FillWelcheFunktionVerwenden");
                                      let z = 0;
                                      let Funktionen = getEnums('functions'); //Alle Funktionen der Aufzählung in Array Funktionen übertragen
                                  
                                      for (let x in Funktionen) {        // loop ueber alle Funktionen
                                          let Funktion = Funktionen[x].name; // Einzelne Funktion aus dem Array
                                          if (typeof Funktion == 'object') Funktion = Funktion.de; //Wenn Rückgabewert ein Objekt ist, ist die Funktion mehrsprachig und es wird die deutsche Bezeichnung verwendet
                                          if (Funktion.includes(FunktionBaseName)) {
                                              WelcheFunktionVerwenden[z] = Funktion;
                                              if (logging) log("Found Function " + WelcheFunktionVerwenden[z]);
                                              z++;
                                          };
                                      };
                                  }
                                  
                                  function main() {
                                      if (logging) log("Reaching main()");
                                      Init(); //Alle Werte einlesen, Arrays füllen, fehlende Werte errechnen
                                      if (IsInit) CreateTrigger(); // Trigger erzeugen
                                      CheckAllBatterys(); // Alle Batteriestände prüfen
                                      CheckAllBatterysOk();
                                      CheckNextLowBatt(); // Batterie mit niedrigster Spannung finden
                                      MakeTable(); //HTML Tabelle erzeugen
                                      if (IsInit) Ticker(); //Startet Intervallprüfung für nicht aktualisierende Geräte
                                      IsInit = false;
                                  }
                                  
                                  function Meldung(msg) {
                                      log("Reaching Meldung(), msg=" + msg);
                                      if (UseSay) Say(msg);
                                      if (UseTelegram) {
                                          sendTo(TelegramInstance, "send", {
                                              user: TelegramUser,
                                              text: msg
                                          });
                                      };
                                      if (UseMail) {
                                          sendTo("email", {
                                              html: msg
                                          });
                                      };
                                      if (UseAlexa) {
                                          if (AlexaId != "") setState(AlexaInstance + ".Echo-Devices." + AlexaId + ".Commands.announcement"/*announcement*/, AlexaVolume + "; " + msg);
                                      };
                                      if (UsePushover) {
                                          sendTo(PushoverInstance, {
                                              device: PushoverDevice,
                                              message: msg,
                                              title: PushOverTitle,
                                              priority: 0,
                                              retry: 60,
                                              expire: 600,
                                              html: 1
                                          });
                                      };
                                  
                                      if (logging) log(msg);
                                      if (UseEventLog) WriteEventLog(msg);
                                      if (UsePopUp) ShowPopUp(true, msg, "Batterys", "red");
                                  }
                                  
                                  function CheckDeadBatt() {
                                      if (logging) log("Reaching CheckDeadBatt()");
                                      let jetzt = new Date().getTime();
                                      let Funktionen = getEnums('functions'); //Alle Funktionen der Aufzählung in Array Funktionen übertragen
                                      DeadDeviceCount = 0;
                                      let members;
                                      let counter = 0;
                                      for (let y in Funktionen) {        // loop ueber alle Funktionen
                                          let Funktion = Funktionen[y].name; // Einzelne Funktion aus dem Array
                                          if (typeof Funktion == 'object') Funktion = Funktion.de; //Wenn Rückgabewert ein Objekt ist, ist die Funktion mehrsprachig und es wird die deutsche Bezeichnung verwendet
                                          if (Funktion.includes(DeadFunktionName)) {
                                              members = Funktionen[y].members; //Array mit allen Mitgliedern der Funktion erzeugen
                                          };
                                      };
                                  
                                      for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                          if (existsState(Sensor[x].id)) {
                                              let ParentDeviceId = GetParentId(Sensor[x].id);
                                              Sensor[x].isDead = false;
                                              Sensor[x].hasDeadCheck = false;
                                  
                                              //Check at Extra Function Datapoint DeadCheck
                                              for (let z in members) {
                                                  if (members[z].includes(ParentDeviceId)) {    //Jetzt prüfen ob Funktion DeadCheck innerhalb des Channels
                                                      Sensor[x].hasDeadCheck = true;
                                                      if (logging) log("Device " + ParentDeviceId + " has Deadcheck, now checking");
                                                      if (logging) log("z=" + z + " Device " + ParentDeviceId + " check at  " + members[z]);
                                                      if ((getState(members[z]).ts + (DeadIsAfter * 60 * 1000)) < jetzt) {
                                                          if (logging) log("Deadcheck failed, " + ParentDeviceId + " seems to be dead");
                                                          Sensor[x].isDead = true;
                                                      } else {
                                                          if (logging) log(ParentDeviceId + " is not dead");
                                                          Sensor[x].isDead = false;
                                                      };
                                                      counter++;
                                                  };
                                              };
                                              setState(praefix + "DeadCheckCount", counter, true);
                                  
                                              //Reaction after checks
                                              if (Sensor[x].isDead) {
                                                  if (logging) log("Jim...he's dead")
                                                  if (Sensor[x].state != "dead") { //Wenn Sensor bei vorheriger Prüfung noch nicht tot, Meldung absetzen.
                                                      CheckForAlerts()
                                                  };
                                                  Sensor[x].state = "dead"; //Status auf tot setzen
                                                  DeadDeviceCount++; //Zähler ehöhen
                                              } else {
                                                  if (Sensor[x].state == "dead") { //Wenn Sensor bisher als tot gelistet, aber wieder aktualisiert, Status prüfen
                                                      Sensor[x].state = "ok";
                                                      Sensor[x].isDead = false;
                                                      CheckBatterys(x);
                                                  };
                                              };
                                          } else {
                                              log("CheckDeadBatt() State for " + x + " doesnt exists");
                                          };
                                  
                                          if (x == Sensor.length - 1) { //Ausführung erst wenn Schleife komplett durch ist (async)
                                              setState(praefix + "DeadDeviceCount", DeadDeviceCount, true);
                                              MakeTable();
                                          };
                                      };
                                  }
                                  
                                  function Ticker() {
                                      CheckDeadBatt(); //Auf nicht mehr aktualisierende Geräte seit Zeit x (Einstellung) prüfen
                                      setInterval(function () { // Wenn 
                                          CheckDeadBatt();
                                      }, 60000);
                                  }
                                  
                                  
                                  function CheckNextLowBatt() { //Ermittelt die Batterie mit der geringsten Spannung, ignoriert Batterien welche das Limit bereits unterschritten haben da diese bereits in der LastMessage gemeldet werden
                                      if (logging) log("Reaching CheckNextLowBatt()");
                                  
                                      let LowestBattProz = 100; //Mit 100% initialisieren
                                      let LowestBattIndex = 0;
                                      for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                          if (Sensor[x].state != "warn" && Sensor[x].state != "dead") Sensor[x].state = "ok";
                                          if (Sensor[x].value > Sensor[x].batteryMinLimit) { // Nur Sensoren berücksichtigen die das min Limit noch nicht unterschritten haben
                                              if (Sensor[x].liveProz <= LowestBattProz) { //Wenn Sensorwert kleiner LowestBattProz, LowestBattVal auf neuen Wert setzen um das Gerät mit den wenigsten Prozent zu ermitteln
                                                  LowestBattProz = Sensor[x].liveProz;
                                                  LowestBattIndex = x;
                                              };
                                          };
                                      };
                                  
                                      NextExpectedLowBatt = "Aktuell niedrigster Batteriestand (" + Sensor[LowestBattIndex].value.toFixed(2) + "V): " + GetRoom(LowestBattIndex) + " bei Gerät " + getObject(GetParentId(Sensor[LowestBattIndex].id), "common").common.name;
                                      setState(praefix + "NextExpectedLowBatt", NextExpectedLowBatt, true);
                                      Sensor[LowestBattIndex].state = "info";
                                      if (logging) log(NextExpectedLowBatt);
                                  }
                                  
                                  function CheckAllBatterysOk() {
                                      if (logging) log("Reaching CheckAllBatterysOk");
                                      AllBatterysOk = true;
                                      EmptyBatCount = 0;
                                      for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                          if (Sensor[x].value <= Sensor[x].batteryMinLimit) { // Nur Sensoren berücksichtigen die das min Limit unterschritten haben
                                              AllBatterysOk = false;
                                              EmptyBatCount++; //Alle Sensoren zählen welche das Batt min Limit unterschritten haben
                                          };
                                      };
                                  
                                      if (DeadDeviceCount > 0) AllBatterysOk = false;
                                  
                                      setState(praefix + "EmptyBatCount", EmptyBatCount, true);
                                      setState(praefix + "AllBatterysOk", AllBatterysOk, true);
                                  }
                                  
                                  
                                  let OldTempMsg = "";
                                  function CheckForAlerts() {
                                      if (logging) log("Reaching CheckLastMessage, EmptyBatCount=" + EmptyBatCount + " DeadDeviceCount=" + DeadDeviceCount);
                                      let TempMsg = "";
                                  
                                      for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchgehen
                                          if (Sensor[x].message != "" && NotifyWarnDevices) { //Wenn msg vorhanden und Warnungen aktiv
                                              if (TempMsg == "") {
                                                  TempMsg = Sensor[x].message;
                                              } else {
                                                  TempMsg += LastMessageSeparator + Sensor[x].message;
                                              };
                                          };
                                  
                                          if (Sensor[x].isDead && NotifyDeadDevices) { //Wenn msg vorhanden und Dead Warnungen aktiv
                                              if (TempMsg == "") {
                                                  TempMsg = "Ausfall oder disconnect im " + GetRoom(x) + " bei Gerät " + getObject(GetParentId(Sensor[x].id)).common.name;
                                              } else {
                                                  TempMsg += LastMessageSeparator + "Ausfall oder disconnect im " + GetRoom(x) + " bei Gerät " + getObject(GetParentId(Sensor[x].id)).common.name;
                                              };
                                          };
                                      };
                                  
                                      if (TempMsg == "") {
                                          setState(praefix + "LastMessage", "", true); //Meldung in Datenpunkt LastMessage löschen
                                          if (logging) log("Alle Batterien ok, Lastmessage gelöscht");
                                      } else if (OldTempMsg != TempMsg) {
                                          setState(praefix + "LastMessage", TempMsg, true); //Meldung in Datenpunkt LastMessage schreiben
                                          Meldung(TempMsg);
                                      };
                                      OldTempMsg = TempMsg;
                                  }
                                  
                                  
                                  function CheckBatterys(x) { // Prüfung eines einzelnen Batteriestandes wenn getriggert
                                      if (logging) log("Reaching CheckBatterys(" + x + ") Val=" + Sensor[x].value + " Limit=" + Sensor[x].batteryMinLimit);
                                      if (Sensor[x].value <= Sensor[x].batteryMinLimit) { //Wenn Min. Wert unterschritten
                                          Sensor[x].message = "Batteriestand (" + parseInt(Sensor[x].value * 100) / 100 + " V) unter Limit (" + Sensor[x].batteryMinLimit + " V) im " + GetRoom(x) + " bei Gerät " + getObject(GetParentId(Sensor[x].id)).common.name;
                                          Sensor[x].state = "warn";
                                      }
                                      else {
                                          Sensor[x].state = "ok";
                                          Sensor[x].message = "";
                                      };
                                      CheckAllBatterysOk();
                                      CheckNextLowBatt();
                                      CheckDeadBatt();
                                      CheckForAlerts();
                                      MakeTable();
                                  }
                                  
                                  function CheckAllBatterys() { // Prüfung aller Batteriestände bei Skriptstart
                                      if (logging) log("Reaching CheckAllBatterys() found " + (Sensor.length) + " Devices");
                                      for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                          if (Sensor[x].state == "dead") {
                                              if (logging) log("Sensor[" + x + "] = ist ausgefallen oder disconnected");
                                              Sensor[x].isDead = true;
                                          }
                                          else if (Sensor[x].value <= Sensor[x].batteryMinLimit) { //Wenn Min. Wert unterschritten
                                              if (logging) log("SensorVal[" + x + "] = " + Sensor[x].value + "V, unterschreitet MinLimit von " + Sensor[x].batteryMinLimit + " V");
                                              Sensor[x].message = "Batteriestand (" + parseInt(Sensor[x].value * 100) / 100 + " V) unter Limit (" + Sensor[x].batteryMinLimit + " V) im " + GetRoom(x) + " bei Gerät " + getObject(GetParentId(Sensor[x].id)).common.name;
                                              Sensor[x].state = "warn";
                                          }
                                          else {
                                              if (Sensor[x].state != "info" && Sensor[x].state != "dead") {
                                                  Sensor[x].state = "ok";
                                                  Sensor[x].isDead = false;
                                                  Sensor[x].message = "";
                                              }
                                          };
                                      };
                                      CheckForAlerts();
                                  }
                                  
                                  function GetRoom(x) {  // Raum eines Gerätes ermitteln
                                      let room = getObject(Sensor[x].id, 'rooms').enumNames[0];
                                      if (room == undefined) room = "Nicht zugewiesen";
                                      if (typeof room == 'object') room = room.de;
                                      room = room.replace(/_/g, " "); //Unterstriche durch Leerzeichen ersetzen
                                      return room;
                                  }
                                  
                                  function GetUnit(x) {
                                      let unit = getObject(Sensor[x].id, 'common').common.unit
                                      return unit;
                                  }
                                  
                                  function GetParentId(Id) {
                                      let parentDevicelId;
                                      if (Id.indexOf("deconz.") > -1 || Id.indexOf("hm-rpc.") > -1 || Id.indexOf("shelly.") > -1) { //Wenn deconz, hm-rpc oder shelly dann zwei Ebenen zurück
                                          parentDevicelId = Id.split(".").slice(0, -2).join(".");// Id an den Punkten in Array schreiben (split), die 2 letzten Elemente von hinten entfernen (slice) und den Rest wieder zu String zusammensetzen
                                      }
                                      else if (Id.indexOf("hmip.") > -1) { //Wenn HMIP dann drei Ebenen zurück
                                          parentDevicelId = Id.split(".").slice(0, -3).join(".");// Id an den Punkten in Array schreiben (split), die 3 letzten Elemente von hinten entfernen (slice) und den Rest wieder zu String zusammensetzen
                                      }
                                      else { //Wenn kein deconz, kein HM und kein shelly Adapter, eine Ebene zurück
                                          parentDevicelId = Id.split(".").slice(0, -1).join(".");// Id an den Punkten in Array schreiben (split), das letzte Element von hinten entfernen (slice) und den Rest wieder zu String zusammensetzen
                                      };
                                      if (DeconzNameFromDP && Id.indexOf("deconz.") > -1) parentDevicelId = Id;
                                      //if (logging) log("Id= " + Id + " ParentDeviceId= " + parentDevicelId)
                                      return parentDevicelId;
                                  }
                                  
                                  function MakeTable() {
                                      if (logging) log("Reaching MakeTable");
                                      let BgColor = "";
                                      let style0 = "style='border: 1px solid black; padding-left: 5px; padding-right: 5px; font-size:0.8em; font-weight: normal; text-align: left; color:" + FontColor + "; background-color:"
                                      let style1 = "style='width: 40px; border: 1px solid black; padding-left: 5px; padding-right: 5px; font-size:0.8em; font-weight: normal; text-align: right; color:" + FontColor + "; background-color:"
                                      let headstyle0 = "style='border: 1px solid black; padding-left: 5px; padding-right: 5px; height: 30px; font-size:1.0em; font-weight: bold; text-align: left; color:" + HeadFontColor + "; background-color:"
                                      let headstyle1 = "style='width: 40px; border: 1px solid black; padding-left: 5px; padding-right: 5px; height: 30px; font-size:1.0em; font-weight: bold; text-align: center; color:" + HeadFontColor + "; background-color:"
                                  
                                      let MyTableHead = "<table style='width:100%; border: 1px solid black; border-collapse: collapse;'><tr>";
                                      let MyTable;
                                  
                                      if (TblShowLfdCol) {
                                          MyTableHead += "<th " + headstyle0 + HeadBgColor + "'>lfd</th>";
                                      };
                                      if (TblShowDeviceIDCol) {
                                          MyTableHead += "<th " + headstyle0 + HeadBgColor + "'>Sensor ID</th>";
                                      };
                                      if (TblShowDeviceNameCol) {
                                          MyTableHead += "<th " + headstyle0 + HeadBgColor + "'>Sensor Name</th>";
                                      };
                                      if (TblShowRoomCol) {
                                          MyTableHead += "<th " + headstyle0 + HeadBgColor + "'>Raum</th>";
                                      };
                                      if (TblShowUmaxCol) {
                                          MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>U<br>Nenn</th>";
                                      };
                                      if (TblShowUistCol) {
                                          MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>U<br>Ist</th>";
                                      };
                                      if (TblShowUlimitCol) {
                                          MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>U<br>Limit</th>";
                                      };
                                      if (TblShowProzbatCol) {
                                          MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>%bat</th>";
                                      };
                                      if (TblShowProzliveCol) {
                                          MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>%live</th>";
                                      };
                                      if (TblShowStatusCol) {
                                          MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>Status</th>";
                                      };
                                      if (TblShowHasDeadCheck) {
                                          MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>DC</th>";
                                      };
                                      MyTableHead += "</tr>";
                                      MyTable = MyTableHead + "<tr>";
                                  
                                      for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen 
                                          switch (Sensor[x].state) {
                                              case "ok":
                                                  BgColor = TblOkBgColor;
                                                  break;
                                              case "info":
                                                  BgColor = TblInfoBgColor;
                                                  break;
                                              case "warn":
                                                  BgColor = TblWarnBgColor;
                                                  break;
                                              case "dead":
                                                  BgColor = TblDeadBgColor;
                                                  break;
                                              default:
                                          };
                                  
                                          MyTable += "<tr>";
                                          if (TblShowLfdCol) {
                                              MyTable += "<td " + style0 + BgColor + "'>" + (x + 1) + "</td>";
                                          };
                                          if (TblShowDeviceIDCol) {
                                              MyTable += "<td " + style0 + BgColor + "'>" + GetParentId(Sensor[x].id) + "</td>";
                                          };
                                          if (TblShowDeviceNameCol) {
                                              MyTable += "<td " + style0 + BgColor + "'>" + getObject(GetParentId(Sensor[x].id), "common").common.name + "</td>";
                                          };
                                          if (TblShowRoomCol) {
                                              MyTable += "<td " + style0 + BgColor + "'>" + GetRoom(x) + "</td>";
                                          };
                                          if (TblShowUmaxCol) {
                                              MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].uMax.toFixed(1) + "V</td>";
                                          };
                                          if (TblShowUistCol) {
                                              MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].value.toFixed(2) + "V</td>";
                                          };
                                          if (TblShowUlimitCol) {
                                              MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].batteryMinLimit.toFixed(2) + "V</td>";
                                          };
                                          if (TblShowProzbatCol) {
                                              if (typeof (Sensor[x].uProz) == "number") {
                                                  MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].uProz.toFixed(1) + "%</td>";
                                              }
                                              else {
                                                  MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].uProz + "</td>";
                                              };
                                          };
                                          if (TblShowProzliveCol) {
                                              if (typeof (Sensor[x].liveProz) == "number") {
                                                  MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].liveProz.toFixed(1) + "%</td>";
                                              }
                                              else {
                                                  MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].liveProz + "</td>";
                                              };
                                          };
                                          if (TblShowStatusCol) {
                                              MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].state + "</td>";
                                          };
                                          if (TblShowHasDeadCheck) {
                                              MyTable += "<td " + style1 + BgColor + "'>" + (Sensor[x].hasDeadCheck ? 'x' : '-') + "</td>";
                                          };
                                          MyTable = MyTable + "</tr>";
                                      };
                                  
                                      MyTable += "</table>";
                                      setState(praefix + "OverviewTable", MyTable, true);
                                  }
                                  
                                  //Trigger für Sensoren erzeugen
                                  function CreateTrigger() {
                                      for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                          on(Sensor[x].id, function (dp) { //Trigger in Schleife erstellen
                                              let TempVal = dp.state.val;
                                              //  let TempUnit = GetUnit(x);
                                              // let TempLiveWindow = Sensor[x].uMax - Sensor[x].batteryMinLimit;
                                              if (typeof (TempVal == "string")) { //Falls MinLimit Wert String ist zu float wandeln
                                                  //log("Value is String, trying to convert");
                                                  if (!isNaN(parseFloat(TempVal))) { //Wenn konvertierung kein NaN ergibt
                                                      if (logging) log("Value conversion from String to number - success");
                                                      TempVal = parseFloat(TempVal); //Konvertieren
                                                  };
                                              };
                                              MainCalc(TempVal, x);
                                              CheckBatterys(x); //Prüfen
                                          });
                                      };
                                  
                                      for (let x = 0; x < WelcheFunktionVerwenden.length; x++) { //Alle Batteriefunktionen durchlaufen
                                          on(praefix + BatteryMinLimitDp[x], function (dp) { //Trigger erstellen und auslösen wenn min Limit geändert wurde. Dann erneute Komplettprüfung aller Batteriestände
                                              if (logging) log("Reaching Trigger for :" + praefix + BatteryMinLimitDp[x])
                                              if (typeof (dp.state.val) != "number") {
                                                  log("MinLimit Value not a Number, rather " + typeof (dp.state.val) + ", converting to number", "warn");
                                                  setState(praefix + BatteryMinLimitDp[x], parseFloat(dp.state.val), true)
                                              };
                                              main(); //Neuzuweisung des geänderten Limits an alle Geräte
                                          });
                                      };
                                  
                                      onStop(function () { //Bei Scriptende alle Timer löschen
                                          if (typeof TickerObj == "object") clearInterval(TickerObj);
                                      }, 100);
                                  }
                                  
                                  P 1 Antwort Letzte Antwort
                                  0
                                  • J JohnnyBahama

                                    Habe mir das skript nach Anleitung eingerichtet, aber ich bekomme folgende Fehlermeldung:

                                    22:10:33.513	error	javascript.0 (24872) at CheckNextLowBatt (script.js.common.Batteriestatus:379:91)
                                    22:10:33.513	error	javascript.0 (24872) at main (script.js.common.Batteriestatus:251:5)
                                    22:10:33.514	error	javascript.0 (24872) at Object.<anonymous> (script.js.common.Batteriestatus:110:13)
                                    

                                    Und im Log:

                                    javascript.0 2021-10-07 21:10:33.515	error	at processImmediate (internal/timers.js:463:21)
                                    javascript.0 2021-10-07 21:10:33.514	error	at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1988:38)
                                    javascript.0 2021-10-07 21:10:33.514	error	at Object.<anonymous> (script.js.common.Batteriestatus:110:13)
                                    javascript.0 2021-10-07 21:10:33.513	error	at main (script.js.common.Batteriestatus:251:5)
                                    javascript.0 2021-10-07 21:10:33.513	error	at CheckNextLowBatt (script.js.common.Batteriestatus:379:91)
                                    javascript.0 2021-10-07 21:10:33.511	error	Error in callback: TypeError: Cannot read property 'value' of undefined
                                    

                                    Und hier das Skript:

                                    const Version = "1.8.2"; // Batterieüberwachungsskript Stand 26.06.2021 - Git: https://github.com/Pittini/iobroker-Batterienauswertung - Forum: https://forum.iobroker.net/topic/31676/vorlage-generische-batteriestandsüberwachung-vis-ausgabe
                                    //Überwacht Batteriespannungen beliebig vieler Geräte 
                                    log("starting Batterieüberwachung V." + Version);
                                    //WICHTIG!!!
                                    //Vorraussetzungen: Den Gerätechannels müssen Räume, sowie die Funktion "BatterieSpannung_xx" für jeden entsprechenden Batteriespannungs Datenpunkt zugewiesen sein.
                                    //Bitte unbedingt Anleitung beachten
                                    // Nach der Zuweisung unbedingt den JS Adpter neu starten!
                                    
                                    //Grund Einstellungen
                                    const praefix = "javascript.0.BatterieUeberwachung."; //Grundpfad für Script DPs
                                    const logging = false; //Logging aktivieren?
                                    const FunktionBaseName = "BatterieSpannung_"; //Name der Funktion welche für die Batterieüberwachung genutzt wird
                                    const DeadFunktionName = "DeadCheck"; //Name der Funktion welche für den DeadCheck genutzt wird
                                    const UseMail = false; // Sollen Nachrichten via Mail gesendet werden?
                                    const UseSay = false; // Sollen Nachrichten via Say ausgegeben werden? Funktion des Authors, sollte bei Anwendern auf false gesetzt werden.
                                    const UseEventLog = false; // Sollen Nachrichten ins Eventlog geschreiben werden? Funktion des Authors, sollte bei Anwendern auf false gesetzt werden.
                                    const UsePopUp = false // Soll PopUp angezeigt werden? Funktion des Authors, sollte bei Anwendern auf false gesetzt werden.
                                    const ProzMeansLive = true; //Zeigen Prozentwerte des Gerätedatenpunktes Batteriekapazität oder restliche Lebensdauer?
                                    let DeadIsAfter = 360; // In Minuten - Zeit nach der ein Gerät als "tot" gewertet wird wenn keine Statusänderung (ts) erfolgte.
                                    const NotifyDeadDevices = true; //Sollen "tote" Geräte gemeldet werden?
                                    const NotifyWarnDevices = true;//Sollen Geräte unter Limit gemeldet werden?
                                    const DeconzNameFromDP = false; //Nimmt für Deconz den Namen aus dem Datenpunkt statt aus dem übergeordnetem Channel
                                    
                                    //Variablen für Alexa
                                    const UseAlexa = true; // Sollen Nachrichten via Alexa ausgegeben werden?
                                    const AlexaInstance = "alexa2.0";
                                    const AlexaId = "G090U61091870A1W"; // Die Alexa Seriennummer
                                    const AlexaVolume = "50"; // Lautstärke der Nachrichten. Wert von 1 bis 100
                                    
                                    //Variablen für Pushover
                                    const UsePushover = true; //Sollen Nachrichten via Pushover versendet werden?
                                    const PushoverDevice = 'All'; //Welches Gerät soll die Nachricht bekommen
                                    const PushoverInstance = "pushover.0"; //Pushoverinstanz welche genutzt werden soll angeben
                                    const PushOverTitle = 'Batterien überprüfen';
                                    
                                    //Variablen für Telegram
                                    const UseTelegram = false; // Sollen Nachrichten via Telegram gesendet werden?
                                    const TelegramInstance = "telegram.1"; //Telegraminstanz welche genutzt werden soll angeben
                                    const TelegramUser = ''; //Welche User sollen die Nachricht bekommen? Leer lassen für alle User. Mehrere User getrennt durch Komma.
                                    
                                    //Tabellen Einstellungen
                                    const TblOkBgColor = "#4caf50"; //Hintergrundfarbe für Batteriestatus Ok
                                    const TblInfoBgColor = "#ffc107"; //Hintergrundfarbe für Batteriestatus Info, also die leerste Batterie welche noch nicht das Limit unterschreitet
                                    const TblWarnBgColor = "#f44336"; //Hintergrundfarbe für Batteriestatus Warnung, also jene Batterie welche unter das Limit kam.
                                    const TblDeadBgColor = "grey"; //Hintergrundfarbe für Batterie/Geräte Status tot.
                                    const HeadBgColor = "dimgrey"; //Hintergrundfarbe des Tabellenkopfes
                                    const FontColor = "black"; //Textfarbe für Tabelleninhalt
                                    const HeadFontColor = "white"; //Textfarbe für Tabellenkopf
                                    const TblShowLfdCol = true; //Tabellenspalte mit laufender Nummer anzeigen?
                                    const TblShowDeviceIDCol = true; //Tabellenspalte mit Geräte ID anzeigen?
                                    const TblShowDeviceNameCol = true; //Tabellenspalte mit Gerätenamen anzeigen?
                                    const TblShowRoomCol = true; //Tabellenspalte mit Raum anzeigen?
                                    const TblShowUmaxCol = true; //Tabellenspalte mit Batterie Nennspannung anzeigen? 
                                    const TblShowUistCol = true; //Tabellenspalte mit aktueller Batteriespannung anzeigen?
                                    const TblShowUlimitCol = true; //Tabellenspalte mit unterer Batterielimit Spannung anzeigen?
                                    const TblShowProzbatCol = true; //Tabellenspalte mit Batteriestand in Prozent anzeigen?
                                    const TblShowProzliveCol = true; //Tabellenspalte mit Restlebensdauer unter Berücksichtigung der Limitspannung in Prozent anzeigen? Beispiel: Batterie hat 3V Nennspannung, Limit ist bei 2V, aktueller Batteriestand ist 2.5V, dann wäre die Restlebensdauer 50%
                                    const TblShowStatusCol = true; //Tabellenspalte mit Status ausgeben?
                                    const TblShowHasDeadCheck = true; //Tabellenspalte mit DeadCheckstatus ausgeben?
                                    
                                    //Ab hier nix mehr ändern
                                    /** @type {{ id: string, initial: any, forceCreation: boolean, common: iobJS.StateCommon }[]} */
                                    const States = []; //States Array initialisieren
                                    let DpCount = 0; //Zähler für anzulegende Datenpunkte
                                    const Sensor = [] //Sensoren Array initialisieren
                                    const BatteryMinLimitDp = []; //Array mit den generierten MinLimit Einstellungsdatenpunkten
                                    const WelcheFunktionVerwenden = []; // Array mit allen Einträgen aus Funktionen welche den FunktionBaseName beinhalten
                                    let AllBatterysOk = true;
                                    let LastMessageSeparator = "<br>";
                                    let NextExpectedLowBatt = "";
                                    let EmptyBatCount = 0;
                                    let DeadDeviceCount = 0;
                                    let TickerObj;
                                    let IsInit = true;
                                    //Datenpunkte anlegen in javascript.0.BatterieUeberwachung.
                                    States[DpCount] = { id: praefix + "AllBatterysOk", initial: true, forceCreation: false, common: { read: true, write: false, name: "Alle Batterien Ok?", type: "boolean", role: "state", def: false } }; //
                                    DpCount++;
                                    States[DpCount] = { id: praefix + "LastMessage", initial: "", forceCreation: false, common: { read: true, write: false, name: "Letzte Warnmeldung", type: "string", role: "state", def: "" } }; //
                                    DpCount++;
                                    FillWelcheFunktionVerwenden(); //Vorab Funktionen mit Umax Spannungen einlesen da diese für ID und Namen der MinLimit States benötigt werden
                                    
                                    for (let x = 0; x < WelcheFunktionVerwenden.length; x++) {
                                        let dummy = WelcheFunktionVerwenden[x].slice(FunktionBaseName.length) //Letzten Zeichen aus Funktionsnamen extrahieren
                                        let VoltInitial = CreateUmaxValueFromString(x) //Extrahierte Zeichen zu Kommazahl wandeln 
                                        VoltInitial = VoltInitial / 100 * 80; //Initialwert für Limit berechnen
                                        if (logging) log("InitialSpannung " + x + " gesetzt auf 80%= " + VoltInitial);
                                        States[DpCount] = { id: praefix + "BatteryMinLimit_" + dummy, initial: VoltInitial, forceCreation: false, common: { read: true, write: true, name: "Unteres Limit für Warnmeldung bei " + toFloat(dummy.slice(0, dummy.length - 1) + "." + dummy.slice(-1)) + "V Geräten", type: "number", role: "value", unit: "V", def: 2.6 } }; //
                                        BatteryMinLimitDp[x] = "BatteryMinLimit_" + dummy;
                                        DpCount++;
                                    };
                                    States[DpCount] = { id: praefix + "NextExpectedLowBatt", initial: "", forceCreation: false, common: { read: true, write: false, name: "Vorraussichtlich nächste zu wechselnde Batterie", type: "string", role: "state", def: "" } }; //
                                    DpCount++;
                                    States[DpCount] = { id: praefix + "OverviewTable", initial: "", forceCreation: false, common: { read: true, write: false, name: "Einfache HTML Übersichtstabelle", type: "string", role: "state", def: "" } }; //
                                    DpCount++;
                                    States[DpCount] = { id: praefix + "EmptyBatCount", initial: 0, forceCreation: false, common: { read: true, write: false, name: "Zähler für Anzahl der zu wechselnden Batterien", type: "number", role: "state", def: 0 } }; //
                                    DpCount++;
                                    States[DpCount] = { id: praefix + "DeadDeviceCount", initial: 0, forceCreation: false, common: { read: true, write: false, name: "Zähler für Anzahl der nicht mehr aktualisierenden Geräte", type: "number", role: "state", def: 0 } }; //
                                    DpCount++;
                                    States[DpCount] = { id: praefix + "DeviceCount", initial: 0, forceCreation: false, common: { read: true, write: false, name: "Zähler für Anzahl der überwachten Geräte", type: "number", role: "state", def: 0 } }; //
                                    DpCount++;
                                    States[DpCount] = { id: praefix + "DeadCheckCount", initial: 0, forceCreation: false, common: { read: true, write: false, name: "Zähler für Anzahl der gesetzten DeadChecks", type: "number", role: "state", def: 0 } }; //
                                    
                                    //Alle States anlegen, Main aufrufen wenn fertig
                                    let numStates = States.length;
                                    States.forEach(function (state) {
                                        createState(state.id, state.initial, state.forceCreation, state.common, function () {
                                            numStates--;
                                            if (numStates === 0) {
                                                if (logging) log("CreateStates fertig!");
                                                main();
                                            };
                                        });
                                    });
                                    
                                    function CreateUmaxValueFromString(x) {
                                        let dummy = WelcheFunktionVerwenden[x].slice(FunktionBaseName.length) //Aus der Funktionsbezeichnung die letzten Zeichen extrahieren= z.B. 33
                                        return toFloat(dummy.slice(0, dummy.length - 1) + "." + dummy.slice(-1)) //Die extrahierten Zeichen zu einer Kommazahl wandeln= z.B. 3.3
                                    }
                                    
                                    function Init() {
                                        if (logging) log("Reaching init()");
                                        let counter = 0; //Zähler für Devices
                                        let TempVal // Temporärer Sensorwert um nicht mehrere GetStates zu benötigen
                                        let TempUnit //Einheit für Unterscheidung ob % vorliegen
                                        //  let TempLiveWindow //Spannungsfensterbereich
                                        let Funktionen = getEnums('functions'); //Alle Funktionen der Aufzählung in Array Funktionen übertragen
                                        for (let x in Funktionen) {        // loop ueber alle Funktionen
                                            let Funktion = Funktionen[x].name; // Einzelne Funktion aus dem Array
                                            if (typeof Funktion == 'object') Funktion = Funktion.de; //Wenn Rückgabewert ein Objekt ist, ist die Funktion mehrsprachig und es wird die deutsche Bezeichnug verwendet
                                            let members = Funktionen[x].members; //Array mit allen Mitgliedern der Funktion erzeugen
                                            for (let z = 0; z < WelcheFunktionVerwenden.length; z++) { //Loop über alle Funktions welche zu WelcheFunktionVerwenden passen
                                                if (Funktion == WelcheFunktionVerwenden[z]) { //Wenn Function ist WelcheFunktionVerwenden (BatterieSpannung)
                                                    let Umax = CreateUmaxValueFromString(z) //Batteriesollspannung aus der Funktionsbezeichnung extrahieren
                                                    let BattMinLimitTemp = getState(praefix + "BatteryMinLimit_" + WelcheFunktionVerwenden[z].slice(FunktionBaseName.length)).val; //Temporäres (für den jeweiligen Schleifendurchlauf) MinLimit einlesen
                                                    if (typeof (BattMinLimitTemp == "string")) { //Falls MinLimit Wert String ist zu float wandeln
                                                        //log("BattMinLimit Value is String, trying to convert");
                                                        BattMinLimitTemp = parseFloat(BattMinLimitTemp);
                                                        if (typeof (BattMinLimitTemp == "number")) {
                                                            if (logging) log("BattMinLimit Value conversion - success");
                                                        };
                                                    };
                                                    for (let y in members) { // Loop über alle WelcheFunktionVerwenden Members
                                                        Sensor[counter] = {};
                                                        Sensor[counter].id = members[y]; //Treffer in SenorIDarray einlesen
                                                        TempVal = getState(Sensor[counter].id).val;//Wert vom Sensor in Tempval einlesen um wiederholte Getstates zu vermeiden
                                                        if (typeof (TempVal) == "undefined") TempVal = 0; //Bei leeren Feldern 0 setzen um Fehler zu vermeiden
                                                        if (typeof (TempVal) == "string") { //Wenn Wert als String deklariert obwohl Zahl
                                                            if (!isNaN(parseFloat(TempVal))) { //Wenn konvertierung kein NaN ergibt
                                                                TempVal = parseFloat(TempVal); //Konvertieren
                                                            };
                                                        };
                                                        if (logging) log("existsState(Sensor[counter].id)=" + existsState(Sensor[counter].id) + " typeof (getState(Sensor[counter].id).val)=" + typeof (getState(Sensor[counter].id).val) + " getState(Sensor[counter].id).val=" + getState(Sensor[counter].id).val)
                                                        Sensor[counter].state = "";
                                                        Sensor[counter].unit = GetUnit(counter);
                                                        if (logging) log("Tempval=" + TempVal + " TempUnit=" + TempUnit + " TypeOf=" + typeof (TempVal));
                                                        Sensor[counter].uMax = Umax; //Synchrones UmaxArray füllen
                                                        Sensor[counter].batteryMinLimit = BattMinLimitTemp;
                                    
                                                        MainCalc(TempVal, counter)
                                    
                                                        if (Sensor[counter].liveProz > 100) Sensor[counter].liveProz = 100; //Um bei übervollen Batterien mehr als 100% live zu vermeiden
                                                        if (logging) log(counter + " " + Funktion + ' found at ' + members[y] + " Umax= " + Sensor[counter].uMax + " BattMinLimit=" + BattMinLimitTemp + " Val= " + Sensor[counter].value + " SensorProzent= " + Sensor[counter].uProz);
                                                        counter++;
                                                    };
                                                    setState(praefix + "DeviceCount", counter, true);
                                                };
                                            };
                                        };
                                    }
                                    
                                    function MainCalc(TempVal, counter) {
                                        if (logging) log("Reaching MainCalc, TempVal=" + TempVal + " counter=" + counter);
                                    
                                        let TempLiveWindow = Sensor[counter].uMax - Sensor[counter].batteryMinLimit;
                                    
                                        switch (typeof (TempVal)) { //Wenn der Sensorwert bool ist (wenn nur LowBatt mit true/false vom Sensor gemeldet wird)
                                            case "boolean": //Sensorval ist Bool
                                                if (TempVal) { //Bei Lowbat=true
                                                    Sensor[counter].value = 0; //Batt wird als leer definiert und auf 0 gesetzt
                                                    Sensor[counter].uProz = 0; //Prozentwerte aus Umax und Sensorwert errechnen
                                                    Sensor[counter].liveProz = 0; //Lebensprozent auf 0%
                                                }
                                                else {
                                                    Sensor[counter].value = Sensor[counter].uMax; //Batt wird als voll definiert und auf Umax gesetzt
                                                    Sensor[counter].uProz = 100; //Prozentwerte aus Umax und Sensorwert errechnen
                                                    Sensor[counter].liveProz = 100; //Lebensprozent auf 100%
                                                };
                                                break;
                                            case "number": //Sensorval ist Zahl
                                                switch (Sensor[counter].unit) { //Bei Zahlen nach Einheit unterscheiden um % Angaben mit zu verarbeiten
                                                    case "%": //Bei Datenpunkt Unit = %
                                                        //if (logging) log("unit= " + TempUnit + " should be %");
                                                        if (ProzMeansLive) { // Wenn die Prozentangabe bereits Lebensdauer zeigt (Einstellungsoption)
                                                            Sensor[counter].liveProz = TempVal; //Direkt zuweisen aus Sensorwert
                                                            Sensor[counter].value = Sensor[counter].uMax - TempLiveWindow + (TempLiveWindow / 100 * Sensor[counter].liveProz);
                                                            Sensor[counter].uProz = (Sensor[counter].value / Sensor[counter].uMax) * 100 //Errechne Batteriekapazität
                                                        }
                                                        else if (!ProzMeansLive) { //Wenn die Prozentangabe Batteriekapazität darstellt  (Einstellungsoption)
                                                            Sensor[counter].uProz = TempVal; //Batteriekapazität in % bestimmen
                                                            Sensor[counter].value = Sensor[counter].uMax / 100 * Sensor[counter].uProz; //Sensorwert aus Umax und Prozentwert bestimmen
                                                            Sensor[counter].liveProz = (Sensor[counter].value - Sensor[counter].batteryMinLimit) / (Sensor[counter].uMax - Sensor[counter].batteryMinLimit) * 100; //Restlebensdauer in % ermitteln
                                                        };
                                    
                                                        break;
                                                    default: // In allen anderen Fällen
                                                        Sensor[counter].value = TempVal; //Spannung ist Wert vom DP
                                                        Sensor[counter].uProz = Sensor[counter].value / Sensor[counter].uMax * 100; //Prozentwerte aus Umax und Sensorwert errechnen
                                                        Sensor[counter].liveProz = (Sensor[counter].value - Sensor[counter].batteryMinLimit) / (Sensor[counter].uMax - Sensor[counter].batteryMinLimit) * 100; //Restlebensdauer in % ermitteln
                                                };
                                                break;
                                            case "string": //Sensorval ist Text
                                                if (TempVal == "ok" || TempVal == "NORMAL") {
                                                    Sensor[counter].value = Sensor[counter].uMax; //Batt wird als voll definiert und auf Umax gesetzt
                                                    Sensor[counter].uProz = 100; //Prozentwerte aus Umax und Sensorwert errechnen
                                                    Sensor[counter].liveProz = 100; //Lebensprozent auf 100%
                                                }
                                                else { //Bei BatteryState != ok
                                                    Sensor[counter].value = 0; //Batt wird als leer definiert und 0.1 unter MinLimit gesetzt
                                                    Sensor[counter].uProz = 0; //Prozentwerte aus Umax und Sensorwert errechnen
                                                    Sensor[counter].liveProz = 0; //Lebensprozent auf 0%
                                                };
                                                break;
                                            default:
                                        };
                                    
                                    }
                                    
                                    
                                    function FillWelcheFunktionVerwenden() {
                                        if (logging) log("Reaching FillWelcheFunktionVerwenden");
                                        let z = 0;
                                        let Funktionen = getEnums('functions'); //Alle Funktionen der Aufzählung in Array Funktionen übertragen
                                    
                                        for (let x in Funktionen) {        // loop ueber alle Funktionen
                                            let Funktion = Funktionen[x].name; // Einzelne Funktion aus dem Array
                                            if (typeof Funktion == 'object') Funktion = Funktion.de; //Wenn Rückgabewert ein Objekt ist, ist die Funktion mehrsprachig und es wird die deutsche Bezeichnung verwendet
                                            if (Funktion.includes(FunktionBaseName)) {
                                                WelcheFunktionVerwenden[z] = Funktion;
                                                if (logging) log("Found Function " + WelcheFunktionVerwenden[z]);
                                                z++;
                                            };
                                        };
                                    }
                                    
                                    function main() {
                                        if (logging) log("Reaching main()");
                                        Init(); //Alle Werte einlesen, Arrays füllen, fehlende Werte errechnen
                                        if (IsInit) CreateTrigger(); // Trigger erzeugen
                                        CheckAllBatterys(); // Alle Batteriestände prüfen
                                        CheckAllBatterysOk();
                                        CheckNextLowBatt(); // Batterie mit niedrigster Spannung finden
                                        MakeTable(); //HTML Tabelle erzeugen
                                        if (IsInit) Ticker(); //Startet Intervallprüfung für nicht aktualisierende Geräte
                                        IsInit = false;
                                    }
                                    
                                    function Meldung(msg) {
                                        log("Reaching Meldung(), msg=" + msg);
                                        if (UseSay) Say(msg);
                                        if (UseTelegram) {
                                            sendTo(TelegramInstance, "send", {
                                                user: TelegramUser,
                                                text: msg
                                            });
                                        };
                                        if (UseMail) {
                                            sendTo("email", {
                                                html: msg
                                            });
                                        };
                                        if (UseAlexa) {
                                            if (AlexaId != "") setState(AlexaInstance + ".Echo-Devices." + AlexaId + ".Commands.announcement"/*announcement*/, AlexaVolume + "; " + msg);
                                        };
                                        if (UsePushover) {
                                            sendTo(PushoverInstance, {
                                                device: PushoverDevice,
                                                message: msg,
                                                title: PushOverTitle,
                                                priority: 0,
                                                retry: 60,
                                                expire: 600,
                                                html: 1
                                            });
                                        };
                                    
                                        if (logging) log(msg);
                                        if (UseEventLog) WriteEventLog(msg);
                                        if (UsePopUp) ShowPopUp(true, msg, "Batterys", "red");
                                    }
                                    
                                    function CheckDeadBatt() {
                                        if (logging) log("Reaching CheckDeadBatt()");
                                        let jetzt = new Date().getTime();
                                        let Funktionen = getEnums('functions'); //Alle Funktionen der Aufzählung in Array Funktionen übertragen
                                        DeadDeviceCount = 0;
                                        let members;
                                        let counter = 0;
                                        for (let y in Funktionen) {        // loop ueber alle Funktionen
                                            let Funktion = Funktionen[y].name; // Einzelne Funktion aus dem Array
                                            if (typeof Funktion == 'object') Funktion = Funktion.de; //Wenn Rückgabewert ein Objekt ist, ist die Funktion mehrsprachig und es wird die deutsche Bezeichnung verwendet
                                            if (Funktion.includes(DeadFunktionName)) {
                                                members = Funktionen[y].members; //Array mit allen Mitgliedern der Funktion erzeugen
                                            };
                                        };
                                    
                                        for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                            if (existsState(Sensor[x].id)) {
                                                let ParentDeviceId = GetParentId(Sensor[x].id);
                                                Sensor[x].isDead = false;
                                                Sensor[x].hasDeadCheck = false;
                                    
                                                //Check at Extra Function Datapoint DeadCheck
                                                for (let z in members) {
                                                    if (members[z].includes(ParentDeviceId)) {    //Jetzt prüfen ob Funktion DeadCheck innerhalb des Channels
                                                        Sensor[x].hasDeadCheck = true;
                                                        if (logging) log("Device " + ParentDeviceId + " has Deadcheck, now checking");
                                                        if (logging) log("z=" + z + " Device " + ParentDeviceId + " check at  " + members[z]);
                                                        if ((getState(members[z]).ts + (DeadIsAfter * 60 * 1000)) < jetzt) {
                                                            if (logging) log("Deadcheck failed, " + ParentDeviceId + " seems to be dead");
                                                            Sensor[x].isDead = true;
                                                        } else {
                                                            if (logging) log(ParentDeviceId + " is not dead");
                                                            Sensor[x].isDead = false;
                                                        };
                                                        counter++;
                                                    };
                                                };
                                                setState(praefix + "DeadCheckCount", counter, true);
                                    
                                                //Reaction after checks
                                                if (Sensor[x].isDead) {
                                                    if (logging) log("Jim...he's dead")
                                                    if (Sensor[x].state != "dead") { //Wenn Sensor bei vorheriger Prüfung noch nicht tot, Meldung absetzen.
                                                        CheckForAlerts()
                                                    };
                                                    Sensor[x].state = "dead"; //Status auf tot setzen
                                                    DeadDeviceCount++; //Zähler ehöhen
                                                } else {
                                                    if (Sensor[x].state == "dead") { //Wenn Sensor bisher als tot gelistet, aber wieder aktualisiert, Status prüfen
                                                        Sensor[x].state = "ok";
                                                        Sensor[x].isDead = false;
                                                        CheckBatterys(x);
                                                    };
                                                };
                                            } else {
                                                log("CheckDeadBatt() State for " + x + " doesnt exists");
                                            };
                                    
                                            if (x == Sensor.length - 1) { //Ausführung erst wenn Schleife komplett durch ist (async)
                                                setState(praefix + "DeadDeviceCount", DeadDeviceCount, true);
                                                MakeTable();
                                            };
                                        };
                                    }
                                    
                                    function Ticker() {
                                        CheckDeadBatt(); //Auf nicht mehr aktualisierende Geräte seit Zeit x (Einstellung) prüfen
                                        setInterval(function () { // Wenn 
                                            CheckDeadBatt();
                                        }, 60000);
                                    }
                                    
                                    
                                    function CheckNextLowBatt() { //Ermittelt die Batterie mit der geringsten Spannung, ignoriert Batterien welche das Limit bereits unterschritten haben da diese bereits in der LastMessage gemeldet werden
                                        if (logging) log("Reaching CheckNextLowBatt()");
                                    
                                        let LowestBattProz = 100; //Mit 100% initialisieren
                                        let LowestBattIndex = 0;
                                        for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                            if (Sensor[x].state != "warn" && Sensor[x].state != "dead") Sensor[x].state = "ok";
                                            if (Sensor[x].value > Sensor[x].batteryMinLimit) { // Nur Sensoren berücksichtigen die das min Limit noch nicht unterschritten haben
                                                if (Sensor[x].liveProz <= LowestBattProz) { //Wenn Sensorwert kleiner LowestBattProz, LowestBattVal auf neuen Wert setzen um das Gerät mit den wenigsten Prozent zu ermitteln
                                                    LowestBattProz = Sensor[x].liveProz;
                                                    LowestBattIndex = x;
                                                };
                                            };
                                        };
                                    
                                        NextExpectedLowBatt = "Aktuell niedrigster Batteriestand (" + Sensor[LowestBattIndex].value.toFixed(2) + "V): " + GetRoom(LowestBattIndex) + " bei Gerät " + getObject(GetParentId(Sensor[LowestBattIndex].id), "common").common.name;
                                        setState(praefix + "NextExpectedLowBatt", NextExpectedLowBatt, true);
                                        Sensor[LowestBattIndex].state = "info";
                                        if (logging) log(NextExpectedLowBatt);
                                    }
                                    
                                    function CheckAllBatterysOk() {
                                        if (logging) log("Reaching CheckAllBatterysOk");
                                        AllBatterysOk = true;
                                        EmptyBatCount = 0;
                                        for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                            if (Sensor[x].value <= Sensor[x].batteryMinLimit) { // Nur Sensoren berücksichtigen die das min Limit unterschritten haben
                                                AllBatterysOk = false;
                                                EmptyBatCount++; //Alle Sensoren zählen welche das Batt min Limit unterschritten haben
                                            };
                                        };
                                    
                                        if (DeadDeviceCount > 0) AllBatterysOk = false;
                                    
                                        setState(praefix + "EmptyBatCount", EmptyBatCount, true);
                                        setState(praefix + "AllBatterysOk", AllBatterysOk, true);
                                    }
                                    
                                    
                                    let OldTempMsg = "";
                                    function CheckForAlerts() {
                                        if (logging) log("Reaching CheckLastMessage, EmptyBatCount=" + EmptyBatCount + " DeadDeviceCount=" + DeadDeviceCount);
                                        let TempMsg = "";
                                    
                                        for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchgehen
                                            if (Sensor[x].message != "" && NotifyWarnDevices) { //Wenn msg vorhanden und Warnungen aktiv
                                                if (TempMsg == "") {
                                                    TempMsg = Sensor[x].message;
                                                } else {
                                                    TempMsg += LastMessageSeparator + Sensor[x].message;
                                                };
                                            };
                                    
                                            if (Sensor[x].isDead && NotifyDeadDevices) { //Wenn msg vorhanden und Dead Warnungen aktiv
                                                if (TempMsg == "") {
                                                    TempMsg = "Ausfall oder disconnect im " + GetRoom(x) + " bei Gerät " + getObject(GetParentId(Sensor[x].id)).common.name;
                                                } else {
                                                    TempMsg += LastMessageSeparator + "Ausfall oder disconnect im " + GetRoom(x) + " bei Gerät " + getObject(GetParentId(Sensor[x].id)).common.name;
                                                };
                                            };
                                        };
                                    
                                        if (TempMsg == "") {
                                            setState(praefix + "LastMessage", "", true); //Meldung in Datenpunkt LastMessage löschen
                                            if (logging) log("Alle Batterien ok, Lastmessage gelöscht");
                                        } else if (OldTempMsg != TempMsg) {
                                            setState(praefix + "LastMessage", TempMsg, true); //Meldung in Datenpunkt LastMessage schreiben
                                            Meldung(TempMsg);
                                        };
                                        OldTempMsg = TempMsg;
                                    }
                                    
                                    
                                    function CheckBatterys(x) { // Prüfung eines einzelnen Batteriestandes wenn getriggert
                                        if (logging) log("Reaching CheckBatterys(" + x + ") Val=" + Sensor[x].value + " Limit=" + Sensor[x].batteryMinLimit);
                                        if (Sensor[x].value <= Sensor[x].batteryMinLimit) { //Wenn Min. Wert unterschritten
                                            Sensor[x].message = "Batteriestand (" + parseInt(Sensor[x].value * 100) / 100 + " V) unter Limit (" + Sensor[x].batteryMinLimit + " V) im " + GetRoom(x) + " bei Gerät " + getObject(GetParentId(Sensor[x].id)).common.name;
                                            Sensor[x].state = "warn";
                                        }
                                        else {
                                            Sensor[x].state = "ok";
                                            Sensor[x].message = "";
                                        };
                                        CheckAllBatterysOk();
                                        CheckNextLowBatt();
                                        CheckDeadBatt();
                                        CheckForAlerts();
                                        MakeTable();
                                    }
                                    
                                    function CheckAllBatterys() { // Prüfung aller Batteriestände bei Skriptstart
                                        if (logging) log("Reaching CheckAllBatterys() found " + (Sensor.length) + " Devices");
                                        for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                            if (Sensor[x].state == "dead") {
                                                if (logging) log("Sensor[" + x + "] = ist ausgefallen oder disconnected");
                                                Sensor[x].isDead = true;
                                            }
                                            else if (Sensor[x].value <= Sensor[x].batteryMinLimit) { //Wenn Min. Wert unterschritten
                                                if (logging) log("SensorVal[" + x + "] = " + Sensor[x].value + "V, unterschreitet MinLimit von " + Sensor[x].batteryMinLimit + " V");
                                                Sensor[x].message = "Batteriestand (" + parseInt(Sensor[x].value * 100) / 100 + " V) unter Limit (" + Sensor[x].batteryMinLimit + " V) im " + GetRoom(x) + " bei Gerät " + getObject(GetParentId(Sensor[x].id)).common.name;
                                                Sensor[x].state = "warn";
                                            }
                                            else {
                                                if (Sensor[x].state != "info" && Sensor[x].state != "dead") {
                                                    Sensor[x].state = "ok";
                                                    Sensor[x].isDead = false;
                                                    Sensor[x].message = "";
                                                }
                                            };
                                        };
                                        CheckForAlerts();
                                    }
                                    
                                    function GetRoom(x) {  // Raum eines Gerätes ermitteln
                                        let room = getObject(Sensor[x].id, 'rooms').enumNames[0];
                                        if (room == undefined) room = "Nicht zugewiesen";
                                        if (typeof room == 'object') room = room.de;
                                        room = room.replace(/_/g, " "); //Unterstriche durch Leerzeichen ersetzen
                                        return room;
                                    }
                                    
                                    function GetUnit(x) {
                                        let unit = getObject(Sensor[x].id, 'common').common.unit
                                        return unit;
                                    }
                                    
                                    function GetParentId(Id) {
                                        let parentDevicelId;
                                        if (Id.indexOf("deconz.") > -1 || Id.indexOf("hm-rpc.") > -1 || Id.indexOf("shelly.") > -1) { //Wenn deconz, hm-rpc oder shelly dann zwei Ebenen zurück
                                            parentDevicelId = Id.split(".").slice(0, -2).join(".");// Id an den Punkten in Array schreiben (split), die 2 letzten Elemente von hinten entfernen (slice) und den Rest wieder zu String zusammensetzen
                                        }
                                        else if (Id.indexOf("hmip.") > -1) { //Wenn HMIP dann drei Ebenen zurück
                                            parentDevicelId = Id.split(".").slice(0, -3).join(".");// Id an den Punkten in Array schreiben (split), die 3 letzten Elemente von hinten entfernen (slice) und den Rest wieder zu String zusammensetzen
                                        }
                                        else { //Wenn kein deconz, kein HM und kein shelly Adapter, eine Ebene zurück
                                            parentDevicelId = Id.split(".").slice(0, -1).join(".");// Id an den Punkten in Array schreiben (split), das letzte Element von hinten entfernen (slice) und den Rest wieder zu String zusammensetzen
                                        };
                                        if (DeconzNameFromDP && Id.indexOf("deconz.") > -1) parentDevicelId = Id;
                                        //if (logging) log("Id= " + Id + " ParentDeviceId= " + parentDevicelId)
                                        return parentDevicelId;
                                    }
                                    
                                    function MakeTable() {
                                        if (logging) log("Reaching MakeTable");
                                        let BgColor = "";
                                        let style0 = "style='border: 1px solid black; padding-left: 5px; padding-right: 5px; font-size:0.8em; font-weight: normal; text-align: left; color:" + FontColor + "; background-color:"
                                        let style1 = "style='width: 40px; border: 1px solid black; padding-left: 5px; padding-right: 5px; font-size:0.8em; font-weight: normal; text-align: right; color:" + FontColor + "; background-color:"
                                        let headstyle0 = "style='border: 1px solid black; padding-left: 5px; padding-right: 5px; height: 30px; font-size:1.0em; font-weight: bold; text-align: left; color:" + HeadFontColor + "; background-color:"
                                        let headstyle1 = "style='width: 40px; border: 1px solid black; padding-left: 5px; padding-right: 5px; height: 30px; font-size:1.0em; font-weight: bold; text-align: center; color:" + HeadFontColor + "; background-color:"
                                    
                                        let MyTableHead = "<table style='width:100%; border: 1px solid black; border-collapse: collapse;'><tr>";
                                        let MyTable;
                                    
                                        if (TblShowLfdCol) {
                                            MyTableHead += "<th " + headstyle0 + HeadBgColor + "'>lfd</th>";
                                        };
                                        if (TblShowDeviceIDCol) {
                                            MyTableHead += "<th " + headstyle0 + HeadBgColor + "'>Sensor ID</th>";
                                        };
                                        if (TblShowDeviceNameCol) {
                                            MyTableHead += "<th " + headstyle0 + HeadBgColor + "'>Sensor Name</th>";
                                        };
                                        if (TblShowRoomCol) {
                                            MyTableHead += "<th " + headstyle0 + HeadBgColor + "'>Raum</th>";
                                        };
                                        if (TblShowUmaxCol) {
                                            MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>U<br>Nenn</th>";
                                        };
                                        if (TblShowUistCol) {
                                            MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>U<br>Ist</th>";
                                        };
                                        if (TblShowUlimitCol) {
                                            MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>U<br>Limit</th>";
                                        };
                                        if (TblShowProzbatCol) {
                                            MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>%bat</th>";
                                        };
                                        if (TblShowProzliveCol) {
                                            MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>%live</th>";
                                        };
                                        if (TblShowStatusCol) {
                                            MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>Status</th>";
                                        };
                                        if (TblShowHasDeadCheck) {
                                            MyTableHead += "<th " + headstyle1 + HeadBgColor + "'>DC</th>";
                                        };
                                        MyTableHead += "</tr>";
                                        MyTable = MyTableHead + "<tr>";
                                    
                                        for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen 
                                            switch (Sensor[x].state) {
                                                case "ok":
                                                    BgColor = TblOkBgColor;
                                                    break;
                                                case "info":
                                                    BgColor = TblInfoBgColor;
                                                    break;
                                                case "warn":
                                                    BgColor = TblWarnBgColor;
                                                    break;
                                                case "dead":
                                                    BgColor = TblDeadBgColor;
                                                    break;
                                                default:
                                            };
                                    
                                            MyTable += "<tr>";
                                            if (TblShowLfdCol) {
                                                MyTable += "<td " + style0 + BgColor + "'>" + (x + 1) + "</td>";
                                            };
                                            if (TblShowDeviceIDCol) {
                                                MyTable += "<td " + style0 + BgColor + "'>" + GetParentId(Sensor[x].id) + "</td>";
                                            };
                                            if (TblShowDeviceNameCol) {
                                                MyTable += "<td " + style0 + BgColor + "'>" + getObject(GetParentId(Sensor[x].id), "common").common.name + "</td>";
                                            };
                                            if (TblShowRoomCol) {
                                                MyTable += "<td " + style0 + BgColor + "'>" + GetRoom(x) + "</td>";
                                            };
                                            if (TblShowUmaxCol) {
                                                MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].uMax.toFixed(1) + "V</td>";
                                            };
                                            if (TblShowUistCol) {
                                                MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].value.toFixed(2) + "V</td>";
                                            };
                                            if (TblShowUlimitCol) {
                                                MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].batteryMinLimit.toFixed(2) + "V</td>";
                                            };
                                            if (TblShowProzbatCol) {
                                                if (typeof (Sensor[x].uProz) == "number") {
                                                    MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].uProz.toFixed(1) + "%</td>";
                                                }
                                                else {
                                                    MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].uProz + "</td>";
                                                };
                                            };
                                            if (TblShowProzliveCol) {
                                                if (typeof (Sensor[x].liveProz) == "number") {
                                                    MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].liveProz.toFixed(1) + "%</td>";
                                                }
                                                else {
                                                    MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].liveProz + "</td>";
                                                };
                                            };
                                            if (TblShowStatusCol) {
                                                MyTable += "<td " + style1 + BgColor + "'>" + Sensor[x].state + "</td>";
                                            };
                                            if (TblShowHasDeadCheck) {
                                                MyTable += "<td " + style1 + BgColor + "'>" + (Sensor[x].hasDeadCheck ? 'x' : '-') + "</td>";
                                            };
                                            MyTable = MyTable + "</tr>";
                                        };
                                    
                                        MyTable += "</table>";
                                        setState(praefix + "OverviewTable", MyTable, true);
                                    }
                                    
                                    //Trigger für Sensoren erzeugen
                                    function CreateTrigger() {
                                        for (let x = 0; x < Sensor.length; x++) { //Alle Sensoren durchlaufen
                                            on(Sensor[x].id, function (dp) { //Trigger in Schleife erstellen
                                                let TempVal = dp.state.val;
                                                //  let TempUnit = GetUnit(x);
                                                // let TempLiveWindow = Sensor[x].uMax - Sensor[x].batteryMinLimit;
                                                if (typeof (TempVal == "string")) { //Falls MinLimit Wert String ist zu float wandeln
                                                    //log("Value is String, trying to convert");
                                                    if (!isNaN(parseFloat(TempVal))) { //Wenn konvertierung kein NaN ergibt
                                                        if (logging) log("Value conversion from String to number - success");
                                                        TempVal = parseFloat(TempVal); //Konvertieren
                                                    };
                                                };
                                                MainCalc(TempVal, x);
                                                CheckBatterys(x); //Prüfen
                                            });
                                        };
                                    
                                        for (let x = 0; x < WelcheFunktionVerwenden.length; x++) { //Alle Batteriefunktionen durchlaufen
                                            on(praefix + BatteryMinLimitDp[x], function (dp) { //Trigger erstellen und auslösen wenn min Limit geändert wurde. Dann erneute Komplettprüfung aller Batteriestände
                                                if (logging) log("Reaching Trigger for :" + praefix + BatteryMinLimitDp[x])
                                                if (typeof (dp.state.val) != "number") {
                                                    log("MinLimit Value not a Number, rather " + typeof (dp.state.val) + ", converting to number", "warn");
                                                    setState(praefix + BatteryMinLimitDp[x], parseFloat(dp.state.val), true)
                                                };
                                                main(); //Neuzuweisung des geänderten Limits an alle Geräte
                                            });
                                        };
                                    
                                        onStop(function () { //Bei Scriptende alle Timer löschen
                                            if (typeof TickerObj == "object") clearInterval(TickerObj);
                                        }, 100);
                                    }
                                    
                                    P Offline
                                    P Offline
                                    Pittini
                                    Developer
                                    schrieb am zuletzt editiert von
                                    #437

                                    @johnnybahama Zeig mal nen Screenshot aus der Objektliste wo ich die Zuweisung seh.

                                    J 1 Antwort Letzte Antwort
                                    0
                                    • P Pittini

                                      @johnnybahama Zeig mal nen Screenshot aus der Objektliste wo ich die Zuweisung seh.

                                      J Offline
                                      J Offline
                                      JohnnyBahama
                                      schrieb am zuletzt editiert von JohnnyBahama
                                      #438

                                      @pittini 2021-10-07 23_23_56-.png

                                      2021-10-07 23_30_16-objects - raspberrypi4.png

                                      C P 2 Antworten Letzte Antwort
                                      0
                                      • J JohnnyBahama

                                        @pittini 2021-10-07 23_23_56-.png

                                        2021-10-07 23_30_16-objects - raspberrypi4.png

                                        C Offline
                                        C Offline
                                        Chrunchy
                                        schrieb am zuletzt editiert von
                                        #439

                                        @johnnybahama Die Funktion muss gemäß Zeile 12 im Script umbenannt werden.

                                        Weise dem Datenpunkt battery die Funktion BatterieSpannung_XX zu.

                                        Wobei XX durch die Sollwert-Spannung der Batterie(n) ersezt wird.
                                        Also z.B. BatterieSpannung_15 für 1,5 Volt oder BatterieSpannung_30 für 3,0 Volt.

                                        Wenn der Wert hinter battery nur % liefert, erkennt das Script dies automatisch und rechnet um.

                                        Gruß Chrunchy

                                        1 Antwort Letzte Antwort
                                        0
                                        • J JohnnyBahama

                                          @pittini 2021-10-07 23_23_56-.png

                                          2021-10-07 23_30_16-objects - raspberrypi4.png

                                          P Offline
                                          P Offline
                                          Pittini
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #440

                                          @johnnybahama Konfigurationsfehler im 4er Pack, steht eigentlich alles in der Anleitung.
                                          Zum ersten Screenshot:
                                          Wenn Du die Skript default Benennung "BatterieSpannung_" nicht magst, kannste das ändern, aber woher soll den das Skript wissen dass Du lieber "BatterieStatus_" hättest wenn das in Zeile 12 nicht auch geändert wird?
                                          Weiterhin gibt es keine Spannung namens %. Oder hast schon mal ne Batterie gesehen wo % drauf steht? Siehe auch Anleitung .1:

                                          Da in Iobroker nirgends die Information bereitsteht welche Batterien in den Geräten sind, bzw. welche Spannungen vorliegen, müßt Ihr dies dem Skript mitteilen indem hinter dem eigentlichen Funktionsnamen z.B. "BatterieSpannung_" noch die Spannung anzugeben ist - ohne Dezimalpunkt. Z.B. "BatterieSpannung_15" für 1,5V Geräte, "BatterieSpannung_30" für 3V Geräte, "BatterieSpannung_120" für 12V Geräte usw. Wollt Ihr also zwei verschiedene Spannungen überwachen, ergibt das zwei Funktionen. Dies gilt auch für Geräte welche nur Lowbat oder % ausgeben, auch diese haben ja irgendeine, klar definierte, Batteriespannung.

                                          Zum Screenshot 2: Es gibt auch keine Batterie wo "lowbat" draufsteht, gleiches Thema wie oben. Außerdem ist dem Dp kein Raum zugeordnet.

                                          J 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

                                          864

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe