FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Christophe am 23 September 2018, 21:20:58

Titel: [gelöst] gpio nach dem Starten setzen
Beitrag von: Christophe am 23 September 2018, 21:20:58
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?






Titel: Antw:gpio nach dem Starten setzen
Beitrag von: linuxpaul am 23 September 2018, 21:50:30
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
Titel: Antw:gpio nach dem Starten setzen
Beitrag von: Christophe am 24 September 2018, 16:38:57
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




Titel: Antw:gpio nach dem Starten setzen
Beitrag von: linuxpaul am 24 September 2018, 17:01:44
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
Titel: Antw:gpio nach dem Starten setzen
Beitrag von: Christophe am 27 September 2018, 23:11:37
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

Titel: Antw:gpio nach dem Starten setzen
Beitrag von: linuxpaul am 28 September 2018, 19:57:55
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



Titel: Antw:gpio nach dem Starten setzen
Beitrag von: Christophe am 09 Oktober 2018, 18:55:09
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


Titel: Antw:gpio nach dem Starten setzen
Beitrag von: linuxpaul am 09 Oktober 2018, 19:35:16
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
Titel: Antw:gpio nach dem Starten setzen
Beitrag von: Christophe am 09 Oktober 2018, 21:56:37
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
Titel: Antw:gpio nach dem Starten setzen
Beitrag von: Christophe am 10 Oktober 2018, 14:42:27
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
Titel: Antw:[gelöst] gpio nach dem Starten setzen
Beitrag von: linuxpaul am 10 Oktober 2018, 21:13:08
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 (https://medium.com/@johannes_gehrs/getting-started-with-systemd-on-debian-jessie-e024758ca63d)

:)
linuxpaul