MagicMirror² v2.11.0 is available! For more information about this release, check out this topic.
READ THE CHANGELOG BEFORE UPDATING!

.txt file include



  • @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


  • Project Sponsor Module Developer

    @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



  • @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


  • Project Sponsor Module Developer

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



  • 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



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



  • 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



  • @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)]+/
    


  • @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 🙂



  • @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


Log in to reply