Read the statement by Michael Teeuw here.
Posts
-
RE: Fan for Pi5???
-
RE: Need help with MMM-MQTTbridge not "communicating" with MMM-RTSPStream
-
RE: help needed
@schlomm Yes I had samples from them.
In the end I‘ve decided to use the monitor in a nice ancient picture frame without any glass.
So the „mirror“ effect is missing but this fits my usecase better.
The frame is mounted in our living room and I can see all of the information from every place in the room…Warmest regards,
Ralf -
RE: Fan for Pi5???
@BKeyport OK, thanks for your viewpoint!
Than I‘m on the right way - still works today :-)
Temperature was 45°C today in the morning - was at 56° everytime before …
So even passive cooling seems to be much better.Nice rest of weekeend to all of you.
Ralf -
RE: MMM-Moon module - how to resize?
@cricket said in MMM-Moon module - how to resize?:
It appears there is no size option in the module itself. I
I’ve had the same issue not with size but with alignment and had resolved this within the middle-center region and have used:
.region.middle.center { width: 45%; }in custom.css.
This works for me to position the moon nicely above earth in my implementation.

Regards,
Ralf -
RE: Problems with WLAN connectivity - solved
Dear @schlomm ,
I initially had no clue at all regarding root cause :-)
And the finding “undervoltage” was never expected but came out off my logfiles.After a LOT of tinkering and playing with syptomatic “solutions” system kept to be unstable so I decided to dig in and do some logging to identify root cause.
For this I wrote a shellscript and installed a system service which collects this data every five minutes.
shellscript:
sudo nano /usr/local/bin/wlan-diagnose.shcontent:
#!/bin/bash LOGFILE="/var/log/wlan-diagnose.log" DATE=$(date '+%a %d %b %H:%M:%S %Z %Y') WLAN_IF="wlan0" echo "===== $DATE =====" >> $LOGFILE # IP-Adresse echo "--- IP-Adresse ---" >> $LOGFILE ip addr show $WLAN_IF >> $LOGFILE 2>&1 # Link-Status echo "--- Link Status ---" >> $LOGFILE iw dev $WLAN_IF link >> $LOGFILE 2>&1 # Default Route echo "--- Routing ---" >> $LOGFILE ip route >> $LOGFILE 2>&1 # Wpa_supplicant Status echo "--- wpa_supplicant ---" >> $LOGFILE systemctl status wpa_supplicant --no-pager >> $LOGFILE 2>&1 # Letzte wpa_supplicant Logs echo "--- wpa_supplicant journal (letzte 20 Zeilen) ---" >> $LOGFILE journalctl -u wpa_supplicant -n 20 --no-pager >> $LOGFILE 2>&1 # Kernel/Treiber Logs echo "--- dmesg wlan0 ---" >> $LOGFILE dmesg | tail -n 20 >> $LOGFILE 2>&1 # Ping-Test PING_TARGET="8.8.8.8" ping -I $WLAN_IF -c3 -W3 $PING_TARGET >> $LOGFILE 2>&1 echo "" >> $LOGFILEset as executable:
sudo chmod +x /usr/local/bin/wlan-diagnose.shsystemd-timer for this diagnosis script:
sudo nano /etc/systemd/system/wlan-diagnose.timercontent:
[Unit] Description=WLAN Diagnose alle 5 Minuten [Timer] OnBootSec=1min OnUnitActiveSec=5min Persistent=true [Install] WantedBy=timers.targetservice file:
sudo nano /etc/systemd/system/wlan-diagnose.servicecontent:
[Unit] Description=WLAN Diagnose Service [Service] Type=oneshot ExecStart=/usr/local/bin/wlan-diagnose.shactivate the service:
sudo systemctl daemon-reload sudo systemctl enable --now wlan-diagnose.timerCreated logfile: /var/log/wlan-diagnose.log
possible command for filtering for errors:
grep -i "fail\|error\|disconnect" /var/log/wlan-diagnose.login my personal case directly after starting the service the undervoltage warnings appeared in the logfile:
Sep 24 19:23:02 MagicMirrorPi5 wpa_supplicant[702]: wlan0: CTRL-EVENT-CONNECTED - Connection to f8:bc:0e:51:50:48 completed [id=0 id_str=] Sep 24 19:23:02 MagicMirrorPi5 wpa_supplicant[702]: bgscan simple: Failed to enable signal strength monitoring --- dmesg wlan0 --- [ 385.672898] hwmon hwmon4: Voltage normalised [ 399.780700] hwmon hwmon4: Undervoltage detected! [ 401.796721] hwmon hwmon4: Voltage normalised [ 403.812728] hwmon hwmon4: Undervoltage detected! [ 405.831888] hwmon hwmon4: Voltage normalised [ 425.988994] hwmon hwmon4: Undervoltage detected! [ 428.008109] hwmon hwmon4: Voltage normalised [ 434.052979] hwmon hwmon4: Undervoltage detected! [ 438.087587] hwmon hwmon4: Voltage normalised [ 442.117090] hwmon hwmon4: Undervoltage detected! [ 444.133104] hwmon hwmon4: Voltage normalised [ 452.198182] hwmon hwmon4: Undervoltage detected! [ 454.213171] hwmon hwmon4: Voltage normalised [ 470.341318] hwmon hwmon4: Undervoltage detected! [ 478.405369] hwmon hwmon4: Voltage normalised [ 488.485467] hwmon hwmon4: Undervoltage detected! [ 490.505469] hwmon hwmon4: Voltage normalised [ 514.693689] hwmon hwmon4: Undervoltage detected! [ 516.709733] hwmon hwmon4: Voltage normalised [ 520.744884] hwmon hwmon4: Undervoltage detected! PING 8.8.8.8 (8.8.8.8) from 172.23.56.157 wlan0: 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=13.2 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=33.6 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=27.5 ms --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 13.220/24.756/33.576/8.529 msSo I had identified my root cause with first strike.
In the meantime (today) I had severe additional problems (also “identified” by this mentioned log) - but this was a kernel/device driver problem which I cannot solve today.
But this leads to a modified recovery script because the version from yesterday only tried to restart the WPA_Supplicant which was not sufficient for my problem today.[EDIT - Sep, 8th, 2025: deleted old recovery script because usage of ping without qualified path produced an error by the script itself. For this reason the script is not as useful as I thought. Sorry for confusion! ]
Hope this helps you.
Do not hesitate to ask for further information …Warmest regards,
Ralf -
RE: [MMM-NounishReminder] Nounish Event Reminder for your MM
@xppaicyber said
Now you can customize the header text through the config.js file using the new header option:
Dear XppaiCyberr,
this is awesome!
Thanks a LOT.Warmest regards,
Ralf -
RE: MMM-Pir disappeard on github
@plainbroke said
Don’t the authors usually leave their github live…
AFAIK yes, for this reason this seems like an unfriendly farewell to me .
Ralf
-
RE: Problems with WLAN connectivity - solved
Dear @schlomm , team,
as I learned today sometimes system limitations are hard and leads to unwanted results.
I even got more serioous trouble with my pi and his WIFI so I had to dig in deeper.
The aproach until now - because of “growing” up - is a “recovery” and a “diagnose” part.
This leads to - surprise, surprise :-) - inconsistent data and so dignosis is merely impossible.
For this reason I converged both approches into one script and implemented a 4-stages error-handling and consecutive escalation (until reboot).At this stage i had to recognize: almost EVERY test results immediatly in an error at stage 1 (ping) and was resolved at stage 2 (L2/L3 - ICMP problem – checking status of wlan interface).
To identify root cause for this I - again - dig down deeply (ChatGPT was NOT that helpful!) and found: At systemd level (on my system!?) ping is not in PATH !!!
So a fully qualified call solved this problem - and most of my “problems” are solved !If you are using “ping”, too and stuck in problems in scripts - keep this in mind: “usr/bin/ping” might be really helpful for you.
If you are interested in, here my current recovery-script - including some useful logging information:
/usr/local/bin/wlan-recovery.sh #!/bin/bash # ============================================================================ # WLAN Recovery Script (Monolithische Version) # Autor: Dr. Ralf Korell, MD # Datum: 2025-10-07 # # Dieses Script wird per systemd-Timer regelmäßig aufgerufen. # Es prüft die WLAN-Verbindung in mehreren Stufen und führt nur dann # Recovery-Aktionen aus, wenn wirklich eine Unterbrechung vorliegt. # # Features: # - Mehrstufige Diagnose (Ping, iw, IP, Route) # - Schutz vor Fehlalarmen und Selbstabschüssen # - SSH/VNC-Safe-Mode (keine Unterbrechung aktiver Sessions) # - Logrotation + Statistikdatei # ============================================================================ # === Konfiguration ========================================================== LOGFILE="/var/log/wlan-recovery.log" STATSFILE="/var/log/wlan-recovery.stats" MAX_LOG_SIZE=50000 # ~50 KB, dann Logrotation PING_TARGET="172.23.56.1" MAX_CONSECUTIVE_FAILS=2 # bevor Recovery startet COOLDOWN_FILE="/tmp/wlan-recovery.cooldown" COOLDOWN_MINUTES=5 # interne Speicherorte (nicht verändern) STATEFILE="/tmp/wlan-recovery.state" DATE_NOW=$(date "+%Y-%m-%d %H:%M:%S") # === Hilfsfunktionen ======================================================== log() { echo "$DATE_NOW: $1" | tee -a "$LOGFILE" } rotate_log() { if [ -f "$LOGFILE" ] && [ $(wc -c <"$LOGFILE") -gt $MAX_LOG_SIZE ]; then mv "$LOGFILE" "$LOGFILE.old" echo "$DATE_NOW: Log rotated." > "$LOGFILE" fi } increment_stat() { local key="$1" local value value=$(grep "^$key=" "$STATSFILE" 2>/dev/null | cut -d= -f2) value=$((value + 1)) grep -v "^$key=" "$STATSFILE" 2>/dev/null > "${STATSFILE}.tmp" echo "$key=$value" >> "${STATSFILE}.tmp" mv "${STATSFILE}.tmp" "$STATSFILE" } cooldown_active() { if [ -f "$COOLDOWN_FILE" ]; then local last=$(date -r "$COOLDOWN_FILE" +%s) local now=$(date +%s) local diff=$(( (now - last) / 60 )) [ $diff -lt $COOLDOWN_MINUTES ] else return 1 fi } start_cooldown() { touch "$COOLDOWN_FILE" } ssh_or_vnc_active() { ss -tn state established | grep -Eq '(:22|:5900)' } # === Diagnosefunktionen ===================================================== is_connected_l2() { iw dev wlan0 link 2>/dev/null | grep -q "Connected to" } has_ip_l3() { ip -4 addr show wlan0 2>/dev/null | grep -q "inet " } has_route() { ip route get "$PING_TARGET" 2>/dev/null | grep -q "dev wlan0" } ping_ok() { /usr/bin/ping -I wlan0 -c 3 -W 2 "$PING_TARGET" >/dev/null 2>&1 } # === Hauptlogik ============================================================= rotate_log # Init Statsfile falls nicht vorhanden [ -f "$STATSFILE" ] || echo -e "success=0\nrecoveries=0\nfailures=0" > "$STATSFILE" # Lese bisherigen Fehlerzähler fails=0 [ -f "$STATEFILE" ] && fails=$(cat "$STATEFILE") # Diagnose if ping_ok; then log "Ping erfolgreich. WLAN funktioniert." echo 0 > "$STATEFILE" increment_stat "success" exit 0 fi # Wenn Ping fehlschlägt → weitere Prüfungen log "Ping fehlgeschlagen → erweiterte Diagnose..." if is_connected_l2 && has_ip_l3 && has_route; then log "L2/L3 ok → ICMP-Problem (kein Recovery)." increment_stat "failures" echo 0 > "$STATEFILE" exit 0 fi # Hier gilt: echte Verbindung gestört fails=$((fails + 1)) echo "$fails" > "$STATEFILE" if [ $fails -lt $MAX_CONSECUTIVE_FAILS ]; then log "Erster Fehler ($fails/$MAX_CONSECUTIVE_FAILS) → Beobachten..." increment_stat "failures" exit 0 fi # Wenn Cooldown läuft → überspringen if cooldown_active; then log "Cooldown aktiv → Recovery übersprungen." exit 0 fi # === Recovery-Stufen ======================================================== if ssh_or_vnc_active; then log "SSH/VNC aktiv → keine Recovery ausgeführt, nur geloggt." increment_stat "failures" exit 0 fi log "Verbindung tatsächlich gestört → Recovery-Prozess gestartet." increment_stat "recoveries" # Stufe 1: sanfte Reassoziation log "→ Stufe 1: wpa_supplicant Reassoziation..." wpa_cli -i wlan0 reassociate >/dev/null 2>&1 sleep 5 if ping_ok; then log "Reassoziation erfolgreich." echo 0 > "$STATEFILE" start_cooldown exit 0 fi # Stufe 2: Interface Toggle log "→ Stufe 2: Interface Toggle..." ip link set wlan0 down sleep 2 ip link set wlan0 up sleep 8 if ping_ok; then log "Interface Toggle erfolgreich." echo 0 > "$STATEFILE" start_cooldown exit 0 fi # Stufe 3: Treiber-Reload log "→ Stufe 3: Treiber-Reload..." modprobe -r brcmfmac && modprobe brcmfmac sleep 10 if ping_ok; then log "Treiber-Reload erfolgreich." echo 0 > "$STATEFILE" start_cooldown exit 0 fi # Wenn alles fehlschlägt log "Alle Recovery-Stufen fehlgeschlagen → Fehler bleibt bestehen." increment_stat "failures" start_cooldown exit 1[EDIT: in script above: changed ping count from -c 1 to -c 3 in:
/usr/bin/ping -I wlan0 -c 1 -W 2 “$PING_TARGET” >/dev/null 2>&1
]
Warmest regards,
Ralf
