RS485 - Serial : Could not write GPIO with index

Hallo,

Nach einem update meines Raspi habe ich den Fehler, und HM wired funktioniert entsprechend nicht mehr richtig.

Ich verwende GPIO 5 + 6 und bekome nun folgenden Fehler :

03/14/17 10:52:35.503 Info: Loading family module mod_homematicwired.so
03/14/17 10:52:35.515 /etc/homegear/families/homematicwired.conf
03/14/17 10:52:35.516 Debug: Loading section "RS485 - Serial Module"
03/14/17 10:52:35.516 Debug: id set to My-RS485
03/14/17 10:52:35.516 Debug: deviceType set to rs485
03/14/17 10:52:35.516 Debug: device set to /dev/ttyAMA0
03/14/17 10:52:35.516 Debug: responseDelay set to 13
03/14/17 10:52:35.516 Debug: oneWay set to 0
03/14/17 10:52:35.516 Debug: GPIO1 set to 6
03/14/17 10:52:35.516 Debug: enableRXValue set to 0
03/14/17 10:52:35.517 Debug: GPIO2 set to 5
03/14/17 10:52:35.517 Debug: enableTXValue set to 1
03/14/17 10:52:35.518 Module HomeMatic Wired: Debug: Loading module...
03/14/17 10:52:35.518 Module HomeMatic Wired: Debug: Creating physical device. Type defined in homematicwired.conf is: rs485
03/14/17 10:52:35.518 Warning: Running as root. The authors of Homegear recommend running Homegear as user.
03/14/17 10:52:35.518 Warning: Running as root. The authors of Homegear recommend running Homegear as user.

…

03/14/17 10:52:37.242 Debug: GPIO path for GPIO with index 1 and device rs485 set to "/sys/class/gpio/gpio6".
03/14/17 10:52:37.242 Could not write GPIO with index 1.
03/14/17 10:52:37.242 Could not write GPIO with index 1.
03/14/17 10:52:37.242 Debug: GPIO 6 set to 0.
03/14/17 10:52:37.242 Debug: GPIO path for GPIO with index 2 and device rs485 set to "/sys/class/gpio/gpio5".
03/14/17 10:52:37.243 Could not write GPIO with index 2.
03/14/17 10:52:37.243 Could not write GPIO with index 2.
03/14/17 10:52:37.243 Debug: GPIO 5 set to 1.

An dem Raspi hat es auch ein CC1101 das GPIO 23 bentzt, und da bekomme ich keinen solchen Fehler.

Ich habe es auch mit root:root probiert, elber fehler wie als user homegear …

Noch als Ergänzung :

homegear -s … macht einen coredump

# homegear -s root root
03/14/17 11:11:55.303 Debug: debugLevel set to 10
03/14/17 11:11:55.304 Debug: devLog set to 1
03/14/17 11:11:55.304 Debug: enableCoreDumps set to 1
03/14/17 11:11:55.304 Debug: setDevicePermissions set to 1
03/14/17 11:11:55.305 Debug: workingDirectory set to /var/lib/homegear/
03/14/17 11:11:55.305 Debug: socketPath set to /var/run/homegear/
03/14/17 11:11:55.305 Debug: dataPath set to /var/lib/homegear/
03/14/17 11:11:55.305 Debug: dataPathUser set to homegear
03/14/17 11:11:55.305 Debug: dataPathGroup set to homegear
03/14/17 11:11:55.305 Debug: databaseMemoryJournal set to 0
03/14/17 11:11:55.305 Debug: databaseWALJournal set to 1
03/14/17 11:11:55.305 Debug: databaseSynchronous set to 1
03/14/17 11:11:55.305 Debug: databaseMaxBackups set to 10
03/14/17 11:11:55.306 Debug: logfilePath set to /var/log/homegear/
03/14/17 11:11:55.306 Debug: enableUPnP set to 1
03/14/17 11:11:55.306 Debug: certPath set to /etc/homegear/homegear.crt
03/14/17 11:11:55.306 Debug: keyPath set to /etc/homegear/homegear.key
03/14/17 11:11:55.306 Debug: loadDHParamsFromFile set to 1
03/14/17 11:11:55.306 Debug: dhParamPath set to /etc/homegear/dh1024.pem
03/14/17 11:11:55.306 Debug: deviceDescriptionPath set to /etc/homegear/devices/
03/14/17 11:11:55.306 Debug: clientSettingsPath set to /etc/homegear/rpcclients.conf
03/14/17 11:11:55.306 Debug: serverSettingsPath set to /etc/homegear/rpcservers.conf
03/14/17 11:11:55.307 Debug: mqttSettingsPath set to /etc/homegear/mqtt.conf
03/14/17 11:11:55.307 Debug: familyConfigPath set to /etc/homegear/families/
03/14/17 11:11:55.307 Debug: phpIniPath set to /etc/homegear/php.ini
03/14/17 11:11:55.307 Debug: gpioPath set to /sys/class/gpio/
03/14/17 11:11:55.307 Debug: Added 23 to exportGpios.
03/14/17 11:11:55.307 Debug: Added 5 to exportGpios.
03/14/17 11:11:55.308 Debug: Added 6 to exportGpios.
03/14/17 11:11:55.308 Debug: scriptPath set to /var/lib/homegear/scripts/
03/14/17 11:11:55.308 Debug: scriptPathUser set to homegear
03/14/17 11:11:55.308 Debug: scriptPathGroup set to homegear
03/14/17 11:11:55.308 Debug: flowsPath set to /var/lib/homegear/flows/
03/14/17 11:11:55.308 Debug: flowNodesPath set to /var/lib/homegear/flowNodes/
03/14/17 11:11:55.308 Debug: libraryPath set to /var/lib/homegear/modules/
03/14/17 11:11:55.308 Debug: firmwarePath set to /usr/share/homegear/firmware/
03/14/17 11:11:55.309 Debug: tempPath set to /var/lib/homegear/tmp/
03/14/17 11:11:55.309 Debug: lockFilePath set to /var/run/homegear/
03/14/17 11:11:55.309 ExceptionE
03/14/17 11:11:55.309 Debug: lockFilePathUser set to homegear
03/14/17 11:11:55.309 Debug: lockFilePathGroup set to homegear
03/14/17 11:11:55.309 Debug: Added replaceClientServerAddress xmlrpc_bin://127.0.0.1:1999 xmlrpc_bin://$remoteip:1999
03/14/17 11:11:55.310 Debug: Added replaceClientServerAddress http://127.0.0.1:9292/bidcos http://$remoteip:9292/bidcos
03/14/17 11:11:55.310 Debug: prioritizeThreads set to 1
03/14/17 11:11:55.310 Debug: workerThreadWindow set to 3000
03/14/17 11:11:55.310 Debug: scriptEngineMaxThreadsPerScript set to 4
03/14/17 11:11:55.310 Debug: scriptEngineMaxScriptsPerProcess set to 50
03/14/17 11:11:55.310 Debug: scriptEngineThreadCount set to 10
03/14/17 11:11:55.310 Debug: scriptEngineServerMaxConnections set to 10
03/14/17 11:11:55.310 Debug: flowsThreadCount set to 10
03/14/17 11:11:55.310 Debug: flowsServerMaxConnections set to 20
03/14/17 11:11:55.311 Debug: maxFlowsPerProcess set to 40
03/14/17 11:11:55.311 Debug: cliServerMaxConnections set to 50
03/14/17 11:11:55.311 Debug: rpcServerMaxConnections set to 50
03/14/17 11:11:55.311 Debug: rpcServerThreadPriority set to 0
03/14/17 11:11:55.311 Debug: rpcServerThreadPolicy set to 0
03/14/17 11:11:55.311 Debug: rpcClientMaxThreads set to 50
03/14/17 11:11:55.311 Debug: rpcClientThreadPriority set to 0
03/14/17 11:11:55.311 Debug: rpcClientThreadPolicy set to 0
03/14/17 11:11:55.312 Debug: workerThreadPriority set to 0
03/14/17 11:11:55.312 Debug: workerThreadPolicy set to 0
03/14/17 11:11:55.312 Debug: physicalInterfaceThreadPriority set to 45
03/14/17 11:11:55.312 Debug: physicalInterfaceThreadPolicy set to 1
03/14/17 11:11:55.312 Debug: packetReceivedThreadPriority set to 0
03/14/17 11:11:55.312 Debug: packetReceivedThreadPolicy set to 0
03/14/17 11:11:55.312 Debug: eventThreadCount set to 5
03/14/17 11:11:55.312 Debug: eventThreadPriority set to 0
03/14/17 11:11:55.313 Debug: eventThreadPolicy set to 0
Segmentation fault (core dumped)

Homegear version 0.6.17-902

Linux zaphab 4.9.13-v7+ #974 SMP Wed Mar 1 20:09:48 GMT 2017 armv7l armv7l armv7l GNU/Linux

Zusätzliche Infos aus weiteren Experimenten an dem System :

Wenn ich die GPIO Pins 5 und 6 mittels

raspi-gpio get 5

Anschaue, stehen diese auf “INPUT”

Ich habe folgendes probiert :

raspi-gpio set 5 op dh
raspi-gpio set 6 op hd
raspi-gpio get 5
GPIO 5: level=1 fsel=1 func=OUTPUT
raspi-gpio get 6
GPIO 6: level=1 fsel=1 func=OUTPUT

Danach habe ich homegear gestartet. Es komt immer noch die Fehlermeldung. Homegear versucht lt. debug info den port 5 auf 1 und den port 6 auf 0 zu setzen.

Wenn ich aber die Ports nach dem start von homegear anschaue, sind weiterhin beide auf 1.

Update auf

Linux zaphab 4.9.14-v7+ #977 SMP Mon Mar 13 18:25:19 GMT 2017 armv7l armv7l armv7l GNU/Linux

Keine Ă„nderung, selber Fehler.

GruĂź
Robert

Hallo,

Weitere Nachforschung hat ergeben, daĂź ich auf

/sys/class/gpio/gpio5/value

Nicht schreiben kann, obwohl ich root bin !

Ich habe dann die Rechte auf “666” gestellt

chmod 666 /sys/class/gpio/gpio5/value
ll /sys/class/gpio/gpio5/value
-rw-rw-rw- 1 homegear homegear 4096 Mär 14 15:48 value

Das Selbe mit Port 6.
Danach ging es !

Als user homegear ging es nicht, weil beim start die permissions wieder auf “660” gestellt werden.

Irgendwie sieht das nach einem seltsamen verhalten aus, bei den Permissions sollte eigentlich write möglich sein, ist aber nicht.

Sieht also eher nach Linux Problem aus, udev oder irgendwas ?

Als einigermaĂźen zumindest funktionierender Workaround habe ich jetzt folgendes gemacht :slight_smile:

  1. in main.conf

    runAsUser = homegear
    runAsGroup = homegear
    setDevicePermissions = false
    #exportGpios = 5,6,23 #Commented out!

  2. udev rules

Alles in 99-com.rules mit SUBSYSTEM=“gpio*” … auskommentiert

Eine 91-gpio.rule angelegt, mit folgendem Inhalt :

SUBSYSTEM=="gpio*", PROGRAM="/bin/sh -c '\
        chown homegear:homegear /sys$devpath/active_low /sys$devpath/direction /sys$devpath/edge /sys$devpath/value /sys$devpath/uevent /sys/class/gpio/export /sys/class/gpio/unexport; \
        chmod 666 /sys$devpath/active_low /sys$devpath/direction /sys$devpath/edge /sys$devpath/value /sys$devpath/uevent  /sys/class/gpio/export /sys/class/gpio/unexport ;\
'" 

Und udev neu laden & trigger (oder beim reboot):

udevadm control -R
udevadm trigger
  1. GPIOs auf OUT setzen / exportieren

Wenn homegear ĂĽber systemctl gestartet wird, wird die /etc/homegear/homegear-start.sh automatisch ausgefĂĽhrt.
Leider funktioniert das nicht mehr. In dem script ist der folgende Befehl, der die GPIOs nicht mehr richtig exportiert :

/usr/bin/homegear -u homegear -g homegear -p /var/run/homegear/homegear.pid -pre

Diesen habe ich auskommentiert und statt dessen folgendes eingesetzt :

/usr/bin/gpio export 5 out
/usr/bin/gpio export 6 out
/usr/bin/gpio export 23 out

Und im homegear-stop.sh :

/usr/bin/gpio unexport 23
/usr/bin/gpio unexport 5
/usr/bin/gpio unexport 6

Dazu muĂź unbedingt das exportGpios aus Punkt 1 auskommentiert sein, sonst ist das danah wieder falsch.

Naja, insbesondere die File permissions 666 gefallen mir nicht wirklich an meiner Lösung, anders gehts aber nicht mehr.
Als workaround akzeptabel, aber eine saubere finale Lösung wäre mr lieber.
Da scheint irgendwas in dem sysfs am Raspi falsch zu sein, mit den permissions ?

GruĂź
Robert

1 Like

Hmm, hatte @sathya schon zu dem Thread eingeladen. Der ist aber noch in Urlaub.

Normalerweise sollte sich homegear den gpio schnappen (homegear:homegear) dann wĂĽrde ja 600 reichen.
Ich gehe mal davon aus, dass da irgendwo der Fehler liegt.

Ja, das Problem war unabhängig von homegear.

Als user root genauso wie als user homegear hat ein

echo "1" >/sys/class/gpio/gpio5/value

zB. auch fehlgeschlagen und erst funktioniert mit permission 666, dann ging es.

Vor dem update meines Raspi hatte ich Kernel 4.4.X oder sowas, konnte das mit dem update aber irgendwie nicht mehr nachvollziehen, weil ich das Problem erst nach einer Weile gemerkt hatte …

Hallo @flappadap

da scheint es ein Problem mit dem offiziellen Image zu geben. Ich habe gerade meinen Pi von Kernel 4.4 auf 4.9 aktualisiert und hier klappt alles ohne Probleme (ich verwende das Homegear-RPI-Image). Dass du mit root bei “660” keinen Zugriff hast, ist wirklich merkwürdig…

Viele GrĂĽĂźe

Sathya

Hallo Sathya,

Ok, danke für die Info … scheint wirklich ein PRoblem mit dem image zu sein.
Ich bleibe jetzt mal bei dem workaround und teste das dann nohmal nach den nächsten updates.

GruĂź
Robert.