Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Servicemeldungen Volume2

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorlage] Servicemeldungen Volume2

    This topic has been deleted. Only users with topic management privileges can see it.
    • rantanplan
      rantanplan @looxer01 last edited by

      @looxer01 Hi

      "Kommunikation gestört" werden doch nicht von der CCU gelöscht.
      Bei Sabotage Meldungen klappt es einwandfrei.

      Im Script habe ich {key: 'Sticky_unreach_alarm".... auskommentiert.
      Sonst nur meine üblichen Parameter gesetzt.

      Grüße

      L 1 Reply Last reply Reply Quote 0
      • L
        looxer01 @rantanplan last edited by

        @rantanplan
        Hi,
        ja klar, wenn STICKY_UNREACH_ALARM auskommentiert ist, dann werden diese Meldungen auch nicht verarbeitet.
        Nimm die Auskommentierung zurück. Dann sollte es gehen.

        vG Looxer

        rantanplan 1 Reply Last reply Reply Quote 0
        • rantanplan
          rantanplan @looxer01 last edited by

          @looxer01 sagte in [Vorlage] Servicemeldungen Volume2:

          Nimm die Auskommentierung zurück. Dann sollte es gehen.

          Das war es. Läuft nun perfekt.
          Danke.

          Grüße

          L 1 Reply Last reply Reply Quote 0
          • L
            looxer01 @rantanplan last edited by

            @rantanplan
            👍 Danke für die Rückmeldung.

            vG Looxer

            Edis77 1 Reply Last reply Reply Quote 0
            • Edis77
              Edis77 @looxer01 last edited by

              @looxer01
              Guten Abend.
              ich habe heute die neue Version geladen, bekommen aber ein paar Fehler im Log.
              Muss ich was anders einstellen?

              2025-02-27 19:20:14.759 - info: javascript.0 (389) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Subscription Datenpunkt Wert geaendert fuer hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage wird ausgefuehrt Routine:SubscribeGeraeteID
              2025-02-27 19:20:14.766 - info: javascript.0 (389) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Zeitverbrauch fuer Routine Check_All: 6 Millisekunden Routine:Check_All
              2025-02-27 19:20:14.827 - info: javascript.0 (389) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Subscription Datenpunkt Wert geaendert fuer hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage wird ausgefuehrt Routine:SubscribeGeraeteID
              2025-02-27 19:20:14.878 - warn: javascript.0 (389) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
              2025-02-27 19:20:14.880 - warn: javascript.0 (389) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
              2025-02-27 19:20:14.880 - warn: javascript.0 (389) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:499:25)
              2025-02-27 19:20:14.880 - warn: javascript.0 (389) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
              2025-02-27 19:20:14.880 - warn: javascript.0 (389) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
              2025-02-27 19:20:14.880 - warn: javascript.0 (389) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
              2025-02-27 19:20:14.880 - warn: javascript.0 (389) at listOnTimeout (node:internal/timers:581:17)
              2025-02-27 19:20:14.880 - warn: javascript.0 (389) at processTimers (node:internal/timers:519:7)
              2025-02-27 19:20:14.880 - warn: javascript.0 (389) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
              2025-02-27 19:20:14.881 - warn: javascript.0 (389) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
              2025-02-27 19:20:14.881 - warn: javascript.0 (389) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:39)
              2025-02-27 19:20:14.881 - warn: javascript.0 (389) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
              2025-02-27 19:20:14.881 - warn: javascript.0 (389) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
              2025-02-27 19:20:14.881 - warn: javascript.0 (389) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
              2025-02-27 19:20:14.881 - warn: javascript.0 (389) at listOnTimeout (node:internal/timers:581:17)
              2025-02-27 19:20:14.881 - warn: javascript.0 (389) at processTimers (node:internal/timers:519:7)
              2025-02-27 19:20:14.882 - error: javascript.0 (389) Error in callback: TypeError: Cannot read properties of null (reading 'replace')
              2025-02-27 19:20:14.882 - error: javascript.0 (389) at ReplaceString (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:808:25)
              2025-02-27 19:20:14.883 - error: javascript.0 (389) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:25)
              2025-02-27 19:20:14.883 - error: javascript.0 (389) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
              2025-02-27 19:20:14.883 - error: javascript.0 (389) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
              2025-02-27 19:20:14.883 - error: javascript.0 (389) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
              2025-02-27 19:20:14.883 - error: javascript.0 (389) at listOnTimeout (node:internal/timers:581:17)
              2025-02-27 19:20:14.883 - error: javascript.0 (389) at processTimers (node:internal/timers:519:7)
              
              L 1 Reply Last reply Reply Quote 0
              • L
                looxer01 @Edis77 last edited by

                @edis77 sagte in [Vorlage] Servicemeldungen Volume2:

                2025-02-27 19:20:14.882 - error: javascript.0 (389) Error in callback: TypeError: Cannot read properties of null (reading 'replace')

                Hi,
                da muessen wir uns systematisch ran arbeiten.

                der erste Test wäre die 3.20 erneut zu installieren, und zwar ohne Aenderungen. Ausnahme die MUSS-Eisntellungen.

                Dann könnte es was mit den STICKY Meldungen zu tun haben. Ist aber schwer zu sagen.
                Um das Auszuschliessen könntest du die STICKY-Meldungen deaktivieren und zwar so:

                const alarmTypes = [
                
                    { key: 'UNREACH_ALARM',                     suffixes: ['UNREACH_ALARM','unreach' ] },//UNREACH_ALARM = HM-Classic & HMIP-CCU - unreach = HMIP Accesspoint
                
                //    { key: 'STICKY_UNREACH_ALARM',              suffixes: ['STICKY_UNREACH_ALARM'] },
                
                    { key: 'CONFIG_PENDING_ALARM',              suffixes: ['CONFIG_PENDING_ALARM','configPending'] }, //configPending ist eine HMIP Meldung
                
                    { key: 'UPDATE_PENDING_ALARM',              suffixes: ['UPDATE_PENDING_ALARM'] },
                
                    { key: 'LOWBAT_ALARM',                      suffixes: ['LOWBAT_ALARM', 'LOW_BAT_ALARM','lowBat'] }, //LOWBAT_ALARM = HM-Classic - LOW_BAT_ALARM = HMIP CCU - lowBat = HMIP Accesspoint
                
                    { key: 'DEVICE_IN_BOOTLOADER_ALARM',        suffixes: ['DEVICE_IN_BOOTLOADER_ALARM'] },
                
                    { key: 'ERROR',                             suffixes: ['ERROR','DUTY_CYCLE'] },                  // error ist ein Sammler fuer hier nicht definierte Meldungen
                
                    { key: 'FAULT_REPORTING',                   suffixes: ['FAULT_REPORTING'] },
                
                    { key: 'SABOTAGE_ALARM',                    suffixes: ['SABOTAGE_ALARM','sabotage'] }, // sabotage ist eine HMIP Meldung
                
                //    { key: 'STICKY_SABOTAGE_ALARM',             suffixes: ['STICKY_SABOTAGE_ALARM'] },
                
                    { key: 'ERROR_NON_FLAT_POSITIONING_ALARM',  suffixes: ['ERROR_NON_FLAT_POSITIONING_ALARM'] },
                
                    { key: 'OVERHEAT_ALARM',                    suffixes: ['ERROR_OVERHEAT_ALARM'] },
                
                    { key: 'UNDERVOLTAGE_ALARM',                suffixes: ['ERROR_UNDERVOLTAGE_ALARM'] },
                
                ];
                

                Wenn beides nicht erfolgreich war, dann brauche ich ein Protokoll mit Debug-Level 2 (Einstellungen)

                vG Looxer

                Edis77 1 Reply Last reply Reply Quote 0
                • Edis77
                  Edis77 @looxer01 last edited by Edis77

                  @looxer01
                  Ich habe jetzt erneut Skript installiert und nur an 2 Stellen geändert.

                  1. Bei HMIPAccessPoint Einstellungen
                    c9a2c1c8-1432-40b2-9ed9-4bcf69de4534-image.png

                  2. Telegram.
                    83eff8df-afd4-4efd-b2dc-e4affc2307b2-image.png

                  Wenn ich Skript starte bekomme ich Warnungen.
                  9f03f7ae-2cfa-4861-849b-3983597cfdcb-image.png

                  javascript.0	20:40:17.132	info	Stopping script script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint
                  javascript.0	20:40:17.220	info	Start JavaScript script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint (Javascript/js)
                  javascript.0	20:40:17.236	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Script: Servicemeldungen Volume 2 - Autor: Looxer01 Datum: 24.02.2025 Version:3.20 Routine:Start
                  javascript.0	20:40:17.236	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: HMIP AccessPoint bzw Cloud HCU sind aktiv - GeraeteTriggerID muss aktiviert sein - wurde aktiviert. Bitte auch manuell korrigieren und auf GeraeteTriggerID = true setzen Routine:Start
                  javascript.0	20:40:17.281	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Es wurden 69 IDs fuer alle Alarmtypen gefunden. Alle drei Filter (Instanzen, Alarmtypen, Einzel-IDs) angewendet Routine:Start
                  javascript.0	20:40:17.281	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNREACH_ALARM wurden 19 IDs gefunden Routine:Start
                  javascript.0	20:40:17.281	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: CONFIG_PENDING_ALARM wurden 19 IDs gefunden Routine:Start
                  javascript.0	20:40:17.281	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UPDATE_PENDING_ALARM wurden 0 IDs gefunden Routine:Start
                  javascript.0	20:40:17.281	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: LOWBAT_ALARM wurden 19 IDs gefunden Routine:Start
                  javascript.0	20:40:17.281	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: DEVICE_IN_BOOTLOADER_ALARM wurden 0 IDs gefunden Routine:Start
                  javascript.0	20:40:17.281	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR wurden 0 IDs gefunden Routine:Start
                  javascript.0	20:40:17.281	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: FAULT_REPORTING wurden 0 IDs gefunden Routine:Start
                  javascript.0	20:40:17.282	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: SABOTAGE_ALARM wurden 12 IDs gefunden Routine:Start
                  javascript.0	20:40:17.282	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR_NON_FLAT_POSITIONING_ALARM wurden 0 IDs gefunden Routine:Start
                  javascript.0	20:40:17.282	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: OVERHEAT_ALARM wurden 0 IDs gefunden Routine:Start
                  javascript.0	20:40:17.282	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNDERVOLTAGE_ALARM wurden 0 IDs gefunden Routine:Start
                  javascript.0	20:40:17.285	info	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: registered 70 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  javascript.0	20:40:17.338	warn	at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                  javascript.0	20:40:17.338	warn	at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:499:25)
                  javascript.0	20:40:17.338	warn	at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  javascript.0	20:40:17.338	warn	at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                  javascript.0	20:40:17.338	warn	at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                  javascript.0	20:40:17.339	warn	at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                  javascript.0	20:40:17.339	warn	at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:39)
                  javascript.0	20:40:17.339	warn	at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  javascript.0	20:40:17.339	warn	at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                  javascript.0	20:40:17.339	warn	at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                  

                  Wenn ich Sabotage simuliere, bekomme ich Fehler im log.
                  f5f16eb7-bd8d-4ed4-8e56-186d9a542288-image.png

                  Was meinst du mit Debug-Level 2?

                  3d5d2de3-a95b-43bd-9dda-34bb46dcc75b-image.png

                  Mein Log.

                  2025-02-27 20:52:29.766 - info: host.DebianIO stopInstance system.adapter.javascript.0 (force=false, process=true)
                  2025-02-27 20:52:29.770 - info: javascript.0 (92642) Got terminate signal TERMINATE_YOURSELF
                  2025-02-27 20:52:29.771 - info: javascript.0 (92642) Stopping script script.js.ECharts.2_PV
                  2025-02-27 20:52:29.772 - info: javascript.0 (92642) Stopping script script.js.ECharts.PV_Total_Output
                  2025-02-27 20:52:29.772 - info: javascript.0 (92642) Stopping script script.js.ECharts.SolarWerte_senden
                  2025-02-27 20:52:29.772 - info: javascript.0 (92642) Stopping script script.js.ECharts.Strom
                  2025-02-27 20:52:29.772 - info: javascript.0 (92642) Stopping script script.js.Rolladen_DP_vergleichen.DP_Alle_Rollladen_synchronisieren
                  2025-02-27 20:52:29.772 - info: javascript.0 (92642) Stopping script script.js.Rolladen_DP_vergleichen.DP_Rollladen_1Etage_synchronisieren
                  2025-02-27 20:52:29.773 - info: javascript.0 (92642) Stopping script script.js.Rolladen_DP_vergleichen.DP_Rollladen_2Etage_synchronisieren
                  2025-02-27 20:52:29.773 - info: javascript.0 (92642) Stopping script script.js.Rolladen_DP_vergleichen.DP_Rollladen_3Etage_synchronisieren
                  2025-02-27 20:52:29.773 - info: javascript.0 (92642) Stopping script script.js.Strom.Solar_Produziert_imsgesamt
                  2025-02-27 20:52:29.773 - info: javascript.0 (92642) Stopping script script.js.Strom.Verbrauch_Gestern
                  2025-02-27 20:52:29.773 - info: javascript.0 (92642) Stopping script script.js.ECharts.TagesStrom_verbrauch
                  2025-02-27 20:52:29.774 - info: javascript.0 (92642) Stopping script script.js.Roborock.GoTo_Roborock_Q8
                  2025-02-27 20:52:29.774 - info: javascript.0 (92642) Stopping script script.js.Strom.Waschmaschine_Verbrauch
                  2025-02-27 20:52:29.774 - info: javascript.0 (92642) Stopping script script.js.ECharts.Stromverbrauch_einzelne_Geräte
                  2025-02-27 20:52:29.774 - info: javascript.0 (92642) Stopping script script.js.Heizung_Zählerstand.Zählerstand_mit_Telegram_senden
                  2025-02-27 20:52:29.774 - info: javascript.0 (92642) Stopping script script.js.Fritzbox
                  2025-02-27 20:52:29.774 - info: javascript.0 (92642) Stopping script script.js.VIS.View_wechsel
                  2025-02-27 20:52:29.775 - info: javascript.0 (92642) Stopping script script.js.VIS.Wind_Umrechnung
                  2025-02-27 20:52:29.775 - info: javascript.0 (92642) Stopping script script.js.VIS.Anrufwarnung
                  2025-02-27 20:52:29.775 - info: javascript.0 (92642) Stopping script script.js.VIS.Go2rtc_Neustarten
                  2025-02-27 20:52:29.775 - info: javascript.0 (92642) Stopping script script.js.VIS.Kamera_in_VIS_einblenden
                  2025-02-27 20:52:29.775 - info: javascript.0 (92642) Stopping script script.js.Ventilatoren_Abends_ausschalten
                  2025-02-27 20:52:29.775 - info: javascript.0 (92642) Stopping script script.js.Reolink.Telegram_Meldung_-_Kamera_SD_Voll
                  2025-02-27 20:52:29.775 - info: javascript.0 (92642) Stopping script script.js.Roborock.RoborockQ8_in_Abwesenheit_starten_
                  2025-02-27 20:52:29.776 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Arbeitszimmer_Rollladen_Steuerung_durch_Fenstersensoren
                  2025-02-27 20:52:29.776 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Schlafzimmer_Rollladen_Steuerung_durch_Fenstersensoren
                  2025-02-27 20:52:29.776 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Emily_Rollladen_Steuerung_durch_Fenstersensoren
                  2025-02-27 20:52:29.776 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Sonnenschutz_70%
                  2025-02-27 20:52:29.776 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Terrasse
                  2025-02-27 20:52:29.776 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Rollladen-3Etage
                  2025-02-27 20:52:29.777 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Rollladen-2Etage
                  2025-02-27 20:52:29.777 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Rollladen-1Etage
                  2025-02-27 20:52:29.777 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Alle-Rollladen
                  2025-02-27 20:52:29.777 - info: javascript.0 (92642) Stopping script script.js.Rollladen_und_Fenster_Skripte.Fenster_Offen_oder_Geschlossen
                  2025-02-27 20:52:29.777 - info: javascript.0 (92642) Stopping script script.js.Gemeinsame_Skripte_.Anwesenheitsprüfung
                  2025-02-27 20:52:29.777 - info: javascript.0 (92642) Stopping script script.js.Klima_und_Lueftung.Wenn_Fenster_offen_und_kalt_Draußen
                  2025-02-27 20:52:29.777 - info: javascript.0 (92642) Stopping script script.js.Gemeinsame_Skripte_.Durchschnittliche_Helligkeit_berechnen
                  2025-02-27 20:52:29.778 - info: javascript.0 (92642) Stopping script script.js.Gemeinsame_Skripte_.Tag_Nacht
                  2025-02-27 20:52:29.778 - info: javascript.0 (92642) Stopping script script.js.Roborock.Roborock_S50_in_Abwesenheit_starten
                  2025-02-27 20:52:29.778 - info: javascript.0 (92642) Stopping script script.js.Klima_und_Lueftung.Lüftungsempfehlung
                  2025-02-27 20:52:29.782 - info: javascript.0 (92642) terminating
                  2025-02-27 20:52:29.782 - debug: javascript.0 (92642) Plugin sentry destroyed
                  2025-02-27 20:52:29.782 - info: javascript.0 (92642) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
                  2025-02-27 20:52:29.842 - info: host.DebianIO stopInstance system.adapter.javascript.0 send kill signal
                  2025-02-27 20:52:30.271 - info: javascript.0 (92642) terminating
                  2025-02-27 20:52:30.337 - info: host.DebianIO instance system.adapter.javascript.0 terminated with code 11 (ADAPTER_REQUESTED_TERMINATION)
                  2025-02-27 20:52:33.767 - info: host.DebianIO instance system.adapter.javascript.0 in version "8.8.3" started with pid 92966
                  2025-02-27 20:52:34.874 - debug: javascript.0 (92966) Redis Objects: Use Redis connection: 127.0.0.1:9001
                  2025-02-27 20:52:34.897 - debug: javascript.0 (92966) Objects client ready ... initialize now
                  2025-02-27 20:52:34.898 - debug: javascript.0 (92966) Objects create System PubSub Client
                  2025-02-27 20:52:34.899 - debug: javascript.0 (92966) Objects create User PubSub Client
                  2025-02-27 20:52:34.932 - debug: javascript.0 (92966) Objects client initialize lua scripts
                  2025-02-27 20:52:34.937 - debug: javascript.0 (92966) Objects connected to redis: 127.0.0.1:9001
                  2025-02-27 20:52:34.962 - debug: javascript.0 (92966) Redis States: Use Redis connection: 127.0.0.1:9000
                  2025-02-27 20:52:34.973 - debug: javascript.0 (92966) States create System PubSub Client
                  2025-02-27 20:52:34.974 - debug: javascript.0 (92966) States create User PubSub Client
                  2025-02-27 20:52:35.034 - debug: javascript.0 (92966) States connected to redis: 127.0.0.1:9000
                  2025-02-27 20:52:35.062 - debug: javascript.0 (92966) Plugin sentry Initialize Plugin (enabled=true)
                  2025-02-27 20:52:35.308 - info: javascript.0 (92966) starting. Version 8.8.3 in /opt/iobroker/node_modules/iobroker.javascript, node: v20.18.3, js-controller: 7.0.6
                  2025-02-27 20:52:35.325 - debug: javascript.0 (92966) config.subscribe (Do not subscribe all states on start): false
                  2025-02-27 20:52:35.328 - debug: javascript.0 (92966) Custom libraries in config: "dewpoint simple-ssh": ["dewpoint","simple-ssh"]
                  2025-02-27 20:52:35.339 - debug: javascript.0 (92966) Found installed libraries: ["dewpoint","simple-ssh"]
                  2025-02-27 20:52:35.340 - debug: javascript.0 (92966) Found custom library in config: "dewpoint@latest"
                  2025-02-27 20:52:40.058 - debug: javascript.0 (92966) Installed custom library: "dewpoint@latest"
                  2025-02-27 20:52:40.060 - debug: javascript.0 (92966) Found custom library in config: "simple-ssh@latest"
                  2025-02-27 20:52:43.493 - info: admin.0 (329) ==> Connected system.user.admin from ::ffff:192.168.178.20
                  2025-02-27 20:52:44.243 - debug: javascript.0 (92966) Installed custom library: "simple-ssh@latest"
                  2025-02-27 20:52:44.306 - debug: javascript.0 (92966) Loaded TypeScript definitions for node: ["node_modules/@types/node/package.json","node_modules/@types/node/index.d.ts","node_modules/@types/node/globals.typedarray.d.ts","node_modules/@types/node/buffer.buffer.d.ts","node_modules/@types/node/assert.d.ts","node_modules/@types/node/assert/strict.d.ts","node_modules/@types/node/globals.d.ts","node_modules/@types/node/async_hooks.d.ts","node_modules/@types/node/buffer.d.ts","node_modules/@types/node/child_process.d.ts","node_modules/@types/node/cluster.d.ts","node_modules/@types/node/console.d.ts","node_modules/@types/node/constants.d.ts","node_modules/@types/node/crypto.d.ts","node_modules/@types/node/dgram.d.ts","node_modules/@types/node/diagnostics_channel.d.ts","node_modules/@types/node/dns.d.ts","node_modules/@types/node/dns/promises.d.ts","node_modules/@types/node/domain.d.ts","node_modules/@types/node/dom-events.d.ts","node_modules/@types/node/events.d.ts","node_modules/@types/node/fs.d.ts","node_modules/@types/node/fs/promises.d.ts","node_modules/@types/node/http.d.ts","node_modules/@types/node/http2.d.ts","node_modules/@types/node/https.d.ts","node_modules/@types/node/inspector.d.ts","node_modules/@types/node/module.d.ts","node_modules/@types/node/net.d.ts","node_modules/@types/node/os.d.ts","node_modules/@types/node/path.d.ts","node_modules/@types/node/perf_hooks.d.ts","node_modules/@types/node/process.d.ts","node_modules/@types/node/punycode.d.ts","node_modules/@types/node/querystring.d.ts","node_modules/@types/node/readline.d.ts","node_modules/@types/node/readline/promises.d.ts","node_modules/@types/node/repl.d.ts","node_modules/@types/node/sea.d.ts","node_modules/@types/node/sqlite.d.ts","node_modules/@types/node/stream.d.ts","node_modules/@types/node/stream/promises.d.ts","node_modules/@types/node/stream/consumers.d.ts","node_modules/@types/node/stream/web.d.ts","node_modules/@types/node/string_decoder.d.ts","node_modules/@types/node/test.d.ts","node_modules/@types/node/timers.d.ts","node_modules/@types/node/timers/promises.d.ts","node_modules/@types/node/tls.d.ts","node_modules/@types/node/trace_events.d.ts","node_modules/@types/node/tty.d.ts","node_modules/@types/node/url.d.ts","node_modules/@types/node/util.d.ts","node_modules/@types/node/v8.d.ts","node_modules/@types/node/vm.d.ts","node_modules/@types/node/wasi.d.ts","node_modules/@types/node/worker_threads.d.ts","node_modules/@types/node/zlib.d.ts","node_modules/@types/node/globals.global.d.ts"]
                  2025-02-27 20:52:44.320 - debug: javascript.0 (92966) Loaded TypeScript definitions for request: ["node_modules/@types/request/package.json","node_modules/@types/request/index.d.ts"]
                  2025-02-27 20:52:44.695 - info: javascript.0 (92966) requesting all states
                  2025-02-27 20:52:44.696 - info: javascript.0 (92966) requesting all objects
                  2025-02-27 20:52:45.621 - info: javascript.0 (92966) received all objects
                  2025-02-27 20:52:45.797 - info: javascript.0 (92966) received all states
                  2025-02-27 20:52:45.800 - debug: javascript.0 (92966) [sunTimeSchedules] Times: {"solarNoon":"2025-02-27T11:32:13.232Z","nadir":"2025-02-27T23:32:13.232Z","sunrise":"2025-02-27T06:12:01.656Z","sunset":"2025-02-27T16:52:24.808Z","sunriseEnd":"2025-02-27T06:15:42.699Z","sunsetStart":"2025-02-27T16:48:43.765Z","dawn":"2025-02-27T05:36:46.515Z","dusk":"2025-02-27T17:27:39.949Z","nauticalDawn":"2025-02-27T04:56:21.555Z","nauticalDusk":"2025-02-27T18:08:04.909Z","nightEnd":"2025-02-27T04:15:42.593Z","night":"2025-02-27T18:48:43.871Z","goldenHourEnd":"2025-02-27T07:00:21.786Z","goldenHour":"2025-02-27T16:04:04.678Z"}
                  2025-02-27 20:52:45.870 - info: javascript.0 (92966) Start JavaScript script.js.ECharts.2_PV (Blockly)
                  2025-02-27 20:52:45.901 - info: javascript.0 (92966) script.js.ECharts.2_PV: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.901 - info: javascript.0 (92966) Start JavaScript script.js.ECharts.PV_Total_Output (Blockly)
                  2025-02-27 20:52:45.905 - info: javascript.0 (92966) script.js.ECharts.PV_Total_Output: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.905 - info: javascript.0 (92966) Start JavaScript script.js.ECharts.SolarWerte_senden (Blockly)
                  2025-02-27 20:52:45.909 - info: javascript.0 (92966) script.js.ECharts.SolarWerte_senden: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.909 - info: javascript.0 (92966) Start JavaScript script.js.ECharts.Strom (Blockly)
                  2025-02-27 20:52:45.912 - info: javascript.0 (92966) script.js.ECharts.Strom: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.912 - info: javascript.0 (92966) Start JavaScript script.js.Rolladen_DP_vergleichen.DP_Alle_Rollladen_synchronisieren (Blockly)
                  2025-02-27 20:52:45.916 - info: javascript.0 (92966) script.js.Rolladen_DP_vergleichen.DP_Alle_Rollladen_synchronisieren: registered 7 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.916 - info: javascript.0 (92966) Start JavaScript script.js.Rolladen_DP_vergleichen.DP_Rollladen_1Etage_synchronisieren (Blockly)
                  2025-02-27 20:52:45.920 - info: javascript.0 (92966) script.js.Rolladen_DP_vergleichen.DP_Rollladen_1Etage_synchronisieren: registered 3 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.920 - info: javascript.0 (92966) Start JavaScript script.js.Rolladen_DP_vergleichen.DP_Rollladen_2Etage_synchronisieren (Blockly)
                  2025-02-27 20:52:45.924 - info: javascript.0 (92966) script.js.Rolladen_DP_vergleichen.DP_Rollladen_2Etage_synchronisieren: registered 2 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.924 - info: javascript.0 (92966) Start JavaScript script.js.Rolladen_DP_vergleichen.DP_Rollladen_3Etage_synchronisieren (Blockly)
                  2025-02-27 20:52:45.928 - info: javascript.0 (92966) script.js.Rolladen_DP_vergleichen.DP_Rollladen_3Etage_synchronisieren: registered 2 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.929 - info: javascript.0 (92966) Start JavaScript script.js.Strom.Solar_Produziert_imsgesamt (Blockly)
                  2025-02-27 20:52:45.975 - info: javascript.0 (92966) script.js.Strom.Solar_Produziert_imsgesamt: registered 1 subscription, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.975 - info: javascript.0 (92966) Start JavaScript script.js.Strom.Verbrauch_Gestern (Blockly)
                  2025-02-27 20:52:45.985 - info: javascript.0 (92966) script.js.Strom.Verbrauch_Gestern: registered 3 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.986 - info: javascript.0 (92966) Start JavaScript script.js.ECharts.TagesStrom_verbrauch (Blockly)
                  2025-02-27 20:52:45.990 - info: javascript.0 (92966) script.js.ECharts.TagesStrom_verbrauch: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.990 - info: javascript.0 (92966) Start JavaScript script.js.Roborock.GoTo_Roborock_Q8 (Blockly)
                  2025-02-27 20:52:45.996 - info: javascript.0 (92966) script.js.Roborock.GoTo_Roborock_Q8: registered 1 subscription, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:45.997 - info: javascript.0 (92966) Start JavaScript script.js.Strom.Waschmaschine_Verbrauch (Blockly)
                  2025-02-27 20:52:46.000 - info: javascript.0 (92966) script.js.Strom.Waschmaschine_Verbrauch: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.005 - info: javascript.0 (92966) Start JavaScript script.js.ECharts.Stromverbrauch_einzelne_Geräte (Blockly)
                  2025-02-27 20:52:46.009 - info: javascript.0 (92966) script.js.ECharts.Stromverbrauch_einzelne_Geräte: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.010 - info: javascript.0 (92966) Start JavaScript script.js.Heizung_Zählerstand.Zählerstand_mit_Telegram_senden (Blockly)
                  2025-02-27 20:52:46.013 - info: javascript.0 (92966) script.js.Heizung_Zählerstand.Zählerstand_mit_Telegram_senden: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.014 - info: javascript.0 (92966) Start JavaScript script.js.Fritzbox (Javascript/js)
                  2025-02-27 20:52:46.019 - info: javascript.0 (92966) script.js.Fritzbox: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.020 - info: javascript.0 (92966) Start JavaScript script.js.VIS.View_wechsel (Javascript/js)
                  2025-02-27 20:52:46.023 - info: javascript.0 (92966) script.js.VIS.View_wechsel: Total 8 entries
                  2025-02-27 20:52:46.023 - info: javascript.0 (92966) script.js.VIS.View_wechsel: registered 3 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.024 - info: javascript.0 (92966) Start JavaScript script.js.VIS.Wind_Umrechnung (Blockly)
                  2025-02-27 20:52:46.027 - info: javascript.0 (92966) script.js.VIS.Wind_Umrechnung: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.034 - info: javascript.0 (92966) Start JavaScript script.js.VIS.Anrufwarnung (Blockly)
                  2025-02-27 20:52:46.039 - info: javascript.0 (92966) script.js.VIS.Anrufwarnung: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.040 - info: javascript.0 (92966) Start JavaScript script.js.VIS.Go2rtc_Neustarten (Blockly)
                  2025-02-27 20:52:46.043 - info: javascript.0 (92966) script.js.VIS.Go2rtc_Neustarten: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.044 - info: javascript.0 (92966) Start JavaScript script.js.VIS.Kamera_in_VIS_einblenden (Blockly)
                  2025-02-27 20:52:46.047 - info: javascript.0 (92966) script.js.VIS.Kamera_in_VIS_einblenden: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.047 - info: javascript.0 (92966) Start JavaScript script.js.Ventilatoren_Abends_ausschalten (Blockly)
                  2025-02-27 20:52:46.054 - info: javascript.0 (92966) script.js.Ventilatoren_Abends_ausschalten: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.054 - info: javascript.0 (92966) Start JavaScript script.js.Reolink.Telegram_Meldung_-_Kamera_SD_Voll (Blockly)
                  2025-02-27 20:52:46.057 - info: javascript.0 (92966) script.js.Reolink.Telegram_Meldung_-_Kamera_SD_Voll: subscribe: {"pattern":{"id":"reolink.0.disc.free","change":"ne","q":0},"name":"script.js.Reolink.Telegram_Meldung_-_Kamera_SD_Voll"}
                  2025-02-27 20:52:46.058 - info: javascript.0 (92966) script.js.Reolink.Telegram_Meldung_-_Kamera_SD_Voll: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.058 - info: javascript.0 (92966) Start JavaScript script.js.Roborock.RoborockQ8_in_Abwesenheit_starten_ (Blockly)
                  2025-02-27 20:52:46.067 - info: javascript.0 (92966) script.js.Roborock.RoborockQ8_in_Abwesenheit_starten_: registered 2 subscriptions, 3 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.067 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Arbeitszimmer_Rollladen_Steuerung_durch_Fenstersensoren (Blockly)
                  2025-02-27 20:52:46.071 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Arbeitszimmer_Rollladen_Steuerung_durch_Fenstersensoren: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.075 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Schlafzimmer_Rollladen_Steuerung_durch_Fenstersensoren (Blockly)
                  2025-02-27 20:52:46.079 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Schlafzimmer_Rollladen_Steuerung_durch_Fenstersensoren: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.079 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Emily_Rollladen_Steuerung_durch_Fenstersensoren (Blockly)
                  2025-02-27 20:52:46.083 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Emily_Rollladen_Steuerung_durch_Fenstersensoren: registered 2 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.084 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Sonnenschutz_70% (Blockly)
                  2025-02-27 20:52:46.093 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Sonnenschutz_70%: registered 2 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.093 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Terrasse (Blockly)
                  2025-02-27 20:52:46.096 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Terrasse: registered 2 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.097 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Rollladen-3Etage (Blockly)
                  2025-02-27 20:52:46.101 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Rollladen-3Etage: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.101 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Rollladen-2Etage (Blockly)
                  2025-02-27 20:52:46.104 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Rollladen-2Etage: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.104 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Rollladen-1Etage (Blockly)
                  2025-02-27 20:52:46.107 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Rollladen-1Etage: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.108 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Alle-Rollladen (Blockly)
                  2025-02-27 20:52:46.111 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Alle-Rollladen: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.111 - info: javascript.0 (92966) Start JavaScript script.js.Rollladen_und_Fenster_Skripte.Fenster_Offen_oder_Geschlossen (Blockly)
                  2025-02-27 20:52:46.183 - info: javascript.0 (92966) script.js.Rollladen_und_Fenster_Skripte.Fenster_Offen_oder_Geschlossen: registered 21 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.183 - info: javascript.0 (92966) Start JavaScript script.js.Gemeinsame_Skripte_.Anwesenheitsprüfung (Blockly)
                  2025-02-27 20:52:46.187 - info: javascript.0 (92966) script.js.Gemeinsame_Skripte_.Anwesenheitsprüfung: registered 3 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.187 - info: javascript.0 (92966) Start JavaScript script.js.Klima_und_Lueftung.Wenn_Fenster_offen_und_kalt_Draußen (Blockly)
                  2025-02-27 20:52:46.191 - info: javascript.0 (92966) script.js.Klima_und_Lueftung.Wenn_Fenster_offen_und_kalt_Draußen: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.204 - info: javascript.0 (92966) Start JavaScript script.js.Gemeinsame_Skripte_.Durchschnittliche_Helligkeit_berechnen (Blockly)
                  2025-02-27 20:52:46.209 - info: javascript.0 (92966) script.js.Gemeinsame_Skripte_.Durchschnittliche_Helligkeit_berechnen: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.209 - info: javascript.0 (92966) Start JavaScript script.js.Gemeinsame_Skripte_.Tag_Nacht (Blockly)
                  2025-02-27 20:52:46.213 - info: javascript.0 (92966) script.js.Gemeinsame_Skripte_.Tag_Nacht: registered 1 subscription, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.214 - info: javascript.0 (92966) Start JavaScript script.js.Roborock.Roborock_S50_in_Abwesenheit_starten (Blockly)
                  2025-02-27 20:52:46.219 - info: javascript.0 (92966) script.js.Roborock.Roborock_S50_in_Abwesenheit_starten: registered 2 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.219 - info: javascript.0 (92966) Start JavaScript script.js.Klima_und_Lueftung.Lüftungsempfehlung (Javascript/js)
                  2025-02-27 20:52:46.226 - info: javascript.0 (92966) script.js.Klima_und_Lueftung.Lüftungsempfehlung: Aussen: kein Aussensensor angegeben. ### Messpunkte werden als Aussensensoren behandelt. ###
                  2025-02-27 20:52:46.237 - info: javascript.0 (92966) script.js.Klima_und_Lueftung.Lüftungsempfehlung: Datenpunkte angelegt
                  2025-02-27 20:52:46.237 - info: javascript.0 (92966) script.js.Klima_und_Lueftung.Lüftungsempfehlung: registered 0 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:46.460 - debug: javascript.0 (92966) [sunTimeSchedules] Next: 2025-02-27T23:00:01.000Z
                  2025-02-27 20:52:47.650 - info: javascript.0 (92966) Start JavaScript script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint (Javascript/js)
                  2025-02-27 20:52:47.656 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Script: Servicemeldungen Volume 2 - Autor: Looxer01 Datum: 24.02.2025 Version:3.20 Routine:Start
                  2025-02-27 20:52:47.656 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: HMIP AccessPoint bzw Cloud HCU sind aktiv - GeraeteTriggerID muss aktiviert sein - wurde aktiviert. Bitte auch manuell korrigieren und auf GeraeteTriggerID = true setzen Routine:Start
                  2025-02-27 20:52:47.687 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Es wurden 69 IDs fuer alle Alarmtypen gefunden. Alle drei Filter (Instanzen, Alarmtypen, Einzel-IDs) angewendet Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNREACH_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: CONFIG_PENDING_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UPDATE_PENDING_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: LOWBAT_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: DEVICE_IN_BOOTLOADER_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR wurden 0 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: FAULT_REPORTING wurden 0 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: SABOTAGE_ALARM wurden 12 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR_NON_FLAT_POSITIONING_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.688 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: OVERHEAT_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.689 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNDERVOLTAGE_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 20:52:47.691 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: registered 70 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 20:52:47.744 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                  2025-02-27 20:52:47.749 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                  2025-02-27 20:52:47.749 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:499:25)
                  2025-02-27 20:52:47.749 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 20:52:47.749 - warn: javascript.0 (92966) at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                  2025-02-27 20:52:47.750 - warn: javascript.0 (92966) at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                  2025-02-27 20:52:47.750 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                  2025-02-27 20:52:47.750 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                  2025-02-27 20:52:47.750 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:39)
                  2025-02-27 20:52:47.751 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 20:52:47.751 - warn: javascript.0 (92966) at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                  2025-02-27 20:52:47.751 - warn: javascript.0 (92966) at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                  2025-02-27 20:52:48.238 - info: javascript.0 (92966) script.js.Klima_und_Lueftung.Lüftungsempfehlung: Subscriptions angelegt: 10
                  2025-02-27 20:52:49.525 - info: admin.0 (329) <== Disconnect system.user.admin from ::ffff:192.168.178.20 javascript
                  2025-02-27 20:56:44.222 - info: admin.0 (329) ==> Connected system.user.admin from ::ffff:192.168.178.20
                  2025-02-27 20:57:15.517 - info: admin.0 (329) ==> Connected system.user.admin from ::ffff:192.168.178.20
                  2025-02-27 21:01:34.941 - info: javascript.0 (92966) Stopping script script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint
                  2025-02-27 21:01:35.031 - info: javascript.0 (92966) Start JavaScript script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint (Javascript/js)
                  2025-02-27 21:01:35.048 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Script: Servicemeldungen Volume 2 - Autor: Looxer01 Datum: 24.02.2025 Version:3.20 Routine:Start
                  2025-02-27 21:01:35.048 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: HMIP AccessPoint bzw Cloud HCU sind aktiv - GeraeteTriggerID muss aktiviert sein - wurde aktiviert. Bitte auch manuell korrigieren und auf GeraeteTriggerID = true setzen Routine:Start
                  2025-02-27 21:01:35.091 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Es wurden 69 IDs fuer alle Alarmtypen gefunden. Alle drei Filter (Instanzen, Alarmtypen, Einzel-IDs) angewendet Routine:Start
                  2025-02-27 21:01:35.091 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNREACH_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.091 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: CONFIG_PENDING_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.091 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UPDATE_PENDING_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.091 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: LOWBAT_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.091 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: DEVICE_IN_BOOTLOADER_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.091 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.092 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: FAULT_REPORTING wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.092 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: SABOTAGE_ALARM wurden 12 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.092 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR_NON_FLAT_POSITIONING_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.092 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: OVERHEAT_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.092 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNDERVOLTAGE_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:01:35.095 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: registered 70 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 21:01:35.149 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                  2025-02-27 21:01:35.151 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                  2025-02-27 21:01:35.151 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:499:25)
                  2025-02-27 21:01:35.151 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 21:01:35.151 - warn: javascript.0 (92966) at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                  2025-02-27 21:01:35.151 - warn: javascript.0 (92966) at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                  2025-02-27 21:01:35.151 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                  2025-02-27 21:01:35.152 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                  2025-02-27 21:01:35.152 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:39)
                  2025-02-27 21:01:35.152 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 21:01:35.152 - warn: javascript.0 (92966) at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                  2025-02-27 21:01:35.152 - warn: javascript.0 (92966) at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                  2025-02-27 21:01:39.942 - info: admin.0 (329) <== Disconnect system.user.admin from ::ffff:192.168.178.20 javascript
                  2025-02-27 21:01:50.053 - info: admin.0 (329) ==> Connected system.user.admin from ::ffff:192.168.178.20
                  2025-02-27 21:02:06.170 - info: javascript.0 (92966) Stopping script script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint
                  2025-02-27 21:02:06.263 - info: javascript.0 (92966) Start JavaScript script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint (Javascript/js)
                  2025-02-27 21:02:06.278 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Script: Servicemeldungen Volume 2 - Autor: Looxer01 Datum: 24.02.2025 Version:3.20 Routine:Start
                  2025-02-27 21:02:06.279 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: HMIP AccessPoint bzw Cloud HCU sind aktiv - GeraeteTriggerID muss aktiviert sein - wurde aktiviert. Bitte auch manuell korrigieren und auf GeraeteTriggerID = true setzen Routine:Start
                  2025-02-27 21:02:06.322 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Es wurden 69 IDs fuer alle Alarmtypen gefunden. Alle drei Filter (Instanzen, Alarmtypen, Einzel-IDs) angewendet Routine:Start
                  2025-02-27 21:02:06.323 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNREACH_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.323 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: CONFIG_PENDING_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.323 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UPDATE_PENDING_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.323 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: LOWBAT_ALARM wurden 19 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.323 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: DEVICE_IN_BOOTLOADER_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.323 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.323 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: FAULT_REPORTING wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.323 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: SABOTAGE_ALARM wurden 12 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.324 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR_NON_FLAT_POSITIONING_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.324 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: OVERHEAT_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.324 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNDERVOLTAGE_ALARM wurden 0 IDs gefunden Routine:Start
                  2025-02-27 21:02:06.326 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: registered 70 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                  2025-02-27 21:02:06.379 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                  2025-02-27 21:02:06.380 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                  2025-02-27 21:02:06.381 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:499:25)
                  2025-02-27 21:02:06.381 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 21:02:06.381 - warn: javascript.0 (92966) at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                  2025-02-27 21:02:06.381 - warn: javascript.0 (92966) at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                  2025-02-27 21:02:06.381 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                  2025-02-27 21:02:06.382 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                  2025-02-27 21:02:06.382 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:39)
                  2025-02-27 21:02:06.382 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 21:02:06.382 - warn: javascript.0 (92966) at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                  2025-02-27 21:02:06.382 - warn: javascript.0 (92966) at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                  2025-02-27 21:03:29.764 - info: web.0 (647) <== Disconnect system.user.admin from ::ffff:192.168.178.20 vis.0
                  2025-02-27 21:06:04.331 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Subscription Datenpunkt Wert geaendert fuer hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage wird ausgefuehrt Routine:SubscribeGeraeteID
                  2025-02-27 21:06:04.332 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                  2025-02-27 21:06:04.334 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                  2025-02-27 21:06:04.334 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:499:25)
                  2025-02-27 21:06:04.334 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 21:06:04.334 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                  2025-02-27 21:06:04.334 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                  2025-02-27 21:06:04.335 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                  2025-02-27 21:06:04.335 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                  2025-02-27 21:06:04.335 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                  2025-02-27 21:06:04.336 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                  2025-02-27 21:06:04.336 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:39)
                  2025-02-27 21:06:04.336 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 21:06:04.336 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                  2025-02-27 21:06:04.336 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                  2025-02-27 21:06:04.336 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                  2025-02-27 21:06:04.336 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                  2025-02-27 21:06:04.337 - error: javascript.0 (92966) Error in callback: TypeError: Cannot read properties of null (reading 'replace')
                  2025-02-27 21:06:04.338 - error: javascript.0 (92966) at ReplaceString (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:808:25)
                  2025-02-27 21:06:04.338 - error: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:25)
                  2025-02-27 21:06:04.338 - error: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                  2025-02-27 21:06:04.338 - error: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                  2025-02-27 21:06:04.338 - error: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                  2025-02-27 21:06:04.338 - error: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                  2025-02-27 21:06:04.338 - error: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                  2025-02-27 21:06:04.351 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Subscription Datenpunkt Wert geaendert fuer hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage wird ausgefuehrt Routine:SubscribeGeraeteID
                  2025-02-27 21:06:04.402 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                  2025-02-27 21:06:04.403 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                  2025-02-27 21:06:04.403 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:439:29)
                  2025-02-27 21:06:04.403 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                  2025-02-27 21:06:04.403 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                  2025-02-27 21:06:04.403 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                  2025-02-27 21:06:04.403 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                  2025-02-27 21:06:04.403 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                  2025-02-27 21:06:04.404 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                  2025-02-27 21:06:04.404 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:440:29)
                  2025-02-27 21:06:04.404 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                  2025-02-27 21:06:04.404 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                  2025-02-27 21:06:04.404 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                  2025-02-27 21:06:04.404 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                  2025-02-27 21:06:04.404 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                  2025-02-27 21:06:04.405 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                  2025-02-27 21:06:04.405 - warn: javascript.0 (92966) at DefineServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:572:39)
                  2025-02-27 21:06:04.405 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:442:31)
                  2025-02-27 21:06:04.405 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                  2025-02-27 21:06:04.405 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                  2025-02-27 21:06:04.405 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                  2025-02-27 21:06:04.405 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                  2025-02-27 21:06:04.407 - error: javascript.0 (92966) Error in callback: TypeError: Cannot read properties of null (reading 'replace')
                  2025-02-27 21:06:04.407 - error: javascript.0 (92966) at ReplaceString (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:808:25)
                  2025-02-27 21:06:04.407 - error: javascript.0 (92966) at DefineServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:572:25)
                  2025-02-27 21:06:04.407 - error: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:442:31)
                  2025-02-27 21:06:04.408 - error: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                  2025-02-27 21:06:04.408 - error: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                  2025-02-27 21:06:04.408 - error: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                  2025-02-27 21:06:04.408 - error: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                  2025-02-27 21:06:09.351 - info: tuya.0 (69976) bf14df5b52ddcbe53bpl68: Connect locally to device
                  2025-02-27 21:06:09.351 - info: tuya.0 (69976) bf14df5b52ddcbe53bpl68 Init with IP=192.168.178.187, Key=rCcyKb8pI53kA?73, Version=3.4
                  2025-02-27 21:06:14.352 - info: tuya.0 (69976) bf14df5b52ddcbe53bpl68: Error on Reconnect (1): connection timed out
                  2025-02-27 21:06:37.441 - info: tuya.0 (69976) bf14df5b52ddcbe53bpl68: Error on Reconnect (3): connect EHOSTUNREACH 192.168.178.187:6668
                  2025-02-27 21:07:20.512 - info: tuya.0 (69976) bf14df5b52ddcbe53bpl68: Error on Reconnect (5): connect EHOSTUNREACH 192.168.178.187:6668
                  2025-02-27 21:08:23.617 - info: tuya.0 (69976) bf14df5b52ddcbe53bpl68: Error on Reconnect (7): connect EHOSTUNREACH 192.168.178.187:6668
                  2025-02-27 21:11:56.252 - info: admin.0 (329) <== Disconnect system.user.admin from ::ffff:192.168.178.20 javascript
                  
                  
                  L 1 Reply Last reply Reply Quote 0
                  • L
                    looxer01 @Edis77 last edited by looxer01

                    @edis77
                    Hi,
                    Ich sehe, dass du den Accesspoint und Homematic IP nutzt.
                    Dann sollte das kein Thema bezüglich der Sticky Nachrichten sein.
                    Lief denn das Script in Version 3.10 ?

                    Läuft das script, wenn du den Accesspoint auf 9 einstellst ?

                    Das Protokoll, das ich benötige wird erzeugt wenn du folgenden Eintrag machst:

                    const debugLevel = 2 ;   
                    

                    EDIT: bitte lass das script auch mal laufen mit der Einstellung:

                    let GeraeteIDTrigger = false;
                    

                    vG Looxer

                    Edis77 1 Reply Last reply Reply Quote 0
                    • Edis77
                      Edis77 @looxer01 last edited by

                      @looxer01
                      Ich habe nur Accesspoint.
                      Wenn ich Accesspoint auf 9 setze, dann habe ich keine Fehlermeldungen. Aber auch keine Servicemeldungen mehr.

                      ich habe jetzt Debug Level auf 2 gestellt.
                      Die "GeraeteIDTrigger" war bereits auf false.

                      a95e7acc-cf84-4513-b53e-acf7a67cc3ef-image.png

                      Anbei mein Log:

                      2025-02-27 22:46:09.824 - info: admin.0 (329) ==> Connected system.user.admin from ::ffff:192.168.178.20
                      2025-02-27 22:46:14.409 - info: javascript.0 (92966) Start JavaScript script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint (Javascript/js)
                      2025-02-27 22:46:14.423 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Script: Servicemeldungen Volume 2 - Autor: Looxer01 Datum: 24.02.2025 Version:3.20 Routine:Start
                      2025-02-27 22:46:14.423 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: HMIP AccessPoint bzw Cloud HCU sind aktiv - GeraeteTriggerID muss aktiviert sein - wurde aktiviert. Bitte auch manuell korrigieren und auf GeraeteTriggerID = true setzen Routine:Start
                      2025-02-27 22:46:14.423 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: HMClassicInstanz: 9; HMIPInstanz: 1; WiredIClassicInstanz: 9; GruppenInstanz: 9 Routine:Start
                      2025-02-27 22:46:14.424 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Inhalt instanceIds: [{"name":"HMClassicInstanz","adapter":"hm-rpc","Instanz":9},{"name":"HMIPInstanz","adapter":"hm-rpc","Instanz":1},{"name":"GruppenInstanz","adapter":"hm-rpc","Instanz":9},{"name":"WiredIClassicInstanz","adapter":"hm-rpc","Instanz":9},{"name":"HMIPAccessPoint","adapter":"hmip","Instanz":0}] Routine:Start
                      2025-02-27 22:46:14.424 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: GeraeteIDTrigger: true Routine:Start
                      2025-02-27 22:46:14.424 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Inhalt Messengerscope: {"UNREACH_ALARM":[false,false,false,false,false,false,false],"STICKY_UNREACH_ALARM":[false,false,false,false,false,false,false],"LOWBAT_ALARM":[false,false,false,true,false,false,false],"SABOTAGE_ALARM":[false,false,false,true,false,false,false],"STICKY_SABOTAGE_ALARM":[false,false,false,false,false,false,false],"CONFIG_PENDING_ALARM":[false,false,false,false,false,false,false],"Sonstige":[false,false,false,false,false,false,false],"keineSM":[false,false,false,false,false,false,false]} Routine:Start
                      2025-02-27 22:46:14.424 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Inhalt Services: ["email","whatsApp","Signal","Telegram","Pushover","Pushsafer","Pushsafer"] Routine:Start
                      2025-02-27 22:46:14.424 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Inhalt Messenger-Instanzen: [0,0,0,0,0,0,1] Routine:Start
                      2025-02-27 22:46:14.424 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Inhalt TextTypeKurz: [false,true,true,true,true,true,false] Routine:Start
                      2025-02-27 22:46:14.470 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Es wurden 69 IDs fuer alle Alarmtypen gefunden. Alle drei Filter (Instanzen, Alarmtypen, Einzel-IDs) angewendet Routine:Start
                      2025-02-27 22:46:14.470 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNREACH_ALARM wurden 19 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: STICKY_UNREACH_ALARM wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: CONFIG_PENDING_ALARM wurden 19 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UPDATE_PENDING_ALARM wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: LOWBAT_ALARM wurden 19 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: DEVICE_IN_BOOTLOADER_ALARM wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: FAULT_REPORTING wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: SABOTAGE_ALARM wurden 12 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: STICKY_SABOTAGE_ALARM wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: ERROR_NON_FLAT_POSITIONING_ALARM wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: OVERHEAT_ALARM wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: fuer den Alarmtype: UNDERVOLTAGE_ALARM wurden 0 IDs gefunden Routine:Start
                      2025-02-27 22:46:14.471 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine wird ausgefuehrt Routine:CreateStates
                      2025-02-27 22:46:14.472 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine SubscribeGeraeteID wird ausgefuehrt Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.472 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Erstellung der Subscriptions - Prozessiere selector: UNREACH_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.472 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for STICKY_UNREACH_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.472 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Erstellung der Subscriptions - Prozessiere selector: CONFIG_PENDING_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.472 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for UPDATE_PENDING_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.472 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Erstellung der Subscriptions - Prozessiere selector: LOWBAT_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.473 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for DEVICE_IN_BOOTLOADER_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.473 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for ERROR Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.473 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for FAULT_REPORTING Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.473 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Erstellung der Subscriptions - Prozessiere selector: SABOTAGE_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.473 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for STICKY_SABOTAGE_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.473 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for ERROR_NON_FLAT_POSITIONING_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.473 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for OVERHEAT_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.473 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: No matching states found for UNDERVOLTAGE_ALARM Routine:SubscribeGeraeteID
                      2025-02-27 22:46:14.474 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: registered 70 subscriptions, 1 schedule, 0 messages, 0 logs and 0 file subscriptions
                      2025-02-27 22:46:14.529 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine Check_All wird ausgefuehrt Routine:Check_All
                      2025-02-27 22:46:14.530 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType nativeType Routine:ExtractMetaData
                      2025-02-27 22:46:14.530 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType meldungsart Routine:ExtractMetaData
                      2025-02-27 22:46:14.530 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType CommonName Routine:ExtractMetaData
                      2025-02-27 22:46:14.530 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType GeraeteID Routine:ExtractMetaData
                      2025-02-27 22:46:14.530 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType meldungsart Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine DefineServiceMessage wird ausgefuehrt meldungsart sabotage und ID:hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage Routine:DefineServiceMessage
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType adapter Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType GeraeteID Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType CommonName Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType meldungsart Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine DefineServiceMessage wird ausgefuehrt meldungsart sabotage und ID:hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage Routine:DefineServiceMessage
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType adapter Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType GeraeteID Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage ExtractType CommonName Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine wird ausgefuehrt Routine:func_Batterie
                      2025-02-27 22:46:14.531 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType nativeType Routine:ExtractMetaData
                      2025-02-27 22:46:14.531 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                      2025-02-27 22:46:14.532 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                      2025-02-27 22:46:14.532 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:499:25)
                      2025-02-27 22:46:14.532 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                      2025-02-27 22:46:14.532 - warn: javascript.0 (92966) at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                      2025-02-27 22:46:14.532 - warn: javascript.0 (92966) at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                      2025-02-27 22:46:14.532 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType meldungsart Routine:ExtractMetaData
                      2025-02-27 22:46:14.532 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType CommonName Routine:ExtractMetaData
                      2025-02-27 22:46:14.532 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                      2025-02-27 22:46:14.533 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                      2025-02-27 22:46:14.533 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:39)
                      2025-02-27 22:46:14.533 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                      2025-02-27 22:46:14.533 - warn: javascript.0 (92966) at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:305:22
                      2025-02-27 22:46:14.533 - warn: javascript.0 (92966) at CreateStates (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1143:25)
                      2025-02-27 22:46:31.193 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Subscription Datenpunkt Wert geaendert fuer hmip.0.devices.3014F711A00007E0C9AAC70B.channels.0.sabotage wird ausgefuehrt Routine:SubscribeGeraeteID
                      2025-02-27 22:46:31.194 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine Check_All wird ausgefuehrt Routine:Check_All
                      2025-02-27 22:46:31.194 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType nativeType Routine:ExtractMetaData
                      2025-02-27 22:46:31.195 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                      2025-02-27 22:46:31.196 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                      2025-02-27 22:46:31.196 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:499:25)
                      2025-02-27 22:46:31.196 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                      2025-02-27 22:46:31.196 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                      2025-02-27 22:46:31.196 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                      2025-02-27 22:46:31.196 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                      2025-02-27 22:46:31.196 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                      2025-02-27 22:46:31.196 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType meldungsart Routine:ExtractMetaData
                      2025-02-27 22:46:31.197 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType CommonName Routine:ExtractMetaData
                      2025-02-27 22:46:31.197 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                      2025-02-27 22:46:31.197 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                      2025-02-27 22:46:31.198 - warn: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:39)
                      2025-02-27 22:46:31.199 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                      2025-02-27 22:46:31.199 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                      2025-02-27 22:46:31.199 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                      2025-02-27 22:46:31.199 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                      2025-02-27 22:46:31.199 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                      2025-02-27 22:46:31.200 - error: javascript.0 (92966) Error in callback: TypeError: Cannot read properties of null (reading 'replace')
                      2025-02-27 22:46:31.200 - error: javascript.0 (92966) at ReplaceString (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:808:25)
                      2025-02-27 22:46:31.200 - error: javascript.0 (92966) at processServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:501:25)
                      2025-02-27 22:46:31.201 - error: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:412:63)
                      2025-02-27 22:46:31.201 - error: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                      2025-02-27 22:46:31.201 - error: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                      2025-02-27 22:46:31.201 - error: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                      2025-02-27 22:46:31.201 - error: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                      2025-02-27 22:46:31.240 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Subscription Datenpunkt Wert geaendert fuer hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage wird ausgefuehrt Routine:SubscribeGeraeteID
                      2025-02-27 22:46:31.291 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine Check_All wird ausgefuehrt Routine:Check_All
                      2025-02-27 22:46:31.292 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType GeraeteID Routine:ExtractMetaData
                      2025-02-27 22:46:31.292 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType CommonName Routine:ExtractMetaData
                      2025-02-27 22:46:31.292 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                      2025-02-27 22:46:31.292 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                      2025-02-27 22:46:31.293 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:439:29)
                      2025-02-27 22:46:31.293 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                      2025-02-27 22:46:31.293 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                      2025-02-27 22:46:31.293 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                      2025-02-27 22:46:31.293 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                      2025-02-27 22:46:31.293 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType nativeType Routine:ExtractMetaData
                      2025-02-27 22:46:31.293 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                      2025-02-27 22:46:31.293 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                      2025-02-27 22:46:31.294 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:440:29)
                      2025-02-27 22:46:31.294 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                      2025-02-27 22:46:31.294 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                      2025-02-27 22:46:31.294 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                      2025-02-27 22:46:31.294 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                      2025-02-27 22:46:31.294 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType meldungsart Routine:ExtractMetaData
                      2025-02-27 22:46:31.294 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType meldungsart Routine:ExtractMetaData
                      2025-02-27 22:46:31.294 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine DefineServiceMessage wird ausgefuehrt meldungsart undefined und ID:hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage Routine:DefineServiceMessage
                      2025-02-27 22:46:31.294 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType adapter Routine:ExtractMetaData
                      2025-02-27 22:46:31.294 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType GeraeteID Routine:ExtractMetaData
                      2025-02-27 22:46:31.295 - info: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint: Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec.sabotage ExtractType CommonName Routine:ExtractMetaData
                      2025-02-27 22:46:31.295 - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                      2025-02-27 22:46:31.295 - warn: javascript.0 (92966) at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                      2025-02-27 22:46:31.295 - warn: javascript.0 (92966) at DefineServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:572:39)
                      2025-02-27 22:46:31.295 - warn: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:442:31)
                      2025-02-27 22:46:31.295 - warn: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                      2025-02-27 22:46:31.295 - warn: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                      2025-02-27 22:46:31.295 - warn: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                      2025-02-27 22:46:31.296 - warn: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                      2025-02-27 22:46:31.296 - error: javascript.0 (92966) Error in callback: TypeError: Cannot read properties of null (reading 'replace')
                      2025-02-27 22:46:31.296 - error: javascript.0 (92966) at ReplaceString (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:808:25)
                      2025-02-27 22:46:31.296 - error: javascript.0 (92966) at DefineServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:572:25)
                      2025-02-27 22:46:31.297 - error: javascript.0 (92966) at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:442:31)
                      2025-02-27 22:46:31.297 - error: javascript.0 (92966) at Object. (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                      2025-02-27 22:46:31.297 - error: javascript.0 (92966) at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                      2025-02-27 22:46:31.297 - error: javascript.0 (92966) at listOnTimeout (node:internal/timers:581:17)
                      2025-02-27 22:46:31.297 - error: javascript.0 (92966) at processTimers (node:internal/timers:519:7)
                      2025-02-27 22:46:39.200 - info: admin.0 (329) <== Disconnect system.user.admin from ::ffff:192.168.178.20 javascript
                      
                      
                      Edis77 1 Reply Last reply Reply Quote 0
                      • Edis77
                        Edis77 @Edis77 last edited by Edis77

                        Ich habe zum Test die Version 3.10 installiert und bekomme bei Sabotage die gleichen Fehlermeldungen im Log.

                        mein IOB Diag. Vielleicht kannst du dort was sehen.

                        ========== Start marking the full check here ===========

                        Script v.2025-02-23
                        
                        *** BASE SYSTEM ***
                         Static hostname: DebianIO
                               Icon name: computer-container
                                 Chassis: container ☐
                          Virtualization: lxc
                        Operating System: Debian GNU/Linux 12 (bookworm)
                                  Kernel: Linux 6.8.12-8-pve
                            Architecture: x86-64
                        OS is similar to:
                        
                        model name      : Intel(R) Pentium(R) Silver J5040 CPU @ 2.00GHz
                        Docker          : false
                        Virtualization  : lxc
                        Kernel          : x86_64
                        Userland        : 64 bit
                        
                        Systemuptime and Load:
                         23:02:11 up 7 days, 23:16,  2 users,  load average: 0.27, 0.24, 0.20
                        CPU threads: 4
                        
                        
                        *** LIFE CYCLE STATUS ***
                        Unknown release codenamed ''. Please check yourself if the Operating System is actively maintained.
                        
                        *** TIME AND TIMEZONES ***
                                       Local time: Thu 2025-02-27 23:02:11 CET
                                   Universal time: Thu 2025-02-27 22:02:11 UTC
                                         RTC time: n/a
                                        Time zone: Europe/Berlin (CET, +0100)
                        System clock synchronized: yes
                                      NTP service: inactive
                                  RTC in local TZ: no
                        
                        *** Users and Groups ***
                        User that called 'iob diag':
                        edi77
                        HOME=/home/edi77
                        GROUPS=edi77 sudo users iobroker
                        
                        User that is running 'js-controller':
                        iobroker
                        HOME=/home/iobroker
                        GROUPS=iobroker tty dialout audio video plugdev
                        
                        *** DISPLAY-SERVER SETUP ***
                        Display-Server: false
                        Desktop:
                        Terminal:       tty
                        
                        System is booting into 'graphical.target'. Usually a server is running in 'multi-user.target'. Please set BootTarget to 'multi-user.target' or run 'iobroker fix'
                        
                        *** MEMORY ***
                                       total        used        free      shared  buff/cache   available
                        Mem:            8.6G        2.9G        1.3G         69K        4.4G        5.7G
                        Swap:           1.1G         61K        1.1G
                        Total:          9.7G        2.9G        2.3G
                        
                        Active iob-Instances:   31
                        
                                 8192 M total memory
                                 2797 M used memory
                                 2920 M active memory
                                 3887 M inactive memory
                                 1200 M free memory
                                    0 M buffer memory
                                 4194 M swap cache
                                 1024 M total swap
                                    0 M used swap
                                 1023 M free swap
                        
                        *** top - Table Of Processes  ***
                        top - 23:02:11 up 7 days, 23:16,  2 users,  load average: 0.25, 0.23, 0.20
                        Tasks:  59 total,   1 running,  58 sleeping,   0 stopped,   0 zombie
                        %Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
                        MiB Mem :   8192.0 total,   1198.3 free,   2799.1 used,   4194.7 buff/cache
                        MiB Swap:   1024.0 total,   1023.9 free,      0.1 used.   5392.9 avail Mem
                        
                        *** FAILED SERVICES ***
                        
                          UNIT                    LOAD   ACTIVE SUB    DESCRIPTION
                        * run-rpc_pipefs.mount    loaded failed failed RPC Pipe File System
                        * sys-kernel-config.mount loaded failed failed Kernel Configuration File System
                        
                        LOAD   = Reflects whether the unit definition was properly loaded.
                        ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
                        SUB    = The low-level unit activation state, values depend on unit type.
                        2 loaded units listed.
                        
                        
                        *** DMESG CRITICAL ERRORS ***
                        dmesg: read kernel buffer failed: Operation not permitted
                        No critical errors detected
                        
                        *** FILESYSTEM ***
                        Filesystem                       Type      Size  Used Avail Use% Mounted on
                        /dev/mapper/pve-vm--104--disk--0 ext4       40G   16G   22G  42% /
                        none                             tmpfs     492K  4.0K  488K   1% /dev
                        udev                             devtmpfs  7.6G     0  7.6G   0% /dev/tty
                        tmpfs                            tmpfs     7.7G     0  7.7G   0% /dev/shm
                        tmpfs                            tmpfs     3.1G  124K  3.1G   1% /run
                        tmpfs                            tmpfs     5.0M     0  5.0M   0% /run/lock
                        tmpfs                            tmpfs     1.6G     0  1.6G   0% /run/user/1000
                        
                        Messages concerning ext4 filesystem in dmesg:
                        dmesg: read kernel buffer failed: Operation not permitted
                        
                        Show mounted filesystems:
                        TARGET SOURCE                           FSTYPE OPTIONS
                        /      /dev/mapper/pve-vm--104--disk--0 ext4   rw,relatime,stripe=16
                        
                        Files in neuralgic directories:
                        
                        /var:
                        769M    /var/
                        343M    /var/log/journal/07999bdde13e4bb78b0c943aad8ee95b
                        343M    /var/log/journal
                        343M    /var/log
                        278M    /var/cache
                        
                        Hint: You are currently not seeing messages from other users and the system.
                              Users in groups 'adm', 'systemd-journal' can see all messages.
                              Pass -q to turn off this notice.
                        Archived and active journals take up 70.3M in the file system.
                        
                        /opt/iobroker/backups:
                        2.9G    /opt/iobroker/backups/
                        
                        /opt/iobroker/iobroker-data:
                        5.6G    /opt/iobroker/iobroker-data/
                        3.9G    /opt/iobroker/iobroker-data/history
                        1.6G    /opt/iobroker/iobroker-data/files
                        617M    /opt/iobroker/iobroker-data/files/javascript.admin
                        560M    /opt/iobroker/iobroker-data/files/javascript.admin/static
                        
                        The five largest files in iobroker-data are:
                        38M     /opt/iobroker/iobroker-data/files/iot.admin/static/js/main.d3d286bd.js.map
                        30M     /opt/iobroker/iobroker-data/objects.jsonl
                        27M     /opt/iobroker/iobroker-data/files/tankerkoenig.admin/build/index.js.map
                        26M     /opt/iobroker/iobroker-data/files/echarts/static/js/main.41cee985.js.map
                        26M     /opt/iobroker/iobroker-data/files/echarts.admin/chart/static/js/main.41cee985.js.map
                        
                        USB-Devices by-id:
                        USB-Sticks -  Avoid direct links to /dev/tty* in your adapter setups, please always prefer the links 'by-id':
                        
                        No Devices found 'by-id'
                        
                        Zigbee Network Settings on your coordinator/in nvbackup are:
                        
                        zigbee.X
                        Extended Pan ID:
                        *** MASKED ***
                        Pan ID:
                        *** MASKED ***
                        Channel:
                        *** MASKED ***
                        Network Key:
                        *** MASKED ***
                        
                        To unmask the settings run 'iob diag --unmask'
                        
                        
                        *** NodeJS-Installation ***
                        
                        /usr/bin/nodejs         v20.18.3
                        /usr/bin/node           v20.18.3
                        /usr/bin/npm            10.8.2
                        /usr/bin/npx            10.8.2
                        /usr/bin/corepack       0.30.0
                        
                        nodejs:
                          Installed: 20.18.3-1nodesource1
                          Candidate: 20.18.3-1nodesource1
                          Version table:
                         *** 20.18.3-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                                100 /var/lib/dpkg/status
                             20.18.2-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.18.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.18.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.17.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.16.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.15.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.15.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.14.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.13.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.13.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.12.2-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.12.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.12.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.11.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.11.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.10.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.9.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.8.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.8.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.7.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.6.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.6.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.5.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.5.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.4.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.3.1-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.3.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.2.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.1.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             20.0.0-1nodesource1 1001
                                500 https://deb.nodesource.com/node_20.x nodistro/main amd64 Packages
                             18.19.0+dfsg-6~deb12u2 500
                                500 http://deb.debian.org/debian bookworm/main amd64 Packages
                             18.19.0+dfsg-6~deb12u1 500
                                500 http://security.debian.org bookworm-security/main amd64 Packages
                        
                        Temp directories causing deletion problem: 0
                        No problems detected
                        
                        Errors in npm tree: 0
                        No problems detected
                        
                        *** ioBroker-Installation ***
                        
                        ioBroker Status
                        iobroker is running on this host.
                        
                        
                        Objects type: jsonl
                        States  type: jsonl
                        
                        Hosts:
                        DebianIO            DebianIO (version: 7.0.6, hostname: DebianIO      , alive, uptime: 688592)
                        
                        Core adapters versions
                        js-controller:  7.0.6
                        admin:          7.4.10
                        javascript:     8.8.3
                        
                        nodejs modules from github:     3
                        +-- iobroker.mihome-cloud@0.1.1 (git+ssh://git@github.com/TA2k/ioBroker.mihome-cloud.git#aa18a8be8df98b58fc125d90742b4cd8e5f7f974)
                        +-- iobroker.reolink@1.1.2 (git+ssh://git@github.com/aendue/ioBroker.reolink.git#e1cf650e996875878c24214991adb888d7f86675)
                        +-- iobroker.vis-2-widgets-collection@1.2.0 (git+ssh://git@github.com/Steiger04/ioBroker.vis-2-widgets-collection.git#2e35ae397048f9ad6cb36889b07d6aa10a5e9636)
                        
                        Adapter State
                        + system.adapter.admin.0                  : admin                 : DebianIO                                 -  enabled, port: 8081, bind: 0.0.0.0, run as: admin
                          system.adapter.alias-manager.0          : alias-manager         : DebianIO                                 -  enabled
                        + system.adapter.backitup.1               : backitup              : DebianIO                                 -  enabled
                        + system.adapter.cloud.0                  : cloud                 : DebianIO                                 -  enabled
                        + system.adapter.deyeidc.0                : deyeidc               : DebianIO                                 -  enabled, port: 8899
                          system.adapter.discovery.0              : discovery             : DebianIO                                 - disabled
                        + system.adapter.echarts.0                : echarts               : DebianIO                                 -  enabled
                        + system.adapter.fritzdect.0              : fritzdect             : DebianIO                                 -  enabled
                        + system.adapter.history.0                : history               : DebianIO                                 -  enabled
                        + system.adapter.hmip.0                   : hmip                  : DebianIO                                 -  enabled
                          system.adapter.icons-mfd-png.0          : icons-mfd-png         : DebianIO                                 - disabled
                          system.adapter.icons-mfd-svg.0          : icons-mfd-svg         : DebianIO                                 - disabled
                          system.adapter.iot.0                    : iot                   : DebianIO                                 - disabled
                        + system.adapter.javascript.0             : javascript            : DebianIO                                 -  enabled
                        + system.adapter.mihome-cloud.0           : mihome-cloud          : DebianIO                                 -  enabled
                        + system.adapter.mihome-vacuum.0          : mihome-vacuum         : DebianIO                                 -  enabled, port: 54321
                        + system.adapter.mihome-vacuum.1          : mihome-vacuum         : DebianIO                                 -  enabled, port: 54321
                        + system.adapter.onvif.0                  : onvif                 : DebianIO                                 -  enabled, port: 8000
                        + system.adapter.ping.0                   : ping                  : DebianIO                                 -  enabled
                        + system.adapter.proxmox.0                : proxmox               : DebianIO                                 -  enabled, port: 8006
                        + system.adapter.reolink.0                : reolink               : DebianIO                                 -  enabled
                          system.adapter.scenes.0                 : scenes                : DebianIO                                 - disabled
                        + system.adapter.shelly.0                 : shelly                : DebianIO                                 -  enabled, port: 1882, bind: 0.0.0.0
                        + system.adapter.simple-api.0             : simple-api            : DebianIO                                 -  enabled, port: 8087, bind: 0.0.0.0, run as: admin
                        + system.adapter.snmp.0                   : snmp                  : DebianIO                                 -  enabled
                          system.adapter.socketio.0               : socketio              : DebianIO                                 - disabled, port: 8084, bind: 0.0.0.0, run as: admin
                        + system.adapter.sonoff.0                 : sonoff                : DebianIO                                 -  enabled, port: 1885, bind: 0.0.0.0
                        + system.adapter.sourceanalytix.0         : sourceanalytix        : DebianIO                                 -  enabled
                        + system.adapter.tankerkoenig.0           : tankerkoenig          : DebianIO                                 -  enabled
                        + system.adapter.telegram.0               : telegram              : DebianIO                                 -  enabled, port: 8443, bind: 0.0.0.0
                          system.adapter.text2command.0           : text2command          : DebianIO                                 - disabled
                        + system.adapter.tr-064.0                 : tr-064                : DebianIO                                 -  enabled
                        + system.adapter.tuya.0                   : tuya                  : DebianIO                                 -  enabled
                          system.adapter.vis-2-widgets-collection.0: vis-2-widgets-collection: DebianIO                                 -  enabled
                          system.adapter.vis-2-widgets-energy.0   : vis-2-widgets-energy  : DebianIO                                 -  enabled
                          system.adapter.vis-2-widgets-gauges.0   : vis-2-widgets-gauges  : DebianIO                                 -  enabled
                          system.adapter.vis-2-widgets-inventwo.0 : vis-2-widgets-inventwo: DebianIO                                 -  enabled
                          system.adapter.vis-2-widgets-material.0 : vis-2-widgets-material: DebianIO                                 -  enabled
                        + system.adapter.vis-2.0                  : vis-2                 : DebianIO                                 -  enabled
                          system.adapter.vis-canvas-gauges.0      : vis-canvas-gauges     : DebianIO                                 - disabled
                          system.adapter.vis-fancyswitch.0        : vis-fancyswitch       : DebianIO                                 - disabled
                          system.adapter.vis-hqwidgets.0          : vis-hqwidgets         : DebianIO                                 - disabled
                        + system.adapter.vis-inventwo.0           : vis-inventwo          : DebianIO                                 -  enabled
                          system.adapter.vis-jqui-mfd.0           : vis-jqui-mfd          : DebianIO                                 - disabled
                          system.adapter.vis-material-advanced.0  : vis-material-advanced : DebianIO                                 - disabled
                          system.adapter.vis-metro.0              : vis-metro             : DebianIO                                 -  enabled
                          system.adapter.vis-timeandweather.0     : vis-timeandweather    : DebianIO                                 - disabled
                          system.adapter.vis.0                    : vis                   : DebianIO                                 -  enabled
                        + system.adapter.web.0                    : web                   : DebianIO                                 -  enabled, port: 8082, bind: 0.0.0.0, run as: admin
                        + system.adapter.web.1                    : web                   : DebianIO                                 -  enabled, port: 8083, bind: 0.0.0.0, run as: admin
                        + system.adapter.ws.0                     : ws                    : DebianIO                                 -  enabled, port: 8084, bind: 0.0.0.0, run as: admin
                        
                        + instance is alive
                        
                        Enabled adapters with bindings
                        + system.adapter.admin.0                  : admin                 : DebianIO                                 -  enabled, port: 8081, bind: 0.0.0.0, run as: admin
                        + system.adapter.deyeidc.0                : deyeidc               : DebianIO                                 -  enabled, port: 8899
                        + system.adapter.mihome-vacuum.0          : mihome-vacuum         : DebianIO                                 -  enabled, port: 54321
                        + system.adapter.mihome-vacuum.1          : mihome-vacuum         : DebianIO                                 -  enabled, port: 54321
                        + system.adapter.onvif.0                  : onvif                 : DebianIO                                 -  enabled, port: 8000
                        + system.adapter.proxmox.0                : proxmox               : DebianIO                                 -  enabled, port: 8006
                        + system.adapter.shelly.0                 : shelly                : DebianIO                                 -  enabled, port: 1882, bind: 0.0.0.0
                        + system.adapter.simple-api.0             : simple-api            : DebianIO                                 -  enabled, port: 8087, bind: 0.0.0.0, run as: admin
                        + system.adapter.sonoff.0                 : sonoff                : DebianIO                                 -  enabled, port: 1885, bind: 0.0.0.0
                        + system.adapter.telegram.0               : telegram              : DebianIO                                 -  enabled, port: 8443, bind: 0.0.0.0
                        + system.adapter.web.0                    : web                   : DebianIO                                 -  enabled, port: 8082, bind: 0.0.0.0, run as: admin
                        + system.adapter.web.1                    : web                   : DebianIO                                 -  enabled, port: 8083, bind: 0.0.0.0, run as: admin
                        + system.adapter.ws.0                     : ws                    : DebianIO                                 -  enabled, port: 8084, bind: 0.0.0.0, run as: admin
                        
                        ioBroker-Repositories
                        ┌─────────┬──────────┬─────────────────────────────────────────────────────────┬──────────────┐
                        │ (index) │ name     │ url                                                     │ auto upgrade │
                        ├─────────┼──────────┼─────────────────────────────────────────────────────────┼──────────────┤
                        │ 0       │ 'stable' │ 'http://download.iobroker.net/sources-dist.json'        │ false        │
                        │ 1       │ 'beta'   │ 'http://download.iobroker.net/sources-dist-latest.json' │ false        │
                        └─────────┴──────────┴─────────────────────────────────────────────────────────┴──────────────┘
                        
                        Active repo(s): stable
                        Upgrade policy: none
                        
                        Installed ioBroker-Adapters
                        Used repository: stable
                        Adapter    "admin"        : 7.4.10   , installed 7.4.10
                        Adapter    "alias-manager": 2.0.0    , installed 2.0.0
                        Adapter    "backitup"     : 3.0.31   , installed 3.0.31
                        Adapter    "cloud"        : 5.0.1    , installed 5.0.1
                        Adapter    "deyeidc"      : 0.1.1    , installed 0.1.1
                        Adapter    "discovery"    : 5.0.0    , installed 5.0.0
                        Adapter    "echarts"      : 1.9.2    , installed 1.9.2
                        Adapter    "fritzdect"    : 2.5.11   , installed 2.5.11
                        Adapter    "history"      : 3.0.1    , installed 3.0.1
                        Adapter    "hmip"         : 1.25.0   , installed 1.25.0
                        Adapter    "icons-mfd-png": 1.2.1    , installed 1.2.1
                        Adapter    "icons-mfd-svg": 1.2.0    , installed 1.2.0
                        Adapter    "iot"          : 3.3.0    , installed 3.3.0
                        Adapter    "javascript"   : 8.8.3    , installed 8.8.3
                        Controller "js-controller": 7.0.6    , installed 7.0.6
                        Adapter    "mihome-cloud" : 0.1.0    , installed 0.1.1
                        Adapter    "mihome-vacuum": 5.2.0    , installed 5.2.0
                        Adapter    "onvif"        : 1.1.4    , installed 1.1.4
                        Adapter    "ping"         : 1.6.2    , installed 1.6.2
                        Adapter    "proxmox"      : 2.4.0    , installed 2.4.0
                        Adapter    "reolink"      : 1.2.1    , installed 1.1.2  [Updatable]
                        Adapter    "scenes"       : 3.2.3    , installed 3.2.3
                        Adapter    "shelly"       : 8.5.1    , installed 8.5.1
                        Adapter    "simple-api"   : 2.8.0    , installed 2.8.0
                        Adapter    "snmp"         : 3.2.0    , installed 3.2.0
                        Adapter    "socketio"     : 6.7.1    , installed 6.7.1
                        Adapter    "sonoff"       : 3.1.2    , installed 3.1.2
                        Adapter    "tankerkoenig" : 3.4.0    , installed 3.4.0
                        Adapter    "telegram"     : 4.0.0    , installed 4.0.0
                        Adapter    "text2command" : 3.0.3    , installed 3.0.3
                        Adapter    "tr-064"       : 4.3.0    , installed 4.3.0
                        Adapter    "tuya"         : 3.16.0   , installed 3.16.0
                        Adapter    "vis"          : 1.5.6    , installed 1.5.6
                        Adapter    "vis-2"        : 2.9.64   , installed 2.9.64
                        Adapter    "vis-2-widgets-energy": 1.0.2, installed 1.0.2
                        Adapter    "vis-2-widgets-gauges": 1.1.0, installed 1.1.0
                        Adapter    "vis-2-widgets-inventwo": 0.1.11, installed 0.1.11
                        Adapter    "vis-2-widgets-material": 1.4.10, installed 1.4.10
                        Adapter    "vis-canvas-gauges": 1.0.1, installed 1.0.1
                        Adapter    "vis-fancyswitch": 1.1.0  , installed 1.1.0
                        Adapter    "vis-hqwidgets": 1.5.1    , installed 1.5.1
                        Adapter    "vis-inventwo" : 3.3.4    , installed 3.3.4
                        Adapter    "vis-jqui-mfd" : 1.1.1    , installed 1.1.1
                        Adapter    "vis-material-advanced": 1.7.4, installed 1.7.4
                        Adapter    "vis-metro"    : 1.2.0    , installed 1.2.0
                        Adapter    "vis-timeandweather": 1.2.2, installed 1.2.2
                        Adapter    "web"          : 6.2.5    , installed 6.2.5
                        Adapter    "ws"           : 2.6.2    , installed 2.6.2
                        
                        Objects and States
                        Please stand by - This may take a while
                        Objects:        8500
                        States:         7345
                        
                        *** OS-Repositories and Updates ***
                        Hit:1 http://security.debian.org bookworm-security InRelease
                        Hit:2 http://deb.debian.org/debian bookworm InRelease
                        Hit:3 http://deb.debian.org/debian bookworm-updates InRelease
                        Hit:4 https://deb.nodesource.com/node_20.x nodistro InRelease
                        Reading package lists...
                        Pending Updates: 0
                        
                        *** Listening Ports ***
                        Active Internet connections (only servers)
                        Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
                        tcp        0      0 0.0.0.0:1885            0.0.0.0:*               LISTEN      1001       16713      555/io.sonoff.0
                        tcp        0      0 0.0.0.0:1882            0.0.0.0:*               LISTEN      1001       18430      600/io.shelly.0
                        tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      0          13847      312/master
                        tcp        0      0 127.0.0.1:9001          0.0.0.0:*               LISTEN      1001       14049      145/iobroker.js-con
                        tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1001       15528      145/iobroker.js-con
                        tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      0          10921      1/init
                        tcp6       0      0 :::111                  :::*                    LISTEN      0          10923      1/init
                        tcp6       0      0 :::22                   :::*                    LISTEN      0          11110      1/init
                        tcp6       0      0 ::1:25                  :::*                    LISTEN      0          13848      312/master
                        tcp6       0      0 :::8087                 :::*                    LISTEN      1001       20759      711/io.simple-api.0
                        tcp6       0      0 :::8084                 :::*                    LISTEN      1001       20074      756/io.ws.0
                        tcp6       0      0 :::8082                 :::*                    LISTEN      1001       17174      647/io.web.0
                        tcp6       0      0 :::8083                 :::*                    LISTEN      1001       21825      804/io.web.1
                        tcp6       0      0 :::8081                 :::*                    LISTEN      1001       15561      329/io.admin.0
                        tcp6       0      0 :::8095                 :::*                    LISTEN      1001       21844086   76262/io.onvif.0
                        udp        0      0 0.0.0.0:36882           0.0.0.0:*                           1001       8146026    32389/io.snmp.0
                        udp        0      0 0.0.0.0:53421           0.0.0.0:*                           1001       3021846    11536/io.mihome-vac
                        udp        0      0 192.168.178.5:5353      0.0.0.0:*                           1001       16821      585/io.tr-064.0
                        udp        0      0 0.0.0.0:6666            0.0.0.0:*                           1001       19855078   69976/io.tuya.0
                        udp        0      0 0.0.0.0:6667            0.0.0.0:*                           1001       19855079   69976/io.tuya.0
                        udp        0      0 0.0.0.0:7885            0.0.0.0:*                           1001       16481      510/io.mihome-vacuu
                        udp        0      0 0.0.0.0:111             0.0.0.0:*                           0          10922      1/init
                        udp6       0      0 :::111                  :::*                                0          10924      1/init
                        
                        *** Log File - Last 25 Lines ***
                        
                        2025-02-27 23:00:35.206  - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.modelType" not found (3)
                        2025-02-27 23:00:35.207  - warn: javascript.0 (92966)     at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:784:26)
                        2025-02-27 23:00:35.207  - warn: javascript.0 (92966)     at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:440:29)
                        2025-02-27 23:00:35.207  - warn: javascript.0 (92966)     at Object.<anonymous> (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                        2025-02-27 23:00:35.207  - warn: javascript.0 (92966)     at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                        2025-02-27 23:00:35.207  - warn: javascript.0 (92966)     at listOnTimeout (node:internal/timers:581:17)
                        2025-02-27 23:00:35.207  - warn: javascript.0 (92966)     at processTimers (node:internal/timers:519:7)
                        2025-02-27 23:00:35.208  - warn: javascript.0 (92966) getState "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" not found (3)
                        2025-02-27 23:00:35.210  - warn: javascript.0 (92966)     at ExtractMetaData (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:795:27)
                        2025-02-27 23:00:35.210  - warn: javascript.0 (92966)     at DefineServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:572:39)
                        2025-02-27 23:00:35.211  - warn: javascript.0 (92966)     at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:442:31)
                        2025-02-27 23:00:35.211  - warn: javascript.0 (92966)     at Object.<anonymous> (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                        2025-02-27 23:00:35.211  - warn: javascript.0 (92966)     at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                        2025-02-27 23:00:35.211  - warn: javascript.0 (92966)     at listOnTimeout (node:internal/timers:581:17)
                        2025-02-27 23:00:35.211  - warn: javascript.0 (92966)     at processTimers (node:internal/timers:519:7)
                        2025-02-27 23:00:35.212  - error: javascript.0 (92966) Error in callback: TypeError: Cannot read properties of null (reading 'replace')
                        2025-02-27 23:00:35.212  - error: javascript.0 (92966)     at ReplaceString (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:808:25)
                        2025-02-27 23:00:35.212  - error: javascript.0 (92966)     at DefineServiceMessage (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:572:25)
                        2025-02-27 23:00:35.212  - error: javascript.0 (92966)     at Check_All (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:442:31)
                        2025-02-27 23:00:35.212  - error: javascript.0 (92966)     at Object.<anonymous> (script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:371:29)
                        2025-02-27 23:00:35.212  - error: javascript.0 (92966)     at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:3219:34)
                        2025-02-27 23:00:35.212  - error: javascript.0 (92966)     at listOnTimeout (node:internal/timers:581:17)
                        2025-02-27 23:00:35.212  - error: javascript.0 (92966)     at processTimers (node:internal/timers:519:7)
                        2025-02-27 23:01:05.507  - info: admin.0 (329) <== Disconnect system.user.admin from ::ffff:192.168.178.20 javascript
                        2025-02-27 23:02:03.446  - info: admin.0 (329) ==> Connected system.user.admin from ::ffff:192.168.178.20
                        
                        

                        ============ Mark until here for C&P =============

                        iob diag has finished.

                        Press any key for a summary

                        Copy text starting here:

                        ======================= SUMMARY =======================
                                                v.2025-02-23
                        
                        
                         Static hostname: DebianIO
                               Icon name: computer-container
                                 Chassis: container ☐
                          Virtualization: lxc
                        Operating System: Debian GNU/Linux 12 (bookworm)
                                  Kernel: Linux 6.8.12-8-pve
                            Architecture: x86-64
                        
                        Installation:           lxc
                        Kernel:                 x86_64
                        Userland:               64 bit
                        Timezone:               Europe/Berlin (CET, +0100)
                        User-ID:                1000
                        Display-Server:         false
                        Boot Target:            graphical.target
                        
                        Pending OS-Updates:     0
                        Pending iob updates:    1
                        
                        Nodejs-Installation:
                        /usr/bin/nodejs         v20.18.3
                        /usr/bin/node           v20.18.3
                        /usr/bin/npm            10.8.2
                        /usr/bin/npx            10.8.2
                        /usr/bin/corepack       0.30.0
                        
                        Recommended versions are nodejs 20.18.3 and npm 10.8.2
                        nodeJS installation is correct
                        
                        MEMORY:
                                       total        used        free      shared  buff/cache   available
                        Mem:            8.6G        3.0G        968M         69K        4.6G        5.5G
                        Swap:           1.1G         61K        1.1G
                        Total:          9.7G        3.0G        2.0G
                        
                        Active iob-Instances:   31
                        Upgrade policy: none
                        
                        ioBroker Core:          js-controller           7.0.6
                                                admin                   7.4.10
                        
                        ioBroker Status:        iobroker is running on this host.
                        
                        
                        Objects type: jsonl
                        States  type: jsonl
                        
                        Status admin and web instance:
                        + system.adapter.admin.0                  : admin                 : DebianIO                                 -  enabled, port: 8081, bind: 0.0.0.0, run as: admin
                        + system.adapter.web.0                    : web                   : DebianIO                                 -  enabled, port: 8082, bind: 0.0.0.0, run as: admin
                        + system.adapter.web.1                    : web                   : DebianIO                                 -  enabled, port: 8083, bind: 0.0.0.0, run as: admin
                        
                        Objects:                8500
                        States:                 7345
                        
                        Size of iob-Database:
                        
                        39M     /opt/iobroker/iobroker-data/objects.jsonl
                        4.2M    /opt/iobroker/iobroker-data/states.jsonl
                        
                        
                        Unknown release codenamed ''. Please check yourself if the Operating System is actively maintained.
                        
                        =================== END OF SUMMARY ====================
                        

                        === Mark text until here for copying ===

                        L 1 Reply Last reply Reply Quote 0
                        • L
                          looxer01 @Edis77 last edited by looxer01

                          @edis77
                          Hi,
                          deine Installation sieht aktuell aus.
                          HMIPInstanz sollte eigentlich auf 9 stehen, da du die ja nicht nutzt.
                          Daran wird es aber nicht liegen.

                          Ich muss noch in die Analyse des Protokolls gehen.
                          Zwei Fragen vorab:

                          • Lief das Script vorher einwandfrei und in welcher Version ?
                          • Tritt der Fehler nur bei Sabotage auf oder auch bei anderen Meldungen (z.B. unreach) ?

                          EDIT:
                          kannst du das auch bitte mal überprüfen:
                          Datenpunkt: hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label. Eigentlich sollte der exisitieren. Abgelegt ist die Bezeichnung des Gerätes. Davon bin ich jedenfalls ausgegangen.

                          vG Looxer

                          Edis77 1 Reply Last reply Reply Quote 0
                          • Edis77
                            Edis77 @looxer01 last edited by Edis77

                            @looxer01
                            Hallo,

                            1. Ich habe dein Skript erst vor ein paar Wochen entdeckt und mit Version 3.10 angefangen.
                              Ob die einwandfrei lief, kann ich dir nicht sagen. Die hat zwar beim Starten keine Fehler rausgeworfen hat.
                              Aber die Sabotage Prüfung habe ich nicht gemacht.
                            2. Den Datenpunkt: "hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec.info.label" habe ich nicht gefunden.
                              Anbei Screenshot von meinen DP.

                            5a11fb51-4342-4aa7-ad03-562d90051e95-grafik.png

                            1283d497-180f-47fd-8313-2ab6ddbbfc52-grafik.png

                            Grüße Eduard

                            L 1 Reply Last reply Reply Quote 0
                            • L
                              looxer01 @Edis77 last edited by

                              @edis77 sagte in [Vorlage] Servicemeldungen Volume2:

                              hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec

                              könntest du noch die Details unterhalb

                              hmip.0.devices.772df247-ced6-4905-955c-dd461bf32aec

                              zeigen ?

                              also die gesamte struktur des Gerätes

                              vG Looxer

                              Edis77 1 Reply Last reply Reply Quote 0
                              • Edis77
                                Edis77 @looxer01 last edited by

                                @looxer01 sagte in [Vorlage] Servicemeldungen Volume2:

                                772df247-ced6-4905-955c-dd461bf32aec

                                die DP "772df247-ced6-4905-955c-dd461bf32aec" habe ich jetzt gefunden.
                                Aber er ist nicht in "Devices" sondern in "Groups" Ordner.
                                hmip.0.groups.772df247-ced6-4905-955c-dd461bf32aec

                                685db9bb-e705-4f92-b631-3ff8630b056b-grafik.png

                                L 2 Replies Last reply Reply Quote 0
                                • L
                                  looxer01 @Edis77 last edited by looxer01

                                  @edis77
                                  unter devices gibt es die ID 772df247-ced6-4905-955c-dd461bf32aec nicht ?

                                  EDIT
                                  vermutlich nicht. Aber das erklärt nun den Fehler. Ich muss die groups ausschliessen.

                                  vG Looxer

                                  1 Reply Last reply Reply Quote 0
                                  • L
                                    looxer01 @Edis77 last edited by

                                    @edis77
                                    Hi,
                                    ich habe jetzt mal einen quick und dirty fix gemacht.
                                    Es wäre toll , wenn du den testen könntest

                                    er unterscheidet sich nur wenige Zeilen vom ursprünglichen Code. Die erste Zeile gibt es auch nur einmal im code und die Zeilen können so identifiziert werden. Liegt ungefähr bei Zeile 277. einfach austauschen

                                    Falls es funktioniert würde ich eine Version mit dem finalen code zur Verfügung stellen.

                                    vG Looxer

                                    const selectors = alarmTypes.map(alarmType => {
                                        const collectedIds = [];
                                        instanceIds.forEach(instance => {
                                            if (instance.Instanz !== 9) {                                   // Umbenennung von `instance.id` zu `instance.Instanz`
                                                const excludedAlarmTypes = exceptions[instance.name] || []; // Hole Ausnahmen oder leere Liste
                                                if (!excludedAlarmTypes.includes(alarmType.key)) {          // Wenn Alarmtype nicht in der Ausnahme
                                                    alarmType.suffixes.forEach(suffix => {                  // wenn suffix (meldungsart) nicht in der Ausnahme
                                                        if (!excludedAlarmTypes.includes(suffix)) { 
                                                            // IDs sammeln, ohne sofort zu filtern
                                                            // @ts-ignore
                                                            $(`state[id=${instance.adapter}.${instance.Instanz}.*.${suffix}]`).each(id => collectedIds.push(id)); 
                                                        }
                                                    });
                                                }
                                            }
                                        });
                                        const filteredIds = collectedIds.filter(id => !id.includes("groups"));  // for accessPoint und HCU sollten die Ids, die "groups" enthalten ausgeschlossen werden . das sind z.B. Raeume
                                        const finalFilteredIds = filteredIds.filter(id => {                     // IDs anhand der Geraete-IDs in der Ausschlussliste filtern          
                                            const deviceId = id.split('.')[2];                                  // Geraete-ID aus der vollstaendigen ID extrahieren (z. B. "0000D7099xxx26" aus "hm-rpc.1.0000D7099xxx26.0.LOW_BAT_ALARM")
                                            return !Ausschlussliste.includes(deviceId);                         // Behalten, wenn nicht in der Ausschlussliste
                                        });
                                    
                                        totalIdsCount += finalFilteredIds.length;                                // IDs zur Gesamtzahl hinzufuegen
                                        return { name: alarmType.key, ids: finalFilteredIds };
                                    });
                                    
                                    Edis77 1 Reply Last reply Reply Quote 0
                                    • Edis77
                                      Edis77 @looxer01 last edited by Edis77

                                      @looxer01
                                      ich habe die stelle ausgetauscht und bekomme beim Skriptstart folgende Fehler.

                                      javascript.0	20:54:51.514	info	Stopping script script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint
                                      javascript.0	20:56:05.774	info	Start JavaScript script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint (Javascript/js)
                                      javascript.0	20:56:05.778	error	script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint compile failed: at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1173
                                      

                                      0f5a9a77-0433-4c6f-ba9b-247026c82036-image.png

                                      Und folgenses im LOG.

                                      2025-02-28 20:54:48.578 - info: admin.0 (329) ==> Connected system.user.admin from ::ffff:192.168.178.20
                                      2025-02-28 20:54:51.514 - info: javascript.0 (92966) Stopping script script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint
                                      2025-02-28 20:56:05.774 - info: javascript.0 (92966) Start JavaScript script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint (Javascript/js)
                                      2025-02-28 20:56:05.778 - error: javascript.0 (92966) script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint compile failed:
                                      at script.js.Test_und_nicht_fertige_Skripte.Servicemeldungen_von_AccessPoint:1173
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) })();
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) ^
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) SyntaxError: Unexpected token '}'
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) at new Script (node:vm:117:7)
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1956:21)
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:2224:37)
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) at /opt/iobroker/node_modules/iobroker.javascript/main.js:2322:17
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/main.js:1732:17)
                                      2025-02-28 20:56:05.779 - error: javascript.0 (92966) at processImmediate (node:internal/timers:485:21)
                                      2025-02-28 20:56:57.027 - info: admin.0 (329) <== Disconnect system.user.admin from ::ffff:192.168.178.20 javascript
                                      
                                      L 1 Reply Last reply Reply Quote 0
                                      • L
                                        looxer01 @Edis77 last edited by

                                        @edis77
                                        Hi,
                                        ja, ist nicht richtig reinkopiert. lösche die Zeilen 273 - 386
                                        und kopier nochmal die Sequenz wie zuvor gepostet.

                                        vG Looxer

                                        1 Reply Last reply Reply Quote 0
                                        • Edis77
                                          Edis77 last edited by

                                          @looxer01
                                          Habe jetzt so gemacht wie du beschreiben hast, aber bekomme wieder Warnung.

                                          2be5ab4c-acdc-4052-9c4f-17ff734951cc-image.png

                                          anbei mein geänderte Skript zur Prüfung.

                                          // Beschreibung des Scriptes: https://forum.iobroker.net/topic/77816/vorlage-servicemeldungen-volume2
                                          // Autor Looxer01 02.11.2024 Version 1.0 (initiale Version)
                                          // Version 3.00 - 05.01.2025 Variable MessageBeiKeinerSM in die Experteneinstellungen geschoben // Problem bei der Datumsberechnung behoben // Zaehler fuer Historie hinzugefuegt
                                          //                           die Datenpunkte fuer Text-Format werden jetzt optional gefuellt
                                          // Version 3.10 - 01.02.2024 Wartezeit fuer HM-Rega von 2 auf 3,5 Sekunden erhoeht - Funktion der Tabelle MessengerScope erweitert
                                          // Version 3.20 - 24.02.2024 Doppelte Nachrichten im messageCollector verhindern - Vermeidung Meldung "keine Servicemeldungen..." in der Historie wenn bereits vorhanden - Wartezeit für Rega-Trigger wieder auf 5s
                                          //                           StickyMessages koennen automatisch bestaetigt werden
                                          //---------------------------------------------------------------------------------------------------------------------------------------------------------------
                                          // Muss-Einstellungen                                 ( HM-Classic , HMIP, Wired - hier muessen zwingend die Instanzen stimmmen )
                                          //---------------------------------------------------------------------------------------------------------------------------------------------------------------
                                          // Im folgenden sind die Instanzen gelistet fuer die die Selektion erfolgt bzw nicht erfolgt (Filter)
                                          // bitte 9 Eintragen falls eine Instanz nicht relevant ist // Gruppeninstanzen sind normalerweise nicht relevant
                                          // CuxD Instanzen duerfen nicht eingetragen werden  --- ACHTUNG: bei HMIPAccessPoint-Nutzung muss GeraeteTriggerID auf true stehen
                                          const HMClassicInstanz      = 9;        // HM-Classic Instanz eintragen     // 9 = falls nicht relevant
                                          const HMIPInstanz           = 9;        // Homematic IP instanz             // 9 = falls nicht relevant
                                          const WiredIClassicInstanz  = 9;        // Wired Instanz                    // 9 = falls nicht relevant
                                          const GruppenInstanz        = 9;        // virtuelle GeraeteInstanz- 9 = nicht relevant - Die Gruppen werden i.d.R. nicht gebraucht - Empfehlung: 9
                                          let   HMIPAccessPoint       = 0;        // AccessPoint Servicemeldungen - (normalerweise instanz = 0) bei nicht Verwendung Instanz = 9
                                          //---------------------------------------------------------------------------------------------------------------------------------------------------------------
                                          // Kann-Einstellungen 
                                          //---------------------------------------------------------------------------------------------------------------------------------------------------------------
                                          // Pfad kann angepasst werden fuer userdata pfad einfach // entfernen
                                          const path      = "javascript.0.ServicemeldungenVol2.";
                                          //const path    = "0_userdata.0.ServicemeldungenVol2."; // alternativ zum javascript pfad
                                          
                                          // schreibt das Protokoll der Servicemeldungen in ein externes file (Excel Format)
                                          const SMProtokoll = true;             
                                          const PathSMLog = "/opt/iobroker/log/ServicemeldungenVol2.csv";             // Pfad und Dateiname des externen Logs
                                          //const PathSMLog = "/iobroker/log/ServicemeldungenVol2.csv";            // Pfad fuer Windows/  iobroker ist der angenommene iobroker home-pfad
                                          
                                          //Geraete die nicht ueberwacht werden sollen. Geraete-IDs eingeben - Komma getrennt erfassen
                                          const Ausschlussliste = ['0000D7099xxx26', '00091D8xxx7410']; // immer mit Komma trennen // Filter auf Einzel-IDs
                                          
                                          // debug level kann eingestellt werden - wenn alles laeuft dann 0 = ruhe im log
                                          // debug level 0   kein log // debug level 1 - nur die wichtigsten Meldungen werden gelistet // debug level 2 - mehr als nur die wichtigsten Meldungen aber ohne einzelne IDs
                                          // debug level 3 - hier werden auch einzelne IDs gelistet (koennten lange listen werden)
                                          const debugLevel = 2 ;     // Empfehlung = 1
                                          const SystemLog = false;  // schreib das Sytemprotokoll in ein externes log (sollte normalerweise deaktviert sein  nur bei Problemen verwenden)           
                                          const PathSystemLog = "/opt/iobroker/log/ServicemeldungenSystemLog.csv";             // Pfad und Dateiname des externen Logs 
                                          //const PathSystemLog = "/iobroker/log/ServicemeldungenSystemLog.csv";             // Pfad fuer Windows
                                          
                                          // wenn GeraeteIDTrigger auf true gestellt wird, dann wird fuer jeden Datenpukt mit Relevanz fuer eine Servicemeldung eine subscription angelegt.
                                          // Vorteile: mehr Details in der Historie von Servicemeldungen: Nachteil: bei 80 CCU Geraeten ungefaehr 300 Susbsriptions
                                          // Wenn die variable auf false steht, dann wird auf hm.rega.0.maintenance eine subsription angelegt: Vorteil: 1 Subscription , Nachteil: erweiterte Funktion fuer nicht CCU Datenpunkte nicht verfuegbar
                                          // bei HMIP AccessPoint Cloud HCU - funktioniert das nur bei GeraeteTrigger = true
                                          let GeraeteIDTrigger = false; // true = viele subscriptions aber praezise Historie der Servicemeldungen - false = 1 subscription - weniger praezise Historie - Empfehlung = false
                                          
                                          // Speicherung der Servicemeldungen im  Text-Format - Empfehlung = false // davon ausgehend, dass das JSON Format in der Visualisierung gut dargestellt werden kann
                                          const UpdateTEXT_Datenpunkte = false; // die kurz- und langen Servicemeldungen als auch die historischen werden immer im JSON Format abgelegt. Alternativ koennen diese auch in einem TEXT Format in Datenpunkten gespeichert werden
                                          // Speicherung der Servicemeldungen im  HTML-Format - Wird empfohlen zu nutzen, wenn es Problem bei der Visualisierung von JSON gibt.
                                          const UpdateHTML_Datenpunkte = true; // die langen Servicemeldungen als auch die historischen werden immer im JSON Format abgelegt. Alternativ koennen diese auch in einem HTML Format in Datenpunkten gespeichert werden
                                          // Die Autobestaetigung bestaetigt automatisch evt Sticky-Meldungen der CCU 
                                          const AutoBestaetigungCCUMeldungen = true; // Empfehlung ist true - nur relevant fur HM-Classic Geraete //bei true sollte in der CCU die autobestaetigung ausgeschaltet werden
                                          
                                          //  fuer alle Spalten mit true werden die Nachrichten ueber den zugeordneten Dienst versendet, vorausgesetzt der Messenge Adapter ist in iobroker installiert/konfiguriert
                                              const services =               ['email',    'whatsApp',     'Signal',  'Telegram',    'Pushover', 'Pushsafer', 'Pushsafer',];
                                              const MessengerScope = {
                                              'UNREACH_ALARM':                [true,        false,          false,      true,          false,      false,       false,],
                                              'STICKY_UNREACH_ALARM':         [false,       false,          false,      false,          false,      false,       false,],   // Sticky sollte nicht gesendet werden - alles auf false setzen  
                                              'LOWBAT_ALARM':                 [true,        false,          false,      true,          false,      false,       false,],
                                              'SABOTAGE_ALARM':               [true,        false,          false,      true,          false,      false,       false,],
                                              'STICKY_SABOTAGE_ALARM':        [false,       false,          false,      false,          false,      false,       false,],   // Sticky sollte nicht gesendet werden - alles auf false setzen  
                                              'CONFIG_PENDING_ALARM':         [true,        false,          false,      true,          false,      false,       false,],
                                              'Sonstige':                     [true,        false,          false,      true,          false,      false,       false,], // text ist fest verdrahtet nicht ändern
                                              'keineSM':                      [true,        false,          false,      true,          false,      false,       false,], // text ist fest verdrahtet nicht ändern
                                              }
                                              const MessengerInstanz =        [0,             0,               0,          0,              0,          0,            1,  ]; // Instanz des Messengers
                                              const TextTypeKurz      =       [false,        true,            true,       true,           true,      true,         false,]; // bei true wird der Kurztext gesendet - sonst der Langtext
                                          
                                          // email-Einstellungen
                                          let emailAddresse = "Vorname-Nachname@web.de"   // Empfängeraddresse
                                          
                                          const Headline = "ioBroker Servicemeldung";     // Ueberschrift Messages fuer email und Pushsafer
                                          // telegram Einstellungen
                                          const TelegramUser = "Eduard";
                                          
                                          //-----------------------------------------------------------------------------------------------------
                                          //Experten Einstellungen - Empfehlung:  Absprache mit dem Autor
                                          //-----------------------------------------------------------------------------------------------------
                                          const MessageBeiKeinerSM = 'Derzeit keine Servicemeldungen'     // Text der erscheinen soll, wenn keine SM vorliegen Ein Kurztext ist erforderlich
                                          //const NichtRelevantText = 'n/a';                                // statt n/a kann ein beliebiger anderer Text in den JSON verwendet werden
                                          const NichtRelevantText = "......";
                                          // die folgenden Einstellungen sind nur relvant bei Verwendung von HTML als Datenpunkte
                                              // Definieren der Farbwerte für Kopfzeile, gerade und ungerade Zeilen
                                              const headerColor = '#333333';  // Standardfarbe (Fuellfarbe) für die Kopfzeile
                                              const evenRowColor = '#4e5049'; // Standardfarbe (Fuellfarbe) für gerade Zeilen
                                              const oddRowColor = '#333333';  // Standardfarbe (Fuellfarbe) für ungerade Zeilen
                                              // Definieren der Textfarben für Kopfzeile, gerade und ungerade Zeilen
                                              const headerTextColor = 'white'; // Textfarbe für Kopfzeile
                                              const evenRowTextColor = 'white'; // Textfarbe für gerade Zeilen
                                              const oddRowTextColor = 'white';  // Textfarbe für ungerade Zeilen
                                              // Definieren von Zellenumrandungseinstellungen
                                              const useBorderAll =    true; // true, wenn ein Gitternetz erzeugt werden soll
                                              const borderColor = '#000000'; // Farbe des Gitternetzes (Zellenumrandung)
                                              const borderWidth = '1px'; // Strichstärke der Zellenumrandung
                                              
                                          //Schedule Zeit fuer refresh der Historie
                                          const ScheduleAktiv = true;                         // Bei "false" wird der schedule nicht durchlaufen. Manuelles Löschen kann über den Datenpunkt id_Button_Refresh_Historie (Button) möglich
                                          const scheduleTimeClearSMTexte = "2 0 1 * *";       // am 1. tag des monats um 00:02 morgens sollen alle Servicemeldungen des Monats geloescht werden
                                          // const scheduleTimeClearSMTexte = "58 23 * * 0";  // alternative Sonntags um 23:58 Uhr sollen alle Servicemeldungen der Woche im datenpunkt der SM-Texte geloescht werden 
                                          
                                          //Batterie-Zuordnungen fuer Servicmeldungen
                                          const batteryTypes = {
                                              '1x CR2016':    ['HM-RC-4', 'HM-RC-4-B', 'HM-RC-Key3', 'HM-RC-Key3-B', 'HM-RC-P1', 'HM-RC-Sec3', 'HM-RC-Sec3-B', 'ZEL STG RM HS 4'],
                                              '1x CR2032':    ['HM-PB-2-WM', 'HM-PB-4-WM', 'HM-PBI-4-FM', 'HM-SCI-3-FM', 'HM-Sec-TiS', 'HM-SwI-3-FM', 'HmIP-FCI1'],
                                              '2x LR14':      ['HM-Sec-Sir-WM', 'HM-OU-CFM-TW', 'HM-OU-CFM-Pl', 'HM-OU-CF-Pl'],
                                              '2x LR44/AG13': ['HM-Sec-SC', 'HM-Sec-SC2L', 'HM-Sec-SC-2', 'HM-Sec-RHS'],
                                              '2x LR6/AA':    ['HM-CC-VD', 'HM-CC-RT-DN', 'HM-Sec-WDS', 'HM-Sec-WDS-2', 'HM-CC-TC', 'HM-Dis-TD-T', 'HB-UW-Sen-THPL-I', 'HM-WDS40-TH-I', 'HM-WDS40-TH-I-2', 
                                                               'HM-WDS10-TH-O', 'HmIP-SMI',                     'HMIP-eTRV', 'HM-WDS30-OT2-SM-2', 'HmIP-SMO', 'HmIP-SMO-A', 'HmIP-SPI', 'HmIP-eTRV-2', 
                                                               'HmIP-SPDR', 'HmIP-STHO-A', 'HmIP-eTRV-B', 'HmIP-PCBS-BAT', 'HmIP-STHO', 'HmIP-eTRV-C', 
                                                               'HmIP-WGC', 'HmIP-eTRV-C-2', 'HmIP-eTRV-E', 'HmIP-eTRV-2 I9F', 'HmIP-eTRV-E-S', 'ELV-SH-SW1-BAT'],
                                              '3x LR6/AA':    ['HmIP-SWO-PL', 'HM-Sec-MDIR', 'HM-Sec-MDIR-2', 'HM-Sec-SD', 'HM-Sec-Key', 'HM-Sec-Key-S', 'HM-Sec-Key-O', 'HM-Sen-Wa-Od', 'HM-Sen-MDIR', 
                                                               'HM-Sen-MDIR-O', 'HM-Sen-MDIR-O-2', 'HM-WDS100-C6-O', 'HM-WDS100-C6-O-2', 'HmIP-ASIR', 'HmIP-SWO-B', 'HM-Sen-MDIR-O-3', 'HM-Sec-MDIR-3', 
                                                               'HmIP-SWO-PR', 'HmIP-DLD', 'HmIP-ASIR-2'],
                                              '4x LR6/AA':    ['HM-CCU-1', 'HM-ES-TX-WM', 'HM-WDC7000'],
                                              '1x LR3/AAA':   ['HM-RC-4-2', 'HM-RC-4-3', 'HM-RC-Key4-2', 'HM-RC-Key4-3', 'HM-RC-Sec4-2', 'HM-RC-Sec4-3', 'HM-Sec-RHS-2', 'HM-Sec-SCo', 'HmIP-KRC4', 
                                                               'HmIP-KRCA', 'HmIP-SRH', 'HMIP-SWDO', 'HmIP-DBB', 'HmIP-RCB1', 'HmIP-KRCK', 'HmIP-SWDO-2'],
                                              '2x LR3/AAA':   ['HmIP-WRCR', 'HmIP-SWD','HM-TC-IT-WM-W-EU', 'HM-Dis-WM55', 'HM-Dis-EP-WM55', 'HM-PB-2-WM55', 'HM-PB-2-WM55-2', 'HM-PB-6-WM55', 'HM-PBI-2-FM', 'HM-RC-8', 'HM-Sen-DB-PCB', 
                                                              'HM-Sen-EP', 'HM-Sen-MDIR-SM', 'HM-Sen-MDIR-WM55', 'HM-WDS30-T-O', 'HM-WDS30-OT2-SM', 'HmIP-STH', 'HmIP-STHD', 'HmIP-WRC2', 'HmIP-WRC6', 'HmIP-WTH', 'HmIP-WTH-2', 
                                                              'HmIP-SAM', 'HmIP-SLO', 'HMIP-SWDO-I', 'HmIP-FCI6', 'HmIP-SMI55', 'HM-PB-2-FM', 'HmIP-SWDM', 'HmIP-SCI', 'HmIP-SWDM-B2', 'HmIP-RC8', 'ALPHA-IP-RBG', 'HmIP-DSD-PCB', 
                                                              'HmIP-WRCD', 'HmIP-WRC2-A', 'HmIP-WTH-B-2', 'HmIP-WTH-A', 'HmIP-STV', 'HmIP-WKP'],
                                              '3x LR3/AAA':   ['HM-PB-4Dis-WM', 'HM-PB-4Dis-WM-2', 'HM-RC-Dis-H-x-EU', 'HM-Sen-LI-O'],
                                              '3x AAA Akkus - bitte laden': ['HM-RC-19', 'HM-RC-19-B', 'HM-RC-12', 'HM-RC-12-B', 'HM-RC-12-W'],
                                              '3x LR14/C':    ['HmIP-MP3P'],
                                              '9Volt Block leer oder unbestimmt': ['HM-LC-Sw1-Ba-PCB', 'HM-LC-Sw4-PCB', 'HM-MOD-EM-8', 'HM-MOD-Re-8', 'HM-Sen-RD-O', 'HM-OU-CM-PCB', 'HM-LC-Sw4-WM'],
                                              'Festbatterie leer': ['HmIP-STE2-PCB', 'HM-Sec-SD-2', 'HmIP-SWSD', 'HmIP-PCBS'],
                                              'ohne Batterie': ['HM-LC-Sw1PBU-FM', 'HM-LC-Sw1-Pl-DN-R1', 'HM-LC-Sw1-DR', 'HM-LC-RGBW-WM', 'HM-LC-Sw1-Pl-CT-R1', 'HmIP-HEATING', 'HM-LC-Sw1-FM', 'HM-LC-Sw2-FM', 'HM-LC-Sw4-DR', 
                                                                  'HM-LC-Sw1-Pl', 'HM-LC-Sw1-Pl-2', 'HM-LC-Sw4-Ba-PCB', 'HM-LC-Sw1-SM', 'HM-LC-Sw4-SM', 'HM-Sys-sRP-Pl', 'HM-LC-Sw2PBU-FM', 'HM-LC-Sw1-PCB', 'HM-LC-Sw4-DR-2'],
                                          
                                              'Akku entladen - bitte aufladen': ['HM-Sec-Win', 'HM-Sec-SFA-SM', 'HM-RC-19-SW']
                                          };
                                          // Rega Pfad
                                          const PathRega = ['hm-rega.0.maintenance',];                            // Array um ggf die HCU zu konfigurieren
                                          // Pfade fuer die Speicherung aktueller und vergangener Servicemeldungen
                                          const id_Text_ServicemeldungLang        = path+'TextLangAktuelleSM';    // Objekt wo die Servicemeldung hingeschrieben werden soll (String) = path+'TextLang';
                                          const id_Text_ServicemeldungKurz        = path+'TextKurzAktuelleSM';    // Objekt wo die Servicemeldung hingeschrieben werden soll (String) - kurze Version
                                          const id_Text_Servicemeldung_History    = path+'TextLangVergangeneSM';  // Objekt wo die Servicemeldung hinzugefuegt werden soll (String) - Lange Version (es gibt nur lang)
                                          const id_HTML_Servicemeldung_Aktuell    = path+'HtmlAktuelleSM';        // Objekt wo die Servicemeldung hingeschrieben werden soll (HTML formatiere Tabelle) = path+'htmlLang';
                                          const id_HTML_Servicemeldung_History    = path+'HtmlVergangeneSM';      // Objekt wo die Servicemeldung hinzugefuegt werden soll ((HTML formatiere Tabelle) - Lange Version (es gibt nur lang)
                                          const id_JSON_Servicemeldung_Aktuell    = path+'JSONAktuelleSM';        // JSON Tabelle Datenpunkt Aktuelle SM
                                          const id_JSON_Servicemeldung_Historie   = path+'JSONVergangeneSM';      // JSON Tabelle Datenpunkt Historische SM
                                          const id_Button_Refresh_Historie        = path+'ButtonRefreshHistorie'; // Wenn DP auf true gesetzt wird, dann wird die historie refreshed (geloescht)
                                          // Count-Pfade  und counts in einer Tabelle - wird auch fuer CREATE STATES verwendet
                                          const Zaehler = [
                                            { alarmtype: 'UNREACH_ALARM',                    count: 0,                    Datenpunkt: path+'Anzahl_UNREACH' },
                                            { alarmtype: 'STICKY_UNREACH_ALARM',             count: 0,                    Datenpunkt: path+'Anzahl_STICKY_UNREACH' },
                                            { alarmtype: 'CONFIG_PENDING_ALARM',             count: 0,                    Datenpunkt: path+'Anzahl_CONFIG_PENDING' },
                                            { alarmtype: 'UPDATE_PENDING_ALARM',             count: 0,                    Datenpunkt: path+'Anzahl_Update_PENDING' },
                                            { alarmtype: 'LOWBAT_ALARM',                     count: 0,                    Datenpunkt: path+'Anzahl_LOWBAT' },
                                            { alarmtype: 'DEVICE_IN_BOOTLOADER_ALARM',       count: 0,                    Datenpunkt: path+'Anzahl_DEVICE_IN_BOOTLOADER' },
                                            { alarmtype: 'ERROR',                            count: 0,                    Datenpunkt: path+'Anzahl_in_ERROR' },
                                            { alarmtype: 'FAULT_REPORTING',                  count: 0,                    Datenpunkt: path+'Anzahl_FAULT_REPORTING' },
                                            { alarmtype: 'SABOTAGE_ALARM',                   count: 0,                    Datenpunkt: path+'Anzahl_SABOTAGE' },
                                            { alarmtype: 'ERROR_NON_FLAT_POSITIONING_ALARM', count: 0,                    Datenpunkt: path+'Anzahl_NON_FLAT_POSITIONING' },
                                            { alarmtype: 'STICKY_SABOTAGE_ALARM',            count: 0,                    Datenpunkt: path+'Anzahl_Sticky_SABOTAGE' },
                                            { alarmtype: 'SMAktuell',                        count: 0,                    Datenpunkt: path+'Anzahl_SM-Aktuell' },
                                            { alarmtype: 'SMHistorie',                       count: 0,                    Datenpunkt: path+'Anzahl_SM-Historie' },
                                            { alarmtype: 'Gesamt',                           count: 0,                    Datenpunkt: path+'Anzahl_GESAMT' }
                                          ];
                                          // statusmessages je messagetype und   adapter // Fallback ist fuer unbekannte messagetypes - z.B. alle Error Messages // FALLBACK repraesentiert Standardmessages
                                          const statusMessages = {
                                              UNREACH_ALARM:                    { "hm-rpc": { 0: "keine Kommunikationsfehler",     1: "Kommunikation gestoert",                            2: "Kommunikation war gestoert" } },
                                              STICKY_UNREACH_ALARM:             { "hm-rpc": { 0: "keine Kommunikationsfehler",     1: "Sticky Kommunikation gestoert",                     2: "Sticky Kommunikation war gestoert" } },
                                              SABOTAGE_ALARM:                   { "hm-rpc": { 0: "Keine Sabotage",                 1: "Sabotage",                                          2: "Sabotage aufgehoben" } },
                                              STICKY_SABOTAGE_ALARM:            { "hm-rpc": { 0: "Keine Sabotage",                 1: "Sticky Sabotage",                                   2: "Sticky Sabotage aufgehoben" } },
                                              LOWBAT_ALARM:                     { "hm-rpc": { 0: "Batterie ok",                    1: "Batterie niedrig",                                  2: "Batterie ok" } },
                                              LOW_BAT_ALARM:                    { "hm-rpc": { 0: "Batterie ok",                    1: "Batterie niedrig",                                  2: "Batterie ok" } },
                                              ERROR_NON_FLAT_POSITIONING_ALARM: { "hm-rpc": { 0: "Keine Meldung",                  1: "Geraet wurde angehoben.",                           2: "Geraet wurde angehoben: Bestaetigt" } },
                                              CONFIG_PENDING_ALARM:             { "hm-rpc": { 0: "keine Meldung",                  1: "Konfigurationsdaten stehen zur Uebertragung an",    2: "Konfigurationsdaten standen zur Uebertragung an",}, },
                                              UPDATE_PENDING_ALARM:             { "hm-rpc": { 0: "kein Update verfuegbar",         1: "Update verfuegbar",                                 2: "Update wurde eingespielt" } },
                                              ERROR_OVERHEAT_ALARM:             { "hm-rpc": { 0: "kein Overheat Alarm",            1: "Overheat gemeldet",                                 2: "Overheat geloest" } },
                                              ERROR_UNDERVOLTAGE_ALARM:         { "hm-rpc": { 0: "Kein Undervoltage Alarm",        1: "Undervoltage gemeldet",                             2: "Undervoltage geloest" } },
                                              DEVICE_IN_BOOTLOADER_ALARM:       { "hm-rpc": { 0: "Keine Meldung",                  1: "Geraet startet neu",                                2: "Geraet wurde neu gestartet" } },
                                              DUTY_CYCLE:                       { "hm-rpc": { false: "Geraete-Duty Cycle ok",      true: "Geraete-Duty Cycle erreicht",                    null: "unbekannter Status (Duty_Cycle" } },
                                              lowBat:                           { "hmip":   { false: "Batterie ok",                true: "Batterie niedrig",                               null: "Batterie ok" } },
                                              unreach:                          { "hmip":   { false: "keine Kommunikationsfehler", true: "Kommunikation gestoert",                         null: "Kommunikation war gestoert" } },
                                              sabotage:                         { "hmip":   { false: "Keine Sabotage",             true: "Sabotage",                                       null: "Sabotage aufgehoben" } },
                                              configPending:                    { "hmip":   { false: "Keine Meldung",              true: "Konfigurationsdaten stehen zur Uebertragung an", null: "Konfigurationsdaten standen zur Uebertragung an" } },
                                              FALLBACK:                         { "hm-rpc": { 0: "keine Stoerung",                 1: "Stoerung",                                          2: "Stoerung aufgehoben",
                                                                                              false: "Keine Stoerung",             true: "Stoerung",                                       null: "unbekannter Status Fallback"},
                                                                                  "hmip":   { false: "keine Stoerung",             true: "Stoerung",                                       null: "Stoerung aufgehoben" }, }
                                          };
                                          //ErrorMessages fuer HM-Classic Geraete - Sonderfaelle
                                          const errorMessages = {
                                              'HM-Sec-RHS':   { 7: 'Sabotage' },
                                              'HM-Sec-RHS-2': { 7: 'Sabotage' },
                                              'HM-Sec-SC':    { 7: 'Sabotage' },
                                              'HM-Sec-SC-2':  { 7: 'Sabotage' },
                                              'HM-Sec-SCo':   { 7: 'Sabotage' },
                                              'HM-Sec-MD':    { 7: 'Sabotage' },
                                              'HM-Sec-MDIR':  { 7: 'Sabotage' },
                                              'HM-Sec-MDIR-2':{ 7: 'Sabotage' },
                                              'HM-Sec-Key':   { 1: 'Einkuppeln fehlgeschlagen', 2: 'Motorlauf abgebrochen' },
                                              'HM-Sec-Key-S': { 1: 'Einkuppeln fehlgeschlagen', 2: 'Motorlauf abgebrochen' },
                                              'HM-Sec-Key-O': { 1: 'Einkuppeln fehlgeschlagen', 2: 'Motorlauf abgebrochen' },
                                              'HM-CC-VD':     { 1: 'Ventil Antrieb blockiert',  2: 'Ventil nicht montiert', 3: 'Stellbereich zu klein', 4: 'Batteriezustand niedrig'
                                              }
                                          };
                                          //ErrorMessages fuer HM-Classic Geraet (Heizung) - Sonderfaelle
                                          const faultMessages = {
                                              'HM-CC-RT-DN': {
                                                  0: 'keine Stoerung',
                                                  1: 'Ventil blockiert',
                                                  2: 'Einstellbereich Ventil zu gross',
                                                  3: 'Einstellbereich Ventil zu klein',
                                                  4: 'Kommunikationsfehler',
                                                  6: 'Spannung Batterien/Akkus gering',
                                                  7: 'Fehlstellung Ventil'
                                              }
                                          };
                                          // hier koennen die Alarmgruppen ggf erweitert werden - Aus Alarmgruppe und Instanz wird der Selector gebastelt und in Tabelle Selectors gesammelt
                                          const alarmTypes = [
                                              { key: 'UNREACH_ALARM',                     suffixes: ['UNREACH_ALARM','unreach' ] },//UNREACH_ALARM = HM-Classic & HMIP-CCU - unreach = HMIP Accesspoint
                                             // { key: 'STICKY_UNREACH_ALARM',              suffixes: ['STICKY_UNREACH_ALARM'] },
                                              { key: 'CONFIG_PENDING_ALARM',              suffixes: ['CONFIG_PENDING_ALARM','configPending'] }, //configPending ist eine HMIP Meldung
                                              { key: 'UPDATE_PENDING_ALARM',              suffixes: ['UPDATE_PENDING_ALARM'] },
                                              { key: 'LOWBAT_ALARM',                      suffixes: ['LOWBAT_ALARM', 'LOW_BAT_ALARM','lowBat'] }, //LOWBAT_ALARM = HM-Classic - LOW_BAT_ALARM = HMIP CCU - lowBat = HMIP Accesspoint
                                              { key: 'DEVICE_IN_BOOTLOADER_ALARM',        suffixes: ['DEVICE_IN_BOOTLOADER_ALARM'] },
                                              { key: 'ERROR',                             suffixes: ['ERROR','DUTY_CYCLE'] },                  // error ist ein Sammler fuer hier nicht definierte Meldungen
                                              { key: 'FAULT_REPORTING',                   suffixes: ['FAULT_REPORTING'] },
                                              { key: 'SABOTAGE_ALARM',                    suffixes: ['SABOTAGE_ALARM','sabotage'] }, // sabotage ist eine HMIP Meldung
                                            //  { key: 'STICKY_SABOTAGE_ALARM',             suffixes: ['STICKY_SABOTAGE_ALARM'] },
                                              { key: 'ERROR_NON_FLAT_POSITIONING_ALARM',  suffixes: ['ERROR_NON_FLAT_POSITIONING_ALARM'] },
                                              { key: 'OVERHEAT_ALARM',                    suffixes: ['ERROR_OVERHEAT_ALARM'] },
                                              { key: 'UNDERVOLTAGE_ALARM',                suffixes: ['ERROR_UNDERVOLTAGE_ALARM'] },
                                          ];
                                          // Umlaut Umwandlung und entfernung PUnkte - kann aber auch erweitert werden
                                          const replacements = { '.': ' ', 'ä': 'ae', 'ü': 'ue', 'ö': 'oe', 'ß': 'ss' }; // Umwandlung fuer Namen der Geraete (common.name)
                                          // Definition der Datenstrukturen fuer MetaDaten je nach Adapter, da abweichend
                                          const StrukturDefinition = [
                                              { Adapter: 'hm-rpc',   GeraeteID: 2, AlarmFeld: 4, nativeType: 3,                                             common_name:  3 }, // die Ziffer ist die Positinierung des Feldes 'hm-rpc.1.00085D89B14067.0.UPDATE_PENDING_ALARM' 0=Adapter - 2 = ID 4= Feld Alarm / native Type = die ersten Strings bis zur dritten STelle fuer getObject
                                              { Adapter: 'hmip',     GeraeteID: 3, AlarmFeld: 6, nativeType: 'hmip.xinstancex.devices.xidx.info.modelType', common_name: 'hmip.xinstancex.devices.xidx.info.label' }, // Positionierung wie bei Rm-rpc - bei hmip wird native type aber ueber den DP ausgelesen und nicht getObject "xidx" wird dann mit der geraeteiD ersetzt
                                          ]
                                          // Moegliche Homematic Instanzen (CuxD ausgeschlossen) // Adapter hinzugefuegt um ggf HCU zu konfigurieren
                                          const instanceIds = [
                                              { name: 'HMClassicInstanz',     adapter: 'hm-rpc', Instanz: HMClassicInstanz     },
                                              { name: 'HMIPInstanz',          adapter: 'hm-rpc', Instanz: HMIPInstanz          },
                                              { name: 'GruppenInstanz',       adapter: 'hm-rpc', Instanz: GruppenInstanz       },
                                              { name: 'WiredIClassicInstanz', adapter: 'hm-rpc', Instanz: WiredIClassicInstanz },
                                              { name: 'HMIPAccessPoint',      adapter: 'hmip'  , Instanz: HMIPAccessPoint      },
                                          ];
                                          // Die StickingMappingsTabelle stellt sicher, dass die Sticky entsprechend dieser Regel bestaetigt werden kann
                                          const StickyMappings = {
                                              STICKY_UNREACH_ALARM:            ['UNREACH_ALARM'],
                                              STICKY_SABOTAGE_ALARM:           ['SABOTAGE_ALARM'],
                                          };
                                          
                                          // Konfigurationsobjekt fuer Ausnahmen / es koennen Arlarmtypes je Instanz ausgeschlossen werden / Filter auf AlarmTypes
                                          const exceptions = {
                                              HMClassicInstanz:       [],
                                              HMIPInstanz:            ['DUTY_CYCLE'],
                                              GruppenInstanz:         ['ERROR_NON_FLAT_POSITIONING_ALARM'],
                                              WiredIClassicInstanz:   ['LOWBAT_ALARM', 'LOW_BAT_ALARM','ERROR_NON_FLAT_POSITIONING_ALARM'],
                                          };
                                          //-----------------------------------------------------------------------------------------------------
                                          //Ende Einstellungen
                                          //-----------------------------------------------------------------------------------------------------
                                          LOG(`Script: Servicemeldungen Volume 2 - Autor: Looxer01 Datum: 24.02.2025 Version:3.20`,`Einstellungen`,`Start`,0 )
                                          if(HMIPAccessPoint !== 9 && !GeraeteIDTrigger) {
                                              GeraeteIDTrigger = true // Wenn der HMIPAccessPoint aktiv ist, dann funktioniert der REGA Trigger nicht. also setzen auf geraeteID Trigger=true
                                              LOG(`HMIP AccessPoint bzw Cloud HCU sind aktiv - GeraeteTriggerID muss aktiviert sein - wurde aktiviert. Bitte auch manuell korrigieren und auf GeraeteTriggerID = true setzen`,`Einstellungen`,`Start`,0 )
                                          } 
                                          LOG(`HMClassicInstanz: ${HMClassicInstanz}; HMIPInstanz: ${HMIPInstanz}; WiredIClassicInstanz: ${WiredIClassicInstanz}; GruppenInstanz: ${GruppenInstanz}`, "Einstellungen", "Start", 2);
                                          LOG(`Inhalt instanceIds: ${JSON.stringify(instanceIds)}`, "Einstellungen", "Start", 2);
                                          LOG(`GeraeteIDTrigger: ${GeraeteIDTrigger}`, "Einstellungen", "Start", 2);
                                          LOG(`Inhalt Messengerscope: ${JSON.stringify(MessengerScope)}`, "Einstellungen", "Start", 2);
                                          LOG(`Inhalt Services: ${JSON.stringify(services)}`, "Einstellungen", "Start", 2);
                                          LOG(`Inhalt Messenger-Instanzen: ${JSON.stringify(MessengerInstanz)}`, "Einstellungen", "Start", 2);
                                          LOG(`Inhalt TextTypeKurz: ${JSON.stringify(TextTypeKurz)}`, "Einstellungen", "Start", 2);
                                          let HistorischeMeldungenJSON = [], AktuelleMeldungenJSON = [], MessageSendCollector = {};                    
                                          // jetzt selectors fuellen anhand der Tabelle InstanceIDs, sowie der Auscchlusstabellen
                                          let totalIdsCount = 0;                                                  // Variable fuer die Gesamtzahl der IDs
                                          const selectors = alarmTypes.map(alarmType => {
                                              const collectedIds = [];
                                              instanceIds.forEach(instance => {
                                                  if (instance.Instanz !== 9) {                                   // Umbenennung von `instance.id` zu `instance.Instanz`
                                                      const excludedAlarmTypes = exceptions[instance.name] || []; // Hole Ausnahmen oder leere Liste
                                                      if (!excludedAlarmTypes.includes(alarmType.key)) {          // Wenn Alarmtype nicht in der Ausnahme
                                                          alarmType.suffixes.forEach(suffix => {                  // wenn suffix (meldungsart) nicht in der Ausnahme
                                                              if (!excludedAlarmTypes.includes(suffix)) { 
                                                                  // IDs sammeln, ohne sofort zu filtern
                                                                  // @ts-ignore
                                                                  $(`state[id=${instance.adapter}.${instance.Instanz}.*.${suffix}]`).each(id => collectedIds.push(id)); 
                                                              }
                                                          });
                                                      }
                                                  }
                                              });
                                              const filteredIds = collectedIds.filter(id => !id.includes("groups"));  // for accessPoint und HCU sollten die Ids, die "groups" enthalten ausgeschlossen werden . das sind z.B. Raeume
                                              const finalFilteredIds = filteredIds.filter(id => {                     // IDs anhand der Geraete-IDs in der Ausschlussliste filtern          
                                                  const deviceId = id.split('.')[2];                                  // Geraete-ID aus der vollstaendigen ID extrahieren (z. B. "0000D7099xxx26" aus "hm-rpc.1.0000D7099xxx26.0.LOW_BAT_ALARM")
                                                  return !Ausschlussliste.includes(deviceId);                         // Behalten, wenn nicht in der Ausschlussliste
                                              });
                                           
                                              totalIdsCount += finalFilteredIds.length;                                // IDs zur Gesamtzahl hinzufuegen
                                              return { name: alarmType.key, ids: finalFilteredIds };
                                          });
                                              AktuelleMeldungenJSON = [];
                                              let jsonString = getState(id_JSON_Servicemeldung_Historie).val || '[]';    // Lade den aktuellen JSON-String des Historie-Datenpunkts
                                              HistorischeMeldungenJSON = JSON.parse(jsonString);  
                                              Zaehler.forEach(entry => { entry.count = 0; }); // Alle count-Werte im Objekt auf 0 setzen
                                              for (let j = 0; j < selectors.length; j++) {
                                                  const selector = selectors[j];
                                                  if (selector.ids.length > 0) {
                                                      for (let i = 0; i < selector.ids.length; i++) {
                                                          let id = selector.ids[i], status = getState(id).val;
                                                          if (!existsState(id)) {
                                                              LOG(`Geraet ${obj.id} scheint zwischenzeitlich nicht mehr zu existieren - Empfehlung: script neu starten`, "WARN", "Check_All", 0, "warn");
                                                              continue;
                                                          }
                                                          switch (selector.name) {        // fuer alle alarmtypes - erst die Sonderfaelle
                                                              case 'ERROR':
                                                                  if (status >= 1 && status <= 7) {
                                                                      if (status === 7) { // Sonderfall bei HM-Classic
                                                                          processServiceMessage('SABOTAGE_ALARM', status, id,RunType);
                                                                      } else {            
                                                                          processServiceMessage(selector.name, status, id,RunType); 
                                                                      } 
                                                                  }
                                                                  break;
                                                          default:                    // Standardfall fuer alle anderen alarmtypes
                                                                  if(status === 1 || status === true ) {processServiceMessage(selector.name, status, id,RunType);  } // bei status = true = AccessPoint
                                                                  break;
                                                          }
                                                          increaseCount('Gesamt');
                                                      } // Ende Loop der Mitglieder des Alarmtypes
                                                  }  // Endif selector ist gefuellt
                                              }    // Ende Loop ueber den Selector
                                              const AnzahlAktuellerSM = Zaehler.find(e => e.alarmtype === 'SMAktuell').count;
                                              // Sequenz zur Speicherung der aktuellen Servicemeldungen in die JSON -Datenpunkte--------------------------
                                              if (AnzahlAktuellerSM  === 0) {
                                                  AktuelleMeldungenJSON =CreateJsonEntry([] ,func_get_datum(),'', '', '','',func_get_datum() + " - " + MessageBeiKeinerSM,MessageBeiKeinerSM,null,false );  // Keine aktuellen Meldungen -> "Keine Meldungen" hinzufuegen
                                                  let jsonString = JSON.stringify(AktuelleMeldungenJSON);
                                                  setState(id_JSON_Servicemeldung_Aktuell, jsonString);           // Aktuelle SM wird in JSON-Datenpunkt als String gespeichert
                                              } else {      
                                                  let jsonString = JSON.stringify(AktuelleMeldungenJSON);              // AktuelleMeldungenJSON wird in Funktion DefineServiceMessage gefuellt
                                                  setState(id_JSON_Servicemeldung_Aktuell, jsonString);               // Aktuelle SM wird in JSON-Datenpunkt als String gespeichert
                                              }
                                              if (GeraeteIDTrigger && RunType === "trigger" && !existsState(obj.id)) { // obj.id nicht mehr in ioBroker aber noch im Selector
                                                  const GeraeteId = ExtractMetaData(obj.id, "GeraeteID");                        
                                                  LOG(`Geraet ${GeraeteId} scheint zwischenzeitlich nicht mehr zu existieren - Empfehlung: script neu starten`, "WARN", "Check_All", 0, "warn");
                                                  return;
                                              }
                                              // Speziell fuer GerateIDTrigger = true ist, dass es "aufgehoben"-Meldungen gibt, die fuer REGA Trigger nicht ausgewertet werden koennen. diese duerfen auch nicht als aktuelle meldungen in den DP gelangen
                                              let ExtendedAktuelleMeldungenJSON = [...AktuelleMeldungenJSON]; // Erstelle eine flat copy
                                              if (GeraeteIDTrigger && RunType === "trigger") {
                                                  const GeraeteId = ExtractMetaData(obj.id, "GeraeteID");
                                                  const status = obj.newState.val;
                                                  const common_name = ExtractMetaData(obj.id, "CommonName");
                                                  const native_type = ExtractMetaData(obj.id, "nativeType");
                                                  const meldungsart = ExtractMetaData(obj.id, "meldungsart");
                                                  let status_textLang = DefineServiceMessage(native_type, status, obj.id, "lang");
                                                  let status_textPure = DefineServiceMessage(native_type, status, obj.id, "pure");
                                                  if (!checkIFJSONfEntryExists(ExtendedAktuelleMeldungenJSON,func_get_datum(obj.id), GeraeteId,status, meldungsart) ) {       // checken ob ein Eintrag schon in der Historie ist, wenn nicht dann hinzufuegen
                                                      ExtendedAktuelleMeldungenJSON = CreateJsonEntry(ExtendedAktuelleMeldungenJSON, func_get_datum(obj.id), meldungsart, common_name, GeraeteId, status, status_textLang, status_textPure, func_Batterie(native_type), true)
                                                  }
                                              }
                                              // Historische Meldungen hinzufuegen, wenn nicht bereits vorhanden
                                              ExtendedAktuelleMeldungenJSON.forEach(aktuelleMeldung => {        // Iteriere ueber alle aktuellen Meldungen und fuege aktuelle meldungen in die historie wenn noch nicht vorhanden
                                                  if (!checkIFJSONfEntryExists(HistorischeMeldungenJSON,aktuelleMeldung.datum_seit  ,aktuelleMeldung.GeraeteId, aktuelleMeldung.status, aktuelleMeldung.meldungsart) ) {       // checken ob ein Eintrag schon in der Historie ist, wenn nicht dann hinzufuegen
                                                      if(!isLatestEntryMessageBeiKeinerSM(ExtendedAktuelleMeldungenJSON)) {    // nicht wenn nicht "keine Servicemeldungen" in aktuellJSON vorhanden ist
                                                          const message_kurz = aktuelleMeldung.common_name + " " + aktuelleMeldung.status_message_Pure
                                                          addMessageToCollector(aktuelleMeldung.meldungsart, message_kurz, aktuelleMeldung.status_message_Lang);
                                                          HistorischeMeldungenJSON = CreateJsonEntry(HistorischeMeldungenJSON, aktuelleMeldung.datum_seit, aktuelleMeldung.meldungsart, aktuelleMeldung.common_name, aktuelleMeldung.GeraeteId, aktuelleMeldung.status, aktuelleMeldung.status_message_Lang, aktuelleMeldung.status_message_Pure, aktuelleMeldung.batterie_bezeichnung, true )
                                                          writelog(aktuelleMeldung.common_name, aktuelleMeldung.GeraeteId, aktuelleMeldung.meldungsart, aktuelleMeldung.status, aktuelleMeldung.status_message_Lang);       // externes log erzeugen
                                                      }
                                                  }
                                              });
                                              // Handling "keine aktuellen Servicemeldungen"
                                              if (AnzahlAktuellerSM  === 0 && RunType === "trigger") {       // wenn keine SM vorliegen, die Meldung "keine Servicmeldungen" in die History
                                                  if(!isLatestEntryMessageBeiKeinerSM(HistorischeMeldungenJSON)) {    // nur  wenn  "keine Servicemeldungen" in Historische Meldung nicht bereits an erster Stelle vorhanden ist
                                                      HistorischeMeldungenJSON =CreateJsonEntry(HistorischeMeldungenJSON ,func_get_datum(),'', '', '','',func_get_datum() + " - " + MessageBeiKeinerSM,MessageBeiKeinerSM,null,false );  // Keine aktuellen Meldungen
                                                      writelog("", "", "", "", MessageBeiKeinerSM);       //  log erzeugen
                                                      addMessageToCollector('keineSM', MessageBeiKeinerSM, MessageBeiKeinerSM); // Vorbereitung Messagesending
                                                      sendMessage('keineSM');       
                                                  }                                                         
                                              }
                                              // AutoBestaetigung fuer StickyMessages, wenn diese nicht mehr aktuell sind. nur relevant fuer HM-Classic
                                              if (AutoBestaetigungCCUMeldungen ) {ConfirmStickyMessages() }
                                              // Messages senden fuer alle Faelle mit Servicemeldungen
                                              if (AnzahlAktuellerSM  > 0 && RunType ==="trigger") {            // Servicemeldungen versenden, falls servicemeldungen vorliegen
                                                  sendMessage();
                                              }
                                              HistorischeMeldungenJSON = Markiere_HistSM_als_Aufgehoben(HistorischeMeldungenJSON) // markiert hist messages als erledigt falls nicht mehr in aktuelle meldungen enthalten
                                              jsonString = JSON.stringify(HistorischeMeldungenJSON);                  // Vorbereitung speichern
                                              setState(id_JSON_Servicemeldung_Historie, jsonString);                  // hist JSON-Daten speichern
                                              // falls so eingestellt werden jetzt die TEXTe aus den JSON (aktuell und historie) erzeugt und in die Datenpunkte geschrieben
                                              GenerateTEXT_Datenpunkte(); 
                                              generateHtmlTable(AktuelleMeldungenJSON,"AKT");                 // Aktuelle SM wird in HTML Format gespeichert falls so eingestellt
                                              generateHtmlTable(HistorischeMeldungenJSON,"HIST");             // Historische  SM wird in HTML Format gespeichert falls so eingestellt
                                              // anzahl der Eintraege in HistorischeMeldungenJSON ermitteln und alle counts in die Statistik schreiben
                                              let entry = Zaehler.find(item => item.alarmtype === "SMHistorie");  
                                              if (entry) {entry.count = HistorischeMeldungenJSON.length;    }          // Wenn der Eintrag gefunden wird, aktualisiere den count-Wert
                                              Zaehler.forEach(entry => {    // JETZT: ZaehlerStaende in die ioBroker - Datenpunkte-------------------fuer aktuelle Meldungen
                                                  setState(entry.Datenpunkt, entry.count);
                                              });
                                              // Log Ausgabe der Ergebnisse--------------------------------------------
                                              LOG(`Es wurden insgesamt ${Zaehler.find(e => e.alarmtype === 'Gesamt').count} IDs gecheckt - insgesamt gibt es ${AnzahlAktuellerSM} Servicemeldungen`, "Ergebnis", "Check_All", 2);
                                              Zaehler.forEach(({ alarmtype, count }) => {
                                                  LOG(`SMAktuell fuer alarmtype: ${alarmtype} insgesamt festgestellte Servicemeldungen: ${count}`, "Ergebnis", "Check_All", 2);
                                              });
                                              LOG(`Zeitverbrauch fuer Routine Check_All: ${Date.now() - startTime} Millisekunden`, "Ergebnis", "Check_All", 1);
                                              AktuelleMeldungenJSON =[]; HistorischeMeldungenJSON = [];  MessageSendCollector = {};    // Speicher freigeben
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          //  Function processServiceMessage // Zuordnung der richtigen Servicemeldung zum Alarmtype / Zaehlung der Faelle
                                          //-----------------------------------------------------------------------------------------------------
                                          function processServiceMessage(alarmtype, status, id, RunType) {
                                              const native_type = ExtractMetaData(id, "nativeType");
                                              const meldungsart = ExtractMetaData(id, "meldungsart");
                                              const common_name = ReplaceString(ExtractMetaData(id, "CommonName"));
                                              const GeraeteId = ExtractMetaData(id, "GeraeteID");
                                              let ServiceMeldungTextLang = DefineServiceMessage(native_type, status, id, "lang");     // aktuelle Servicemeldung ableiten
                                              let ServiceMeldungTextPure = DefineServiceMessage(native_type, status, id, "pure");
                                              AktuelleMeldungenJSON = CreateJsonEntry(AktuelleMeldungenJSON, func_get_datum(id), meldungsart, common_name, GeraeteId, status, ServiceMeldungTextLang, ServiceMeldungTextPure, func_Batterie(native_type), true); // nur einmal unabhaengig der Version
                                              increaseCount(alarmtype); increaseCount('SMAktuell');
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion ConfirmStickyMessages Autoconfirm Servicemeldungen (STICKY bei HM-Classic)
                                          //-----------------------------------------------------------------------------------------------------
                                          function ConfirmStickyMessages() {
                                              LOG("Routine ConfirmStickyMessages wird ausgeführt", "Ablauf", "ConfirmStickyMessages", 2);
                                              let Adapter, Instanz, StickyMeldungsart, StickyMappedString, ID_Constructed, GeraeteID;
                                              let AckFlag = false; let delay = 0;
                                              const foundInstance = instanceIds.find(item => item.name === 'HMClassicInstanz'); // die HMClassic Instanz wird ermittelt
                                              if (foundInstance) {
                                                  Adapter = foundInstance.adapter;
                                                  Instanz = foundInstance.Instanz;
                                              }
                                              for (let i = 0; i < AktuelleMeldungenJSON.length; i++) {
                                                  const aktuelleMeldung = AktuelleMeldungenJSON[i];
                                                  StickyMeldungsart = aktuelleMeldung.meldungsart;
                                                  StickyMappedString = StickyMappings[StickyMeldungsart];
                                                  GeraeteID = aktuelleMeldung.GeraeteId;
                                                  if (StickyMappedString === undefined) { continue }
                                                  ID_Constructed = Adapter + "." + Instanz + "." + GeraeteID + ".0." + StickyMeldungsart; // Gilt nur bei HM-Classic
                                                  AckFlag = CheckStickyNochAktuell(StickyMappedString, GeraeteID); // kann die Message bestaetigt werden ? true = ja
                                                  if (AckFlag) {
                                                      setTimeout(() => {
                                                          setState(ID_Constructed, 2);
                                                          LOG("Eine Sticky Meldung wurde bestaetigt fuer ID " + ID_Constructed, "Ergebnis", "ConfirmStickyMessages", 2);
                                                      }, delay); //  Verzögerung
                                                      delay = delay + 500
                                                  } else {
                                                      LOG("Eine Sticky Meldung ist noch aktuell und wird nicht bestaetigt fuer ID " + ID_Constructed, "Ergebnis", "ConfirmStickyMessages", 2);
                                                  }
                                              }
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion CheckStickyNochAktuell checked of Sticky Meldung bestaetigt werden kann 
                                          //-----------------------------------------------------------------------------------------------------
                                          function CheckStickyNochAktuell(MappedString, GeraeteID) {
                                              let AckFlag = true;
                                              MappedString = String(MappedString); // Wandelt MappedString in einen String um
                                              GeraeteID = String(GeraeteID); // Wandelt GeraeteID in einen String um
                                              for (let j = 0; j < AktuelleMeldungenJSON.length; j++) {    // Iteriere über alle aktuellen Meldungen, um nach einer Nicht-Sticky-Meldung zu suchen
                                                  const AktuelleMeldung = AktuelleMeldungenJSON[j];
                                                  const aktuelleMeldungsart = String(AktuelleMeldung.meldungsart).trim();
                                                  const aktuelleGeraeteId = String(AktuelleMeldung.GeraeteId).trim();
                                                  if (aktuelleMeldungsart === MappedString && aktuelleGeraeteId === GeraeteID) {  // ueberpruefen ob die Sticky message noch aktuell ist
                                                      AckFlag = false;
                                                      break; // Schleife abbrechen
                                                  }
                                              }
                                              return AckFlag;
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Function increaseCount // Diese Funktion reduziert Wiederholungen der Case abfragen in Check_ALL
                                          //-----------------------------------------------------------------------------------------------------
                                          function increaseCount(alarmtype) {
                                              const entry = Zaehler.find(e => e.alarmtype === alarmtype);
                                              if (entry) entry.count++;
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion DefineServiceMessage  Message ERmittlung
                                          //-----------------------------------------------------------------------------------------------------
                                          function DefineServiceMessage(native_type, status, id, version) {
                                              const meldungsart = ExtractMetaData(id, "meldungsart");
                                              LOG(`Routine DefineServiceMessage wird ausgefuehrt meldungsart ${meldungsart} und ID:${id}`, "Ablauf", "DefineServiceMessage", 2);
                                              const adapter = ExtractMetaData(id, "adapter");
                                              const GeraeteId = ExtractMetaData(id, "GeraeteID");
                                              const common_name = ReplaceString(ExtractMetaData(id, "CommonName"));
                                              const datum_seit = func_get_datum(id);
                                              let matchingAlarmType = meldungsart;
                                              let isValidMessageType = alarmTypes.some((type) => type.suffixes.includes(meldungsart));
                                              if (isValidMessageType) {    // Bestimmen des passenden Alarmtyps
                                                  matchingAlarmType = alarmTypes.find((type) => type.suffixes.includes(meldungsart)).key;
                                                  if (matchingAlarmType === "ERROR" && meldungsart !== "ERROR") {
                                                      matchingAlarmType = meldungsart;
                                                  }
                                              }
                                              const createServiceMessage = (message) => {    // Hilfsfunktion zum Erzeugen der ServiceMessage
                                                  if (version === "lang") {        // Unterschiedliche Formate je nach Version
                                                      let Status_Message_Lang = `${datum_seit} - ${meldungsart} - ${common_name} - (${GeraeteId}) - ${status} - ${message}`;
                                                      return Status_Message_Lang;
                                                  } else if (version === "pure") {
                                                      return message;  // Nur die pure status Nachricht
                                                  } else {
                                                      return `${common_name} ${message}`;  // Kurze Nachricht, falls kurze Nachrichten gewuenscht fuer das messaging
                                                  }
                                              };
                                              switch (matchingAlarmType) {    // Logik je nach meldungsart
                                                  case "LOWBAT_ALARM":
                                                      const lowBatMessage = `${getStatusMessage(meldungsart, status, adapter)} - Batteriebezeichnung: ${func_Batterie(native_type)}`;
                                                      return createServiceMessage(lowBatMessage);
                                                  case "ERROR":
                                                      if (status >= 1 && status <= 7 && errorMessages[native_type] && errorMessages[native_type][status]) {
                                                          return createServiceMessage(errorMessages[native_type][status]);
                                                      }
                                                      if (status === 0) {
                                                          const fallbackMessage = getStatusMessage("FALLBACK", status, adapter);
                                                          return createServiceMessage(fallbackMessage);
                                                      }
                                                      break;
                                                  case "FAULT_REPORTING":
                                                      if (faultMessages[native_type] && faultMessages[native_type][status]) {
                                                          return createServiceMessage(faultMessages[native_type][status]);
                                                      }
                                                      break;
                                                  default:
                                                      if (isValidMessageType) {
                                                          return createServiceMessage(getStatusMessage(meldungsart, status, adapter));
                                                      } else {
                                                          const fallbackMessage = getStatusMessage("FALLBACK", status, adapter);
                                                          return createServiceMessage(fallbackMessage);
                                                      }
                                              }
                                              return createServiceMessage(getStatusMessage("FALLBACK", status, adapter));    // kann eigentlich nicht aufteten
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          //Funktion getStatusMessage zur Abfrage der Meldung je messageType, Adapter und Status (fuer Routine DefineServiceMessage)
                                          //-----------------------------------------------------------------------------------------------------
                                          function getStatusMessage(messageType, statusKey, adapter) {
                                              if ( statusMessages[messageType] && statusMessages[messageType][adapter] &&statusMessages[messageType][adapter][statusKey] !== undefined  ) {    // Existenzpruefung- ggf regagieren
                                                  return statusMessages[messageType][adapter][statusKey];
                                              } else {
                                                  return `Keine passende Meldung fuer MessageType: "${messageType}", Adapter: "${adapter}", Status: "${statusKey}".`;
                                              }
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // addMessageToCollector  Messages werden unter beruecksichtigung der folgenden Objekte in den MessageCollector genommen
                                          // MessengerScope, Services, AlarmTypes, TextTypeKurz
                                          //-----------------------------------------------------------------------------------------------------
                                          function addMessageToCollector(messageType, MessageKurz, MessageLang) {
                                              let actualMessageType, matchingAlarmType;
                                              if (messageType !== "keineSM") {  
                                                  let isValidMessageType = alarmTypes.some((type) => type.suffixes.includes(messageType));    
                                                  if (isValidMessageType) {                                                                   
                                                      matchingAlarmType = alarmTypes.find((type) => type.suffixes.includes(messageType)).key;
                                                      actualMessageType = messageType;  
                                                  } else {
                                                      LOG(`MessageType: ${messageType} ist nicht konfiguriert in alarmTypes`, "WARN", "addMessageToCollector", 0);
                                                  }
                                              }
                                              if (messageType === "keineSM") {  
                                                  actualMessageType = "keineSM";
                                                  matchingAlarmType = "keineSM";
                                              }
                                              if (!MessageSendCollector[actualMessageType]) {  
                                                  MessageSendCollector[actualMessageType] = {};  
                                              }
                                              let messengerConfig = MessengerScope[matchingAlarmType] || MessengerScope['Sonstige'] || Array(services.length).fill(false);
                                              messengerConfig.forEach((isActive, index) => {  
                                                  if (isActive) {  
                                                      const service = services[index];
                                                      const instance = MessengerInstanz[index];
                                                      if (instance !== null && !isNaN(instance) && instance >= 0) {
                                                          if (!MessageSendCollector[actualMessageType][service]) {
                                                              MessageSendCollector[actualMessageType][service] = [];
                                                          }
                                                          const messageToAdd = TextTypeKurz[index] ? MessageKurz : MessageLang;
                                                          const existingMessages = MessageSendCollector[actualMessageType][service];
                                                          // **Doppelprüfung:** Gibt es bereits eine Nachricht mit demselben Text und Instanz?
                                                          const isDuplicate = existingMessages.some(msg => msg.message.trim() === messageToAdd.trim() && msg.instance === instance);
                                                          if (!isDuplicate) {
                                                              MessageSendCollector[actualMessageType][service].push({  
                                                                  message: messageToAdd + '\n',
                                                                  instance: instance
                                                              });
                                                              LOG(`Nachricht hinzugefügt für ${actualMessageType} - Service: ${service} - Instanz: ${instance}`, "Ablauf", "addMessageToCollector", 3);
                                                          } else {
                                                              LOG(`Doppelte Nachricht erkannt und verworfen für ${actualMessageType} - Service: ${service} - Instanz: ${instance}`, "DEBUG", "addMessageToCollector", 3);
                                                          }
                                                      } else {
                                                          LOG(`Ungültige Instanz für Service: ${service} (Instanz: ${instance})`, "WARN", "addMessageToCollector", 0);
                                                      }
                                                  }
                                              });
                                          }
                                           //-----------------------------------------------------------------------------------------------------
                                          // sendMessage  Hier werden die Nachrichten fuer den jeweiligen Service aufbereitet
                                          //-----------------------------------------------------------------------------------------------------
                                          function sendMessage(messageType = null) {
                                              LOG(`Routine sendMessage wird ausgefuehrt, meldungsart: ${messageType}`, "Ablauf", "sendMessage", 2);
                                              const messageTypesToProcess = messageType ? [messageType] : Object.keys(MessageSendCollector);    // Bestimme die MessageTypes, die verarbeitet werden sollen
                                              messageTypesToProcess.forEach((type) => {    
                                                  const messagesByService = MessageSendCollector[type];  
                                                  if (messagesByService) {
                                                      Object.keys(messagesByService).forEach((service) => { 
                                                          const serviceMessages = messagesByService[service]; 
                                                          let messagesToRemove = [];  
                                                          serviceMessages.forEach((item) => {                
                                                              const { message, instance } = item;
                                                              sendToService(service, message, instance);
                                                              messagesToRemove.push(item);
                                                          });
                                                          messagesToRemove.forEach((item) => {                // Entferne alle verarbeiteten Nachrichten
                                                              const serviceMessagesIndex = serviceMessages.indexOf(item);
                                                              if (serviceMessagesIndex > -1) {
                                                                  serviceMessages.splice(serviceMessagesIndex, 1);
                                                              }
                                                          });
                                                      });
                                                  }
                                              });
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // sendToService    - hier wird der Versand vorgenommen
                                          // Reihenfolge:       Email, WhatsApp, Signal, Telegram, Pushover, Pushsafer
                                          // MessengerInstanz = [0,       0,        0,      0,         0,        0]    Instanzen der Messenger-Dienste in 
                                          //-----------------------------------------------------------------------------------------------------
                                          function sendToService(service, message, instance) {
                                          LOG(`Message wird versendet mit: ${service} : ${instance} : ${message}`, "Ablauf", "sendToService", 2);
                                              switch (service) {
                                                  case "email":
                                                      sendTo(`email.${instance}`, "send", {
                                                          text: message, 
                                                          to: emailAddresse,
                                                          subject: Headline
                                                      });
                                                      break;
                                                  case "whatsApp":
                                                      sendTo(`whatsapp-cmb.${instance}`, "send", {
                                                          text: message
                                                      });
                                                      break;
                                                  case "Signal":
                                                      sendTo(`signal-cmb.${instance}`, "send", {
                                                          text: message
                                                      });
                                                      break;
                                                  case "Telegram":
                                                      sendTo(`telegram.${instance}`, "send", {
                                                          text: message,
                                                          user: TelegramUser  // Telegram User ID, um den Nachrichteneempfaenger festzulegen
                                                      });
                                                      break;
                                                  case "Pushover":
                                                      sendTo(`pushover.${instance}`, "send", {
                                                          message: message,
                                                          sound: ""
                                                      });
                                                      break;
                                                  case "Pushsafer":
                                                      sendTo(`pushsafer.${instance}`, "send", {
                                                          message: message,
                                                          title: Headline
                                                      });
                                                      break;
                                                  default:
                                                      LOG(`Unbekannter Service: ${service}`, "WARN", "sendToService", "warn");
                                              }
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion ExtractMetaData  Verarbeitung des Datenpunkts zur Extraktion der Metadaten: GeraeteId, meldungsart
                                          //-----------------------------------------------------------------------------------------------------
                                          function ExtractMetaData(datenpunkt, ExtractType) {
                                              LOG(`Routine ExtractMetaData wird ausgefuehrt datenpunkt fuer Metadaten ${datenpunkt} ExtractType ${ExtractType} `, "Ablauf", "ExtractMetaData", 2);
                                              ExtractType = ExtractType.toUpperCase();
                                              const teile = datenpunkt.split('.');                                        // Splitte den Datenpunkt in Teile
                                              const adapter = teile[0];                                                   // Der erste Teil ist immer der Adapter
                                              const instance = teile[1];                                                  // Der zweite  Teil ist immer die  Instance
                                              const struktur = StrukturDefinition.find(s => s.Adapter === adapter);       // Strukturzeile aus Tabelle StrukturDefinition fuer den Adapter aus dem uebergebenen DP
                                              const GeraeteID = teile[struktur.GeraeteID];                                // Extrahiere Felder basierend auf der Strukturdefinition
                                              if (!struktur) {
                                                  LOG(`Die Struktur fuer MetaDaten Extract ist nicht korrekt eingestellt. Der uebergebenen datenpunkt war:$(datenpunkt)- Abbruch`, "Fehler", "ExtractMetaData", 0);
                                                  return null;
                                              }
                                              if(ExtractType === "ADAPTER") { return adapter; }
                                              if(ExtractType === "GERAETEID") { return GeraeteID; }
                                              if(ExtractType === "MELDUNGSART") {
                                                  const meldungsart = teile[struktur.AlarmFeld];                                       // Extrahiere Felder basierend auf der Strukturdefinition
                                                  return meldungsart;
                                              }
                                              if(ExtractType === "NATIVETYPE" && typeof struktur.nativeType === 'number') {
                                                  const MetaDP = datenpunkt.split('.').slice(0, struktur.nativeType).join('.');        // ergibt den Datenpunkt fuer getObject z.B. hm-rpc.1.00085D89B14067
                                                  const nativeType  = getObject(MetaDP).native.TYPE;
                                                  return nativeType;
                                              }
                                              if(ExtractType === "NATIVETYPE" && typeof struktur.nativeType === 'string') {           // bei string liegt der native-type im datenpunkt
                                                  let  DPNativeTypeDP = struktur.nativeType;
                                                  DPNativeTypeDP = DPNativeTypeDP.replace('xidx', GeraeteID);
                                                  DPNativeTypeDP = DPNativeTypeDP.replace('xinstancex', instance);
                                                  let nativeType = getState(DPNativeTypeDP).val  
                                                  return nativeType;
                                              }
                                              if(ExtractType === "COMMONNAME" && typeof struktur.common_name === 'number') {        
                                                  const MetaDP = datenpunkt.split('.').slice(0, struktur.common_name).join('.');        // ergibt den Datenpunkt fuer getObject z.B. hm-rpc.1.00085D89B14067
                                                  const common_name  = getObject(MetaDP).common.name;
                                                  return common_name;
                                              }
                                              if(ExtractType === "COMMONNAME" && typeof struktur.common_name === 'string') {           // bei string liegt der common_name im datenpunkt
                                                  let DPcommmon_name = struktur.common_name;
                                                  DPcommmon_name = DPcommmon_name.replace('xidx', GeraeteID).replace('xinstancex', instance);
                                                  let common_name = getState(DPcommmon_name).val  
                                                  return common_name;
                                              }
                                              LOG(`Der Datenpunkt/ExtractType, die erforderlich zur Ermittlung von Metadaten sind nicht bekannt Der Datenpunkt lautet ${datenpunkt} ExtractType ${ExtractType}  - Abbruch`, "Fehler", "ExtractMetaData", 0);
                                              return null
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // ReplaceString  // ersetzen  entsprechend tabelle replacements
                                          //-----------------------------------------------------------------------------------------------------
                                          function ReplaceString(string) {
                                              for (const [key, value] of Object.entries(replacements)) {
                                                  // Escape den Punkt (.) fuer den regulaeren Ausdruck
                                                  const escapedKey = key.replace('.', '\\.');
                                                  string = string.replace(new RegExp(escapedKey, 'g'), value);
                                              }
                                              return string;
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // func_get_datum  aktuelles Datum formatiert
                                          //-----------------------------------------------------------------------------------------------------
                                          function func_get_datum(id) {
                                              let datum;
                                              if (id && getState(id)) {
                                                  datum = formatDate(getState(id).lc, "TT.MM.JJ SS:mm:ss");
                                              } else {
                                                  datum = formatDate(new Date(), "TT.MM.JJ SS:mm:ss"); // Aktuelles Datum
                                              }
                                              let datumDate = new Date(datum); // korrekte verwendung des datumsformates
                                              let cutoffDate = new Date('1971-01-01T01:00:00');
                                              return datumDate < cutoffDate ? '' : `${datum} Uhr`;
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // func_Batterie Batterieermittlung
                                          //-----------------------------------------------------------------------------------------------------
                                          function func_Batterie(native_type) {
                                              LOG(`Routine wird ausgefuehrt`, "Ablauf", "func_Batterie", 2);
                                              const normalizedType = native_type.toUpperCase();
                                              return Object.keys(batteryTypes).find(battery => 
                                                  batteryTypes[battery].some(device => device.toUpperCase() === normalizedType)
                                              ) || NichtRelevantText;
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion CreateJsonEntry erzeugen einer JSON Tabelle 
                                          //-----------------------------------------------------------------------------------------------------
                                          function CreateJsonEntry(existingJson = [], datum_seit = '', meldungsart = '', common_name = '', GeraeteId = '', status = '', Status_Lang = '', Status_Pure, Batterie = '',sortierung = false) {
                                              let parsedJson;
                                              if (Array.isArray(existingJson)) {     // ueberpruefen, ob existingJson bereits ein Array ist
                                                  parsedJson = existingJson; // Nur das Array uebernehmen
                                              } else {
                                                  parsedJson = [];  // Falls es kein Array ist, setze es auf ein leeres Array
                                              }
                                              const neuerEintrag = { 
                                                  datum_seit: datum_seit || func_get_datum(),     // Fallback auf aktuelles Datum
                                                  meldungsart: meldungsart || NichtRelevantText,
                                                  common_name: common_name || NichtRelevantText,
                                                  GeraeteId: GeraeteId || NichtRelevantText,
                                                  status: status || NichtRelevantText,                                // Status entweder number oder boolean
                                                  status_message_Lang: Status_Lang || 'Keine Meldung',    // Langer Text
                                                  status_message_Pure: Status_Pure || 'Keine Meldung',    // nur die Status aus den Status-Tabellen
                                                  batterie_bezeichnung: Batterie || NichtRelevantText,
                                                  SM_aufgehoben_seit:  "aktiv"          // status ob eine message bereits aufgeboben ist. wenn aufgehoben wird ein Datum eingestellt
                                              };
                                              parsedJson.unshift(neuerEintrag);
                                              if(sortierung) { sortJason(parsedJson);}
                                              return parsedJson;  // Gib das aktualisierte Array zurueck
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion checkIfEntryExists Checken of ein Eintrag schon vorhanden ist
                                          //-----------------------------------------------------------------------------------------------------
                                          function checkIFJSONfEntryExists(parsedJson, datum_seit, GeraeteId, status, meldungsart) {
                                              if (!Array.isArray(parsedJson)) { // Überprüfen, ob parsedJson ein Array ist
                                                  LOG(`parsedJson ist kein Array`, "WARN", "checkIFJSONfEntryExists", 1);
                                                  return false;
                                              }
                                              for (let entry of parsedJson) { // Durch das Array iterieren und kriterien checken // meldungsart ist optional
                                                  if (entry.datum_seit === datum_seit && entry.GeraeteId === GeraeteId && entry.status === status && (meldungsart === undefined || entry.meldungsart === meldungsart)  ) {
                                                      return true; // Eintrag gefunden
                                                  }
                                              }
                                              return false; // Kein passender Eintrag gefunden
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion isLatestEntryMessageBeiKeinerSM Checken ob die letzte message der variablen MessageBeiKeinerSM entspricht
                                          //-----------------------------------------------------------------------------------------------------
                                          function isLatestEntryMessageBeiKeinerSM(existingJson = []) {
                                              if (!Array.isArray(existingJson) || existingJson.length === 0) {    // ueberpruefen, ob existingJson ein Array ist und Eintraege enthaelt
                                                  return false;
                                              }
                                              const latestEntry = existingJson[0];    // Neuesten Eintrag extrahieren (erster Eintrag im Array)
                                              if (latestEntry.status_message_Lang && latestEntry.status_message_Lang.includes(MessageBeiKeinerSM)) {
                                                  return true;
                                              }
                                              return false;
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion Markiere_HistSM_als_Aufgehoben Zuordnung von historischen Messages zu "aufgehoben" mit Datum der Zuordnung
                                          //-----------------------------------------------------------------------------------------------------
                                          function Markiere_HistSM_als_Aufgehoben(HistorischeMeldungenJSON_transfer) {
                                              const maxTimeDiffMs = 1000; // z.B. 1000 ms fuer eine Sekunde Unterschied
                                              const nurKeineMeldungen = AktuelleMeldungenJSON[0].status_message_Lang.includes(MessageBeiKeinerSM);    // Pruefen, ob AktuelleMeldungenJSON nur eine Meldung mit "Derzeit keine Servicemeldungen" enthaelt
                                              if (nurKeineMeldungen) {
                                                  HistorischeMeldungenJSON_transfer.forEach(meldung => {        // Alle historischen Eintraege als aufgehoben markieren
                                                      if (meldung.SM_aufgehoben_seit === "aktiv") {
                                                          meldung.SM_aufgehoben_seit = func_get_datum();
                                                      }
                                                  });
                                                  return HistorischeMeldungenJSON_transfer;
                                              }
                                              HistorischeMeldungenJSON_transfer.forEach(historischeMeldung => {    // Iteriere ueber alle historischen Meldungen (aeussere Schleife)
                                                  if (historischeMeldung.SM_aufgehoben_seit !== "aktiv") return; // Wenn die historische Meldung bereits aufgehoben wurde, ueberspringen
                                                  let zugeordnet = false;
                                                  const historischeDatum = extractDate(historischeMeldung.datum_seit);
                                                  AktuelleMeldungenJSON.forEach(aktuelleMeldung => {        // Iteriere ueber alle aktuellen Meldungen (innere Schleife)
                                                      const aktuelleDatum = extractDate(aktuelleMeldung.datum_seit);
                                                      const gleicheGeraeteID = historischeMeldung.GeraeteId === aktuelleMeldung.GeraeteId;
                                                      const gleicheStatusMessage = historischeMeldung.status_message_Pure === aktuelleMeldung.status_message_Pure;
                                                      const zeitDifferenz = Math.abs(aktuelleDatum.getTime() - historischeDatum.getTime());            // Berechne den Zeitunterschied in Millisekunden
                                                      const gleicheOderNaheZeit = zeitDifferenz <= maxTimeDiffMs;            // Pruefe, ob die Zeitdifferenz innerhalb des erlaubten Bereichs liegt
                                                      if (gleicheGeraeteID && gleicheStatusMessage && gleicheOderNaheZeit) {
                                                          historischeMeldung.SM_aufgehoben_seit = "aktiv"; // Als nicht aufgehoben markieren
                                                          zugeordnet = true
                                                      }
                                                  });
                                                  if (!zugeordnet) {
                                                      historischeMeldung.SM_aufgehoben_seit = func_get_datum() // kein pendant gefunden, also muss die message obsolet sein
                                                  }
                                              });
                                              return HistorischeMeldungenJSON_transfer;
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion sortJason zum Sortieren des History Jason nach datum
                                          //-----------------------------------------------------------------------------------------------------
                                          function sortJason(parsedJson) {
                                              if (!Array.isArray(parsedJson)) { LOG("Die Eingabe fuer sortJason ist kein Array.", "Fehler", "sortJason", 2); return[] ;}
                                              const parseDate = (datum) => {
                                                  try {
                                                      const [date, time] = datum.split(' '); // Datum und Zeit trennen
                                                      const [day, month, year] = date.split('.'); // Datum aufteilen in Tag, Monat, Jahr
                                                      const [hours, minutes, seconds] = time.split(':'); // Zeit aufteilen in Stunden, Minuten, Sekunden
                                                      return new Date(`20${year}-${month}-${day}T${hours}:${minutes}:${seconds}`); // ISO-Format erstellen
                                                  } catch (error) {
                                                      LOG(`Fehler beim Parsen des Datums: ${datum}`, "Fehler", "sortJason", 1);
                                                      return null;  // Rueckgabe von null, wenn das Datum ungueltig ist
                                                  }
                                              };
                                              return parsedJson.sort((a, b) => {
                                                  const dateA = parseDate(a.datum_seit);
                                                  const dateB = parseDate(b.datum_seit);
                                                  if (dateA === null && dateB === null) return 0; // Keine aenderung bei ungueltigen Datumswerten
                                                  if (dateA === null) return 1; // Null-Werte ans Ende verschieben
                                                  if (dateB === null) return -1;
                                                  return dateB.getTime() - dateA.getTime(); // Neueste zuerst
                                              });
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion extractDatum // Hilfsfunktion zur Extraktion des Datums        // Beispieltext: "01.12.24 12:04:55 Uhr - SABOTAGE_ALARM ..."
                                          //-----------------------------------------------------------------------------------------------------
                                          function extractDate(text) {
                                              if (!text || typeof text !== "string") {
                                                  LOG(`extractDate Fehler: Ungueltiger Eingabetext: ${text}`, "Fehler", "extractDate", 2);
                                                  return new Date(0); // Fallback auf ein Default-Datum
                                              }
                                              const match = text.match(/^(\d{2})\.(\d{2})\.(\d{2}) (\d{2}):(\d{2}):(\d{2})/);    // Regulaerer Ausdruck, um Datum und Uhrzeit zu extrahieren
                                              if (!match) {
                                                  LOG(`extractDate Fehler: Kein gueltiges Datum gefunden: ${text}`, "Fehler", "extractDate", 2);
                                                  return new Date(0); // Fallback auf ein Default-Datum
                                              }
                                              const [_, day, month, year, hours, minutes, seconds] = match;    // Teile aus dem Match extrahieren
                                              const fullYear = year.length === 2 ? `20${year}` : year;    // Jahr vervollstaendigen, falls noetig
                                              const dateString = `${fullYear}-${month}-${day}T${hours}:${minutes}:${seconds}`;    // Erstellen des Datums im Format "YYYY-MM-DDTHH:mm:ss"
                                              const date = new Date(dateString);    // Umwandlung in ein Date-Objekt
                                              if (isNaN(date.getTime())) {    // ueberpruefen, ob das Datum gueltig ist
                                                  LOG(`extractDate Fehler: Ungueltiges Datum erzeugt: ${dateString}`, "Fehler", "extractDate", 2);
                                                  return new Date(0);
                                              }
                                              return date;
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion GenerateTEXT_Datenpunkte // Generiert TEXT format aus den JSON Arrays und speichert diese in die Datenpunkte
                                          //-----------------------------------------------------------------------------------------------------
                                          function GenerateTEXT_Datenpunkte() {
                                              LOG(`Routine wird ausgefuehrt`, "Ablauf", "GenerateTEXT_Datenpunkte", 2);
                                              if(!UpdateTEXT_Datenpunkte){return}; // wenn keine TEXT-Datenpunkte updates erfolgen sollen nicht ausfuehren
                                              let  SMAktuellMessageLangTEXT = [], SMHistMessageLangTEXT = [],SMAktuellMessageKurzTEXT = [];
                                              HistorischeMeldungenJSON.forEach(Meldung => {        // Iteriere durch HistorischeMeldungenJSON und extrahiere die status_message_Lang
                                                  SMHistMessageLangTEXT.push(Meldung.status_message_Lang + " - Meldung aufgehoben: " + Meldung.SM_aufgehoben_seit + "<br>");            // Status-Lang-Text extrahieren und ins Array pushen
                                              });
                                              setState(id_Text_Servicemeldung_History, SMHistMessageLangTEXT.join(''));        // Umwandlung des Arrays in einen String und Speichern im Datenpunkt id_Text_ServicemeldungLang
                                              AktuelleMeldungenJSON.forEach(Meldung => {        // Iteriere durch AktuelleMeldungenJSON und extrahiere die status_message_Pure und status_message_Lang
                                                  if (Meldung.status_message_Pure) {
                                                      SMAktuellMessageKurzTEXT.push(Meldung.datum_seit + " " + Meldung.status_message_Pure + "<br>"); // Status-Kurz-Text extrahieren und ins Array pushen
                                                  }
                                                  if (Meldung.status_message_Lang) {
                                                      SMAktuellMessageLangTEXT.push(Meldung.status_message_Lang + "<br>"); // Status-Lang-Text extrahieren und ins Array pushen
                                                  }
                                              });
                                              setState(id_Text_ServicemeldungKurz, SMAktuellMessageKurzTEXT.join(''));        // Umwandlung der Arrays in Strings und Speichern in den entsprechenden Datenpunkten
                                              setState(id_Text_ServicemeldungLang, SMAktuellMessageLangTEXT.join(''));
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion generateHtmlTable // Funktion, aus den JSON Tabellen ein HTML-Format erzeugt
                                          //-----------------------------------------------------------------------------------------------------
                                          function generateHtmlTable(data, HistOderAkt) {  
                                              if (!UpdateHTML_Datenpunkte) { return; }        // Keine Updates, wenn HTML-Datenpunkte deaktiviert sind
                                              const uniqueClass = "custom-table";    // Eindeutige Klasse für die Tabelle
                                              const cellPadding = '6px';
                                              // Baue die Tabelle mit einer eindeutigen Klasse auf
                                              let table = `
                                                  <table class="${uniqueClass}" style="
                                                      width: 100%;
                                                      border-collapse: collapse; /* Rahmen zusammenführen */
                                                      border-spacing: 0; /* Kein Abstand zwischen Zellen */
                                                  ">
                                              `;
                                              // Scoped Stile für die Tabelle
                                              table += `
                                                  <style>
                                                      .${uniqueClass} th, .${uniqueClass} td {
                                                          padding: ${cellPadding};
                                                          ${useBorderAll ? `border: ${borderWidth} solid ${borderColor};` : 'border: none;'} /* Innerer Rahmen basierend auf useBorderAll */
                                                      }
                                                      .${uniqueClass} thead th {
                                                          position: sticky;
                                                          top: 0;
                                                          background-color: ${headerColor};
                                                          color: ${headerTextColor};
                                                          z-index: 1;
                                                      }
                                                  </style>
                                              `;
                                              // Kopfzeile
                                              table += `
                                                  <thead>
                                                  <tr>
                                                      <th style="text-align: left;">Datum_Seit</th>
                                                      <th style="text-align: left;">Meldungsart</th>
                                                      <th style="text-align: left;">Name</th>
                                                      <th style="text-align: left;">GeraeteId</th>
                                                      <th style="text-align: left;">Status</th>
                                                      <th style="text-align: left;">Batterie</th>
                                                      <th style="text-align: left;">SM_aufgehoben_seit</th>
                                                  </tr>
                                                  </thead>
                                              `;
                                              // Tabellenkörper
                                              table += '<tbody>';
                                              data.forEach((item, index) => {
                                                  const rowColor = index % 2 === 0 ? evenRowColor : oddRowColor; // Farben der Zeilen
                                                  const textColor = index % 2 === 0 ? evenRowTextColor : oddRowTextColor; // Textfarbe
                                                  table += `
                                                  <tr style="background-color: ${rowColor}; color: ${textColor};">
                                                      <td>${item.datum_seit}</td>
                                                      <td>${item.meldungsart}</td>
                                                      <td>${item.common_name}</td>
                                                      <td>${item.GeraeteId}</td>
                                                      <td>${item.status_message_Pure}</td>
                                                      <td>${item.batterie_bezeichnung}</td>
                                                      <td>${item.SM_aufgehoben_seit}</td>
                                                  </tr>
                                                  `;
                                              });
                                              table += '</tbody>';
                                              table += '</table>';
                                              // Zustand setzen je nach HistOderAkt
                                              if (HistOderAkt === "AKT") {
                                                  setState(id_HTML_Servicemeldung_Aktuell, table);  
                                              } else {
                                                  setState(id_HTML_Servicemeldung_History, table); 
                                              }
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion Refresh_History loescht die Historie - Ausloeser entweder subcription oder schedule
                                          //-----------------------------------------------------------------------------------------------------
                                          function Refresh_History() {
                                              let jsonString = getState(id_JSON_Servicemeldung_Historie).val || '[]'; // zunaechst die JSON Eintraege
                                              HistorischeMeldungenJSON = JSON.parse(jsonString);
                                              HistorischeMeldungenJSON = HistorischeMeldungenJSON.filter(meldung => meldung.SM_aufgehoben_seit === "aktiv");    // Filtern der Meldungen, um nur die zu behalten, die den Wert "aktiv" in "SM_aufgehoben_seit" haben
                                              let updatedJsonString = JSON.stringify(HistorischeMeldungenJSON);    // Speichern der gefilterten historischen Meldungen zurueck in den Datenpunkt
                                              setState(id_JSON_Servicemeldung_Historie, updatedJsonString);
                                              Check_All("init")
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion schreibt einen Logeintrag in das Filesystem und auch in das interne Log-System
                                          //-----------------------------------------------------------------------------------------------------
                                          function writelog(Name, GeraeteId, SMType, SMStatus, SMStatus_Text) {
                                              if (!SMProtokoll) return;
                                              const fs = require('fs');                     // enable write fuer externes log
                                              const logdate = formatDate(new Date(), "TT.MM.JJJJ");
                                              const logtime = formatDate(new Date(), "SS:mm:ss");
                                              const logEntry = `${logdate} ;${logtime} ;${Name} ;${GeraeteId} ; ${SMType} ;${SMStatus} ;${SMStatus_Text}\n`;
                                              const headerLine = "Datum;Uhrzeit;Name;ID-Name;Meldungssart;Status;Servicemeldung\n";
                                              fs.readFile(PathSMLog, 'utf8', function(err, data) {
                                                  if (!err) {
                                                      fs.appendFileSync(PathSMLog, logEntry, 'utf8');
                                                  } else {
                                                      LOG(`Logfile nicht gefunden - wird angelegt`, "Ablauf", "writelog", 0);
                                                      fs.writeFileSync(PathSMLog, headerLine + logEntry, 'utf8');
                                                  }
                                              });
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion schreibt die Syste-Log-Eintraege in ein externes CSV - File
                                          //-----------------------------------------------------------------------------------------------------
                                          function LOG(Message,Kategorie,Routine, Level, type) {
                                              if(type !== "warn" && type !== "error") {type = "info"}
                                              if (!SystemLog && debugLevel >= Level) { log(Message+" Routine:"+Routine,type); return;}     // Wenn SystemLog false ist und der Debug-Level hoeher oder gleich dem uebergebenen Level, schreibe normalen Logeintrag
                                              if  (Level === 0) { log(Message+" Routine:"+Routine,type);} // bei level 0 soll auf jeden fall auch in das normale log geschrieben werden
                                              if (SystemLog && debugLevel >= Level) {         // Wenn SystemLog true ist und der Debug-Level hoeher oder gleich dem uebergebenen Level
                                                  const fs = require('fs');
                                                  const now = new Date();
                                                  const logdate = `${now.getDate().toString().padStart(2, '0')}.${(now.getMonth() + 1).toString().padStart(2, '0')}.${now.getFullYear()}`;
                                                  const logtime = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}:${now.getSeconds().toString().padStart(2, '0')}:${now.getMilliseconds().toString().padStart(3, '0')}`;
                                                  const logEntry = `${logdate};${logtime};${Level};${Kategorie};${Routine};${Message}\n`;
                                                  const headerLine = "Datum;Uhrzeit;Debug Level;Kategorie;Routine;Log-Message\n";  
                                                  const logFilePath = PathSystemLog || './defaultLog.csv'; // falls PathSystemLog nicht definiert ist, standardmaessigen Pfad verwenden
                                                  try {
                                                      if (!fs.existsSync(logFilePath)) {
                                                          log(`Routine:LOG - Logfile nicht gefunden - wird angelegt`,"info")
                                                          fs.writeFileSync(logFilePath, headerLine + logEntry, 'utf8');  // Datei erstellen und Header hinzufuegen
                                                      } else {
                                                          fs.appendFileSync(logFilePath, logEntry, 'utf8'); // Eintrag zum Logfile hinzufuegen
                                                      }
                                                  } catch (err) {
                                                      log(`Routine:LOG - Fehler beim Schreiben in das Logfile: ${err}`, "error"); // Fehler beim Schreiben
                                                  }
                                              }
                                          }
                                          //-----------------------------------------------------------------------------------------------------
                                          // Funktion Create States
                                          //-----------------------------------------------------------------------------------------------------
                                          async function CreateStates(callback) {
                                              LOG(`Routine wird ausgefuehrt`, "Ablauf", "CreateStates", 2);
                                              try {
                                                  if(UpdateTEXT_Datenpunkte) {    // nur wenn Text-Datenpunkte auch gewuenscht sind
                                                      await createStateAsync(id_Text_ServicemeldungLang, "", { read: true, write: true, type: 'string', name: 'Servicemeldungen LangText', desc: 'LangText Servicemeldung' });
                                                      await createStateAsync(id_Text_ServicemeldungKurz, "", { read: true, write: true, type: 'string', name: 'Servicemeldungen KurzText', desc: 'KurzText Servicemeldung' });
                                                      await createStateAsync(id_Text_Servicemeldung_History, "", { read: true, write: true, type: 'string', name: 'Servicemeldungen History', desc: 'History Servicemeldung' });
                                                  }
                                                  if(UpdateHTML_Datenpunkte) {    // nur wenn Text-Datenpunkte auch gewuenscht sind
                                                      await createStateAsync(id_HTML_Servicemeldung_Aktuell, "", { read: true, write: true, type: 'string', name: 'Servicemeldungen HTML-Text', desc: 'HTML-Text Servicemeldung' });
                                                      await createStateAsync(id_HTML_Servicemeldung_History, "", { read: true, write: true, type: 'string', name: 'Servicemeldungen HTML-History', desc: 'HTML-History Servicemeldung' });
                                                  }
                                                  await createStateAsync(id_JSON_Servicemeldung_Aktuell, "", { read: true, write: true, type: 'string', name: 'Aktuelle Servicemeldungen als JSON', desc: 'Vergangene Servicemeldung JSON' });
                                                  await createStateAsync(id_JSON_Servicemeldung_Historie, "", { read: true, write: true, type: 'string',name: 'Servicemeldungen History', desc: 'History Servicemeldung' });
                                                  await createStateAsync(id_Button_Refresh_Historie, false, { read: true, write: true, type: 'boolean', name: 'Refresh Button History', desc: 'Loescht die Historie Servicemeldungem wenn true' });
                                                  for (const { alarmtype, count, Datenpunkt } of Zaehler) {               // Schleife ueber das Zaehler-Array und anlegen der States
                                                      await createStateAsync(Datenpunkt, count, {read: true, write: true,type: 'number',name: `Servicemeldungen Anzahl ${alarmtype}`,desc: `Anzahl ${alarmtype} Servicemeldungen`});
                                                  }
                                              if (callback) await callback();         // Aufruf des Callbacks nach Abschluss aller Operationen
                                                  } catch (error) {
                                                  LOG(`Kategorie:WARN; Routine:CreateStates; Routine Create States - Fehler beim Erstellen der Zustaende: ${error}`, 0, "warn");
                                              }
                                              if (!UpdateTEXT_Datenpunkte) {
                                                  if (existsState(id_Text_ServicemeldungLang)) { deleteState(id_Text_ServicemeldungLang); }
                                                  if (existsState(id_Text_ServicemeldungKurz)) { deleteState(id_Text_ServicemeldungKurz); }
                                                  if (existsState(id_Text_Servicemeldung_History)) { deleteState(id_Text_Servicemeldung_History); }
                                              }
                                              if(!UpdateHTML_Datenpunkte) {    // nur wenn Text-Datenpunkte auch gewuenscht sind
                                                  if (existsState(id_HTML_Servicemeldung_Aktuell)) { deleteState(id_HTML_Servicemeldung_Aktuell); }
                                                  if (existsState(id_HTML_Servicemeldung_History)) { deleteState(id_HTML_Servicemeldung_History); }
                                              }
                                          }
                                          
                                          L 1 Reply Last reply Reply Quote 0
                                          • L
                                            looxer01 @Edis77 last edited by

                                            @edis77
                                            ok, kein Problem. Ich erstelle eine Version, die aber dann schon final ist.
                                            Ich bin sicher, dass das beschriebene Problem damit behoben wird.

                                            kann aber Morgen werden.

                                            vG Looxer

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            857
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            12
                                            219
                                            19129
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo