[gelöst] gpio nach dem Starten setzen

Begonnen von Christophe, 23 September 2018, 21:20:58

Vorheriges Thema - Nächstes Thema

Christophe

Es sind immer die Kleinigkeiten über die ich stolpere:

Beim Betrieb des SCC Modules muss das gpio 17 richtig gesetzt sein.

if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi
echo out > /sys/class/gpio/gpio17/direction
echo 1 > /sys/class/gpio/gpio17/value


Bei jedem reboot des Raspberry muss ich das jeweils neu eingeben und danach FHEM neu starten.

Soweit ich verstanden habe ist das Startscript /etc/init.d/fhem. Ich habe die Zeilen dort eingetragen, allerdings der Erfolg hält sich in Grenzen.

Wieder einmal mehr, was mache ich falsch?






FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

linuxpaul

Hi,
an welche Stelle hast du die Zeilen reingeschrieben?
Die erste Zeile könnte man auch auf "echo 17 > /sys/class/gpio/export" reduzieren, denke ich.

:)
linuxpaul

Christophe

Das fhem war im init.d nicht vorhanden, darum habe ich es erstellt:

#!/bin/sh
if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi
echo out > /sys/class/gpio/gpio17/direction
echo 1 > /sys/class/gpio/gpio17/value


Es funktioniert und wird im rc0.d - rc5.d aufgeführt.

Der Effekt ist immer noch gleich.



Die verkürzte Version der ersten Zeile erzeugt die Fehlermeldung sh: echo: I/O error




FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

linuxpaul

ich meinte wo in dem script die Zeilen eingebaut sind.
Gut dann eben kürzer, dass funktioniert bei mir: (/etc/init.d/fhem)
### BEGIN INIT INFO
# Provides:             fhem.pl
# Required-Start:       $local_fs $remote_fs
# Required-Stop:        $local_fs $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    FHEM server
### END INIT INFO

set -e
cd /opt/fhem
port=7072

if test "$2" != "noaptmark"; then
  apt-mark hold fhem > /dev/null
fi

if test ! -d /sys/class/gpio/gpio17; then echo 17 > /sys/class/gpio/export; fi
echo out > /sys/class/gpio/gpio17/direction
echo 1 > /sys/class/gpio/gpio17/value

case "$1" in
'start')

        echo "Starting fhem..."

# if you need to start hmland for use with
# Homematic, please start the hmland daemon
# like this (please use correct path and port,
# depending on your installation!)
#
#       /opt/hmcfgusb/hmland -d -p 1234 -r 0
#

        perl fhem.pl fhem.cfg

# if you want to use configDB for configuration,
# use this command to start fhem:
#
#       perl fhem.pl configDB
#
# and remove/comment the above line including fhem.cfg

        RETVAL=$?
        ;;
'stop')
        echo "Stopping fhem..."

# if you want to stop hmland during fhem stop:
#       pkill hmland

        pkill -U fhem perl
        RETVAL=$?
        ;;
'status')
        cnt=`ps -ef | grep "fhem.pl" | grep -v grep | wc -l`
        if [ "$cnt" -eq "0" ] ; then
                echo "fhem is not running"
        else
                echo "fhem is running"
        fi
        ;;
*)
        echo "Usage: $0 { start | stop | status }"
        RETVAL=1
        ;;
esac
exit $RETVAL


man könnte das auch in den start Bereich packen und mit
echo 17 > /sys/class/gpio/unexport
im stop Bereich wieder löschen.

:)
linuxpaul

Christophe

Hallo Paul

Meine verspätete Antwort tut mit leid.

Vielen Dank für das Script. In einem ersten Versuch hat es nicht funktioniert.

Allerdings habe ich noch eine andere Baustelle und kann erst später auf das Boot-Problem eingehen.

Gruss aus der Schweiz

Christoph

FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

linuxpaul

Hi,

kontrollieren kann man das auch in einerm Terminal mit
cat /sys/class/gpio/gpio17/value
Der Rückgabewert sollte 1 sein. (Ergebis von echo 1 ....).

Ist dort die 1 und es funktioniert trotzdem nicht, ist der Fehler nicht im Script, denke ich.

:)
linuxpaul




Christophe

Hallo Paul

Ich kann das Problem jetzt eingrenzen:
Fhem wird nicht über das /etc/init.d/fhem hochgefahren, sondern das muss vorher passieren.

Lösche ich das File und mache einen Reboot, dann startet fhem trotzdem auf.

Gibt es in Linux so eine Art autostartdatei? Keine Ahnung wo ich suchen soll.

Gruss

Christophe


FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

linuxpaul

Hi Christophe,

versuche mal
grep -r fhem /etc/*

Ausgabe ist eine Liste mit Treffern auf den String "fhem" von allen Dateien unterhalb von /etc
evtl sieht man ja wo sich der Start vertsteckt

:)
linuxpaul

Christophe

Das Ergebnis (ohne fhem im init.d)

Binary file /etc/apt/trusted.gpg matches
/etc/group:root:x:0:fhem,pi
/etc/group:tty:x:5:fhem,pi
/etc/group:gpio:x:997:pi,fhem
/etc/group-:tty:x:5:fhem,pi
/etc/group-:gpio:x:997:pi,fhem
/etc/gshadow:tty:*::fhem,pi
/etc/gshadow:gpio:!::pi,fhem
/etc/gshadow-:tty:*::fhem,pi
/etc/gshadow-:gpio:!::pi,fhem
/etc/passwd:fhem:x:999:20::/opt/fhem:/bin/false
/etc/passwd-:fhem:x:999:20::/opt/fhem:/bin/false
/etc/shadow:fhem:$6$t5Pl46LX$fk3oLMMUpqC2/D4ECpv2WbBwH.yKW1ptnW2mrnBE2eFRH7qawJQO3oI0lfpbuTQnejgbmqpUTAhThv26E9QJB0:17799::::::
/etc/shadow-:fhem:!:17785::::::
/etc/systemd/system/fhem.service:# $Id: fhem.service 16001 2018-01-26 11:54:41Z betateilchen $
/etc/systemd/system/fhem.service:User=fhem
/etc/systemd/system/fhem.service:WorkingDirectory=/opt/fhem
/etc/systemd/system/fhem.service:ExecStart=/usr/bin/perl fhem.pl fhem.cfg
/etc/systemd/system/fhem.service:#ExecStart=/usr/bin/perl fhem.pl configDB


Christoph
FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

Christophe

Dank dem Hinweis mit dem grep konnte ich das Problem lösen:

Der Inhalt der /etc/systemd/system/fhem.service Datei sah folgendermassen aus:
# $Id: fhem.service 16001 2018-01-26 11:54:41Z betateilchen $

[Unit]
Description=FHEM Home Automation
Wants=network.target
After=network.target

[Service]

Type=forking
User=fhem
Group=dialout
WorkingDirectory=/opt/fhem
ExecStart=/usr/bin/perl fhem.pl fhem.cfg
#ExecStart=/usr/bin/perl fhem.pl configDB
Restart=always

[Install]
WantedBy=multi-user.target


Das bedeutet, dass /etc/init.d/fhem gar nicht zum Zug kommt.

Nach etwas probieren und recherchieren habe ich folgende Lösung gefunden:

In der Datei /etc/rc.local

/etc/init.d/fhem start

ergänzt und nun funktioniert es.

Vielen Dank für die Hinweise, die mir geholfen haben etwas mehr über das Startup beim Raspberry zu lernen.

Gruss

Christophe
FHEM auf Raspberry, Raspian Jessy, SSC von Busware, TSCUL 0.29

linuxpaul

Hallo Christophe,

ganz sauber ist das evtl. nicht.

Unter Linux gibt es inzwischen mehrere Varianten einen Service zu starten.
Die "alte" Variante ist init und die neue über den systemd.

fhem startet bei dir warscheinlich über letzteres

/etc/systemd/system/fhem.service:# $Id: fhem.service 16001 2018-01-26 11:54:41Z betateilchen $
/etc/systemd/system/fhem.service:User=fhem

daher der Konflikt mit dem Script in init.d.
ggf solltest du den service im systemd deaktivieren und über init arbeiten.
systemctl disable fhem
Kleine Doku dazu:
https://medium.com/@johannes_gehrs/getting-started-with-systemd-on-debian-jessie-e024758ca63d

:)
linuxpaul