@mjmvisser instead of doing sudo npm run server
Can you really try logging as root with sudo su
Then running npm run server
This may be the trick.
@mjmvisser instead of doing sudo npm run server
Can you really try logging as root with sudo su
Then running npm run server
This may be the trick.
Hello @mjmvisser
Can you try to run Magicmirror when logged as root?
Calling this command before starting MagicMirror:
sudo su
I had trouble when running it with another user. I tried lots of things but as mentioned in paragraph “OS configuration related” of the readme, the only solution I found was to run npm as root :disappointed_face:
I hope this will help you.
If you already tried that, are you sure to have the correct pins configured (no difference between configuration of program test and the module? Can you share the config of the module?
@nat-andrews hello,
The display is done by the module I wrote: https://github.com/seb-ma/MMM-IT8951
The configuration is done like any module: https://github.com/seb-ma/eInkFrame/blob/4defe289e4ebbc873d0e68418e278ff21a976e08/magicmirror_files/config.js#L81
And the resolution is automatically found when initializing driver.
It can be forced in config file when using mock for tests: electronOptions: { fullscreen: true, width: 1872, height: 1404 }
Be sure to set the correct value of VCOM to not damage your eink.
Also, I never had success running my module without the root user. So, unless you find a way (this interest me) you must run MagicMirror as root.
I let you read the readme of the MMM-IT8951 module, but if you need more details or have some questions, let me know.
–
edited to correct behavior on resolution
@AnduriI
This is curious 🤔
So the line that seems problematic is https://github.com/seb-ma/MMM-WeatherChartD3/blob/82e948086a2c187ee16fca6fb02bd0badf232254/MMM-WeatherChartD3.js#L66
But I mimic the default weather module: https://github.com/MichMich/MagicMirror/blob/e87f50e64aeaf3a8587f4855f4679c3223959fd0/modules/default/weather/weather.js#L90
So I don’t understand why WeatherProvider object wouldn’t be defined for you here.
Can you please try to use the default weather module to eliminate easy ideas?
Also, what MagicMirror version have you?
For latitude and longitude as numbers, I already fixed this when I saw it yesterday 😉
@AnduriI
Have you any error when starting node?
To see logs, you may have to change logLevel in config to set a value like: logLevel: ["INFO", "LOG", "WARN", "ERROR"]
Or any error in javascript console on the browser?
I checked my config and I don’t see something specific. Maybe one hint: lat and lon are numbers, not strings in my config file (no quotes on values).
@AnduriI
Hello,
In case you’re still looking for a wheater chart, I also developed one. Thickness, colors… are fully configured thanks to CSS, so you can overload what you want.
Nevertheless, it’s only a display graph. I haven’t included an array, but if you want to give it a try :
https://github.com/seb-ma/MMM-WeatherChartD3
@MMRIZE Excellent!
No more need to do ugly patch. Thank you for this module.
@MajorC
Hello,
The left panel is the default weather module with minors modifications that can be found on the repository: https://github.com/seb-ma/eInkFrame/blob/master/magicmirror_files/patches/MagicMirror.patch
And the chart on the right is the module I made and shown here: https://forum.magicmirror.builders/topic/17604/mmm-weatherchartd3
Both of them rely on modifications I made on weather provider to retrieve pollution (only openweather is currently supported). And I also did another modification on openweather provider to fetch all data once instead of having multiple calls to the API.
Finally, I also did a module that acts as a proxy to weather provider to avoid a call to weather API each time a module wants data (openweather and others are limiting the number of calls by day, thus this helps having more updates without reaching the limit): https://github.com/seb-ma/mmm-weatherproviderunique
@jonathanperron
Dans ma ville, il y a de l’open data sur les transports en commun. Et il y a déjà quelqu’un qui avait fait un module pour récupérer les heures de prochains passages :
https://github.com/normyx/MMM-Nantes-TAN
Je l’ai simplement modifié pour ajouter les alertes sur les lignes affichées (+ quelques corrections mineures) :
https://github.com/seb-ma/eInkFrame/blob/master/magicmirror_files/patches/MMM-Nantes-TAN.patch
It is designed for a Bosch BME680 sensor connected with i²c and retrieves:
It sends notifications that can be handled by other modules and/or have its own display.
Disclaimer: AQI is quite approximative. It depends of internal sensor temperature (thus: updateInterval, gasLimitLow and gasLimitHigh must be tuned). AQI precision value may be enhanced using Bosh library if someone has motivation to look into).

MMM-NotifCustomActions is a technical module designed to do the glue between modules or do simple JS function.
It reacts on module notifications.
For example, it can send a specific notification to a module or execute a shell command when another module broadcasts a notification.
JS functions can be executed on browser side or on server side (ex: shutdown).
For simple JS code, all can be written in module config; for complex JS functions 2 specific files are automatically loaded and are accessible by the module.
This example does:
shutdown command (node side) when notification ACTION_SHUTDOWN is received.PAGE_SELECT with payload "musicPage" (client side) when notification SPOTIFY_CONNECTED is received.actions: [
{
notification: "ACTION_SHUTDOWN",
action_node: function(self, sender, payload) {
exec("sudo shutdown -h now");
}
},
{
notification: "SPOTIFY_CONNECTED",
action_client: function(self, sender, payload) {
self.sendNotification("PAGE_SELECT", "musicPage");
}
},
]
This module communicates with a IT8951 card to display MagicMirror² on a e-ink screen. It opens MagicMirror² page on a Chrome browser (with Puppeteer) and observes each DOM update. Periodically, the e-ink is fully refreshed and partially refreshed on DOM update.
Partial refresh is done in a flashy way by default (that is needed to support the 16 gray levels) but if image is only B/W (without gray), the refresh mode is changed to have a direct update without flash. Another way to have a fast refresh without flash is by adding the CSS class eink-4levels to a module. Thus, the refresh is forced to 4-level gray only.
The IT8951 is typically used by some Waveshare e-paper screens.
Sample of display with multiple modules:

Each module’s area is individually updated when data changes.
All modules on 4 gray levels are updated seamlessly. Modules on 16 gray levels are updated with a flash area (here: the song cover).
A full refresh can be done by sending a notification IT8951_ASK_FULL_REFRESH.
To force gray levels, one need to add classes on modules in config file:
This class forces non flashy (but only on 4-levels gray) update of this module:
classes: "eink-4levels",
This class forces on 16-levels gray (but flashy) update of this module:
classes: "no-eink-4levels",
This module displays a chart using any weather provider. It can display temperature, feels like temperature, precipitation, snow and weather icons. It uses the D3.js library.
Full list of elements that can be displayed:
All curves can be styled using CSS


Hi!
1 year ago, I discovered MagicMirror and started my project. Now, I use it daily since months and I think it’s time to share with the community.

Basically, I wanted a nice little frame that displays my calendar and the weather and that is not on a LCD screen (I didn’t want the screen to be a light source).
So I decided to use a e-ink screen… then wanted to add a temperature sensor and a capacitive sensor to have “buttons” that can manage display… And finally I created my own PCB to manage this components plus a raspberry and hide all that behind a frame.


For those interested, the whole project is here: https://github.com/seb-ma/eInkFrame (hardware and software).
And all created modules are also on the repo.