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 --force
And 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/rebuild
Next, 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 Complete
restart 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.