MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    1. Home
    2. rkorell
    3. Posts
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.
    R
    Offline
    • Profile
    • Following 0
    • Followers 1
    • Topics 25
    • Posts 414
    • Groups 1

    Posts

    Recent Best Controversial
    • RE: AI Coding Tools Infuse a new Life in MagicMirror

      @sdetweil

      I am using the cline integration (Sonnet 4.6) with VS to enhance some firmware (build env in VS), and its been interesting.

      I‘m using claude code - installed directly on Mirror‘s RasPi and it (mostly :-) ) works like a charm.
      Indeed you need a subscription and several times „auto compressions“ of the current chat happens.
      But if one insist in writing important information consequently to CLAUDE.md as well as to „memory“ even every fresh started session has pretty much context…

      Warm regards,
      Ralf

      posted in General Discussion
      R
      rkorell
    • RE: MMM-Globe: Meteosat imagery broken — fork with fix available

      @manu85340 :-) Thank You!
      Glad, if it works for you!

      Ralf

      posted in Showcase
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      I’ve just seen that you had invented a solution for your problem - MMM-HideModulesOnSpotify :-)
      Cool!

      Ralf

      posted in System
      R
      rkorell
    • RE: MMM-FRITZ-Box-Callmonitor-py3 and MMM-Callmonitor-Current-Call

      @MiPraSo cool! thanks for this confirmation.
      Glad to hear it works for you!

      Regards,
      Ralf

      posted in Utilities
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      Dear @htilburgs,

      Yes, I Like your garbage module - it’s really great - thanks for this!
      I’m using MMM-NowPlayingOnSpotify …
      This has exactly the behavioour as described.
      Shows a spotify logo - which I had replaced with Volumio logo (which is my favourite spotify player) and only expands if something is played.
      In this case the left corner looks like

      screen2.jpg

      Warm regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      @htilburgs screen.jpg
      I have a quite similar layout.
      My MusicPlayer (Volumio) is on the left side, too but is spreading the region if cover-art is appearing…
      Warmest regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: MMM-Globe: Meteosat imagery broken — fork with fix available

      @plainbroke you’re really welcome.
      Thanks for your patience :-)

      Ralf

      posted in Showcase
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      @htilburgs cool!
      happy, that you are satisfied!

      Warm regards,
      Ralf

      interesting that you are poistion this counterbar on thr right side of the screen.
      For me it feels/looks more natural on the left side.
      May this is the reason for my “acceptance” of the colorFrom / colorTo - “mismatch” you had reported …

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      @htilburgs said:

      I’m looking forward for the startupGracePeriod parameter and think this is going to make the module fully as I like it.

      Good news — your wish came true faster than expected! 😊

      v1.5.0 is released and includes the startupGracePeriod parameter you were looking forward to.

      How to update:

      cd ~/MagicMirror/modules/MMM-PresenceScreenControl
      rm -rf node_modules
      git pull
      npm install
      

      Then add to your config:

      startupGracePeriod: 30,  // seconds to keep screen on after startup
      

      Set it to however many seconds you want the screen to stay on after a restart — enough time to
      verify everything came up correctly. After the grace period, normal presence logic kicks in. If
      your PIR detects you during the grace period, it seamlessly switches to the regular countdown
      timer.

      Also included in v1.5.0:

      • logFileName parameter — debug output now goes to pm2 logs by default (no more hidden log file)
      • Several internal fixes found during a code quality review

      Full changelog in the README.

      Enjoy! 🎉

      Warm regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      @htilburgs

      YES, IT IS WORKING!!!

      I’m SO happy.
      Great news - congratulations…
      So at least your stubborn issue leds to several code enhancements - during my investigation regarding your symptoms I had the chance to identify some optimization potential, so code is much cleaner now.
      Thanks for this gentle “push”.

      Warmest regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      @htilburgs :-) OK, nearby - Germany …
      Thanks for testing/feedback!

      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      Dear @htilburgs,
      it seems, we are in the same time-zone :-) wouldn’t be surpised even same mother-tongue …

      Nevertheless, thank you for your patience and the detailed logs — they were extremely helpful in tracking this down.

      What we found

      The module works perfectly on my system (Pi 5, Debian Trixie, Wayland/labwc, MagicMirror 2.34.0), so we did an intensive
      deep-dive comparing your setup, your MMM-Pir configuration, and your MMM-PresenceScreenControl configuration to understand why
      the screen comes back after ~6 seconds on your system.

      The key clue came from your own working MMM-Pir config:

      mode: 3
      waylandDisplayName: "wayland-0"
      

      MMM-Pir mode 3 uses wlr-randr — the same tool you configured for MMM-PresenceScreenControl. But there’s a critical difference:
      MMM-Pir internally sets WAYLAND_DISPLAY=wayland-0 (from your waylandDisplayName parameter) before calling wlr-randr.

      Your MMM-PresenceScreenControl config, on the other hand, uses:

      onCommand: "DISPLAY=:0 wlr-randr --output HDMI-A-1 --on --mode 1920x1080 --transform 270",
      offCommand: "DISPLAY=:0 wlr-randr --output HDMI-A-1 --off",
      

      wlr-randr is a Wayland tool — it communicates with the Wayland compositor via the WAYLAND_DISPLAY environment variable.
      DISPLAY=:0 is an X11 variable and is meaningless to wlr-randr. Without the correct WAYLAND_DISPLAY, wlr-randr falls back to
      guessing the socket, which results in the unstable behavior you’re seeing: the screen turns off but comes back after ~6
      seconds.

      This also explains why your system info shows WAYLAND_DISPLAY: undefined — MagicMirror/Electron doesn’t have it set, so any
      screen command executed from the module needs to provide it explicitly.

      The fix

      Replace DISPLAY=:0 with WAYLAND_DISPLAY=wayland-0 in your config. You have two options:

      Option A: wlr-randr (matching your working MMM-Pir setup)

      onCommand: "WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --on --mode 1920x1080 --transform 270",
      offCommand: "WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --off",
      

      This is the minimal change — same tool, same parameters, just the correct environment variable.

      Option B: wlopm (recommended, more robust)

      wlopm is purpose-built for display power management on Wayland. Unlike wlr-randr --off (which removes the output from the
      compositor layout), wlopm --off uses the Wayland power management protocol (DPMS-level) — it turns the display hardware off
      without affecting window layout. This is what I use on my system.

      First install it (it’s in the Trixie repos):

      sudo apt install wlopm
      

      Then configure:

      onCommand: "wlopm --on HDMI-A-1",
      offCommand: "wlopm --off HDMI-A-1",
      

      Note: wlopm doesn’t need WAYLAND_DISPLAY explicitly — the default fallback to wayland-0 works reliably on Trixie. And since
      wlopm controls hardware power state, it doesn’t need --mode or --transform on the on command — the display simply wakes up with
      its previous settings intact.

      For reference, the https://github.com/Jopyth/MMM-Remote-Control/blob/master/docs/guide/monitor-control.md documents wlr-randr
      as the recommended Wayland screen control option, including the hint to set WAYLAND_DISPLAY if needed.

      About the startup behavior (screen stays on)

      You mentioned the screen stays on after MagicMirror starts until you trigger the PIR. The startup fix from commit 39d28d6 does
      work — it turns the screen off ~1 second after startup. But since your offCommand wasn’t working correctly (the DISPLAY=:0
      issue), the screen appeared to “stay on.” Once you fix the command, the screen should turn off shortly after startup if nobody
      is in front of the PIR.

      You also asked: “Why not the time from counterTimeout?” — That’s a fair point. On my system, counterTimeout is 600 (10
      minutes), so turning off after 1 second is the desired behavior — I want to see that the restart worked, but not wait 10
      minutes. For your setup with counterTimeout: 30, having 30 seconds of screen-on after startup would make more sense.

      I’m planning a new config parameter startupGracePeriod that lets you define how long the screen stays on after module start
      before the presence logic kicks in. This way each user can choose independently of their counterTimeout. I’ll include this in a
      future release.

      Upcoming improvement: cronMonitor efficiency

      While investigating your issue, I discovered that the internal cron monitor (which checks for always-on/ignore time windows)
      sends updates to the frontend every second, even when nothing has changed and the screen is off. This causes unnecessary DOM
      rebuilds and is inefficient, though it’s not the cause of your screen-comes-back problem. I’ll fix this in the next release to
      make the module quieter after screen-off.

      About the debug logging

      Now that we’ve identified the root cause, you can set debug: “off” in your config again. The debug output you saw (gpiomon
      lines in pm2 logs) comes from the PIR library and goes to the console. The module’s own debug logging (updatePresence,
      startCounter, updateScreen, etc.) intentionally writes to a separate log file (MMM-PresenceScreenControl_local.log in the
      module directory) rather than to pm2 logs. This keeps the debug output focused and separated from the noise of all other
      modules — much easier to analyze when troubleshooting a specific issue. If you ever need to debug the module again, check that
      file instead of pm2 logs.

      Summary

      1. Screen comes back after 6 seconds: Replace DISPLAY=:0 with WAYLAND_DISPLAY=wayland-0 (Option A), or switch to wlopm (Option
        B)
      2. Screen stays on after startup: Should be fixed once Option A or B is applied. A startupGracePeriod parameter is planned for
        a future release.
      3. Log prefix [MMM-Pir]: Already fixed in your version ✓

      Please let me know if Option A or B resolves the screen-comes-back issue!

      Warm regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      @sdetweil Thanks.
      I’ve excluded this file from git tracking so the pull should work.
      Warm regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      Dear @htilburgs

      You were right about the startup behavior — I’ve fixed it. The screen now turns off after ~1
      second if no presence is detected at startup. No more waiting for the first sensor event.

      Please update:
      cd ~/MagicMirror/modules/MMM-PresenceScreenControl
      rm -rf node_modules package-lock.json
      git pull
      npm install

      Regarding the remaining issue (screen comes back on after 6-7 seconds): The debug log you shared
      earlier shows the off command executing successfully, with no PIR event triggering the screen back
      on. The module isn’t causing it — but I need to understand what is. Could you please set debug:
      “complex” and share the complete log output from the moment the screen turns off until it comes
      back on? That will show every internal state change.

      Thanks for your testing and feedback — it’s making the module better for everyone.

      Warm regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      @htilburgs sure. you’re right. Sorry.
      I’ve removed package-lock.json from git-tracking and corrected the README.md installation instruction according your advise.
      Instructions in postings above corrected as well.

      Regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      MMM-PresenceScreenControl: gpiomon replaces native dependencies (PR #2)

      I’m happy to share that @KristjanESPERANTO contributed a significant improvement to
      MMM-PresenceScreenControl via https://github.com/rkorell/MMM-PresenceScreenControl/pull/2:

      What changed:
      The PIR sensor handling has been completely reworked. Instead of relying on node-libgpiod (a
      native C addon requiring @electron/rebuild) with a Python/gpiozero fallback, the module now uses
      gpiomon — a standard CLI tool that comes pre-installed with libgpiod on every Raspberry Pi.

      What this means for you:

      • No more native compilation during npm install
      • No more @electron/rebuild or Python dependencies for PIR
      • Works on both Bookworm and Trixie out of the box
      • Automatic detection of libgpiod version (1.x / 2.x) and GPIO chip (Pi 4: gpiochip0, Pi 5:
        gpiochip4)

      Additional fixes in the same update:

      • Log spam eliminated: runtime log messages now respect the debug setting (“off” / “simple” /
        “complex”). With debug: “off” (default), pm2 logs stay clean. Thanks to @htilburgs for spotting
        this!
      • Confusing [MMM-Pir] log prefix renamed to [PresenceScreenControl]

      To update:

      cd ~/MagicMirror/modules/MMM-PresenceScreenControl
      rm -rf node_modules package-lock.json
      git pull
      npm install
      

      BIG ! thanks to @KristjanESPERANTO for the clean refactoring and pointing out the log issues!

      Warm regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      Dear @htilburgs,

      Thanks for the detailed logs and config — very helpful!

      Issue 1 — resolved as you found: wlr-randr instead of xrandr on Wayland. ✓

      Issue 3 (confusing [MMM-Pir] prefix) — fixed in the latest commit. Log messages now show
      [PresenceScreenControl] [PIR]. A git pull will get you this fix.

      Issue 2 (screen stays on at startup): The counter showing 00:00 when nobody is in front of the
      sensor is actually correct — no presence means the counter is expired.
      The real question is: does your screen actually turn off? Your log shows the off-command executing successfully:
      [updateScreen] SUCCESS: executed “DISPLAY=:0 wlr-randr --output HDMI-A-1 --off”
      If the screen turns off but comes back on after ~10 seconds (as you describe in your second post),
      that’s not our module turning it back on — the debug log shows no PIR_DETECTED event at that
      moment. Please check if your Wayland compositor (Wayfire?) has its own idle/screen management:
      look for an [idle] section in ~/.config/wayfire.ini. A dpms_timeout or similar setting would
      re-enable the screen and override our wlr-randr --off.

      Warmest regards,
      Ralf

      posted in System
      R
      rkorell
    • RE: Upcoming Release April 1, 2026 , breaking changes, some operational changes

      @sdetweil I’ve identified some of current modules (not MY modules) to use moment.js heavily.
      Does it make sense to contact their developers proactively or even open an “issue” ?
      From my mirror-build the impacted modules are: MMM-Strava, MMM-MyGarbage and MMM-NowPlayingOnSpotify …

      With regards to planned weather module changes MMM-CalendarExt3Agenda relies on some weather information but this is handled by notification so it should work…

      Warm regards,
      Ralf

      posted in Upcoming Features
      R
      rkorell
    • RE: Next release arm32 users, need your help

      Dear Sam, @sdetweil

      yes — my MMM-PresenceScreenControl module is one of those. It uses node-libgpiod (native C addon for GPIO/PIR sensor
      access), which requires @electron/rebuild to match Electron’s Node ABI.

      That said, the module has had an automatic fallback since v1.1.0: if node-libgpiod fails to compile or rebuild, it
      transparently falls back to Python/gpiozero for PIR sensor access. So it will work without a successful
      electron-rebuild — just via a different code path.

      The dependency setup (as of v1.3.1):

      • node-libgpiod is an optionalDependency (npm continues if it fails)
      • @electron/rebuild is not listed as a dependency — it’s installed on-demand by the postinstall script only when
        node-libgpiod is actually present
      • If either fails, the module falls back to Python gracefully

      So for your testing: this module would be a good candidate to verify if electron-rebuild still works, but it won’t
      break if it doesn’t.

      My other modules (MMM-Globe, MMM-Best-Weather, MMM-My-Actual-Weather, etc.) are pure JavaScript — no native addons, no
      electron-rebuild needed.

      Hope this helps.
      Warmest regards,
      Ralf

      posted in Troubleshooting
      R
      rkorell
    • RE: PIR / MQTT - Presence sensor(s) revived

      Dear @htilburgs Thank you so much for flagging this — I genuinely appreciate it! I have to admit: on my own system, I
      probably just watched the npm install output fly by and thought “yeah, whatever, it works” 😄

      But you’re absolutely right that a clean install experience matters, so I looked into it properly.

      The good news: v1.3.1 is now released and fixes everything. To update:

      cd ~/MagicMirror/modules/MMM-PresenceScreenControl
      git pull
      rm -rf node_modules package-lock.json
      npm install

      You should now see 0 vulnerabilities and 0 deprecation warnings. The package count also dropped from 181 to 47 — quite
      a diet! Details are in the updated
      https://github.com/rkorell/MMM-PresenceScreenControl/blob/main/README.md#changelog.

      What I changed:

      • Removed @electron/rebuild from the pre-installed optional dependencies. It was dragging in a massive tree of build
        tools (tar, glob, rimraf, node-gyp…) that are never actually used at runtime. On Trixie, they weren’t even used at
        install time since node-libgpiod can’t compile there. The postinstall script already had on-demand logic for the rare
        case it’s needed — so listing it as a dependency was just unnecessary baggage.
      • Upgraded mqtt from v4 to v5 (fully backwards-compatible, no config changes needed).

      A word about those “vulnerabilities”: npm audit tends to be… let’s say enthusiastic about scaring people. Every
      single one of those 8 vulnerabilities was either a build-time-only dependency (tar path traversal — relevant only when
      extracting npm packages during install) or a theoretical ReDoS in minimatch (exploitable only if someone feeds
      malicious glob patterns into a help-text lookup function). None of them could ever be triggered at runtime on a
      MagicMirror sitting in your living room.

      That said — seeing 8 vulnerabilities (6 high) in bright red after installing a module is not exactly
      confidence-inspiring, even if the actual risk is zero. So I’m glad you pointed it out, and now the install is squeaky
      clean.

      Let me know if v1.3.1 works for you!

      Thanks again and warm regards,
      Ralf

      posted in System
      R
      rkorell
    • 1 / 1