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.

    .txt file include

    Scheduled Pinned Locked Moved Troubleshooting
    59 Posts 6 Posters 39.0k Views 6 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.
    • strawberry 3.141S Offline
      strawberry 3.141 Project Sponsor Module Developer
      last edited by

      in sensor.js you have the function getdom replace it with this

      Please create a github issue if you need help, so I can keep track

      D 1 Reply Last reply Reply Quote 0
      • D Offline
        dominic @strawberry 3.141
        last edited by

        @strawberry-3.141 Yeah :) Thanks :)

        1 Reply Last reply Reply Quote 0
        • S Offline
          SaschaSP
          last edited by yawns

          @strawberry-3-141 great solution from you.
          I want to use your solution not for showing Temperatur/ Humidity rather for showing alerts from sensors.

          The content from my txt is for example:

          Meldung Stellmotor Antrieb blockiert
          Zone Nebenantrieb
          Zeit 6.Juni 2018 10:40
          +++ENDE DER DATEI+++
          

          I change the sensor.js:

          Module.register("Home-Status",{
          	defaults: {
          		updateInterval: 0.5 * 60 * 1000 //reads the file every 30 seconds
          	},
          
          	start: function(){
          		this.sendSocketNotification("START", this.config);
          	},
          
          	socketNotificationReceived: function(notification, payload) {
          		if(notification === "DATA"){
          			this.dataFile = payload;
          			this.updateDom();
          		}
          	},
          
          	getDom: function(){
          		var wrapper = document.createElement("div");
          		if(this.dataFile){
                                  var meldungRegExp = /Meldung = (.*?) /ig;
                                  var meldung = meldungRegExp.exec(this.dataFile)[1];
          
                                  var zoneRegExp = /Zone = (.*?) /ig;
                                  var zone = zoneRegExp.exec(this.dataFile)[1];
          
          			var zeitRegExp = /Zeit = (.*?) /ig;
          			var zeit = zeitRegExp.exec(this.dataFile)[1];
          			wrapper.innerHTML = "Meldung: " + meldung + " , Zone: " + zone + " , "Zeit: " + zeit" ;
          		} else {
          			wrapper.innerHTML = "No Data";
          		}
          		return wrapper;
          	}
          });
          

          but it dosn´t work.
          Firtst problem: my txt have no seperators like = or :
          second probleme: my alert text (Meldung) contains of several words
          third Problem: only the newest txt should be displayed. The Names from the txt files are for example 20180112090125.txt or 20185912085949.txt etc. It´s not possible to edit the incoming txt names. Best way is to automaticly delete the previous txt

          I hope you can help me to Display " Meldung, Zone, Zeit" on my MagicMirror

          Best regards

          Sascha

          strawberry 3.141S 1 Reply Last reply Reply Quote 0
          • strawberry 3.141S Offline
            strawberry 3.141 Project Sponsor Module Developer @SaschaSP
            last edited by

            @saschasp you can change your regular expressions to the following:
            /Meldung (.*)/ig;, /Zone (.*)/ig; and /Zeit (.*)/ig;. This should help you displaying the data. For the problem with the newest file you need to do the following steps: Scan the directory, sort file list by highest number, read the first file.

            Scan the directory https://nodejs.org/api/fs.html#fs_fs_readdir_path_options_callback

            Sort the file names https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

            Read the file https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback

            Please create a github issue if you need help, so I can keep track

            S 1 Reply Last reply Reply Quote 1
            • S Offline
              SaschaSP @strawberry 3.141
              last edited by SaschaSP

              @strawberry-3-141
              Ok, i will try step by step.
              Beginning with my first probleme:
              The Output message (displayed on the mirror) is only displaying one word after the “identifyer-word”

              identifyer "Meldung"
              Stellmotor Antrieb blockiert
              MagicMirror Display only Stellmotor
              Antrieb blockiert is missing

              The identifyer-wordsare Meldung Zone Zeit

              The content from my txt:

              Meldung Stellmotor Antrieb blockiert
              Zone Nebenantrieb
              Zeit 6.Juni 2018 10:40
              +++ENDE DER DATEI+++
              

              My edited sensor.js:

              Module.register("Home-Status",{
              	defaults: {
              		updateInterval: 0.5 * 60 * 1000 //reads the file every 30 seconds
              	},
              
              	start: function(){
              		this.sendSocketNotification("START", this.config);
              	},
              
              	socketNotificationReceived: function(notification, payload) {
              		if(notification === "DATA"){
              			this.dataFile = payload;
              			this.updateDom();
              		}
              	},
              
              	getDom: function(){
              		var wrapper = document.createElement("div");
              		if(this.dataFile){
                                      var meldungRegExp = /Meldung (.*?) /ig;
                                      var meldung = meldungRegExp.exec(this.dataFile)[1];
              
              
                                      var zoneRegExp = /Zone (.*?) /ig;
                                      var zone = zoneRegExp.exec(this.dataFile)[1];
              
              			var zeitRegExp = /Zeit (.*?) /ig;
              			var zeit = zeitRegExp.exec(this.dataFile)[1];
              			wrapper.innerHTML = "Meldung: " + meldung + " Zone: " + zone + " Zeit: " + zeit;
              		} else {
              			wrapper.innerHTML = "No Data";
              		}
              		return wrapper;
              	}
              });
              
              

              Result wich is displayed at MagicMirror:

              Meldung:Stellmotor Zone:Nebenantrieb Zeit:6.Juni

              strawberry 3.141S 1 Reply Last reply Reply Quote 0
              • strawberry 3.141S Offline
                strawberry 3.141 Project Sponsor Module Developer @SaschaSP
                last edited by

                @saschasp your regular expressens are different from the one i posted, use them and I’m sure it will work

                Please create a github issue if you need help, so I can keep track

                1 Reply Last reply Reply Quote 0
                • B Offline
                  banbutcher
                  last edited by

                  hi,
                  sorry to be dragging up old posts, but im trying to get my mirror to display the contents of a txt file and i have it partly working… i have the contents displaying on my mirror but its all showing up on one line, how can i display it with each line break as in txt file?

                  thanks

                  S 1 Reply Last reply Reply Quote 0
                  • S Do not disturb
                    sdetweil @banbutcher
                    last edited by

                    @banbutcher you will have to replace the line feeds (\n) with html breaks (
                    )

                    Sam

                    How to add modules

                    learning how to use browser developers window for css changes

                    1 Reply Last reply Reply Quote 0
                    • B Offline
                      banbutcher
                      last edited by

                      hi again,

                      im after getting my script to update my txt file with the names of downloaded movies and tv series… how would i go about reading the title of the series and just having the title and info ie:

                      if title has S**E** in it then
                      filename - Archer S01E01pilot 1080p x265.mkv
                      desired result - Archer S01E01

                      else its a movie and just add movie name

                      i think this is the bit of code im to edit but i havent got it working :(

                      	getDom: function(){
                      		var wrapper = document.createElement("div");
                      		if(this.dataFile){
                                              var meldungRegExp = /Meldung (.*?) /ig;
                                              var meldung = meldungRegExp.exec(this.dataFile)[1];
                      
                      
                                              var zoneRegExp = /Zone (.*?) /ig;
                                              var zone = zoneRegExp.exec(this.dataFile)[1];
                      
                      			var zeitRegExp = /Zeit (.*?) /ig;
                      			var zeit = zeitRegExp.exec(this.dataFile)[1];
                      			wrapper.innerHTML = "Meldung: " + meldung + " Zone: " + zone + " Zeit: " + zeit;
                      		} else {
                      			wrapper.innerHTML = "No Data";
                      		}
                      		return wrapper;
                      	}
                      });
                      

                      thanks

                      Richie

                      S 1 Reply Last reply Reply Quote 0
                      • S Do not disturb
                        sdetweil @banbutcher
                        last edited by sdetweil

                        @banbutcher said in .txt file include:

                        Archer S01E01pilot 1080p x265.mkv

                        using the regex tester,
                        https://regex101.com/

                        I think this is the regex u want

                        /.*[S][(0-9)]+[E][(0-9)]+/
                        

                        Sam

                        How to add modules

                        learning how to use browser developers window for css changes

                        1 Reply Last reply Reply Quote 0
                        • B Offline
                          banbutcher
                          last edited by banbutcher

                          @sdetweil

                          that worked great…

                          however, im a little bit stuck again… your expression works fine and return the correct result but only on the first line of the file and only if i remove the [1] from the end of line 5 of the code

                          	getDom: function(){
                          		var wrapper = document.createElement("div");
                          		if(this.dataFile){
                                                  var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/ig;
                                                  var split = splitRegExp.exec(this.dataFile)[1];
                          
                          			wrapper.innerHTML = split;
                          		} else {
                          			wrapper.innerHTML = "No Data";
                          		}
                          		return wrapper;
                          	}
                          

                          do i need to stick it in some kind of loop? or am i reading the contents of file wrong?

                          again thanks for your help :)

                          S 1 Reply Last reply Reply Quote 0
                          • S Do not disturb
                            sdetweil @banbutcher
                            last edited by

                            @banbutcher is dataFile an array of filenames? then yes, you’ll need a loop.
                            so, you are moving part of name a, to a new array
                            then part of name b to the next slot in the array

                            array.push(item)
                            adds item to the end of the array

                            name_of_array =[] initializes name_of_array to be an empty array

                            then u will need to format the array of partial names

                            var x = name_of_array.join(separator)
                            will turn the array into x, a string with separator between the names

                            Sam

                            How to add modules

                            learning how to use browser developers window for css changes

                            1 Reply Last reply Reply Quote 0
                            • B Offline
                              banbutcher
                              last edited by

                              Band.Of.Brothers.E01.1080p.5.1Ch.BluRay.ReEnc-DeeJayAhmed.srt <br>
                              Archer S01E03 Diversity Hire (1080p x265 10bit S94 Joy).mkv <br>
                              devs.s01e02.720p.hdtv.x264-river[eztv].mkv <br>
                              What.We.Do.in.the.Shadows.S02E02.Ghosts.720p.AMZN.WEBRip.DDP5.1.x264-NTb[eztv.io].mkv <br>
                              What.We.Do.in.the.Shadows.S02E01.Resurrection.720p.AMZN.WEBRip.DDP5.1.x264-NTb[eztv.io].mkv <br>
                              

                              this is the file im reading from… im not sure if thats an array, sorry and i want them outputted same line by line just missing the trailing parts.

                              again thanks for your help :)

                              S 1 Reply Last reply Reply Quote 0
                              • S Do not disturb
                                sdetweil @banbutcher
                                last edited by

                                @banbutcher reading how

                                Sam

                                How to add modules

                                learning how to use browser developers window for css changes

                                1 Reply Last reply Reply Quote 0
                                • B Offline
                                  banbutcher
                                  last edited by banbutcher

                                  this is my main module .js

                                  i think this is where im reading from :/

                                  Module.register("deluge",{
                                  	defaults: {
                                  		updateInterval: 10 * 60 * 1000 //reads the file every 10 mins
                                  	},
                                  
                                  	start: function(){
                                  		this.sendSocketNotification("START", this.config);
                                  	},
                                  
                                  	socketNotificationReceived: function(notification, payload) {
                                  		if(notification === "DATA"){
                                  			this.dataFile = payload;
                                  			this.updateDom();
                                  		}
                                  	},
                                  
                                  //	getDom: function(){
                                  //		var wrapper = document.createElement("div");
                                  //		if(this.dataFile){
                                  //			wrapper.innerHTML = this.dataFile;
                                  //		} else {
                                  //			wrapper.innerHTML = "No data";
                                  //		}
                                  //		return wrapper;
                                  //	}
                                  
                                  
                                  
                                  
                                  	getDom: function(){
                                  		var wrapper = document.createElement("div");
                                  		if(this.dataFile){
                                                          var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/ig;
                                                          var split = splitRegExp.exec(this.dataFile);
                                  
                                  			wrapper.innerHTML = split;
                                  		} else {
                                  			wrapper.innerHTML = "No Data";
                                  		}
                                  		return wrapper;
                                  	}
                                  
                                  
                                  
                                  });
                                  

                                  again thanks for your help :)

                                  im in way overmy head here!

                                  S 2 Replies Last reply Reply Quote 0
                                  • S Do not disturb
                                    sdetweil @banbutcher
                                    last edited by

                                    @banbutcher reading in the node_helper, sending up to the module.

                                    Sam

                                    How to add modules

                                    learning how to use browser developers window for css changes

                                    1 Reply Last reply Reply Quote 0
                                    • B Offline
                                      banbutcher
                                      last edited by

                                      Node_helper :)

                                      const NodeHelper = require("node_helper");
                                      const fs= require("fs");
                                      
                                      module.exports = NodeHelper.create({
                                      //here comes the part of the nodehelper after the 3 dots as posted above
                                      
                                      	socketNotificationReceived: function(notification, payload) {
                                      		if(notification === "START"){
                                      			this.config = payload;
                                      			this.readData();
                                          			setInterval(() => {
                                              			this.readData();
                                          			}, this.config.updateInterval);
                                      		}
                                      	},
                                      
                                      	readData: function(){
                                      		//to read a file to do the following
                                      		fs.readFile("new-tv-list.txt", "utf8", (err, data) => {
                                      			if (err) throw err;
                                      			this.sendSocketNotification("DATA", data);
                                      		});
                                      	}
                                      });
                                      
                                      1 Reply Last reply Reply Quote 0
                                      • S Do not disturb
                                        sdetweil @banbutcher
                                        last edited by

                                        @banbutcher I won’t have time to look at this tonight

                                        Sam

                                        How to add modules

                                        learning how to use browser developers window for css changes

                                        B 1 Reply Last reply Reply Quote 0
                                        • B Offline
                                          banbutcher @sdetweil
                                          last edited by

                                          @sdetweil
                                          not a problem at all, i really appreciate your help so far in this topic and every other question ive had across the board! :thumbs_up_light_skin_tone:

                                          S 1 Reply Last reply Reply Quote 0
                                          • S Do not disturb
                                            sdetweil @banbutcher
                                            last edited by sdetweil

                                            @banbutcher ok, the fs.readFile() returns ALL the content of the file. I still would remove the utf8.

                                            but you want a list of names, not a stream of characters…
                                            so you need to split the stream into an array.

                                            a list of text ‘lines’ has a character after each, called a line feed, we don’t want those

                                            but the last filename MAY or MAY NOT be followed by a line feed. (depends on how the file was created)

                                            anyhow we can fix that

                                            I would change the readData function in node_helper like this

                                            readData: function(){
                                            		//to read a file to do the following
                                            		fs.readFile("new-tv-list.txt", (err, data) => {
                                                                    var output_data = null
                                                                    // if there was no error  
                                            			if (!err){
                                                                      // convert byte stream to array of names   
                                                                      output_data=data.toString().concat("\n").split('\n')
                                                                    }   
                                                                    // always send something back to module, so it can display messages
                                                                    // might be null if there was an error 
                                            			this.sendSocketNotification("DATA", output_data);
                                            		});
                                            	}
                                            

                                            then to fix the module side
                                            build an html table structure

                                            var wrapper = document.createElement("div");
                                            		if(this.dataFile){
                                                                    var output_list= [];
                                                                    // setup regex, no i  no g (only once, and case sensitive)
                                                                    var splitRegExp = /.*[S][(0-9)]+[E][(0-9)]+/;
                                                                    // loop thru the list of filenames
                                                                    for(filename of this.dataFile) {
                                                                        // if the name is not zero length (split could have returned for just linefeed
                                                                        if(filename.length >0) {
                                                                           // get the filename prefix
                                                                           var split = splitRegExp.exec(filename);
                                                                           // save name to the output list, as a table entry
                                                                           // remove space after the ->< , the forum hides everything after unless a space
                                                                           // table has a row, 
                                                                           output_list.push("< tr>< td>")
                                                                           // with data
                                                                           output_list.push(split)
                                                                           // end of data and row
                                                                           output_list.push("< /td>< /tr>")
                                                                        } 
                                                                    }  
                                                                    // insert the table into the wrapper
                                            			wrapper.innerHTML = "< table>" + output_list.join('')+ "< /table>";
                                            		} else {
                                            

                                            Sam

                                            How to add modules

                                            learning how to use browser developers window for css changes

                                            S 1 Reply Last reply Reply Quote 0

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better 💗

                                            Register Login
                                            • 1
                                            • 2
                                            • 3
                                            • 3 / 3
                                            • 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