NEWS
ioBroker auf PI4 stürzt immer mal wieder ab
-
@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Okay, welche Logs sind da entscheidend?
Kernel-Log, speziell nach folgenden Schlüsselwörtern suchen
dmesg -T | grep <suchbegriff>error
warn
segfault
oom
watchdogsystemd journal mit
sudo journalctl --since 2025-12-01 --until 2025-12-02mit --since und --until wirst du den zeitraum einschränken müssen
mit seite auf/ab kannst du dann blättern und dann schaust du dir mal die 100 zeile vor dem absturz an.da auch nach den gleichen suchbegriffen wie oben schauen.
halt irgendwelche probleme.
im zweifel kopieren und hier reinposten@OliverIO sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Kernel-Log, speziell nach folgenden Schlüsselwörtern suchen
dmesg -T | grep <suchbegriff>error
warn
segfault
oom
watchdogBei error erfolgt keine Ausgabe.
Bei warn erhalte ich folgendes:PI@PIArgon:/var/log $ dmesg -T | grep warn [Fr Jan 30 17:33:52 2026] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] vc_sm_cma: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] bcm2835_codec: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] bcm2835_v4l2: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] bcm2835_isp: module is from the staging directory, the quality is unknown, you have been warned.Bei segfault und oom erscheinen keine Ausgaben.
Bei watchdog:PI@PIArgon:/var/log $ dmesg -T | grep watchdog [Fr Jan 30 17:33:47 2026] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timersystemd journal mit
Wie lange dauert so eine Ausgabe ? Ich habe von 29.01. bis 30.01. den Zeitraum eingeschränkt.
Weil es erscheint bei mir nicht sofort die Ausgabe. Bisher zeigt der Befehl bei mir nichts. -
@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Das hatte ich oben schon gemacht.
aber bitte als Text in code-tags, ggf in spoiler.
nicht als downloadbare Datei unbekannten Formats und Inhalts@Homoran sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Das hatte ich oben schon gemacht.
aber bitte als Text in code-tags, ggf in spoiler.
nicht als downloadbare Datei unbekannten Formats und InhaltsOkay, dann mache ich es oben als spoiler.
-
oder du machst ein export.
dann können es andere zum prüfen importieren (ich nicht :) bei blockly bin ich raus)@OliverIO sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
bei blockly bin ich raus
@kapitaen31
dann mach doch bitte für @oliverio auch noch einen Export der Javascript Ansicht (ohne die letzte kilometerlange kryptische Zeile) -
@OliverIO sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Kernel-Log, speziell nach folgenden Schlüsselwörtern suchen
dmesg -T | grep <suchbegriff>error
warn
segfault
oom
watchdogBei error erfolgt keine Ausgabe.
Bei warn erhalte ich folgendes:PI@PIArgon:/var/log $ dmesg -T | grep warn [Fr Jan 30 17:33:52 2026] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] vc_sm_cma: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] bcm2835_codec: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] bcm2835_v4l2: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 17:33:52 2026] bcm2835_isp: module is from the staging directory, the quality is unknown, you have been warned.Bei segfault und oom erscheinen keine Ausgaben.
Bei watchdog:PI@PIArgon:/var/log $ dmesg -T | grep watchdog [Fr Jan 30 17:33:47 2026] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timersystemd journal mit
Wie lange dauert so eine Ausgabe ? Ich habe von 29.01. bis 30.01. den Zeitraum eingeschränkt.
Weil es erscheint bei mir nicht sofort die Ausgabe. Bisher zeigt der Befehl bei mir nichts. -
@Thomas-Braun sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Kannst auch damit mal schauen:
dmesg --level=emerg,alert,crit,err,warn -THier ist die Ausgabe:
PI@PIArgon:~ $ dmesg --level=emerg,alert,crit,err,warn -T [Fr Jan 30 20:18:41 2026] pci_bus 0000:01: supply vpcie3v3 not found, using dummy regulator [Fr Jan 30 20:18:41 2026] pci_bus 0000:01: supply vpcie3v3aux not found, using dummy regulator [Fr Jan 30 20:18:41 2026] pci_bus 0000:01: supply vpcie12v not found, using dummy regulator [Fr Jan 30 20:18:43 2026] mmc1: Controller never released inhibit bit(s). [Fr Jan 30 20:18:43 2026] usb 2-2: UAS is ignored for this device, using usb-storage instead [Fr Jan 30 20:18:44 2026] usb 2-2: UAS is ignored for this device, using usb-storage instead [Fr Jan 30 20:18:50 2026] systemd-journald[276]: File /var/log/journal/3a228e6261a14b389cf6e2129be3286a/system.journal corrupted or uncleanly shut down, renaming and replacing. [Fr Jan 30 20:18:59 2026] vc_sm_cma: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 20:18:59 2026] bcm2835_mmal_vchiq: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 20:18:59 2026] snd_bcm2835: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 20:18:59 2026] bcm2835_codec: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 20:18:59 2026] bcm2835_v4l2: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 20:18:59 2026] bcm2835_isp: module is from the staging directory, the quality is unknown, you have been warned. [Fr Jan 30 20:19:00 2026] hci_uart_bcm serial0-0: supply vbat not found, using dummy regulator [Fr Jan 30 20:19:00 2026] hci_uart_bcm serial0-0: supply vddio not found, using dummy regulator -
@RoddiEF sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Mal eine Frage zum Lüfter und dem nicht laufen bzw nicht richtig: Die Software dazu ist aber installiert und deinen Wünschen entsprechend Angepasst?
Ich habe das Gehäuse mehrfach in Betrieb und die Lüfter sind schon ab und zu mal zu hören, je nachdem was gerade "intensives" ausgeführt wird. Temperaturmäßig liegen meine dadurch so um die 40°C im Höchstfall mal 55°C deshalb meine Frage zu Anfang.Moin,
ja ich habe die Software installiert. Die Konfig sieht so aus:
PI@PIArgon:/etc $ cat argononed.conf # # Argon Fan Configuration # # Min Temp=Fan Speed 50=10 55=50 60=100Was ich gerade komisch finde das der Befehl
sudo systemctl status argononedkeine Ausgabe generiert....
Ich suche gerade...@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Was ich gerade komisch finde das der Befehl
sudo systemctl status argononed
keine Ausgabe generiert....
Dann stimmt etwas mit dem Service nicht. Es müsste so ähnlich aussehen:
thomas@rpifr24:~ $ sudo systemctl status argononed ● argononed.service - Argon One Fan and Button Service Loaded: loaded (/usr/lib/systemd/system/argononed.service; enabled; preset: enabled) Active: active (running) since Tue 2026-01-27 08:00:55 UTC; 3 days ago Invocation: 235e1f92daad47fc85a1436fc4a0f835 Main PID: 1735012 (python3) Tasks: 5 (limit: 3919) CPU: 20min 18.948s CGroup: /system.slice/argononed.service └─1735012 /usr/bin/python3 /etc/argon/argononed.py SERVICE Notice: journal has been rotated since unit was started, output may be incomplete. thomas@rpifr24:~ $Ich hatte das Problem, dass bei gleicher Konstellation plötzlich der Lüfter permanent max lief.
Bei mir hat es geholfen,argononedzu deinstallieren und neu zu konfigurieren.
Offenbar wurde es bei der Umstellung von bookworm auf trixie nicht sauber mitgenommen.Jetzt läuft es wieder geschmeidig.
-
@OliverIO sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
bei blockly bin ich raus
@kapitaen31
dann mach doch bitte für @oliverio auch noch einen Export der Javascript Ansicht (ohne die letzte kilometerlange kryptische Zeile)@Homoran sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
@kapitaen31
dann mach doch bitte für @oliverio auch noch einen Export der Javascript Ansicht (ohne die letzte kilometerlange kryptische Zeile)Hier kommt der die JavaScript Ansicht:
var MAX_Wert, MAX_erreichbar, MAX_aufdimmen_aktiv, MAX_aufdimmen, MAX_Text, MAX_Zyklus_beendet, MAX_Farbwert, MAX_ein_aus, MaxZeitplan, MAX_aus, MAX_ein, MAX_Helligkeit, Max_abends_aus, Wartezeit; // Hue Lampe mit angegebenem Wert langsam einschalten. async function Max_dimmen(MAX_Wert, MAX_erreichbar, MAX_aufdimmen_aktiv, MAX_aufdimmen, MAX_Text, MAX_Zyklus_beendet, MAX_Farbwert, MAX_ein_aus) { if (MAX_ein_aus == 'ein') { // Max wird aufgeblendet (einschalten) if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val == 0) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, 5); console.warn('Max eingeschaltet! '); } setState('alias.0.OG.Flur.Licht.FarbTemperaturHueMax' /* Farb Temp Hue Max */, MAX_Farbwert); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, true, true); MAX_ein = setInterval(async () => { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val < MAX_Wert && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == MAX_erreichbar) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val + 5)); console.log((String(MAX_Text) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); } else { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, MAX_aufdimmen_aktiv, true); Wartezeit = setTimeout(async () => { Wartezeit = null; console.log((String(MAX_Zyklus_beendet) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); }, 3000); } }, 30000); } else if (MAX_ein_aus == 'aus') { // Max wird abgeblendet (ausgeschalten) if (getState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv').val) { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, MAX_aufdimmen_aktiv, true); } MAX_aus = setInterval(async () => { if (MAX_Wert == 0) { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val > 6 && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == 1) { MAX_Helligkeit = true; } else { MAX_Helligkeit = false; } } else { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val > MAX_Wert && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == 1) { MAX_Helligkeit = true; } else { MAX_Helligkeit = false; } } if (MAX_Helligkeit) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val - 5)); console.log((String(MAX_Text) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); } else { (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); setState('alias.0.OG.Flur.Licht.EingeschaltetHueMax' /* Ein Hue Max */, false); console.error(MAX_Zyklus_beendet); } }, 30000); } } // Hue Max automatisch morgens langsam einschalten on({ id: [].concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Wochentag']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Monat']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Datum']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Std']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Min']), change: 'ne' }, async (obj) => { (() => { if (MaxZeitplan) { clearSchedule(MaxZeitplan); MaxZeitplan = null; }})(); MaxZeitplan = schedule(getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Min').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Std').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Datum').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Monat').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Wochentag').val.toString().trim(), async () => { console.warn('Neuer Zeitplan wurde für morgens einschalten angelegt. '); if (compareTime(getAstroDate('dawn', undefined, 18), null, '<', null)) { console.warn(([(new Date().getTime()),' ; ',getAstroDate('dawn', undefined, 18)].join(''))); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(30, true, false, true, 'Max morgens einschalten +5. Wert:', 'Max Einschalt Zyklus morgens beendet. Wert: ', 2730, 'ein'); } }); }); // Hue Max automatisch abends langsam einschalten schedule({ astro: 'sunset', shift: 0 }, async () => { console.warn('Sonnenuntergang. '); if (compareTime('21:36', 'null', '<')) { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); await Max_dimmen(100, 1, false, true, 'Max abends einschalten +5. Wert:', 'Max Einschalt Zyklus abends beendet. Wert: ', 2730, 'ein'); } }); // Hue Max automatisch abends langsam ausschalten on({ id: [].concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_datum_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_min_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_monat_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_std_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_wochentag_abends']), change: 'ne' }, async (obj) => { console.warn('Zeitplan MAX abends ausschalten wurde neu angelegt: '); (() => { if (Max_abends_aus) { clearSchedule(Max_abends_aus); Max_abends_aus = null; }})(); Max_abends_aus = schedule(getState('javascript.0.Datenpunkte.Flur.Licht.CRON_min_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_std_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_datum_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_monat_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_wochentag_abends').val.toString().trim(), async () => { console.warn('Zeitplan MAX abends ausschalten gestartet: '); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(0, 1, false, false, 'Max abends ausschalten -5. Wert: ', 'Zyklus MAX ausschalten abends beendet! Wert: ', 2730, 'aus'); }); }); // Hue Max automatisch morgens langsam ausschalten schedule({ astro: 'dawn', shift: 20 }, async () => { console.warn('Sonnenaufgang 20min später.'); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(0, 1, false, false, 'Max morgens ausschalten -5. Wert: ', 'Zyklus MAX ausschalten morgens beendet! Wert: ', 2730, 'aus'); }); -
@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Was ich gerade komisch finde das der Befehl
sudo systemctl status argononed
keine Ausgabe generiert....
Dann stimmt etwas mit dem Service nicht. Es müsste so ähnlich aussehen:
thomas@rpifr24:~ $ sudo systemctl status argononed ● argononed.service - Argon One Fan and Button Service Loaded: loaded (/usr/lib/systemd/system/argononed.service; enabled; preset: enabled) Active: active (running) since Tue 2026-01-27 08:00:55 UTC; 3 days ago Invocation: 235e1f92daad47fc85a1436fc4a0f835 Main PID: 1735012 (python3) Tasks: 5 (limit: 3919) CPU: 20min 18.948s CGroup: /system.slice/argononed.service └─1735012 /usr/bin/python3 /etc/argon/argononed.py SERVICE Notice: journal has been rotated since unit was started, output may be incomplete. thomas@rpifr24:~ $Ich hatte das Problem, dass bei gleicher Konstellation plötzlich der Lüfter permanent max lief.
Bei mir hat es geholfen,argononedzu deinstallieren und neu zu konfigurieren.
Offenbar wurde es bei der Umstellung von bookworm auf trixie nicht sauber mitgenommen.Jetzt läuft es wieder geschmeidig.
@Meister-Mopper sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Ich hatte das Problem, dass bei gleicher Konstellation plötzlich der Lüfter permanent max lief.
Bei mir hat es geholfen,argononedzu deinstallieren und neu zu konfigurieren.
Offenbar wurde es bei der Umstellung von bookworm auf trixie nicht sauber mitgenommen.Jetzt läuft es wieder geschmeidig.
Ich hatte vorhin nochmals die Konfig neu gestartet. Jetzt erhalte ich auch eine Ausgabe:
PI@PIArgon:~ $ sudo systemctl status argononed ● argononed.service - Argon One Fan and Button Service Loaded: loaded (/lib/systemd/system/argononed.service; enabled; preset: enabled) Active: active (running) since Fri 2026-01-30 20:18:59 CET; 8min ago Main PID: 864 (python3) Tasks: 3 (limit: 3913) CPU: 106ms CGroup: /system.slice/argononed.service └─864 /usr/bin/python3 /etc/argon/argononed.py SERVICE Jan 30 20:18:59 PIArgon systemd[1]: Started argononed.service - Argon One Fan and Button Service.Ich hatte den PI auch nochmal neu gestartet.
-
@Homoran sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
@kapitaen31
dann mach doch bitte für @oliverio auch noch einen Export der Javascript Ansicht (ohne die letzte kilometerlange kryptische Zeile)Hier kommt der die JavaScript Ansicht:
var MAX_Wert, MAX_erreichbar, MAX_aufdimmen_aktiv, MAX_aufdimmen, MAX_Text, MAX_Zyklus_beendet, MAX_Farbwert, MAX_ein_aus, MaxZeitplan, MAX_aus, MAX_ein, MAX_Helligkeit, Max_abends_aus, Wartezeit; // Hue Lampe mit angegebenem Wert langsam einschalten. async function Max_dimmen(MAX_Wert, MAX_erreichbar, MAX_aufdimmen_aktiv, MAX_aufdimmen, MAX_Text, MAX_Zyklus_beendet, MAX_Farbwert, MAX_ein_aus) { if (MAX_ein_aus == 'ein') { // Max wird aufgeblendet (einschalten) if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val == 0) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, 5); console.warn('Max eingeschaltet! '); } setState('alias.0.OG.Flur.Licht.FarbTemperaturHueMax' /* Farb Temp Hue Max */, MAX_Farbwert); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, true, true); MAX_ein = setInterval(async () => { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val < MAX_Wert && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == MAX_erreichbar) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val + 5)); console.log((String(MAX_Text) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); } else { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, MAX_aufdimmen_aktiv, true); Wartezeit = setTimeout(async () => { Wartezeit = null; console.log((String(MAX_Zyklus_beendet) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); }, 3000); } }, 30000); } else if (MAX_ein_aus == 'aus') { // Max wird abgeblendet (ausgeschalten) if (getState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv').val) { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, MAX_aufdimmen_aktiv, true); } MAX_aus = setInterval(async () => { if (MAX_Wert == 0) { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val > 6 && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == 1) { MAX_Helligkeit = true; } else { MAX_Helligkeit = false; } } else { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val > MAX_Wert && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == 1) { MAX_Helligkeit = true; } else { MAX_Helligkeit = false; } } if (MAX_Helligkeit) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val - 5)); console.log((String(MAX_Text) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); } else { (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); setState('alias.0.OG.Flur.Licht.EingeschaltetHueMax' /* Ein Hue Max */, false); console.error(MAX_Zyklus_beendet); } }, 30000); } } // Hue Max automatisch morgens langsam einschalten on({ id: [].concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Wochentag']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Monat']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Datum']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Std']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Min']), change: 'ne' }, async (obj) => { (() => { if (MaxZeitplan) { clearSchedule(MaxZeitplan); MaxZeitplan = null; }})(); MaxZeitplan = schedule(getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Min').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Std').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Datum').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Monat').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Wochentag').val.toString().trim(), async () => { console.warn('Neuer Zeitplan wurde für morgens einschalten angelegt. '); if (compareTime(getAstroDate('dawn', undefined, 18), null, '<', null)) { console.warn(([(new Date().getTime()),' ; ',getAstroDate('dawn', undefined, 18)].join(''))); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(30, true, false, true, 'Max morgens einschalten +5. Wert:', 'Max Einschalt Zyklus morgens beendet. Wert: ', 2730, 'ein'); } }); }); // Hue Max automatisch abends langsam einschalten schedule({ astro: 'sunset', shift: 0 }, async () => { console.warn('Sonnenuntergang. '); if (compareTime('21:36', 'null', '<')) { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); await Max_dimmen(100, 1, false, true, 'Max abends einschalten +5. Wert:', 'Max Einschalt Zyklus abends beendet. Wert: ', 2730, 'ein'); } }); // Hue Max automatisch abends langsam ausschalten on({ id: [].concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_datum_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_min_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_monat_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_std_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_wochentag_abends']), change: 'ne' }, async (obj) => { console.warn('Zeitplan MAX abends ausschalten wurde neu angelegt: '); (() => { if (Max_abends_aus) { clearSchedule(Max_abends_aus); Max_abends_aus = null; }})(); Max_abends_aus = schedule(getState('javascript.0.Datenpunkte.Flur.Licht.CRON_min_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_std_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_datum_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_monat_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_wochentag_abends').val.toString().trim(), async () => { console.warn('Zeitplan MAX abends ausschalten gestartet: '); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(0, 1, false, false, 'Max abends ausschalten -5. Wert: ', 'Zyklus MAX ausschalten abends beendet! Wert: ', 2730, 'aus'); }); }); // Hue Max automatisch morgens langsam ausschalten schedule({ astro: 'dawn', shift: 20 }, async () => { console.warn('Sonnenaufgang 20min später.'); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(0, 1, false, false, 'Max morgens ausschalten -5. Wert: ', 'Zyklus MAX ausschalten morgens beendet! Wert: ', 2730, 'aus'); });@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
läuft bei dir auf dem raspi auch ein browser mit?
ansonsten ist das beschriebene problem wahrscheinlich nicht relevant, sollte aber auch behoben werden.
also 1) mit "vermüllen" ist gemeint, das da ein memory leak ist. d.h. da wird immer wieder speicher reserviert, der erst du neustart oder im browser mit neuladen behoben werden kann. solange genügend speicher da ist, kein problem, evtl hast du da auch noch nie was gemerkt, sollte aber behoben werden. weiß0 nicht wie safe da blockly ist.ich habe das skript mal bei gemini reingeworfen (chatgpt geht gerade nicht)
Das sieht nach einem klassischen Blockly-Export für den ioBroker JavaScript-Adapter aus. Das Skript ist funktional, hat aber ein paar „Stolperfallen“, die im Alltag zu Problemen führen können (besonders beim Dimmen und den Zeitplänen).
Hier sind die kritischen Punkte, die ich gefunden habe:
1. Die "Erreichbarkeit"-Prüfung (MAX_erreichbar)
In der Funktion
Max_dimmenfragst du den StatusErreichbar Hue Maxab.- Das Problem: Wenn die Lampe über den Wandschalter stromlos gemacht wurde, ist sie "nicht erreichbar". Das Intervall läuft dann aber ewig weiter, weil die Bedingung
getState(...).val == MAX_erreichbarnie erfüllt wird, aber auch keinelsegreift, das das Intervall stoppt. - Folge: Das Skript "vermüllt" den Speicher mit laufenden Intervallen im Hintergrund.
2. Fehlende Initialisierung beim Neustart
Die Variable
MaxZeitplanundMax_abends_auswerden erst gesetzt, wenn sich einer der CRON-Datenpunkte ändert (change: 'ne').- Das Problem: Wenn du das Skript oder den ioBroker neu startest, sind diese Zeitpläne nicht aktiv, bis du die Werte in den Datenpunkten einmal manuell änderst.
- Lösung: Du solltest die
schedule-Logik am Ende des Skripts einmal ohne Trigger aufrufen, damit sie beim Start sofort registriert wird.
3. Logik-Fehler beim "Abdimmen_aktiv"
Im
else if (MAX_ein_aus == 'aus')-Teil setzt du:
setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv', MAX_aufdimmen_aktiv, true);- Das Problem: Du übergibst hier die Variable
MAX_aufdimmen_aktiv. In deinem morgendlichen Ausschalt-Trigger ist dieser Wert aber auffalsegesetzt. Das ist zwar technisch nicht falsch, aber die Variable heißt im Datenpunkt "Abdimmen_aktiv", was verwirrend sein kann, wenn sie beim Ausschalten auffalsegeht, obwohl der Prozess noch läuft.
4. Die
compareTimebei Sonnenuntergangif (compareTime('21:36', 'null', '<'))- Das Problem: Das bedeutet: "Führe das Dimmen nur aus, wenn es vor 21:36 Uhr ist". Da der Sonnenuntergang im Sommer aber auch mal nach 21:36 Uhr sein kann, würde die Lampe an manchen Tagen im Jahr einfach gar nicht angehen. Prüfe, ob das so gewollt ist.
5. Intervall-Dauer vs. Schrittweite
Du dimmst alle 30 Sekunden um 5 Einheiten.
- Um von 0 auf 100 zu kommen, braucht das Skript 20 Schritte.
- (10 Minuten).
- Gefahr: Wenn während dieser 10 Minuten jemand manuell das Licht schaltet oder ein anderer Trigger feuert, kommen sich die Intervalle in die Quere, falls
MAX_ein/MAX_ausnicht sauber gelöscht werden.
Zusammenfassung & Empfehlung
Fehlerquelle Auswirkung Lösung Erreichbarkeit Endlosschleife im Hintergrund Ein else { clearInterval... }hinzufügen, falls Lampe offline.Startverhalten Zeitpläne nach Neustart inaktiv Trigger-Logik einmal beim Skriptstart ausführen. Variablen-Mix MAX_erreichbarwird mal alstrue(Boolean) und mal als1(Zahl) übergeben.JavaScript ist da tolerant, aber sauberer wäre es, immer den gleichen Typ zu nutzen. Ein kleiner Tipp für ioBroker:
Anstatt Intervalle mitsetIntervalzu bauen, nutzen viele für Hue-Lampen das nativetransition(Übergangszeit) Kommando. Man kann beimsetStateeiner Hue-Lampe oft ein JSON mitgeben:setState('id', {val: 100, ack: false, transition: 600}). Das würde die Lampe von alleine über 10 Minuten dimmen, ohne dass das Skript alle 30 Sekunden funken muss.Soll ich dir zeigen, wie du den Teil für den automatischen Start nach einem Neustart ergänzt?
- Das Problem: Wenn die Lampe über den Wandschalter stromlos gemacht wurde, ist sie "nicht erreichbar". Das Intervall läuft dann aber ewig weiter, weil die Bedingung
-
@Homoran sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
@kapitaen31
dann mach doch bitte für @oliverio auch noch einen Export der Javascript Ansicht (ohne die letzte kilometerlange kryptische Zeile)Hier kommt der die JavaScript Ansicht:
var MAX_Wert, MAX_erreichbar, MAX_aufdimmen_aktiv, MAX_aufdimmen, MAX_Text, MAX_Zyklus_beendet, MAX_Farbwert, MAX_ein_aus, MaxZeitplan, MAX_aus, MAX_ein, MAX_Helligkeit, Max_abends_aus, Wartezeit; // Hue Lampe mit angegebenem Wert langsam einschalten. async function Max_dimmen(MAX_Wert, MAX_erreichbar, MAX_aufdimmen_aktiv, MAX_aufdimmen, MAX_Text, MAX_Zyklus_beendet, MAX_Farbwert, MAX_ein_aus) { if (MAX_ein_aus == 'ein') { // Max wird aufgeblendet (einschalten) if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val == 0) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, 5); console.warn('Max eingeschaltet! '); } setState('alias.0.OG.Flur.Licht.FarbTemperaturHueMax' /* Farb Temp Hue Max */, MAX_Farbwert); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, true, true); MAX_ein = setInterval(async () => { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val < MAX_Wert && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == MAX_erreichbar) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val + 5)); console.log((String(MAX_Text) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); } else { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, MAX_aufdimmen_aktiv, true); Wartezeit = setTimeout(async () => { Wartezeit = null; console.log((String(MAX_Zyklus_beendet) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); }, 3000); } }, 30000); } else if (MAX_ein_aus == 'aus') { // Max wird abgeblendet (ausgeschalten) if (getState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv').val) { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv' /* Aufdimmen aktiv */, MAX_aufdimmen_aktiv, true); } MAX_aus = setInterval(async () => { if (MAX_Wert == 0) { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val > 6 && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == 1) { MAX_Helligkeit = true; } else { MAX_Helligkeit = false; } } else { if (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val > MAX_Wert && getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == 1) { MAX_Helligkeit = true; } else { MAX_Helligkeit = false; } } if (MAX_Helligkeit) { setState('alias.0.OG.Flur.Licht.HelligkeitHueMax' /* Helligkeit Hue Max */, (getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val - 5)); console.log((String(MAX_Text) + String(getState('alias.0.OG.Flur.Licht.HelligkeitHueMax').val))); } else { (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); setState('alias.0.OG.Flur.Licht.EingeschaltetHueMax' /* Ein Hue Max */, false); console.error(MAX_Zyklus_beendet); } }, 30000); } } // Hue Max automatisch morgens langsam einschalten on({ id: [].concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Wochentag']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Monat']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Datum']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Std']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_Min']), change: 'ne' }, async (obj) => { (() => { if (MaxZeitplan) { clearSchedule(MaxZeitplan); MaxZeitplan = null; }})(); MaxZeitplan = schedule(getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Min').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Std').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Datum').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Monat').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_Wochentag').val.toString().trim(), async () => { console.warn('Neuer Zeitplan wurde für morgens einschalten angelegt. '); if (compareTime(getAstroDate('dawn', undefined, 18), null, '<', null)) { console.warn(([(new Date().getTime()),' ; ',getAstroDate('dawn', undefined, 18)].join(''))); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(30, true, false, true, 'Max morgens einschalten +5. Wert:', 'Max Einschalt Zyklus morgens beendet. Wert: ', 2730, 'ein'); } }); }); // Hue Max automatisch abends langsam einschalten schedule({ astro: 'sunset', shift: 0 }, async () => { console.warn('Sonnenuntergang. '); if (compareTime('21:36', 'null', '<')) { (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); await Max_dimmen(100, 1, false, true, 'Max abends einschalten +5. Wert:', 'Max Einschalt Zyklus abends beendet. Wert: ', 2730, 'ein'); } }); // Hue Max automatisch abends langsam ausschalten on({ id: [].concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_datum_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_min_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_monat_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_std_abends']).concat(['javascript.0.Datenpunkte.Flur.Licht.CRON_wochentag_abends']), change: 'ne' }, async (obj) => { console.warn('Zeitplan MAX abends ausschalten wurde neu angelegt: '); (() => { if (Max_abends_aus) { clearSchedule(Max_abends_aus); Max_abends_aus = null; }})(); Max_abends_aus = schedule(getState('javascript.0.Datenpunkte.Flur.Licht.CRON_min_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_std_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_datum_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_monat_abends').val.toString().trim() + ' ' + getState('javascript.0.Datenpunkte.Flur.Licht.CRON_wochentag_abends').val.toString().trim(), async () => { console.warn('Zeitplan MAX abends ausschalten gestartet: '); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(0, 1, false, false, 'Max abends ausschalten -5. Wert: ', 'Zyklus MAX ausschalten abends beendet! Wert: ', 2730, 'aus'); }); }); // Hue Max automatisch morgens langsam ausschalten schedule({ astro: 'dawn', shift: 20 }, async () => { console.warn('Sonnenaufgang 20min später.'); (() => { if (MAX_aus) { clearInterval(MAX_aus); MAX_aus = null; }})(); (() => { if (MAX_ein) { clearInterval(MAX_ein); MAX_ein = null; }})(); await Max_dimmen(0, 1, false, false, 'Max morgens ausschalten -5. Wert: ', 'Zyklus MAX ausschalten morgens beendet! Wert: ', 2730, 'aus'); });zum vergleichmal noch chatgpt 5.2
sag mal welche ausgabe du besser findest bzw was dir mehr geholfen hat.
Ja – da sind ein paar echte „Blockly-Export“-Klassiker drin, die dir in ioBroker früher oder später Probleme machen (oder dafür sorgen, dass es nicht so läuft wie gedacht). Ich gehe die auffälligsten Punkte durch und sage jeweils warum das problematisch ist und wie du’s robust bekommst.
1) Parameter-Chaos vs. globale Variablen (und dadurch Logikfehler)
Max_dimmen()hat diese Signatur:async function Max_dimmen(MAX_Wert, MAX_erreichbar, MAX_aufdimmen_aktiv, MAX_aufdimmen, MAX_Text, MAX_Zyklus_beendet, MAX_Farbwert, MAX_ein_aus)Du rufst sie z.B. morgens so auf:
await Max_dimmen(30, true, false, true, ..., 2730, 'ein');Aber im Code vergleichst du später:
getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == MAX_erreichbarUnd im Aufruf gibst du einmal
true, einmal1(abends:Max_dimmen(100, 1, ...)).➡️ Wenn der State
...Erreichbar Hue Maxbei dir ein Zahl-Boolean ist (0/1), dann ist der Vergleich mittruezwar mit==oft „zufällig“ wahr (weiltrue == 1), aber das ist fragil. Wenn der State mal"true"odertrueliefert, oder du auf===umstellst, knallt’s.Robust fix: Normalisieren statt „magischen“ Typen:
const reachable = !!getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val; if (reachable === !!MAX_erreichbar) { ... }Oder konsequent immer
1/0verwenden.
2)
MAX_aufdimmenwird nie verwendetDu übergibst
MAX_aufdimmen, aber im Code taucht die Variable nirgendwo sinnvoll auf (sie wird nicht gelesen). Das ist kein Crash, aber ein Hinweis: Blockly hat dir Paramater reingezogen, die du gar nicht brauchst.➡️ Ergebnis: schwer wartbar, und du glaubst evtl. „das beeinflusst was“, tut es aber nicht.
3) Falsche/inkonsistente Nutzung von
compareTime()Du hast mehrere Varianten:
a) Morgens:
if (compareTime(getAstroDate('dawn', undefined, 18), null, '<', null)) {Das sieht aus wie Blockly-„Compare Time“ in der 4-Argument-Variante. Kann funktionieren, ist aber seltsam (null/null).
b) Abends:
if (compareTime('21:36', 'null', '<')) {Hier ist
'null'ein String, nichtnull.➡️ Das ist sehr wahrscheinlich ein Fehler. Je nach Implementierung von
compareTimeist'null'ein ungültiger Zeitpunkt und die Funktion liefert dann immer false oder verhält sich unerwartet.Vermutlich wolltest du: „wenn aktuelle Zeit < 21:36“ oder „wenn 21:36 < aktuelle Zeit“. Dafür ist die typische Blockly-Semantik:
compareTime('21:36', null, '<')→ vergleicht'21:36'mit jetzt- oder
compareTime(null, '21:36', '<')je nach Variante
Konkreter Verdacht: Dein Abend-Einschalten läuft evtl. nie, weil der Vergleich falsch ist.
4) Du setzt „EingeschaltetHueMax“ nur beim Ausschalten – aber nicht beim Einschalten
Beim Dimmen „ein“ setzt du:
- Helligkeit ggf. auf 5
- Farbtemperatur
- Abdimm-aktiv true
- und erhöhst Helligkeit
Beim Dimmen „aus“ machst du am Ende:
setState('alias.0.OG.Flur.Licht.EingeschaltetHueMax', false);➡️ Aber beim Einschalten setzt du
EingeschaltetHueMaxnicht auf true. Wenn andere Logik oder Visualisierung davon abhängt, ist das inkonsistent.
5) Race-Conditions / parallele Intervalle: nicht konsequent gestoppt
Du stoppst Intervalle zwar oft, aber nicht überall:
- Beim Start von
Max_dimmen('ein')stoppst du nicht automatisch ein evtl. laufendesMAX_einoderMAX_aus(nur in den Schedules machst du das davor). - Im
aus-Zweig stoppst du nur dann sofort, wennAbdimmen_aktivtrue ist:
if (getState('...Abdimmen_aktiv').val) { clearInterval(MAX_ein); clearInterval(MAX_aus); }➡️ Wenn
Abdimmen_aktivaus irgendeinem Grund false ist, können alte Intervalle weiterlaufen und du startest zusätzlichMAX_aus. Dann schreiben zwei Timer gegeneinander.Robust fix: Immer am Anfang von
Max_dimmen()beide Intervalle killen, unabhängig vom Flag.
6)
setInterval(async () => { ... })– async im Interval ohne NutzenDu nutzt
asyncin den Interval-Callbacks, aber duawait-est da drin praktisch nichts (außer in setTimeout, was auch ohne async geht).➡️ Kein direkter Fehler, aber: falls du später
awaiteinbaust, kann es passieren, dass ein neuer Interval-Tick startet, bevor der alte fertig ist (Überlappung). Besser: keinasyncimsetIntervaloder einen „Lock“ setzen.
7) Schwellenwerte beim Ausschalten: mögliche Endlosschleife / nie ganz aus
Im Ausblend-Zweig:
if (MAX_Wert == 0) { if (helligkeit > 6) MAX_Helligkeit = true; else false; } ... if (MAX_Helligkeit) helligkeit -= 5 else stop + ausgeschaltet=false➡️ Du dimmst runter bis <= 6, dann stoppst du und setzt
EingeschaltetHueMax=false. Aber du setzt die Helligkeit nicht auf 0. D.h. sie kann bei 6 stehen bleiben.- Wenn dein Gerät bei 6 noch sichtbar leuchtet: bleibt an.
- Wenn du später „ein“ startest, hast du nicht „aus=0“ als Ausgangslage.
Wenn du wirklich „aus“ willst, setz beim Ende explizit auf 0.
8) Doppelbelegung / uneindeutige Zustände: „Abdimmen_aktiv“
Du setzt:
- beim Einschalten:
Abdimmen_aktiverst auftrue, später aufMAX_aufdimmen_aktiv(bei dir meistfalse) - beim Ausschalten: setzt du es auf
MAX_aufdimmen_aktiv
➡️ Der Name passt nicht: du nutzt es als „läuft gerade ein Dimmer-Zyklus“ (lock), aber setzt es am Ende auf einen Parameterwert, der in deinen Aufrufen immer
falseist. Das ist okay, aber dann brauchst du keinen Parameter dafür.
9) Cron-Strings aus States: Gefahr von „kaputtem Cron“ ohne Validierung
Du baust Cron so:
min + ' ' + std + ' ' + datum + ' ' + monat + ' ' + wochentagWenn einer der States leer ist oder
*falsch gesetzt wird, erzeugst du einen ungültigen Cron undschedule()kann still scheitern oder Exceptions werfen.➡️ Blockly macht das gern, aber produktiv solltest du mindestens loggen, welcher Cron konkret gesetzt wurde und ob
schedule()eine ID zurückgab.
10) Kleinigkeiten, aber echte Wartungsbremsen
- Sehr viele globale Variablen, die eigentlich nur Timer-Handles sind (
MAX_ein,MAX_aus,Wartezeit). MAX_Wert == 0vs===– mit.valaus ioBroker kann auch string kommen. Dann ist==wieder „zufällig“ korrekt.
Was ich konkret als „Minimal-Fix“ empfehlen würde (ohne alles umzubauen)
- Am Anfang von
Max_dimmenimmer alles stoppen:
clearInterval(MAX_ein),clearInterval(MAX_aus), optionalclearTimeout(Wartezeit)
- Erreichbar immer booleanisieren
const reachable = !!getState(...).val;- und
MAX_erreichbarebenfalls!!MAX_erreichbar
compareTime('21:36', 'null', '<')korrigieren
- sehr wahrscheinlich muss
'null'→null(ohne Quotes) oder die Argumente anders.
- Beim Ausschalt-Ende Helligkeit auf 0 setzen
setState(...Helligkeit..., 0);
- Optional:
EingeschaltetHueMaxbeim Einschalten auftrue.
Wenn du willst, kann ich dir als nächsten Schritt eine bereinigte Version 1:1 auf Basis deines Codes posten (gleiches Verhalten, aber mit den oben genannten Fixes, weniger Parametern, sauberem Timer-Handling). Ich würde dafür nur kurz wissen:
- Liefert
alias.0.OG.Flur.Licht.Erreichbar Hue Maxbei dir 0/1 oder true/false? - Soll „aus“ wirklich auf 0 gehen oder bewusst bei 6 stoppen?
-
Jetzt habe ich noch den iob fix durchlaufen lassen.
Hier die diag Ausgabe:Script v.2025-08-09 *** BASE SYSTEM *** Operating System: Debian GNU/Linux 12 (bookworm) Static hostname: PIArgon Icon name: computer Kernel: Linux 6.12.62+rpt-rpi-v8 Architecture: arm64 OS is similar to: Model : Raspberry Pi 4 Model B Rev 1.5 Docker : false Virtualization : none Kernel : aarch64 Userland : 64 bit Systemuptime and Load: 17:25:14 up 39 min, 2 users, load average: 4.97, 2.40, 1.43 CPU threads: 4 *** LIFE CYCLE STATUS *** Debian 'bookworm' is the current oldstable version. Please upgrade to the latest stable release 'trixie' in due time! *** RASPBERRY THROTTLING *** Current issues: No throttling issues detected. Previously detected issues: No throttling issues detected. *** TIME AND TIMEZONES *** Local time: Wed 2026-01-28 17:25:14 CET Universal time: Wed 2026-01-28 16:25:14 UTC RTC time: n/a Time zone: Europe/Berlin (CET, +0100) System clock synchronized: yes NTP service: active RTC in local TZ: no *** Users and Groups *** User that called 'iob diag': PI HOME=/home/PI GROUPS=PI adm dialout cdrom sudo audio video plugdev games users input render netdev gpio i2c spi iobroker User that is running 'js-controller': iobroker HOME=/home/iobroker GROUPS=iobroker tty dialout audio video plugdev bluetooth gpio i2c *** DISPLAY-SERVER SETUP *** Display-Server: false Unit display-manager.service could not be found. Display-Manager: Desktop: Session: tty *** MEMORY *** total used free shared buff/cache available Mem: 4.0G 2.6G 90M 245K 1.4G 1.4G Swap: 209M 136M 73M Total: 4.2G 2.7G 164M Active iob-Instances: 4 3789 M total memory 2453 M used memory 2366 M active memory 967 M inactive memory 86 M free memory 119 M buffer memory 1206 M swap cache 199 M total swap 129 M used swap 70 M free swap *** top - Table Of Processes *** top - 17:25:15 up 39 min, 2 users, load average: 4.97, 2.40, 1.43 Tasks: 203 total, 6 running, 197 sleeping, 0 stopped, 0 zombie %Cpu(s): 66.7 us, 0.0 sy, 0.0 ni, 22.2 id, 11.1 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 3789.8 total, 85.8 free, 2453.7 used, 1326.3 buff/cache MiB Swap: 200.0 total, 70.0 free, 130.0 used. 1336.1 avail Mem *** FAILED SERVICES *** UNIT LOAD ACTIVE SUB DESCRIPTION 0 loaded units listed. *** DMESG CRITICAL ERRORS *** No critical errors detected *** FILESYSTEM *** Filesystem Type Size Used Avail Use% Mounted on udev devtmpfs 1.6G 0 1.6G 0% /dev tmpfs tmpfs 758M 1.2M 757M 1% /run /dev/sda2 ext4 110G 22G 83G 21% / tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs tmpfs 5.0M 16K 5.0M 1% /run/lock /dev/sda1 vfat 510M 66M 445M 13% /boot/firmware tmpfs tmpfs 379M 0 379M 0% /run/user/1000 Messages concerning ext4 filesystem in dmesg: [Wed Jan 28 16:45:32 2026] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0 snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_hdmi=0 numa=fake=1 system_heap.max_order=0 smsc95xx.macaddr=E4:5F:01:FE:0B:37 vc_mem.mem_base=0x3eb00000 vc_mem.mem_size=0x3ff00000 console=ttyS0,115200 console=tty1 root=PARTUUID=9afaab09-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=DE [Wed Jan 28 16:45:36 2026] EXT4-fs (sda2): mounted filesystem 3b614a3f-4a65-4480-876a-8a998e01ac9b ro with ordered data mode. Quota mode: none. [Wed Jan 28 16:45:43 2026] EXT4-fs (sda2): re-mounted 3b614a3f-4a65-4480-876a-8a998e01ac9b r/w. Show mounted filesystems: TARGET SOURCE FSTYPE OPTIONS / /dev/sda2 ext4 rw,noatime `-/boot/firmware /dev/sda1 vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro Files in neuralgic directories: /var: 4.1G /var/ 1.9G /var/log/journal/3a228e6261a14b389cf6e2129be3286a 1.9G /var/log/journal 1.9G /var/log 1.2G /var/lib Archived and active journals take up 1.8G in the file system. /opt/iobroker/backups: 9.8G /opt/iobroker/backups/ /opt/iobroker/iobroker-data: 415M /opt/iobroker/iobroker-data/ 326M /opt/iobroker/iobroker-data/files 78M /opt/iobroker/iobroker-data/files/icons-open-icon-library-png 71M /opt/iobroker/iobroker-data/backup-objects 47M /opt/iobroker/iobroker-data/files/admin.admin The five largest files in iobroker-data are: 27M /opt/iobroker/iobroker-data/files/tankerkoenig.admin/build/index.js.map 15M /opt/iobroker/iobroker-data/objects.jsonl 9.2M /opt/iobroker/iobroker-data/files/tankerkoenig.admin/build/index.js 8.1M /opt/iobroker/iobroker-data/files/backitup.admin/assets/index-Djx0nwYT.js 4.6M /opt/iobroker/iobroker-data/files/javascript.admin/vs/language/typescript/tsWorker.js 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 v22.22.0 /usr/bin/node v22.22.0 /usr/bin/npm 10.9.4 /usr/bin/npx 10.9.4 /usr/bin/corepack 0.34.0 nodejs: Installed: 22.22.0-1nodesource1 Candidate: 22.22.0-1nodesource1 Version table: *** 22.22.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 100 /var/lib/dpkg/status 22.21.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.20.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.19.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.18.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.17.1-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.17.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.16.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.15.1-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.15.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.14.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.13.1-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.13.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.12.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.11.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.10.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.9.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.8.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.7.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.6.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.5.1-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.5.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.4.1-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.4.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.3.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.2.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.1.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 22.0.0-1nodesource1 1001 500 https://deb.nodesource.com/node_22.x nodistro/main arm64 Packages 18.20.4+dfsg-1~deb12u1 500 500 http://deb.debian.org/debian bookworm/main arm64 Packages 500 http://deb.debian.org/debian-security bookworm-security/main arm64 Packages Temp directories causing deletion problem: 0 No problems detected Errors in npm tree: 0 No problems detected Checking for nodejs vulnerability: █████ ██ ██ ██████ ██████ ██████ ██████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███████ ██ ██ ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ███████ ███████ ██████ ██████ ██████ ██████ ██ *** ioBroker-Installation *** ioBroker Status iobroker is running on this host. Objects type: jsonl States type: jsonl Hosts: PIArgon PIArgon (version: 7.0.7, hostname: PIArgon , alive, uptime: 112) Core adapters versions js-controller: 7.0.7 admin: 7.7.22 javascript: 9.0.11 nodejs modules from github: 1 +-- iobroker.apsystems-ecu@0.2.9 (git+ssh://git@github.com/npeter/iobroker.apsystems-ecu.git#c737ed3ce633041d6adb0494830458a2676c8062) Adapter State + system.adapter.admin.0 : admin : PIArgon - enabled, port: 8081, bind: 0.0.0.0, run as: admin system.adapter.alias-manager.0 : alias-manager : PIArgon - disabled system.adapter.apsystems-ecu.0 : apsystems-ecu : PIArgon - enabled system.adapter.backitup.0 : backitup : PIArgon - enabled system.adapter.daswetter.0 : daswetter : PIArgon - enabled system.adapter.discovery.0 : discovery : PIArgon - enabled system.adapter.dwd.0 : dwd : PIArgon - enabled system.adapter.flot.0 : flot : PIArgon - disabled system.adapter.fritzdect.0 : fritzdect : PIArgon - enabled + system.adapter.history.0 : history : PIArgon - enabled system.adapter.hue.0 : hue : PIArgon - enabled, port: 443 system.adapter.icons-icons8.0 : icons-icons8 : PIArgon - disabled system.adapter.icons-mfd-svg.0 : icons-mfd-svg : PIArgon - enabled system.adapter.icons-open-icon-library-png.0: icons-open-icon-library-png: PIArgon - disabled + system.adapter.influxdb.0 : influxdb : PIArgon - enabled, port: 8086 system.adapter.javascript.0 : javascript : PIArgon - enabled system.adapter.lovelace.0 : lovelace : PIArgon - enabled, port: 8091, bind: 0.0.0.0, run as: admin system.adapter.mqtt.0 : mqtt : PIArgon - enabled, port: 1886, bind: 0.0.0.0 system.adapter.nina.0 : nina : PIArgon - enabled system.adapter.pollenflug.0 : pollenflug : PIArgon - enabled system.adapter.pushover.0 : pushover : PIArgon - enabled system.adapter.pvforecast.0 : pvforecast : PIArgon - enabled system.adapter.radar2.0 : radar2 : PIArgon - enabled system.adapter.rpi2.0 : rpi2 : PIArgon - enabled system.adapter.rssfeed.0 : rssfeed : PIArgon - enabled system.adapter.sonoff.0 : sonoff : PIArgon - enabled, port: 1884, bind: 0.0.0.0 system.adapter.systeminfo.0 : systeminfo : PIArgon - enabled system.adapter.tankerkoenig.0 : tankerkoenig : PIArgon - enabled system.adapter.vis-colorpicker.0 : vis-colorpicker : PIArgon - disabled system.adapter.vis-hqwidgets.0 : vis-hqwidgets : PIArgon - disabled system.adapter.vis-icontwo.0 : vis-icontwo : PIArgon - disabled system.adapter.vis-inventwo.0 : vis-inventwo : PIArgon - enabled system.adapter.vis-jsontemplate.0 : vis-jsontemplate : PIArgon - enabled system.adapter.vis-material-advanced.0 : vis-material-advanced : PIArgon - enabled system.adapter.vis-material.0 : vis-material : PIArgon - enabled system.adapter.vis-materialdesign.0 : vis-materialdesign : PIArgon - enabled system.adapter.vis-metro.0 : vis-metro : PIArgon - disabled system.adapter.vis.0 : vis : PIArgon - enabled system.adapter.web.0 : web : PIArgon - enabled, port: 8082, bind: 0.0.0.0, run as: admin system.adapter.whatsapp-cmb.0 : whatsapp-cmb : PIArgon - enabled system.adapter.yr.0 : yr : PIArgon - enabled system.adapter.zigbee2mqtt.0 : zigbee2mqtt : PIArgon - enabled + instance is alive Enabled adapters with bindings + system.adapter.admin.0 : admin : PIArgon - enabled, port: 8081, bind: 0.0.0.0, run as: admin system.adapter.hue.0 : hue : PIArgon - enabled, port: 443 + system.adapter.influxdb.0 : influxdb : PIArgon - enabled, port: 8086 system.adapter.lovelace.0 : lovelace : PIArgon - enabled, port: 8091, bind: 0.0.0.0, run as: admin system.adapter.mqtt.0 : mqtt : PIArgon - enabled, port: 1886, bind: 0.0.0.0 system.adapter.sonoff.0 : sonoff : PIArgon - enabled, port: 1884, bind: 0.0.0.0 system.adapter.web.0 : web : PIArgon - enabled, port: 8082, bind: 0.0.0.0, run as: admin ioBroker-Repositories ┌─────────┬────────────────────┬─────────────────────────────────────────────────────────┬──────────────┐ │ (index) │ name │ url │ auto upgrade │ ├─────────┼────────────────────┼─────────────────────────────────────────────────────────┼──────────────┤ │ 0 │ 'Stable (default)' │ 'http://download.iobroker.net/sources-dist.json' │ false │ │ 1 │ 'Beta (latest)' │ 'http://download.iobroker.net/sources-dist-latest.json' │ false │ └─────────┴────────────────────┴─────────────────────────────────────────────────────────┴──────────────┘ Active repo(s): Stable (default) Upgrade policy: none Installed ioBroker-Adapters Used repository: Stable (default) Adapter "admin" : 7.7.22 , installed 7.7.22 Adapter "alias-manager": 2.0.0 , installed 2.0.0 Adapter "backitup" : 3.3.13 , installed 3.3.13 Adapter "daswetter" : 3.2.8 , installed 3.2.8 Adapter "discovery" : 5.0.0 , installed 5.0.0 Adapter "dwd" : 2.8.5 , installed 2.8.5 Adapter "flot" : 1.12.0 , installed 1.12.0 Adapter "fritzdect" : 2.6.2 , installed 2.6.2 Adapter "history" : 3.0.1 , installed 3.0.1 Adapter "hue" : 3.16.2 , installed 3.16.2 Adapter "icons-icons8" : 0.0.1 , installed 0.0.1 Adapter "icons-mfd-svg": 1.2.0 , installed 1.2.0 Adapter "icons-open-icon-library-png": 0.1.2, installed 0.1.2 Adapter "influxdb" : 4.0.2 , installed 4.0.2 Adapter "javascript" : 9.0.11 , installed 9.0.11 Controller "js-controller": 7.0.7 , installed 7.0.7 Adapter "lovelace" : 5.0.5 , installed 5.0.5 Adapter "mqtt" : 6.1.4 , installed 6.1.4 Adapter "nina" : 0.0.25 , installed 0.0.25 Adapter "pollenflug" : 2.0.0 , installed 2.0.0 Adapter "pushover" : 4.1.0 , installed 4.1.0 Adapter "pvforecast" : 5.0.0 , installed 5.0.0 Adapter "radar2" : 2.4.0 , installed 2.4.0 Adapter "rpi2" : 2.4.0 , installed 2.4.0 Adapter "rssfeed" : 3.6.1 , installed 3.6.1 Adapter "socketio" : 6.7.1 , installed 6.7.1 Adapter "sonoff" : 3.2.1 , installed 3.2.1 Adapter "systeminfo" : 1.3.0 , installed 1.3.0 Adapter "tankerkoenig" : 3.4.0 , installed 3.4.0 Adapter "vis" : 1.5.6 , installed 1.5.6 Adapter "vis-colorpicker": 2.0.3 , installed 2.0.3 Adapter "vis-hqwidgets": 1.5.1 , installed 1.5.1 Adapter "vis-icontwo" : 1.18.0 , installed 1.18.0 Adapter "vis-inventwo" : 3.3.5 , installed 3.3.5 Adapter "vis-jsontemplate": 4.2.0 , installed 4.2.0 Adapter "vis-material" : 0.2.0 , installed 0.2.0 Adapter "vis-material-advanced": 1.7.4, installed 1.7.4 Adapter "vis-materialdesign": 0.5.9, installed 0.5.9 Adapter "vis-metro" : 1.2.0 , installed 1.2.0 Adapter "web" : 7.0.8 , installed 7.0.8 Adapter "whatsapp-cmb" : 0.3.0 , installed 0.3.0 Adapter "ws" : 2.6.2 , installed 2.6.2 Adapter "yr" : 5.3.0 , installed 5.3.0 Adapter "zigbee2mqtt" : 3.0.10 , installed 3.0.9 [Updatable] Objects and States Please stand by - This may take a while Objects: 15413 States: 14163 *** OS-Repositories and Updates *** Hit:1 http://deb.debian.org/debian bookworm InRelease Hit:2 http://deb.debian.org/debian-security bookworm-security InRelease Hit:3 http://deb.debian.org/debian bookworm-updates InRelease Hit:4 http://archive.raspberrypi.com/debian bookworm InRelease Hit:5 https://repos.influxdata.com/debian stable InRelease Hit:6 https://apt.grafana.com stable InRelease Hit:7 https://deb.nodesource.com/node_22.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:1887 0.0.0.0:* LISTEN 1001 44526 6946/io.mqtt.0 tcp 0 0 0.0.0.0:1886 0.0.0.0:* LISTEN 1001 44525 6946/io.mqtt.0 tcp 0 0 0.0.0.0:1884 0.0.0.0:* LISTEN 1001 41730 7002/io.sonoff.0 tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 1001 44179 6715/iobroker.js-co tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1001 44184 6715/iobroker.js-co tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 6002 694/sshd: /usr/sbin tcp6 0 0 :::8086 :::* LISTEN 999 7188 764/influxd tcp6 0 0 :::8082 :::* LISTEN 1001 46003 7292/io.web.0 tcp6 0 0 :::8081 :::* LISTEN 1001 42929 6733/io.admin.0 tcp6 0 0 :::8091 :::* LISTEN 1001 49265 7548/io.lovelace.0 tcp6 0 0 :::22 :::* LISTEN 0 6004 694/sshd: /usr/sbin tcp6 0 0 :::3000 :::* LISTEN 106 35882 5028/grafana udp 0 0 0.0.0.0:67 0.0.0.0:* 1001 47154 7078/io.radar2.0 udp 0 0 0.0.0.0:5353 0.0.0.0:* 104 428 566/avahi-daemon: r udp 0 0 0.0.0.0:58629 0.0.0.0:* 104 430 566/avahi-daemon: r udp6 0 0 :::59606 :::* 104 431 566/avahi-daemon: r udp6 0 0 fe80::18e0:ffba:1eb:546 :::* 0 6046 613/NetworkManager udp6 0 0 :::5353 :::* 104 429 566/avahi-daemon: r *** Log File - Last 25 Lines *** 2026-01-28 17:26:08.648 - info: lovelace.0 (7548) starting. Version 5.0.5 in /opt/iobroker/node_modules/iobroker.lovelace, node: v22.22.0, js-controller: 7.0.7 2026-01-28 17:26:08.829 - info: fritzdect.0 (7506) ____________________________________________ 2026-01-28 17:26:08.830 - info: fritzdect.0 (7506) create Main object DECT_ 099950756693 FRITZ!DECT 301 Vorgarten thermo.heat 2026-01-28 17:26:08.889 - info: lovelace.0 (7548) http server listening on port 8091 2026-01-28 17:26:15.337 - info: fritzdect.0 (7506) ____________________________________________ 2026-01-28 17:26:15.338 - info: fritzdect.0 (7506) create Main object DECT_ 099950961200 FRITZ!DECT 440 Wohnz thermo 2026-01-28 17:26:16.368 - info: fritzdect.0 (7506) CREATE groups 1 2026-01-28 17:26:16.372 - info: fritzdect.0 (7506) ____________________________________________ 2026-01-28 17:26:16.373 - info: fritzdect.0 (7506) create Main object DECT_ grp5C87D9-3C5609803 Wohnzimmer thermo.heat 2026-01-28 17:26:16.482 - info: rssfeed.0 (7708) starting. Version 3.6.1 in /opt/iobroker/node_modules/iobroker.rssfeed, node: v22.22.0, js-controller: 7.0.7 2026-01-28 17:26:16.695 - info: pvforecast.0 (7659) starting. Version 5.0.0 in /opt/iobroker/node_modules/iobroker.pvforecast, node: v22.22.0, js-controller: 7.0.7 2026-01-28 17:26:18.348 - info: fritzdect.0 (7506) finished creating devices/groups (if any) 2026-01-28 17:26:18.349 - info: fritzdect.0 (7506) templates are used(false) 2026-01-28 17:26:18.350 - info: fritzdect.0 (7506) start creating templates 2026-01-28 17:26:18.829 - info: fritzdect.0 (7506) CREATE Templates 2 2026-01-28 17:26:19.270 - info: fritzdect.0 (7506) finished creating templates (if any) 2026-01-28 17:26:19.271 - info: fritzdect.0 (7506) routines are used(false) 2026-01-28 17:26:19.271 - info: fritzdect.0 (7506) start creating routines 2026-01-28 17:26:19.725 - info: fritzdect.0 (7506) finished creating routines (if any) 2026-01-28 17:26:19.726 - info: fritzdect.0 (7506) start initial updating devices/groups 2026-01-28 17:26:23.323 - info: fritzdect.0 (7506) finished initial updating devices/groups 2026-01-28 17:26:23.324 - info: fritzdect.0 (7506) going over to cyclic polling, messages to poll activity only in debug-mode 2026-01-28 17:26:26.017 - info: pvforecast.0 (7659) Starting internal update cron (every 15 Minutes) for timezone: Europe/Berlin 2026-01-28 17:26:39.228 - info: tankerkoenig.0 (7599) Start first request 2026-01-28 17:26:47.818 - info: host.PIArgon instance system.adapter.daswetter.0 terminated with code 11 (ADAPTER_REQUESTED_TERMINATION)@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
*** DISPLAY-SERVER SETUP ***
Display-Server: false
Unit display-manager.service could not be found.
Display-Manager:
Desktop:
Session: tty@OliverIO sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Erreichbar immer booleanisieren
das dürfte sein was ich gesehen hatte
-
zum vergleichmal noch chatgpt 5.2
sag mal welche ausgabe du besser findest bzw was dir mehr geholfen hat.
Ja – da sind ein paar echte „Blockly-Export“-Klassiker drin, die dir in ioBroker früher oder später Probleme machen (oder dafür sorgen, dass es nicht so läuft wie gedacht). Ich gehe die auffälligsten Punkte durch und sage jeweils warum das problematisch ist und wie du’s robust bekommst.
1) Parameter-Chaos vs. globale Variablen (und dadurch Logikfehler)
Max_dimmen()hat diese Signatur:async function Max_dimmen(MAX_Wert, MAX_erreichbar, MAX_aufdimmen_aktiv, MAX_aufdimmen, MAX_Text, MAX_Zyklus_beendet, MAX_Farbwert, MAX_ein_aus)Du rufst sie z.B. morgens so auf:
await Max_dimmen(30, true, false, true, ..., 2730, 'ein');Aber im Code vergleichst du später:
getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val == MAX_erreichbarUnd im Aufruf gibst du einmal
true, einmal1(abends:Max_dimmen(100, 1, ...)).➡️ Wenn der State
...Erreichbar Hue Maxbei dir ein Zahl-Boolean ist (0/1), dann ist der Vergleich mittruezwar mit==oft „zufällig“ wahr (weiltrue == 1), aber das ist fragil. Wenn der State mal"true"odertrueliefert, oder du auf===umstellst, knallt’s.Robust fix: Normalisieren statt „magischen“ Typen:
const reachable = !!getState('alias.0.OG.Flur.Licht.Erreichbar Hue Max').val; if (reachable === !!MAX_erreichbar) { ... }Oder konsequent immer
1/0verwenden.
2)
MAX_aufdimmenwird nie verwendetDu übergibst
MAX_aufdimmen, aber im Code taucht die Variable nirgendwo sinnvoll auf (sie wird nicht gelesen). Das ist kein Crash, aber ein Hinweis: Blockly hat dir Paramater reingezogen, die du gar nicht brauchst.➡️ Ergebnis: schwer wartbar, und du glaubst evtl. „das beeinflusst was“, tut es aber nicht.
3) Falsche/inkonsistente Nutzung von
compareTime()Du hast mehrere Varianten:
a) Morgens:
if (compareTime(getAstroDate('dawn', undefined, 18), null, '<', null)) {Das sieht aus wie Blockly-„Compare Time“ in der 4-Argument-Variante. Kann funktionieren, ist aber seltsam (null/null).
b) Abends:
if (compareTime('21:36', 'null', '<')) {Hier ist
'null'ein String, nichtnull.➡️ Das ist sehr wahrscheinlich ein Fehler. Je nach Implementierung von
compareTimeist'null'ein ungültiger Zeitpunkt und die Funktion liefert dann immer false oder verhält sich unerwartet.Vermutlich wolltest du: „wenn aktuelle Zeit < 21:36“ oder „wenn 21:36 < aktuelle Zeit“. Dafür ist die typische Blockly-Semantik:
compareTime('21:36', null, '<')→ vergleicht'21:36'mit jetzt- oder
compareTime(null, '21:36', '<')je nach Variante
Konkreter Verdacht: Dein Abend-Einschalten läuft evtl. nie, weil der Vergleich falsch ist.
4) Du setzt „EingeschaltetHueMax“ nur beim Ausschalten – aber nicht beim Einschalten
Beim Dimmen „ein“ setzt du:
- Helligkeit ggf. auf 5
- Farbtemperatur
- Abdimm-aktiv true
- und erhöhst Helligkeit
Beim Dimmen „aus“ machst du am Ende:
setState('alias.0.OG.Flur.Licht.EingeschaltetHueMax', false);➡️ Aber beim Einschalten setzt du
EingeschaltetHueMaxnicht auf true. Wenn andere Logik oder Visualisierung davon abhängt, ist das inkonsistent.
5) Race-Conditions / parallele Intervalle: nicht konsequent gestoppt
Du stoppst Intervalle zwar oft, aber nicht überall:
- Beim Start von
Max_dimmen('ein')stoppst du nicht automatisch ein evtl. laufendesMAX_einoderMAX_aus(nur in den Schedules machst du das davor). - Im
aus-Zweig stoppst du nur dann sofort, wennAbdimmen_aktivtrue ist:
if (getState('...Abdimmen_aktiv').val) { clearInterval(MAX_ein); clearInterval(MAX_aus); }➡️ Wenn
Abdimmen_aktivaus irgendeinem Grund false ist, können alte Intervalle weiterlaufen und du startest zusätzlichMAX_aus. Dann schreiben zwei Timer gegeneinander.Robust fix: Immer am Anfang von
Max_dimmen()beide Intervalle killen, unabhängig vom Flag.
6)
setInterval(async () => { ... })– async im Interval ohne NutzenDu nutzt
asyncin den Interval-Callbacks, aber duawait-est da drin praktisch nichts (außer in setTimeout, was auch ohne async geht).➡️ Kein direkter Fehler, aber: falls du später
awaiteinbaust, kann es passieren, dass ein neuer Interval-Tick startet, bevor der alte fertig ist (Überlappung). Besser: keinasyncimsetIntervaloder einen „Lock“ setzen.
7) Schwellenwerte beim Ausschalten: mögliche Endlosschleife / nie ganz aus
Im Ausblend-Zweig:
if (MAX_Wert == 0) { if (helligkeit > 6) MAX_Helligkeit = true; else false; } ... if (MAX_Helligkeit) helligkeit -= 5 else stop + ausgeschaltet=false➡️ Du dimmst runter bis <= 6, dann stoppst du und setzt
EingeschaltetHueMax=false. Aber du setzt die Helligkeit nicht auf 0. D.h. sie kann bei 6 stehen bleiben.- Wenn dein Gerät bei 6 noch sichtbar leuchtet: bleibt an.
- Wenn du später „ein“ startest, hast du nicht „aus=0“ als Ausgangslage.
Wenn du wirklich „aus“ willst, setz beim Ende explizit auf 0.
8) Doppelbelegung / uneindeutige Zustände: „Abdimmen_aktiv“
Du setzt:
- beim Einschalten:
Abdimmen_aktiverst auftrue, später aufMAX_aufdimmen_aktiv(bei dir meistfalse) - beim Ausschalten: setzt du es auf
MAX_aufdimmen_aktiv
➡️ Der Name passt nicht: du nutzt es als „läuft gerade ein Dimmer-Zyklus“ (lock), aber setzt es am Ende auf einen Parameterwert, der in deinen Aufrufen immer
falseist. Das ist okay, aber dann brauchst du keinen Parameter dafür.
9) Cron-Strings aus States: Gefahr von „kaputtem Cron“ ohne Validierung
Du baust Cron so:
min + ' ' + std + ' ' + datum + ' ' + monat + ' ' + wochentagWenn einer der States leer ist oder
*falsch gesetzt wird, erzeugst du einen ungültigen Cron undschedule()kann still scheitern oder Exceptions werfen.➡️ Blockly macht das gern, aber produktiv solltest du mindestens loggen, welcher Cron konkret gesetzt wurde und ob
schedule()eine ID zurückgab.
10) Kleinigkeiten, aber echte Wartungsbremsen
- Sehr viele globale Variablen, die eigentlich nur Timer-Handles sind (
MAX_ein,MAX_aus,Wartezeit). MAX_Wert == 0vs===– mit.valaus ioBroker kann auch string kommen. Dann ist==wieder „zufällig“ korrekt.
Was ich konkret als „Minimal-Fix“ empfehlen würde (ohne alles umzubauen)
- Am Anfang von
Max_dimmenimmer alles stoppen:
clearInterval(MAX_ein),clearInterval(MAX_aus), optionalclearTimeout(Wartezeit)
- Erreichbar immer booleanisieren
const reachable = !!getState(...).val;- und
MAX_erreichbarebenfalls!!MAX_erreichbar
compareTime('21:36', 'null', '<')korrigieren
- sehr wahrscheinlich muss
'null'→null(ohne Quotes) oder die Argumente anders.
- Beim Ausschalt-Ende Helligkeit auf 0 setzen
setState(...Helligkeit..., 0);
- Optional:
EingeschaltetHueMaxbeim Einschalten auftrue.
Wenn du willst, kann ich dir als nächsten Schritt eine bereinigte Version 1:1 auf Basis deines Codes posten (gleiches Verhalten, aber mit den oben genannten Fixes, weniger Parametern, sauberem Timer-Handling). Ich würde dafür nur kurz wissen:
- Liefert
alias.0.OG.Flur.Licht.Erreichbar Hue Maxbei dir 0/1 oder true/false? - Soll „aus“ wirklich auf 0 gehen oder bewusst bei 6 stoppen?
@OliverIO sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
zum vergleichmal noch chatgpt 5.2
sag mal welche ausgabe du besser findest bzw was dir mehr geholfen hat.Vielen Dank, das Du das bei den beiden KIs reingeworfen hast.
Beides ist sehr wertvoll. ich denke, ich werde die Tipps von ChatGPT umsetzen....
Das schaffe ich nur heute nicht mehr.
Vielleicht schreibe ich das auch komplett in JavaScript neu... Das hatte ich schon länger auf dem Plan. -
@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
läuft bei dir auf dem raspi auch ein browser mit?
ansonsten ist das beschriebene problem wahrscheinlich nicht relevant, sollte aber auch behoben werden.
also 1) mit "vermüllen" ist gemeint, das da ein memory leak ist. d.h. da wird immer wieder speicher reserviert, der erst du neustart oder im browser mit neuladen behoben werden kann. solange genügend speicher da ist, kein problem, evtl hast du da auch noch nie was gemerkt, sollte aber behoben werden. weiß0 nicht wie safe da blockly ist.ich habe das skript mal bei gemini reingeworfen (chatgpt geht gerade nicht)
Das sieht nach einem klassischen Blockly-Export für den ioBroker JavaScript-Adapter aus. Das Skript ist funktional, hat aber ein paar „Stolperfallen“, die im Alltag zu Problemen führen können (besonders beim Dimmen und den Zeitplänen).
Hier sind die kritischen Punkte, die ich gefunden habe:
1. Die "Erreichbarkeit"-Prüfung (MAX_erreichbar)
In der Funktion
Max_dimmenfragst du den StatusErreichbar Hue Maxab.- Das Problem: Wenn die Lampe über den Wandschalter stromlos gemacht wurde, ist sie "nicht erreichbar". Das Intervall läuft dann aber ewig weiter, weil die Bedingung
getState(...).val == MAX_erreichbarnie erfüllt wird, aber auch keinelsegreift, das das Intervall stoppt. - Folge: Das Skript "vermüllt" den Speicher mit laufenden Intervallen im Hintergrund.
2. Fehlende Initialisierung beim Neustart
Die Variable
MaxZeitplanundMax_abends_auswerden erst gesetzt, wenn sich einer der CRON-Datenpunkte ändert (change: 'ne').- Das Problem: Wenn du das Skript oder den ioBroker neu startest, sind diese Zeitpläne nicht aktiv, bis du die Werte in den Datenpunkten einmal manuell änderst.
- Lösung: Du solltest die
schedule-Logik am Ende des Skripts einmal ohne Trigger aufrufen, damit sie beim Start sofort registriert wird.
3. Logik-Fehler beim "Abdimmen_aktiv"
Im
else if (MAX_ein_aus == 'aus')-Teil setzt du:
setState('javascript.0.Datenpunkte.Flur.Licht.Abdimmen_aktiv', MAX_aufdimmen_aktiv, true);- Das Problem: Du übergibst hier die Variable
MAX_aufdimmen_aktiv. In deinem morgendlichen Ausschalt-Trigger ist dieser Wert aber auffalsegesetzt. Das ist zwar technisch nicht falsch, aber die Variable heißt im Datenpunkt "Abdimmen_aktiv", was verwirrend sein kann, wenn sie beim Ausschalten auffalsegeht, obwohl der Prozess noch läuft.
4. Die
compareTimebei Sonnenuntergangif (compareTime('21:36', 'null', '<'))- Das Problem: Das bedeutet: "Führe das Dimmen nur aus, wenn es vor 21:36 Uhr ist". Da der Sonnenuntergang im Sommer aber auch mal nach 21:36 Uhr sein kann, würde die Lampe an manchen Tagen im Jahr einfach gar nicht angehen. Prüfe, ob das so gewollt ist.
5. Intervall-Dauer vs. Schrittweite
Du dimmst alle 30 Sekunden um 5 Einheiten.
- Um von 0 auf 100 zu kommen, braucht das Skript 20 Schritte.
- (10 Minuten).
- Gefahr: Wenn während dieser 10 Minuten jemand manuell das Licht schaltet oder ein anderer Trigger feuert, kommen sich die Intervalle in die Quere, falls
MAX_ein/MAX_ausnicht sauber gelöscht werden.
Zusammenfassung & Empfehlung
Fehlerquelle Auswirkung Lösung Erreichbarkeit Endlosschleife im Hintergrund Ein else { clearInterval... }hinzufügen, falls Lampe offline.Startverhalten Zeitpläne nach Neustart inaktiv Trigger-Logik einmal beim Skriptstart ausführen. Variablen-Mix MAX_erreichbarwird mal alstrue(Boolean) und mal als1(Zahl) übergeben.JavaScript ist da tolerant, aber sauberer wäre es, immer den gleichen Typ zu nutzen. Ein kleiner Tipp für ioBroker:
Anstatt Intervalle mitsetIntervalzu bauen, nutzen viele für Hue-Lampen das nativetransition(Übergangszeit) Kommando. Man kann beimsetStateeiner Hue-Lampe oft ein JSON mitgeben:setState('id', {val: 100, ack: false, transition: 600}). Das würde die Lampe von alleine über 10 Minuten dimmen, ohne dass das Skript alle 30 Sekunden funken muss.Soll ich dir zeigen, wie du den Teil für den automatischen Start nach einem Neustart ergänzt?
@OliverIO sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
läuft bei dir auf dem raspi auch ein browser mit?
ansonsten ist das beschriebene problem wahrscheinlich nicht relevant, sollte aber auch behoben werden.Nein, der PI läuft als reine SSH Maschine.
Ich habe noch den Adapter VIS installiert und benutze es auch. - Das Problem: Wenn die Lampe über den Wandschalter stromlos gemacht wurde, ist sie "nicht erreichbar". Das Intervall läuft dann aber ewig weiter, weil die Bedingung
-
@OliverIO sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
zum vergleichmal noch chatgpt 5.2
sag mal welche ausgabe du besser findest bzw was dir mehr geholfen hat.Vielen Dank, das Du das bei den beiden KIs reingeworfen hast.
Beides ist sehr wertvoll. ich denke, ich werde die Tipps von ChatGPT umsetzen....
Das schaffe ich nur heute nicht mehr.
Vielleicht schreibe ich das auch komplett in JavaScript neu... Das hatte ich schon länger auf dem Plan.sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Vielleicht schreibe ich das auch komplett in JavaScript neu... Das hatte ich schon länger auf dem Plan.
So, ich habe heute das Script erneuert. Rein in JavaScript geschrieben (mit Hilfe von ChatGPT). Ich denke, das ist jetzt wesentlich besser. Mein altes Blookly stammte auch aus meiner Anfangszeit vom iobroker (vor ca. 4 Jahren). Da habe ich halt anders programmiert (Chaos).
-
@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Allerdings sind die Kerne trotz dem gut belastet.
finde erst mal raus warum.
Möglicherweise war gerade viel los, ggf. das RAM verbraucht und viel wurde ausgelagert. Wenn's dabei klemmt geht das auch ins load average mit ein
die Anzahl Kerne sind nur eine Richtschnur um fie load average zu bewerten, die Kerne srlbst müssen dabei gar nicht überladen sein
@Homoran sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
@Kapitaen31 sagte in ioBroker auf PI4 stürzt immer mal wieder ab:
Allerdings sind die Kerne trotz dem gut belastet.
finde erst mal raus warum.
Ich hatte mir noch die LOGs angeschaut von vor dem letzten Absturz.
journalctl --no-pager -o short-iso \ --since "2026-01-30 16:30" \ --until "2026-01-30 17:30" > /tmp/journal_err.logDabei kam diese Ausgabe raus.
journal2026 01 30 1630 1730.log
in dem LOG ist nichts auffähliges zu sehen. Jedenfalls für mich. Um 17:03 hören die LOGs auf und erst nach dem Neustart um ca. 17:21 werden sie fortgesetzt.