Read the statement by Michael Teeuw here.
Difficulty getting MMM-Transitfeed working
-
Re: MMM-transitfeed - upcoming departure board for most transit agencies
I tried to install this a while back but ran into problems. I had difficulty initially because when I tried to install it, I got a message back saying the gtfs stuff needed a newer node.js. I tried updating it and that went… badly. I managed to get things back the way they were and gave up for a bit. (Had a lot going on in my life at the time.)
I’ve decided to try again (I want to get it working for my son who goes to school/work on public transit) and this time I set up a fresh install. New Raspberry PiOS, new MM install, nothing else done. Here’s what I’ve done so far:
# Update system sudo apt update sudo apt full-upgrade # Install MagicMirror bash -c "$(curl -sL https://raw.githubusercontent.com/sdetweil/MagicMirror_scripts/master/raspberry.sh)" # update Node/NPM sudo npm install -g n sudo n lts sudo n latest sudo n prune # Install transitfeed cd ~/MagicMirror/modules git clone https://github.com/bnitkin/MMM-transitfeed.git # Install gtfs cd ~/MagicMirror # Enter magicmirror project directory npm uninstall gtfs-realtime-bindings # Now part of gtfs npm install gtfs --save-dev # Force update to latest version # Update better-sqlite3 cd ~/MagicMirror rm -r node_modules/better-sqlite3/ npm install better-sqlite3 --build-from-source --runtime=electron --target=26.4.3 --dist-url=https://electronjs.org/headers --forceAnd here’s the error I’m getting:
[2024-06-21 11:14:44.933] [ERROR] (node:53839) UnhandledPromiseRejectionWarning: Error: The module '/home/pi/MagicMirror/node_modules/better-sqlite3/build/Release/better_sqlite3.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 116. This version of Node.js requires NODE_MODULE_VERSION 121. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`). at process.func [as dlopen] (node:electron/js2c/node_init:2:2214) at Module._extensions..node (node:internal/modules/cjs/loader:1343:18) at Object.func [as .node] (node:electron/js2c/node_init:2:2214) at Module.load (node:internal/modules/cjs/loader:1098:32) at Module._load (node:internal/modules/cjs/loader:945:12) at c._load (node:electron/js2c/node_init:2:13672) at Module.require (node:internal/modules/cjs/loader:1122:19) at require (node:internal/modules/helpers:130:18) at bindings (/home/pi/MagicMirror/node_modules/bindings/bindings.js:112:48) at new Database (/home/pi/MagicMirror/node_modules/better-sqlite3/lib/database.js:48:64) at setupDb (file:///home/pi/MagicMirror/node_modules/gtfs/lib/db.js:10:14) at openDb (file:///home/pi/MagicMirror/node_modules/gtfs/lib/db.js:31:12) at Module.importGtfs (file:///home/pi/MagicMirror/node_modules/gtfs/lib/import.js:676:16) at Class.startup (/home/pi/MagicMirror/modules/MMM-transitfeed/node_helper.js:48:29) at async Class.socketNotificationReceived (/home/pi/MagicMirror/modules/MMM-transitfeed/node_helper.js:33:52) (Use `electron --trace-warnings ...` to show where the warning was created) [2024-06-21 11:14:44.934] [ERROR] (node:53839) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 8)It seems like I need an even newer version of better_sqlite3? Or maybe an older version of node.js?
-
How to get MMM-transitfeed working on a new installation of MagicMirror (based on @sdetweil’s assistance)
These are the steps I went through to get the module working after encountering version mismatch errors:
Note that I was starting with a clean install of Raspberry PiOS. I made no changes prior to the steps outlined below:
First, I installed MagicMirror using Sam Detweil’s script:
bash -c "$(curl -sL https://raw.githubusercontent.com/sdetweil/MagicMirror_scripts/master/raspberry.sh)"Next, I installed the transitfeed module:
{ cd ~/MagicMirror/modules git clone https://github.com/bnitkin/MMM-transitfeed.git }Then this reset the libraries:
{ cd ~/MagicMirror rm -rf node_modules git checkout package.json git checkout package-lock.json npm run install-mm }I installed the electron rebuild package:
npm install @electron/rebuildNext, I reset the module info:
{ cd ~/MagicMirror/modules/MMM-transitfeed rm -rf node_modules git checkout package.json git checkout package-lock.json npm install }At this point, I installed gtfs:
{ cd ~/MagicMirror/modules/MMM-transitfeed npm install gtfs }And lastly, I rebuilt sqlite3:
{ cd ~/MagicMirror/modules/MMM-transitfeed ../../node_modules/.bin/electron-rebuild }Here I added the default config from the module’s github page to my config.js and started the mirror. It worked!
Many thanks to Sam for his patience, knowledge, and caring assistance.
-
@UncleRoger run npm rebuild in the module folder
this module has a binary that has to match the electron version.
the distributed version does not. -
@UncleRoger or
better
cd ~/MagicMirror
npm install @electron/rebuild
cd modules/MMM-Transitfeed
…/…/node_modules/.bin/electron-rebuild
cd ~/MagicMirrorand restart MagicMirror however you do that -
I gave that a bash and am still getting the same error. I even wiped the system and started from scratch just in case I’d done something to make things worse.
-
@UncleRoger hm… I installed, did the npm install gtfs
ran, failed as version mismatch
I then did the../../node_modules/.bin/electron-rebuild ✔ Rebuild Completerestart mm and no problems, using the default config

-
I appreciate the help, as always… I wiped the system again, reinstalled the OS and MM, did the rebuild. Still the same error except the version numbers are different:
[2024-06-21 15:30:32.001] [ERROR] (node:53456) UnhandledPromiseRejectionWarning: Error: The module '/home/pi/MagicMirror/node_modules/better-sqlite3/build/Release/better_sqlite3.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 127. This version of Node.js requires NODE_MODULE_VERSION 121. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`).I should mention that this is on a Pi4 (probably 2gb) with no other modules installed.
Maybe it’s just not meant to be.
-
@UncleRoger what folder are you in when you do the electron-rebuild?
-
The MMM-transitfeed module directory:
{ cd ~/MagicMirror npm install @electron/rebuild cd ~/MagicMirror/modules/MMM-transitfeed ../../node_modules/.bin/electron-rebuild cd ~/MagicMirror }I basically copy-and-pasted that.
-
@UncleRoger and when the electron-rebuild ran it should have said
something about sqllite
and rebuild complete, like mine above -
Nothing about sqlite but it did say “Rebuild Complete”:
pi@MagicMirrorDev:~/MagicMirror $ { cd ~/MagicMirror npm install @electron/rebuild cd ~/MagicMirror/modules/MMM-transitfeed ../../node_modules/.bin/electron-rebuild cd ~/MagicMirror } added 81 packages in 11s 253 packages are looking for funding run `npm fund` for details ✔ Rebuild Complete pi@MagicMirrorDev:~/MagicMirror $This time around, I didn’t do the sqlite update:
{ cd ~/MagicMirror rm -r node_modules/better-sqlite3/ npm install better-sqlite3 --build-from-source --runtime=electron --target=26.4.3 --dist-url=https://electronjs.org/headers --force }But I don’t think it worked any better when I did. I’ll try that and then do the rebuild.
-
@UncleRoger don’t install sql again, else you have to rebuild again
-
Oops. I did the rebuild again. Still doesn’t say anything about the sqlite3 but it does say rebuild complete.
Thanks
-
@UncleRoger and? does it run.
-
Sadly, no. Same error.
-
Could it be hardware related? I’m not sure I have another Pi4 I can test with but I’ve got a Pi Zero 2 I could try. Would that be of any use?
-
@UncleRoger its not hardware, but another try wouldn’t hurt
-
There is no joy in mudville.
Here’s what I did with a fresh install of PiOS (Raspberry Pi 4 2gb):
pi@MagicMirrorDev:~/MagicMirror $ history 1 { sudo apt update; sudo apt full-upgrade; } 2 bash -c "$(curl -sL https://raw.githubusercontent.com/sdetweil/MagicMirror_scripts/master/raspberry.sh)" 3 sudo nmtui 4 sudo shutdown -r now 5 sudo nmtui 6 sudu shutdown -r now 7 sudo shutdown -r now 8 { cd ~/MagicMirror/modules; git clone https://github.com/bnitkin/MMM-transitfeed.git; } 9 cd .. 10 { cd ~/MagicMirror # Enter magicmirror project directory npm uninstall gtfs-realtime-bindings # Now part of gtfs npm install gtfs --save-dev # Force update to latest version } 11 { cd ~/MagicMirror # Enter magicmirror project directory npm uninstall gtfs-realtime-bindings # Now part of gtfs npm install gtfs --save-dev # Force update to latest version } 12 { sudo npm install -g n; sudo n lts; sudo n latest; sudo n prune; } 13 { cd ~/MagicMirror # Enter magicmirror project directory npm uninstall gtfs-realtime-bindings # Now part of gtfs npm install gtfs --save-dev # Force update to latest version } 14 cd $HOME/MagicMirror; 15 DISPLAY=:0 npm start 16 npm run config:check 17 DISPLAY=:0 npm start 18 npm run config:check 19 DISPLAY=:0 npm start 20 npm run config:check 21 DISPLAY=:0 npm start 22 { cd ~/MagicMirror; rm -r node_modules/better-sqlite3/; npm install better-sqlite3 --build-from-source --runtime=electron --target=26.4.3 --dist-url=https://electronjs.org/headers --force; } 23 { cd ~/MagicMirror; npm install @electron/rebuild; } 24 { cd ~/MagicMirror/modules/MMM-transitfeed; ../../node_modules/.bin/electron-rebuild; cd ~/MagicMirror; } 25 DISPLAY=:0 npm start 26 history pi@MagicMirrorDev:~/MagicMirror $The nmtui stuff is to set the IP address (which I did wrong a couple of times) and then I mucked up the config.js putting in the transitfeed module stuff.
Here’s the log from trying to run it at the end (it’s basically the same):
[2024-06-25 11:53:08.617] [LOG] MMM-transitfeed: Importing with [object Object] [2024-06-25 11:53:08.649] [ERROR] (node:3464) UnhandledPromiseRejectionWarning: Error: The module '/home/pi/MagicMirror/node_modules/better-sqlite3/build/Release/better_sqlite3.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 116. This version of Node.js requires NODE_MODULE_VERSION 121. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`). at process.func [as dlopen] (node:electron/js2c/node_init:2:2214) at Module._extensions..node (node:internal/modules/cjs/loader:1343:18) at Object.func [as .node] (node:electron/js2c/node_init:2:2214) at Module.load (node:internal/modules/cjs/loader:1098:32) at Module._load (node:internal/modules/cjs/loader:945:12) at c._load (node:electron/js2c/node_init:2:13672) at Module.require (node:internal/modules/cjs/loader:1122:19) at require (node:internal/modules/helpers:130:18) at bindings (/home/pi/MagicMirror/node_modules/bindings/bindings.js:112:48) at new Database (/home/pi/MagicMirror/node_modules/better-sqlite3/lib/database.js:48:64) at setupDb (file:///home/pi/MagicMirror/node_modules/gtfs/lib/db.js:10:14) at openDb (file:///home/pi/MagicMirror/node_modules/gtfs/lib/db.js:31:12) at Module.importGtfs (file:///home/pi/MagicMirror/node_modules/gtfs/lib/import.js:676:16) at Class.startup (/home/pi/MagicMirror/modules/MMM-transitfeed/node_helper.js:48:29) at async Class.socketNotificationReceived (/home/pi/MagicMirror/modules/MMM-transitfeed/node_helper.js:33:52) (Use `electron --trace-warnings ...` to show where the warning was created) [2024-06-25 11:53:08.650] [ERROR] (node:3464) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 8)I’m thinking I might give it another go from scratch without worrying about the IP address and catching all the output from each command.
-
Could you check that I’m doing things correctly? These are the commands I’m using to get from a fresh OS to MM with transitfeed:
# Update system { sudo apt update sudo apt full-upgrade } # Install MagicMirror bash -c "$(curl -sL https://raw.githubusercontent.com/sdetweil/MagicMirror_scripts/master/raspberry.sh)" # NOTICE ON INSTALL: npm install -g npm@10.8.1 # update Node/NPM { sudo npm install -g n sudo n lts sudo n latest sudo n prune } # Install transitfeed { cd ~/MagicMirror/modules git clone https://github.com/bnitkin/MMM-transitfeed.git } # Install gtfs { cd ~/MagicMirror # Enter magicmirror project directory npm uninstall gtfs-realtime-bindings # Now part of gtfs npm install gtfs --save-dev # Force update to latest version } # Update better-sqlite3 { cd ~/MagicMirror rm -r node_modules/better-sqlite3/ npm install better-sqlite3 --build-from-source --runtime=electron --target=26.4.3 --dist-url=https://electronjs.org/headers --force } # Rebuild Electron? { cd ~/MagicMirror npm install @electron/rebuild cd ~/MagicMirror/modules/MMM-transitfeed ../../node_modules/.bin/electron-rebuild cd ~/MagicMirror }Thanks so much for your help!
-
@UncleRoger ok, simpler
flash sd card with
use my script to install MM (do nothing before, it does the update and adds whats needed for MM)
npm start to prove MagicMirror is working
clone the modulecd to the module folder and do the npm install and npm install gtfs (in module folder NOT MM folder!!)
npm install gtfs --save-devnow, need electron rebuild
cd …/… # magicmirror folder
npm install @electron/rebuild
cd - # go back to module folder
…/…/node_modules/.bin/electron-rebuild
wait, should show sqlite
rebuild complete
cd - # back to MM folderadd the config entry for the module
npm startshould work
-
When you say “module folder”, you mean (in this case) ~/MagicMirror/modules/MMM-transitfeed not ~/MagicMirror/modules/ right? I’m pretty sure, but better safe than sorry.
Thanks!
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