Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Environment Variables disable features.... #3302

Closed
BKeyport opened this issue Dec 23, 2023 · 45 comments
Closed

Environment Variables disable features.... #3302

BKeyport opened this issue Dec 23, 2023 · 45 comments

Comments

@BKeyport
Copy link
Contributor

BKeyport commented Dec 23, 2023

In researching for documentation purposes I've been finding all sorts of issues using the environment variables to multi-screen. I'm using bookworm, wayland turned off.

  1. using MM_CONFIG_FILE produces weird results:
    A) the following config options are ignored: port, electronOptions, address (see next)
    B) It'll set up the address on [::1]:8080 by default, rather than whatever address is commanded to do. I don't use IPV6 due to ISP non-support, so that puts it unavailable.
    C) Due to this, was unable to test if ipWhitelist functions, but all other seems to function.

  2. using MM_PORT does move the port to the correct port, but still leaves it on address [::1]

relevant config2.js portion

var config = {
	address: "0.0.0.0",
	port: 8081, 
	ipWhitelist: [], 
	language: "en",
	timeFormat: 12,
	units: "imperial",
	//logLevel: ["INFO", "LOG", "WARN", "ERROR", "DEBUG"],
	modules: [

bash script launch (mm2.sh):

cd /home/bkey1970/MagicMirror
export MM_CONFIG_FILE=${pwd}/config/config2.js
export MM_PORT=8081
npm start

Currently, system is designed to have the "2" launch show up on screen 1, and the non-redirected go to screen 2 to work around bugs partially. If possible to fix bugs, I would then revert back to using 1 for screen 1, 2 for screen 2.

root@officemirror:/home/bkey1970/PrivateBackup# ss -ltn
State       Recv-Q      Send-Q            Local Address:Port             Peer Address:Port      Process
LISTEN      0           128                   127.0.0.1:631                   0.0.0.0:*
LISTEN      0           50                      0.0.0.0:139                   0.0.0.0:*
LISTEN      0           128                     0.0.0.0:22                    0.0.0.0:*
LISTEN      0           50                      0.0.0.0:445                   0.0.0.0:*
LISTEN      0           511                     0.0.0.0:8080                  0.0.0.0:*
LISTEN      0           5                       0.0.0.0:5900                  0.0.0.0:*
LISTEN      0           128                       [::1]:631                      [::]:*
LISTEN      0           50                         [::]:139                      [::]:*
LISTEN      0           128                        [::]:22                       [::]:*
LISTEN      0           50                         [::]:445                      [::]:*
LISTEN      0           511                       [::1]:8081                     [::]:*
LISTEN      0           5                          [::]:5900                     [::]:*
@sdetweil
Copy link
Collaborator

can you try using all the variables from the sample config. I think some of them are required now.

::1 is localhost on ipv6
127.0.0.1 on ipv4

is your pi on an ipv6 network?

do

ip addr

from the command line

@khassel
Copy link
Collaborator

khassel commented Dec 23, 2023

I have no problems to set up 2 mm instances with a single-screen setup:

20231223_15h17m35s_grim

@BKeyport
Copy link
Contributor Author

Kassel: The problem is mostly a "technical" issue. Basically, you have to set up the 2nd monitor with the default config file (config.js) the way it's working for me.

2nd monitor/instance uses config.js & mm.sh
1st monitor/instance uses config2.js & mm2.sh
The only difference in calling the mirror is the setting of the environment variable to call the correct config.

It shouldn't matter which uses which, but the bugs above prevent it being done any other way.

@BKeyport
Copy link
Contributor Author

BKeyport commented Dec 24, 2023

Sam:

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether dc:a6:32:60:0e:4e brd ff:ff:ff:ff:ff:ff
inet 192.168.0.41/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0
valid_lft 118019sec preferred_lft 118019sec
inet6 fdeb:4b54:c1c1:244a:7b54:6243:c148:6c1c/64 scope global dynamic noprefixroute
valid_lft 1774sec preferred_lft 1774sec
inet6 fe80::fd5a:3039:8824:6bd7/64 scope link noprefixroute
valid_lft forever preferred_lft forever

Am I getting an IPv6 now? That would be new. I've not got anything setup for it in my router or anything - there's no instructions to do so by my ISP, and I believe it's actually set to disabled.

@sdetweil
Copy link
Collaborator

sdetweil commented Dec 24, 2023

you got an inet6 address ipv6

that comes from your dhcp server/router
it doesn't appear on the internet, just your local lan. the isp doesn't know

so its not turned off at the router or the machine.

@BKeyport
Copy link
Contributor Author

Interesting. I'll have to look into it, I didn't think my router's DHCP was issuing IPV6.. But, really, that's a side quest to the problem at hand - if I set the address to 0.0.0.0, MagicMirror should be listening on 0.0.0.0:port no?

root@officemirror:/home/bkey1970/PrivateBackup# ss -ltn
State       Recv-Q      Send-Q            Local Address:Port             Peer Address:Port      Process
LISTEN      0           511                     0.0.0.0:8080                  0.0.0.0:* (config.js launched Mirror instance, no environment vars set) 
LISTEN      0           511                       [::1]:8081                     [::]:* (config2.js launched Mirror instance, enviroment vars set) 

@sdetweil
Copy link
Collaborator

0.0.0.0 means listen on all interfaces, without specifying what they are. so maybe
it's got both v4 and v6 at the same time

@BKeyport
Copy link
Contributor Author

Look at the initial post - the ss command is indicating that the first mirror is listening on 0.0.0.0:8080, the 2nd is only on [::1]:8081. Nothing else has ports 8080/8081 open.

@khassel
Copy link
Collaborator

khassel commented Dec 24, 2023

Kassel: The problem is mostly a "technical" issue. Basically, you have to set up the 2nd monitor with the default config file (config.js) the way it's working for me.

2nd monitor/instance uses config.js & mm.sh
1st monitor/instance uses config2.js & mm2.sh

I used a similar setup but without a second monitor and startet

npm start with config.js and MM_CONFIG_FILE=config/config2.js npm start and as you can see in my screenshot the ss command have both with 0.0.0.0:808x

As already mentioned by Sam the ip6 address [::1]:8081 seems to be the problem. For testing you could disable ip6 on your pi as e.g. described here

@sdetweil
Copy link
Collaborator

they both cannot be using the same port

@BKeyport
Copy link
Contributor Author

BKeyport commented Dec 24, 2023

OK - to make it clear - Both mirrors run - even if on the same port, so the 2nd mirror isn't opening up on top of the first.

Once I disabled IPV6 using the method metioned above, I get this:

0|MM1    | [24.12.2023 14:01.14.090] [WARN]  You're using a full whitelist configuration to allow for all IPs
0|MM1    | [24.12.2023 14:01.14.108] [ERROR] Whoops! There was an uncaught exception...
0|MM1    | [24.12.2023 14:01.14.113] [ERROR] Error: listen EADDRINUSE: address already in use 0.0.0.0:8080
0|MM1    |     at Server.setupListenHandle [as _listen2] (node:net:1740:16)
0|MM1    |     at listenInCluster (node:net:1788:12)
0|MM1    |     at doListen (node:net:1937:7)
0|MM1    |     at process.processTicksAndRejections (node:internal/process/task_queues:83:21) {
0|MM1    |   code: 'EADDRINUSE',
0|MM1    |   errno: -98,
0|MM1    |   syscall: 'listen',
0|MM1    |   address: '0.0.0.0',
0|MM1    |   port: 8080

Note my launching method is

cd /home/bkey1970/MagicMirror
export MM_CONFIG_FILE=${pwd}/config/config2.js
export MM_PORT 8081
npm start
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether dc:a6:32:60:0e:4d brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:60:0e:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.41/24 brd 192.168.0.255 scope global dynamic noprefixroute wlan0
       valid_lft 171612sec preferred_lft 171612sec

If I'm reading into this correctly, it's trying to open @ port 0.0.0.0:8080 then jumping to [::1]:8081? -- effectively reading the MM_PORT environment variable AFTER attempting to open up? Still points back to ignoring many or all of the address setting items in config2.js

Oh, and by the way, Sam - the IPV6 address I was getting was an auto assigned local unicast address. From what I read up on it, it's some form of a local interface only.

@khassel
Copy link
Collaborator

khassel commented Dec 24, 2023

export MM_CONFIG_FILE=${pwd}/config/config2.js
export MM_PORT 8081
npm start

doing the same from mm folder after npm start for the first mirror start and this all works on my side ...

@BKeyport
Copy link
Contributor Author

define "works" -- is it not ignoring the above config items on your end, or are you getting dual mirrors and not testing further? Why I noticed it is because I want to have both mirrors available on my network for remote access as well as local display. Currently, I can't access the one using the env variable.

@khassel
Copy link
Collaborator

khassel commented Dec 24, 2023

define "works" -- is it not ignoring the above config items on your end

yes the config vars are working on my side (see Picture in my post above), both mm starts on the pi screen and because of ipWhitelist: [], in both configs they are both reachable over 192.168.0.39:8080 and 192.168.0.39:8081 from outside

@BKeyport
Copy link
Contributor Author

OK - upon further testing, anytime I set the MM_CONFIG_FILE variable, it'll ignore the address and port, and default back to 127.0.0.1:8080 if IPV6 isn't available, if it is, it'll set [::1]:8080 - I can force it to another port with MM_PORT - on the same rules as above. This will happen for both my first and second instance. I'm lost as to why it's working for you.

It will also ignore the electronOptions setting in the config. As I don't know where or how the environment variables are implemented, I have no idea how to look farther. I'm using the quarterly release - are you using the develop branch - I did mention earlier that ignoring the electronOptions was occuring, but we thought we had it fixed with a different EXPORT line.

@khassel
Copy link
Collaborator

khassel commented Dec 24, 2023

I'm using latest develop branch and electronOptions are working, I used them not to start fullscreen and to move the second mirror to the right

@sdetweil
Copy link
Collaborator

@BKeyport what folder are you in when you do the exports?

the pwd part was just a shortcut to the current folder pathname.. (pwd means print working directory) you said it needed braces but should be parens when used in a bash script

if u echo the env var
echo $MM_CONFIG_FILE
you should see the whole correct path

@BKeyport
Copy link
Contributor Author

BKeyport commented Dec 25, 2023

OK, Sam, I've gone to a direct link for everything - get bad config screen now
image

bkey1970@officemirror:~/MagicMirror $ export MM_CONFIG_FILE=/home/bkey1970/MagicMirror/config/config2.js
bkey1970@officemirror:~/MagicMirror $ echo $MM_CONFIG_FILE
/home/bkey1970/MagicMirror/config/config2.js
bkey1970@officemirror:~/MagicMirror $ npm run config:check

> [email protected] config:check
> node js/check_config.js

[24.12.2023 16:23.55.191] [INFO]  Checking file...  /home/bkey1970/MagicMirror/config/config2.js
[24.12.2023 16:23.55.301] [INFO]  Your configuration file doesn't contain syntax errors :)
cd /home/bkey1970/MagicMirror
export MM_CONFIG_FILE=/home/bkey1970/MagicMirror/config/config2.js
# export MM_PORT=8081
export ELECTRON_DISABLE_GPU=1
DISPLAY=:0 npm start
/* Magic Mirror Config by Brendan Keyport. */
var config = {
	address: "0.0.0.0",
	port: 8081, 
	ipWhitelist: [], 
	language: "en",
	timeFormat: 12,
	units: "imperial",
	//logLevel: ["INFO", "LOG", "WARN", "ERROR", "DEBUG"],
	modules: [
{
  module: "MMM-EmbedURL",
  position: "top_left",
  config: {
    updateInterval: 600000,
    animationSpeed: 0, 
    attributes: [
        "frameborder=0",
    ],
    embed: [
        "http://192.168.0.7/picture/1/frame/"
    ]
  },
},
{
  module: "MMM-EmbedURL",
  position: "top_right",
  config: {
    updateInterval: 0,
    animationSpeed: 0, 
    attributes: [
        "frameborder=0",
    ],
    embed: [
        "http://192.168.0.7/picture/2/frame/"
    ]
  },
},
{
  module: "MMM-EmbedURL",
  position: "bottom_left",
  config: {
    updateInterval: 0,
    animationSpeed: 0, 
    attributes: [
        "frameborder=0",
    ],
    embed: [
        "http://192.168.0.7/static/img/no-camera.svg"
    ]
  },
},
{
  module: "MMM-EmbedURL",
  position: "bottom_right",
  config: {
    updateInterval: 0,
    animationSpeed: 0, 
    attributes: [
        "frameborder=0",
    ],
    embed: [
        "http://192.168.0.7/static/img/no-camera.svg"
    ]
  },
},

		/*************** DO NOT EDIT BELOW ***************/
	]
};

if (typeof module !== "undefined") {
	module.exports = config;
}
PM2      | App [MM2:1] starting in -fork mode-
PM2      | App [MM2:1] online
1|MM2    | > [email protected] start
1|MM2    | > DISPLAY="${DISPLAY:=:0}" ./node_modules/.bin/electron js/electron.js
1|MM2    | [24.12.2023 19:59.31.530] [LOG]   Starting MagicMirror: v2.26.0-develop
1|MM2    | [24.12.2023 19:59.31.547] [LOG]   Loading config ...
1|MM2    | [24.12.2023 19:59.31.551] [DEBUG] config template file not exists, no envsubst
1|MM2    | [24.12.2023 19:59.31.556] [LOG]   Loading module helpers ...
1|MM2    | [24.12.2023 19:59.31.564] [LOG]   Initializing new module helper ...
1|MM2    | [24.12.2023 19:59.31.565] [LOG]   Module helper loaded: MMM-EmbedURL
1|MM2    | [24.12.2023 19:59.31.566] [LOG]   All module helpers loaded.
1|MM2    | [24.12.2023 19:59.31.577] [LOG]   Starting server on port 8081 ...
1|MM2    | [24.12.2023 19:59.31.583] [WARN]  You're using a full whitelist configuration to allow for all IPs
1|MM2    | [24.12.2023 19:59.31.622] [LOG]   Server started ...
1|MM2    | [24.12.2023 19:59.31.624] [LOG]   Connecting socket for: MMM-EmbedURL
1|MM2    | [24.12.2023 19:59.31.625] [LOG]   Sockets connected & modules started ...
1|MM2    | [24.12.2023 19:59.31.879] [LOG]   Launching application.
1|MM2    | [61455:1224/195932.611947:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.612446:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.612817:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.613142:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.613477:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.613806:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.614129:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.618295:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.618705:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.620221:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.620733:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.621202:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.622185:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)
1|MM2    | [61455:1224/195932.624590:ERROR:gbm_wrapper.cc(253)] Failed to export buffer to dma_buf: No such file or directory (2)

Edited to trim out excessive log material - only error is happening on MM2.

@BKeyport
Copy link
Contributor Author

bkey1970@officemirror:~ $ sudo ss -ltn
State                  Recv-Q                 Send-Q                                  Local Address:Port                                   Peer Address:Port                 Process
LISTEN                 0                      511                                           0.0.0.0:8081                                        0.0.0.0:*
LISTEN                 0                      511                                           0.0.0.0:8080                                        

@sdetweil
Copy link
Collaborator

well, the code in electron.js doesn't use the MM_PORT env variable, only the one from the config file.

 mainWindow.loadURL(`${prefix}${address}:${config.port}`);

the env variable is saved in app.js, but never referenced..

@BKeyport
Copy link
Contributor Author

to me, there's clearly a processing issue with the MM_CONFIG_FILE set. It's ignoring parts of the file set within each and every time.

as for MM_PORT - you'll notice I have it commented out above - it's reading it from the config file. That was from an earlier test trying to get it accessible from other machines.

@BKeyport
Copy link
Contributor Author

BTW, Merry Bah Humbug to you both.

@sdetweil
Copy link
Collaborator

lol.nah, its just stuff. had a great time w young grandkids this morning. my 3d printing of pi5 case is going along.

@rejas
Copy link
Collaborator

rejas commented Dec 26, 2023

totally unrelated question: what 3d printer modell do you have?

@sdetweil
Copy link
Collaborator

I have an Ender 3 V2. I picked it up used earlier this year for another project. I use Octoprint on a pi02w to manage the print

@khassel
Copy link
Collaborator

khassel commented Dec 26, 2023

as for MM_PORT - you'll notice I have it commented out above - it's reading it from the config file.

can you test my PR ? For Sam it did not work but in my tests it did ... thanks!

@BKeyport
Copy link
Contributor Author

MM_PORT actually did work for me prior. I don't understand what I'm supposed to test here. I'd prefer to not use it at all, and actually have the config2.js read correctly. 😉

@sdetweil
Copy link
Collaborator

get the develop branch
see https://forum.magicmirror.builders/topic/14327/testing-new-fixes-or-solving-current-problems-with-next-release-code

and test the MM_CONFIG_FILE env var

@BKeyport
Copy link
Contributor Author

I know how to do it, I just don't know why, sam. That particular bug didn't exist for me.

@BKeyport
Copy link
Contributor Author

or, are you saying MM_CONFIG_FILE has been updated too?

@BKeyport
Copy link
Contributor Author

BKeyport commented Dec 27, 2023

So, here's where I'm at: Using develop branch for all tests for consistency.

cd /home/bkey1970/MagicMirror
# works - comes up on [::1]:8080 - ignores address, port, electronOptions. 
export MM_CONFIG_FILE=${pwd}/config/config2.js

# Fails to error screen - but 0.0.0.0:8081 - ignores modules in config2.js 
# export MM_CONFIG_FILE=$(pwd)/config/config2.js
# export MM_CONFIG_FILE=/home/bkey1970/MagicMirror/config/config2.js

# works with working config above. moves device to [::1]:8081
# export MM_PORT=8081

export ELECTRON_DISABLE_GPU=1
DISPLAY=:0 npm start

Next move?

@sdetweil
Copy link
Collaborator

after you do
export MM_CONFIG_FILE=${pwd}/config/config2.js

can you do
echo $MM_CONFIG_FILE

are you doing this in batch file.sh) or from command line?

@BKeyport
Copy link
Contributor Author

BKeyport commented Dec 27, 2023

I'm doing both as needed to see results. Command line test:

bkey1970@officemirror:~/MagicMirror $ export MM_CONFIG_FILE=${pwd}/config/config2.js
bkey1970@officemirror:~/MagicMirror $ echo $MM_CONFIG_FILE
/config/config2.js

OK - that's interesting, new testing results:

cd /home/bkey1970/MagicMirror
# works - comes up on [::1]:8080 - ignores address, port, electronoptions
export MM_CONFIG_FILE=${pwd}/config/config2.js

# Fails to error screen - but 0.0.0.0:8081 - still ignores electronOptions
# export MM_CONFIG_FILE=$(pwd)/config/config2.js
# export MM_CONFIG_FILE=/home/bkey1970/MagicMirror/config/config2.js

# works completely as far as testing?!?!
export MM_CONFIG_FILE=config/config2.js

# works with working config above. moves device to [::1]:8081
# export MM_PORT=8081

export ELECTRON_DISABLE_GPU=1
DISPLAY=:0 npm start

@sdetweil
Copy link
Collaborator

${pwd} is wrong ( braces)

do $(pwd) (parens)

@BKeyport
Copy link
Contributor Author

BKeyport commented Dec 27, 2023

see my notes - (pwd) fails to error screen, but loads the address/port from the config.

bkey1970@officemirror:~/PrivateBackup $ export MM_CONFIG_FILE=$(pwd)/config/config2.js
bkey1970@officemirror:~/PrivateBackup $ echo $MM_CONFIG_FILE
/home/bkey1970/PrivateBackup/config/config2.js

We're running in circles - the issue seems to come down to config file is being partially read unless you strip off the leading parts of the path config/config2.js is working completely, nothing is being ignored from what I'm seeing - which is boggling my mind, why would the path affect how the config file is read, if it's there, it's there.

@sdetweil
Copy link
Collaborator

cool.. so it's this line of code in app.js

const configFilename = path.resolve(global.configuration_file || `${global.root_path}/config/config.js`);

@sdetweil
Copy link
Collaborator

so,maybe the MM_CONFIG_FILE must be someplace in the MagicMirror folder tree
and you only specify the path from there.

I debugged this tho a couple weeks ago and it returned the full path when it was specified, and read the correct file.

@khassel
Copy link
Collaborator

khassel commented Dec 27, 2023

get the develop branch

the patch is not merged yet so not on develop ...

@khassel
Copy link
Collaborator

khassel commented Dec 27, 2023

config/config2.js is working completely

o.k., this explains why my tests were working because I always used MM_CONFIG_FILE=config/config2.js (without pwd)

const configFilename = path.resolve(global.configuration_file || ${global.root_path}/config/config.js);

I thought it was a requirement that config.js must be located underneath the mm folder

@BKeyport
Copy link
Contributor Author

Even if it's a requirement, /home//MagicMirror/config/config.js should equal config/config.js if started in the MagicMirror directory, no?

@khassel
Copy link
Collaborator

khassel commented Dec 27, 2023

yes, will look into this later if there is a simple fix

@BKeyport
Copy link
Contributor Author

I know we're coming up on the next quarterly, so low priority. Was able to get things working properly with the shortened variable - so, that's a documented work around until such time as it's fixed..

rejas pushed a commit that referenced this issue Dec 28, 2023
related to #3302

- fix MM_PORT variable not used in electron
- fix to allow full path for MM_CONFIG_FILE variable
@BKeyport
Copy link
Contributor Author

noticed a doc suggestion in #3304 so I've updated my suggested docs to cover said suggestion.

MichMich added a commit that referenced this issue Jan 1, 2024
## [2.26.0] - 01-01-2024

Thanks to: @bnitkin, @bugsounet, @dependabot, @jkriegshauser,
@kaennchenstruggle, @KristjanESPERANTO and @Ybbet.

Special thanks to @khassel, @rejas and @sdetweil for taking over most
(if not all) of the work on this release as project collaborators. This
version would not be there without their effort. Thank you guys! You are
awesome!

This release also marks the latest release by Michael Teeuw. For more
info, please read the following post: [A New Chapter for MagicMirror:
The Community Takes the
Lead](https://forum.magicmirror.builders/topic/18329/a-new-chapter-for-magicmirror-the-community-takes-the-lead).

### Added

- Added update notification updater (for 3rd party modules)
- Added node 21 to the test matrix
- Added transform object to calendar:customEvents
- Added ESLint rules for jest (including jest/expect-expect and
jest/no-done-callback)

### Removed

- Removed Codecov workflow (not working anymore, other workflow
required) (#3107)
- Removed titleReplace from calendar, replaced + extended by
customEvents (backward compatibility included) (#3249)
- Removed failing unit test (#3254)
- Removed some unused variables

### Updated

- Update electron to v27 and update other dependencies as well as github
actions
- Update newsfeed: Use `html-to-text` instead of regex for transform
description
- Review ESLint config (#3269)
- Updated dependencies
- Clock module: optionally display current moon phase in addition to
rise/set times
- electron is now per default started without gpu, if needed it must be
enabled with new env var `ELECTRON_ENABLE_GPU=1` on startup (#3226)
- Replace prettier by stylistic in ESLint config to lint JavaScript (and
disable some rules for `config/config.js*` files)
- Update node-ical to v0.17.1 and fix tests

### Fixed

- Avoid fade out/in on updateDom when many calendars are used
- Fix the option eventClass on customEvents.
- Fix yr API version in locationforecast and sunrise call (#3227)
- Fix cloneObject() function to respect RegExp (#3237)
- Fix newsfeed module for feeds using "a10:updated" tag (#3238)
- Fix issue template (#3167)
- Fix #3256 filter out bad results from rrule.between
- Fix calendar events sometimes not respecting deleted events (#3250)
- Fix electron loadurl locally on Windows when address "0.0.0.0" (#2550)
- Fix updatanotification (update_helper.js): catch error if reponse is
not an JSON format (check PM2)
- Fix missing typeof in calendar module
- Fix style issues after prettier update
- Fix calendar test (#3291) by moving "Exdate check" from e2e to
electron to run on a Thursday
- Fix calendar config params `fetchInterval` and `excludedEvents` were
never used from single calendar config (#3297)
- Fix MM_PORT variable not used in electron and allow full path for
MM_CONFIG_FILE variable (#3302)

---------

Signed-off-by: naveen <[email protected]>
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Karsten Hassel <[email protected]>
Co-authored-by: Malte Hallström <[email protected]>
Co-authored-by: Veeck <[email protected]>
Co-authored-by: veeck <[email protected]>
Co-authored-by: dWoolridge <[email protected]>
Co-authored-by: Johan <[email protected]>
Co-authored-by: Dario Mratovich <[email protected]>
Co-authored-by: Dario Mratovich <[email protected]>
Co-authored-by: Magnus <[email protected]>
Co-authored-by: Naveen <[email protected]>
Co-authored-by: buxxi <[email protected]>
Co-authored-by: Thomas Hirschberger <[email protected]>
Co-authored-by: Kristjan ESPERANTO <[email protected]>
Co-authored-by: Andrés Vanegas Jiménez <[email protected]>
Co-authored-by: Dave Child <[email protected]>
Co-authored-by: grenagit <[email protected]>
Co-authored-by: Grena <[email protected]>
Co-authored-by: Magnus Marthinsen <[email protected]>
Co-authored-by: Patrick <[email protected]>
Co-authored-by: Piotr Rajnisz <[email protected]>
Co-authored-by: Suthep Yonphimai <[email protected]>
Co-authored-by: CarJem Generations (Carter Wallace) <[email protected]>
Co-authored-by: Nicholas Fogal <[email protected]>
Co-authored-by: JakeBinney <[email protected]>
Co-authored-by: OWL4C <[email protected]>
Co-authored-by: Oscar Björkman <[email protected]>
Co-authored-by: Ismar Slomic <[email protected]>
Co-authored-by: Jørgen Veum-Wahlberg <[email protected]>
Co-authored-by: Eddie Hung <[email protected]>
Co-authored-by: Bugsounet - Cédric <[email protected]>
Co-authored-by: bugsounet <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Knapoc <[email protected]>
Co-authored-by: sam detweiler <[email protected]>
Co-authored-by: veeck <[email protected]>
Co-authored-by: Paranoid93 <[email protected]>
Co-authored-by: NolanKingdon <[email protected]>
Co-authored-by: J. Kenzal Hunter <[email protected]>
Co-authored-by: Teddy <[email protected]>
Co-authored-by: TeddyStarinvest <[email protected]>
Co-authored-by: martingron <[email protected]>
Co-authored-by: dgoth <[email protected]>
Co-authored-by: kaennchenstruggle <[email protected]>
Co-authored-by: jkriegshauser <[email protected]>
Co-authored-by: Ben Nitkin <[email protected]>
@khassel
Copy link
Collaborator

khassel commented Jan 3, 2024

@BKeyport the documentation PR is on the way, can we close this here or is there still something to discuss?

@BKeyport
Copy link
Contributor Author

BKeyport commented Jan 3, 2024

Yes, let's go ahead and close, as we can soon refer people to the documentation for correct usage.

@BKeyport BKeyport closed this as completed Jan 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants