Achronite / mqtt-energenie-ener314rt

MQTT interface for Energenie ENER314-RT add-on board for the Raspberry Pi, designed for use by Home Assistant.
MIT License
13 stars 5 forks source link

ener314rt: can't open /dev/gpiomem or /dev/mem #59

Closed genestealer closed 10 months ago

genestealer commented 10 months ago

Im getting ener314rt: can't open /dev/gpiomem or /dev/mem errors and mqtt-energenie WARN energenie failed to initialise ENER314-RT, err=-6, EMULATOR mode >

I have checked and SPI is enabled. I'm not sure if your have seen anything like this before? I did update the firmware on the Pi4 the other say and only just noticed its not working anymore. May be unrelated.

I have another ENER314-RT on order, to rule out a hardware issue.

image

genestealer commented 10 months ago

Apologies, I should have also added that I noticed that neither LED on the transceiver board are illuminated. I cannot remember if it is normal for at least the power LED to be on as soon as the Pi powers up, without any interaction from the SPI signal.

genestealer commented 10 months ago

Verbos output log:


-- Journal begins at Sun 2023-09-24 10:07:54 BST, ends at Sun 2023-12-03 02:18:27 GMT. --
Dec 03 02:17:16 raspberrypi node[2652]: mqtt-energenie ERR! energenie signal handler not initialised, signal "SIGTERM", exiti>
Dec 03 02:17:16 raspberrypi systemd[1]: Stopping Energenie ener314rt MQTT client...
Dec 03 02:17:16 raspberrypi systemd[1]: mqtt-energenie-ener314rt.service: Succeeded.
Dec 03 02:17:16 raspberrypi systemd[1]: Stopped Energenie ener314rt MQTT client.
Dec 03 02:17:16 raspberrypi systemd[1]: mqtt-energenie-ener314rt.service: Consumed 1.900s CPU time.
Dec 03 02:17:16 raspberrypi systemd[1]: Started Energenie ener314rt MQTT client.
Dec 03 02:17:16 raspberrypi node[3048]: mqtt-energenie-ener314rt version 0.6.0: starting
Dec 03 02:17:17 raspberrypi node[3048]: mqtt-ener314rt info MQTT connecting to broker mqtt://192.168.10.21
Dec 03 02:17:17 raspberrypi node[3048]: mqtt-ener314rt info monitor starting monitoring of FSK devices...
Dec 03 02:17:17 raspberrypi node[3048]: mqtt-ener314rt verb MQTT connected to broker "mqtt://192.168.10.21"
Dec 03 02:17:17 raspberrypi node[3048]: mqtt-ener314rt verb MQTT config: {"username":"energenie","password":"xxxxxxxxxxxxxxxxxxxa>
Dec 03 02:17:17 raspberrypi node[3048]: mqtt-ener314rt http MQTT setting availability topic energenie/availability/state to '>
Dec 03 02:17:17 raspberrypi node[3048]: mqtt-ener314rt info discovery discovery enabled at topic prefix 'homeassistant/'
Dec 03 02:17:17 raspberrypi node[3048]: mqtt-ener314rt info MQTT subscribed to energenie/+/+/+/command
Dec 03 02:17:17 raspberrypi node[3056]: mqtt-energenie info energenie child process started
Dec 03 02:17:17 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:17:17 raspberrypi node[3056]: mqtt-energenie WARN energenie failed to initialise ENER314-RT, err=-6, EMULATOR mode >
Dec 03 02:17:17 raspberrypi node[3056]: mqtt-energenie verb energenie cmd: {"cmd":"monitor","enabled":true}
Dec 03 02:17:17 raspberrypi node[3056]: mqtt-energenie WARN energenie monitoring thread cannot be started, ENER314-RT unavail>
Dec 03 02:18:17 raspberrypi node[3048]: mqtt-ener314rt info auto calling discovery
Dec 03 02:18:17 raspberrypi node[3056]: mqtt-energenie verb energenie cmd: {"cmd":"discovery","scan":false}
Dec 03 02:18:17 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:18 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:19 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:20 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:21 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:22 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:23 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:24 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:25 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:26 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
Dec 03 02:18:27 raspberrypi node[3056]: ener314rt: can't open /dev/gpiomem or /dev/mem
genestealer commented 10 months ago

Update:

Reading your comments on issue: https://github.com/Achronite/mqtt-energenie-ener314rt/issues/27

I tried to debug the issue, which seems to be permissions related:

  1. Double checked SPI is enabled via raspi-config and rebooted.
  2. Re-added user to the gpio group: sudo usermod -a -G gpio $USER and rebooted.
  3. Re-added user dialout group sudo adduser "${USER}" dialout and rebooted.
  4. Tried stopping the service sudo systemctl stop mqtt-energenie-ener314rt and then running the app via sudo node app.js and that worked!!!

image

I have not changed anything on the Pi apart from running rpi-update which I think has changed something....

genestealer commented 10 months ago

Right, fixed it at 3am!

Ref: Access GPIO pins without root. No access to /dev/mem. Try running as root!

So it seems running sudo rpi-update broke something and running sudo chown root.gpio /dev/gpiomem sudo chmod g+rw /dev/gpiomem

This blinking fixed it!

Perhaps something for a FAQ for all your projects?

image

genestealer commented 10 months ago

Ah, if I reboot, the owner of gpiomem reverts back to "root root", but it needs to be "root gpio".

No idea why, need to look into it next week, unless you have seen anything like this before?

genestealer commented 10 months ago

Confirmed

Running rpi-update was the issue.

Fixed by running

sudo apt update; sudo apt install --reinstall raspberrypi-bootloader raspberrypi-kernel

To put it back to the latest supported kernel/bootcode.

Achronite commented 10 months ago

Looks like you had a late night! Glad you got it sorted.

I'll add something to the wiki.

Achronite commented 10 months ago

Wiki details added: https://github.com/Achronite/energenie-ener314rt/wiki/FAQ