MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    DIY Module Displays Nothing

    Scheduled Pinned Locked Moved Solved Troubleshooting
    14 Posts 3 Posters 1.2k Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S Offline
      sdetweil @hokie-bird
      last edited by

      @hokie-bird

      I built it and fixed minor things…
      created a dummy node_helper and a dummy album art png.

      so save yours out of the way,(rename the folder)
      cd ~/MagicMirror/modules
      git clone https://github.com/sdetweil/MMM-LyrionNowPlaying

      test
      copy your node helper over mine

      be careful on your update frequency asking the node_helper all the time…

      once per second is probably too fast…
      i made mine ignore socketNotifications() til a response was sent (after 5 second delay) from the 1st time.
      the duration is just number that changes…, duration just a fixed number

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      1 Reply Last reply Reply Quote 0
      • H Offline
        hokie-bird
        last edited by

        @sdetweil cant thank you enough for taking the time to do that, WOW!

        Here’s what I’ve learned. I subbed your LyrionNowPlaying.js in for mine, and results were exactly the same: “No song currently playing” at startup for a second or two, vanishes and never returns despite music starting/stopping. Then I subbed your node_helper.js for mine (with your module.js file and .png) and BOOM! your data and image appeared! Granted, it would appear for 4 seconds or so, disappear for 1-2, then re-appear but progress! So, safe to assume its somehow something in my node_helper? Here’s the latest, and again wildly grateful for your help.

        node_helper.js

        const NodeHelper = require('node_helper');
        const request = require('request');
        
        module.exports = NodeHelper.create({
        
            start: function() {
                console.log("Starting node_helper for: " + this.name);
                this.nowPlaying = { 
                    artist: "", 
                    song: "",
                    timeRemaining: "",
                    duration: 0, 
                    position: 0,
                    coverArt: "" 
                }; 
                this.sendSocketNotification('LYRION_NOW_PLAYING_RESULT', this.nowPlaying); // Send initial empty state
            },
        
            socketNotificationReceived: function(notification, payload) {
                if (notification === 'GET_LYRION_NOW_PLAYING') {
                    this.getLyrionNowPlaying(payload);
                }
            },
        
            getLyrionNowPlaying: function(payload) {
                const { lyrionServer, playerName } = payload;
                const options = {
                    url: `${lyrionServer}/jsonrpc.js`,
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: JSON.stringify({
                        "id": 1,
                        "method": "slim.request",
                        "params": [playerName, ["status", "-", 1, "tags:artist"]] 
                    })
                };
        
                request(options, (error, response, body) => {
                    if (error) {
                        console.error(`MMM-LyrionNowPlaying: Error connecting to Lyrion server: ${error}`);
                        this.sendSocketNotification('LYRION_NOW_PLAYING_RESULT', { error: `Error connecting to Lyrion server: ${error}` });
                        return;
                    }
        
                    if (response.statusCode !== 200) {
                        console.error(`MMM-LyrionNowPlaying: Received unexpected status code from Lyrion server: ${response.statusCode}`);
                        this.sendSocketNotification('LYRION_NOW_PLAYING_RESULT', { error: `Received unexpected status code from Lyrion server: ${response.statusCode}` });
                        return;
                    }
        
                    try {
                        const data = JSON.parse(body);
                        console.log("Raw Data:", data); 
        
                        if (!data.result) {
                            console.error(`MMM-LyrionNowPlaying: Invalid response from Lyrion server: Missing 'result' in response`);
                            this.sendSocketNotification('LYRION_NOW_PLAYING_RESULT', { error: `Invalid response from Lyrion server: Missing 'result' in response` });
                            return;
                        }
        
                        if (!data.result.mode || data.result.mode !== 'play') { 
                            this.nowPlaying = { 
                                artist: "", 
                                song: "",
                                timeRemaining: "",
                                duration: 0, 
                                position: 0,
                                coverArt: "" 
                            }; 
                            this.sendSocketNotification('LYRION_NOW_PLAYING_RESULT', this.nowPlaying); // Send "no song" notification immediately
                            return; 
                        }
        
                        // Handle cases where playlist_loop might be missing or empty
                        let artist = "Unknown Artist";
                        let song = "Unknown Song";
        
                        if (data.result.playlist_loop && data.result.playlist_loop[0]) {
                            artist = data.result.playlist_loop[0].artist || "Unknown Artist";
                            song = data.result.playlist_loop[0].title || "Unknown Song"; 
                        }
        
                        this.nowPlaying = {
                            artist: artist,
                            song: song,
                            duration: data.result.duration || 0, 
                            position: data.result.time || 0,
                            coverArt: `${lyrionServer}/music/current/cover.jpg?player=${playerName}` 
                        }; 
        
                        this.nowPlaying.timeRemaining = this.formatTime(this.nowPlaying.duration - this.nowPlaying.position);
        
                        this.sendSocketNotification('LYRION_NOW_PLAYING_RESULT', this.nowPlaying); 
        
                    } catch (err) {
                        console.error(`MMM-LyrionNowPlaying: Error parsing Lyrion API response: ${err}`);
                        this.sendSocketNotification('LYRION_NOW_PLAYING_RESULT', { error: `Error parsing Lyrion API response: ${err}` });
                    }
                });
            },
        
            formatTime: function(seconds) {
                const minutes = Math.floor(seconds / 60);
                const remainingSeconds = seconds % 60;
                return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
            }
        });
        
        
        S 1 Reply Last reply Reply Quote 0
        • S Offline
          sdetweil @hokie-bird
          last edited by sdetweil

          @hokie-bird not sure, but two things

          1. the sendSocketNotification() in start should be removed , the browser side is not up yet.

          2. you are sending requests for playing info 1/second,
            can the server handle multiple concurrently?
            how long is the response time ?

          i would change that to 5 seconds to test,
          you can change it in config.js

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          1 Reply Last reply Reply Quote 0
          • H Offline
            hokie-bird
            last edited by

            Thank you again @sdetweil

            I implemented both of your changes (removing sendSocketNotification() in start and 5 second refresh interval) and it seems the refresh interval is what is impacting the display. At 1 second, basically nothing, but at 5 seconds I get a 5 second display, then maybe a 2 second disappearance and then a 5 second display repeating pattern. (Which is somewhat interesting as the browser console is reporting accurate data every 1 second, despite nothing being displayed.) Not sure how to get a constant/non-disappearing display (when music is playing) while still getting an accurate reflection/countdown of the time remain, but I’ll experiment with that.

            Of course, suggestions welcome. And thanks again.

            S 1 Reply Last reply Reply Quote 0
            • S Offline
              sdetweil @hokie-bird
              last edited by sdetweil

              @hokie-bird you are also asking for a 4 second transition on the changes w updateDom(…)

              so 2 seconds fade out and 2 seconds fade in

              this.updateDom(this.config.fadeSpeed);
              and you are interrupting the fade with another updateDom

              Sam

              How to add modules

              learning how to use browser developers window for css changes

              1 Reply Last reply Reply Quote 0
              • H Offline
                hokie-bird
                last edited by

                It was the fade! when I switch the fade to 0, even the refresh of 1 seconds works and displays perfectly. @sdetweil you are brilliant!

                Thank you!

                1 Reply Last reply Reply Quote 0
                • S sdetweil has marked this topic as solved on
                • 1
                • 2
                • 2 / 2
                • First post
                  Last post
                Enjoying MagicMirror? Please consider a donation!
                MagicMirror created by Michael Teeuw.
                Forum managed by Sam, technical setup by Karsten.
                This forum is using NodeBB as its core | Contributors
                Contact | Privacy Policy