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.

    Convert bytes to megabytes - JSON

    Scheduled Pinned Locked Moved Development
    8 Posts 3 Posters 1.8k Views 3 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 @mongo116
      last edited by

      @mongo116 right

      Sam

      How to add modules

      learning how to use browser developers window for css changes

      1 Reply Last reply Reply Quote 0
      • M Offline
        mongo116 Module Developer
        last edited by

        I figured this out in the end, with the help of google :) I used the JSON.parse() reviver function to take the down_rate and up_rate from the payload and divide it by 1024 (and again by 1024) to convert the bytes to megabytes. What confused me at first was I was trying to do this in the node_helper.js, which didn’t work. It needed to be in the socketNotificationReceived of the .js file.

                        var payload = JSON.parse(payload, function (key, value) {
                            if ( key === 'down_rate' ) {
                            return (value / 1024 / 1024).toFixed(2);
                            }
                            else if ( key === 'up_rate' ) {
                            return (value / 1024 / 1024).toFixed(2);
                            }
                            else {
                            return value;
                            }
                        });
        

        I’m sure there is a proper way of doing this, but for my needs this is now working as needed.

        S 1 Reply Last reply Reply Quote 0
        • S Offline
          sdetweil @mongo116
          last edited by

          @mongo116 json data before parse is called is a text string, and math in string is bad.

          parse converts to number if possible
          then math works.

          number/(1024*1024)
          is parts of megabyte

          Sam

          How to add modules

          learning how to use browser developers window for css changes

          1 Reply Last reply Reply Quote 0
          • ? Offline
            A Former User
            last edited by A Former User

            in MMM-Tools, i use this :

              convert: function(octet,FixTo) {
                octet = Math.abs(parseInt(octet, 10));
                var def = [[1, 'b'], [1024, 'Kb'], [1024*1024, 'Mb'], [1024*1024*1024, 'Gb'], [1024*1024*1024*1024, 'Tb']];
                for (var i=0; i < def.length; i++) {
                  if (octet < def[i][0]) return (octet/def[i-1][0]).toFixed(FixTo)+def[i-1][1];
                }
              },
            

            Syntax:
            octet: octets to transform
            FixTo: precision of the result

            Fixto precision sample: if you set it to 2 result is : X.XX, if you set it to 3result is X.XXX

            Of course, Unit is automaticaly set ! b /Kb/Mb/Mb/Tb
            That’s to you to adapt if you want to use it ;)

            1 Reply Last reply Reply Quote 0
            • M Offline
              mongo116 Module Developer
              last edited by mongo116

              Thanks for the replies :thumbs_up_light_skin_tone:

              I’ve got the bytes string converting to a number, so that’s all good. Now the next question, @Bugsounet how do I use your function within the JSON.parse function?

                              var payload = JSON.parse(payload, function (key, value) {
                                  if ( key === 'down_rate' ) {
                                  var num = Number(value);
                                  return (num/(1024*1024)).toFixed(2);
                                  }
              

              Just to add, I had tried the following and receive a this.convert is not a function

                                  var downrate = this.convert(value,0);
                                  return downrate;
              
              1 Reply Last reply Reply Quote 0
              • 1 / 1
              • 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