Domoticz błąd po de...
 
Powiadomienia
Wyczyść wszystko

Domoticz Domoticz błąd po deklaracji GPIO jako 'in'

21 Wpisów
6 Użytkownicy
0 Reactions
5,751 Wyświetleń
(@marekm)
Wpisów: 2
Świeżak
Autor tematu
 

Witam

Jestem 'nowy' w środowisku domotowicza i napotkałem na problem. Posiadam raspberry pi 4 i chciałbym dodać do niej kontaktron. Skorzystałem z tego poradnika (metoda 2ga) http://kostrzewinki.pl/podlaczenia-kontaktronu-raspberry-pi-systemie-domoticz/ i niestety po dodaniu wpisu w pliku domoticz.sh domoticz nie uruchamia się i wyrzuca w logu coś takiego: 

2019-07-08 18:18:24.926  Status: Domoticz V4.10717 (c)2012-2019 GizMoCuz
2019-07-08 18:18:24.931  Status: Build Hash: b38b49e5, Date: 2019-05-09 13:04:08
2019-07-08 18:18:24.931  Status: Startup Path: /home/pi/domoticz/
2019-07-08 18:18:25.055  Sunrise: 04:22:00 SunSet: 21:19:00
2019-07-08 18:18:25.055  Day length: 16:57:00 Sun at south: 12:50:00
2019-07-08 18:18:25.055  Civil twilight start: 03:29:00 Civil twilight end: 22:12:00
2019-07-08 18:18:25.055  Nautical twilight start: 01:53:00 Nautical twilight end: 23:48:00
2019-07-08 18:18:25.055  There is no astronomical twilight in the space of 24 hours
2019-07-08 18:18:25.058  Status: PluginSystem: Failed dynamic library load, install the latest libpython3.x library that is available for your platform.
2019-07-08 18:18:25.062  Status: Using 1-Wire support (kernel W1 module)...
2019-07-08 18:18:25.077  Active notification Subsystems: (0/13)
2019-07-08 18:18:25.101  Status: WebServer(HTTP) started on address: :: with port 8080
2019-07-08 18:18:25.118  Status: WebServer(SSL) started on address: :: with port 443
2019-07-08 18:18:25.170  Starting shared server on: :::6144
2019-07-08 18:18:25.171  Status: TCPServer: shared server started...
2019-07-08 18:18:25.171  Status: RxQueue: queue worker started...
2019-07-08 18:18:27.172  Status: 1Wire: Added Device: 28-000008f38c62
2019-07-08 18:18:28.067  Status: GPIO: This hardware is deprecated. Please transfer to the new SysFS hardware type!
2019-07-08 18:18:28.081  Status: GPIO: Interrupt handler for GPIO 3 started (TID: 641)
2019-07-08 18:18:28.082  Status: GPIO: This hardware is deprecated. Please transfer to the new SysFS hardware type!
2019-07-08 18:18:28.084  Error: Domoticz(pid:552, tid:586('MainWorker')) received fatal signal 6 (Aborted)
2019-07-08 18:18:28.084  Error: siginfo address=0x228, address=0xffffffff
2019-07-08 18:18:28.100  Status: GPIO: Interrupt handler for GPIO 3 started (TID: 644)
2019-07-08 18:18:29.068  (DS18B20#1) Temp (Temperatura dom)
2019-07-08 18:18:29.069  (DS18B20#1) Temp (Temperatura dom)
2019-07-08 18:18:31.027  Error: Thread 12 (Thread 0xb0cff220 (LWP 586)):
2019-07-08 18:18:31.027  Error: #0  __waitpid (options=0, stat_loc=0xb0cfdd78, pid=645) at ../sysdeps/unix/sysv/linux/waitpid.c:30
2019-07-08 18:18:31.027  Error: #1  __waitpid (pid=645, stat_loc=0xb0cfdd78, options=0) at ../sysdeps/unix/sysv/linux/waitpid.c:25
2019-07-08 18:18:31.027  Error: #2  0x002d8840 in dumpstack_gdb(bool) ()
2019-07-08 18:18:31.027  Error: #3  0x002d8e2c in signal_handler(int, siginfo_t*, void*) ()
2019-07-08 18:18:31.027  Error: #4  <signal handler called>
2019-07-08 18:18:31.027  Error: #5  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
2019-07-08 18:18:31.027  Error: #6  0xb6bb2230 in __GI_abort () at abort.c:79
2019-07-08 18:18:31.027  Error: #7  0x00a1ad7c in __gnu_cxx::__verbose_terminate_handler() ()
2019-07-08 18:18:31.027  Error: #8  0x0097b45c in __cxxabiv1::__terminate(void (*)()) ()
2019-07-08 18:18:31.027  Error: #9  0x0097b4d0 in std::terminate() ()
2019-07-08 18:18:31.027  Error: #10 0x0026ca30 in std::_Sp_counted_ptr_inplace<std::thread, std::allocator<std::thread>, (__gnu_cxx::_Lock_policy)1>::_M_dispose() ()

 

Tak wygląda mój plik domoticz.sh: 

#! /bin/sh
### BEGIN INIT INFO
# Provides:          domoticz
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Home Automation System
# Description:       This daemon will start the Domoticz Home Automation System
### END INIT INFO

# Do NOT "set -e"

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DESC="Domoticz Home Automation System"
NAME=domoticz
USERNAME=pi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

DAEMON=/home/pi/domoticz/$NAME
DAEMON_ARGS="-daemon"
#DAEMON_ARGS="$DAEMON_ARGS -daemonname $NAME -pidfile $PIDFILE"
DAEMON_ARGS="$DAEMON_ARGS -www 8080"
DAEMON_ARGS="$DAEMON_ARGS -sslwww 443"
DAEMON_ARGS="$DAEMON_ARGS -log /tmp/domoticz.txt"
#DAEMON_ARGS="$DAEMON_ARGS -syslog"

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

pidof_domoticz() {
    # if there is actually a domoticz process whose pid is in PIDFILE,
    # print it and return 0.
    if [ -e "$PIDFILE" ]; then
        if pidof domoticz | tr ' ' '\n' | grep -w $(cat $PIDFILE); then
            return 0
        fi
    fi
    return 1
}

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --chuid $USERNAME --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        # If the above conditions are not satisfied then add some other code
        # that waits for the process to drop all resources that could be
        # needed by services started subsequently.  A last resort is to
        # sleep for some time.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL"
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
        ;;
  reload)
        log_daemon_msg "Reloading $DESC" "$NAME"
        PID=$(pidof_domoticz) || true
        if [ "${PID}" ]; then
                kill -HUP $PID
                log_end_msg 0
        else
                log_end_msg 1
        fi
        ;;
  restart)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload}" >&2
        exit 3
        ;;
esac

:

/usr/bin/gpio export 2 out
/usr/bin/gpio export 3 in
/usr/bin/gpio edge 3 both

 

Może ktoś z was się z tym spotkał? Przeszukałem chyba cały internet, jednak nie znalazłem odpowiedzi 🙁

Z góry dziękuję za pomoc!

 
Dodane : 10/07/2019 1:59 pm
Tagi tematu
isom
 isom
(@isom)
Wpisów: 5166
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
 

@marekm nie mam pewności bo nie mam RBPi 4 czy nowy system ( buster) toleruje starą metodę obsługi GPIO , ale jedno jest pewne źle deklarujesz te GPIO w pliku domoticza 

powinno być 

/usr/local/bin/gpio export 2 out
/usr/local/bin/gpio export 3 in
/usr/local/bin/gpio edge 3 both

i oczywiście muszą być zainstalowane biblioteki wiringPi

I pamiętaj że po zmianie pliku konfigu domoticza trzeba albo zrestartować malinę albo chociaż domoticza

sudo /etc/init.d/domoticz.sh restart
 
Dodane : 10/07/2019 3:26 pm
(@marekm)
Wpisów: 2
Świeżak
Autor tematu
 

Dzięki za odpowiedź,

Gdy wpisuje tak jak ty podałeś, to gdy wpiszę komendę 'gpio exports' to nie ma żadnego wyniku. Zrobiłem to zgodnie z wiki: https://www.domoticz.com/wiki/GPIO próbowałem również za pomocą 'echo 2 > ......' Rezultat niestety taki sam ;/

 
Dodane : 10/07/2019 3:45 pm
(@darton)
Wpisów: 13
Bywalec
 

Masz nieprawidłową ścieżkę do polecenia gpio

masz 

/usr/bin/gpio

powinno być

/usr/local/bin/gpio

 

 
Dodane : 01/03/2020 12:30 pm
(@gorim)
Wpisów: 2
Świeżak
 

Witam 

Wychodzi na to że Domoticz ma wysypane stany "in", W swoim domoticzu (Raspbery ver 3.) tez mam z tym problem. Mogę zdeklarować wszystkie "out" ale po zdeklarowaniu "in" cały domoticz po reboocie nie wstaje. Nie wiem czy jest to wina Wiring Pi czy GPIO. 

Czy komuś udało się rozwiązać problem ?  

 
Dodane : 08/03/2020 4:02 am
(@darton)
Wpisów: 13
Bywalec
 

U mnie to działa. Mam na tym licznik wody zrobiony.

 
Dodane : 08/03/2020 1:14 pm
(@darton)
Wpisów: 13
Bywalec
 

ja mam tak

/usr/local/bin/gpio export 1 in
/usr/local/bin/gpio edge 1 both

 

Przy czym 1 to jest numer pinu według WiringPi i odpowiadamu mu numer pinu 18 według BCM.

Jak pomylisz numery pinów to domoticz może po restarcie nie wstać.

 
Dodane : 09/03/2020 8:14 am
(@darton)
Wpisów: 13
Bywalec
 

To samo z wykorzystaniem numeracji BCM

/usr/local/bin/gpio export -g 18 in
/usr/local/bin/gpio edge -g 18 both

 

 
Dodane : 09/03/2020 8:37 am
(@darton)
Wpisów: 13
Bywalec
 

Możesz oczywiście nie dodawać koniecznych dla Ciebie wejść w domoticzu w pliku /etc/init.d/domoticz.sh

Po prostu napisz własny skrypt używający tego pinu który robi coś z domoticzem poprzez url.

Tu jest prosty przykład kodu odczytu impulsów z wodomierza  i inkrementacji wirtualnego licznika w domoticzu.

 

https://github.com/darton/counters/blob/master/domoticz_counter.py

 

W przykładzie użyta jest bardzo fajna dla początkujących (i nie tylko) biblioteka gpiozero

 

 

 

 
Dodane : 09/03/2020 8:43 am
(@gorim)
Wpisów: 2
Świeżak
 

U mnie jest tak że wystarczy ze dodam deklaracje "in" i zrobię reboot domoticza albo całej maliny i domoticz już nie wstaje, pokazuje jakiś daemon problem. Nigdzie w internecie nie udało mi się znaleźć rozwiązania. Pomysł z napisaniem skryptu w pythonie wydaje się być spoko, szkoda że pomijam domoticza w tym wszystkim w takim rozwiązaniu.

 Chciałem aby kontaktron na drzwiach pokazywał mi kiedy były otwierane drzwi do mieszkania na wizualizacji domoticz. Bede kombinował, może jakoś się uda to rozwiązać. 

 

 
Dodane : 10/03/2020 2:40 am
(@darton)
Wpisów: 13
Bywalec
 

Tu masz następny przykład skryptu wywołującego reakcję domoticza na zmianę stanu wielu wejść gpio Raspberry Pi.

Bez deklaracji gpio jako wejście w skrypcie startowym domoticza.

W domoticzu deklarujesz tylko wirtualne przełączniki, których numery idx wpisujesz do tego skryptu mapując dany numer idx na numer GPIO,

https://github.com/darton/4domoticz/blob/master/inputs.py

Przykład jest zrobiony dla 7 portów GPIO RPi ale może być ich więcej lub mniej. 

Zaletą tego rozwiązania jest, że te wejścia mogą być na zupełnie innym Raspberry Pi  (czy PC) choćby i na końcu świata.

Wystarczy zamiast 127.0.0.1 użyć adresu ip domoticza.

Skrypt powinien zostać dodany do /etc/rc.local tak by się uruchamiał po restarcie: dodając 

su - pi -c '/home/pi/scripts/inputs.py &'

zaraz przed

exit 0

 
Dodane : 10/03/2020 11:14 pm
(@deltoro)
Wpisów: 4
Świeżak
 

@darton@

Mogę prosić o pomoc? U mnie ten scrypt ma ścieżkę home/pi/domoticz/scripts/kontaktron.py, ale nie potrafię tego dodać w etc/rc.local tak by się uruchamiał po restarcie.

Dziękuję za pomoc 

 

 
Dodane : 11/06/2020 7:44 pm
(@darton)
Wpisów: 13
Bywalec
 

W najnowszych wersjach Raspbiana czy Raspberry Pi OS lepiej zrobić to z wykorzystaniem natywnych sposobów dla systemd

https://www.raspberrypi.org/documentation/linux/usage/systemd.md

 

tutaj przykład gdzie korzystam właśnie z tej metody:

https://github.com/darton/RPiMS/blob/master/rpims.service

 

Przykładowo niech Twój skrypt uruchamiany przez systemd nazywa się np kontaktron.service

a jego zawartość to:

[Unit]
Description=Kontraktron Service
After=network.target
Conflicts=getty@tty1.service

[Service]
Type=simple
User=pi
Group=pi
ExecStart=/usr/bin/python3 /home/pi/domoticz/scripts/kontaktron.py
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

 

Po stworzeniu takiego pliku kopiujemy go we właściwe miejsce:

sudo mv ./kontaktron.service /lib/systemd/system/kontaktron.service

 

a następnie wykonujemy reload:

sudo systemctl daemon-reload

 

oraz włączamy usługę:

sudo systemctl enable kontaktron.service

 

po restarcie skrypt powinien się uruchomić

sudo reboot

 

Wtedy jeśli zajdzie potrzeba można elegancko ręcznie zatrzymać działania skryptu:

sudo systemctl stop kontraktron.service

 

lub wznowić jego działanie:

sudo systemctl start kontraktron.service

 

Jest to dużo przyjemniejszy sposób niż kilowanie procesu 🙂

Dzięki takiemu podejściu, skrypt także zostanie zatrzymany przez systemd podczas wyłączenia systemu.

 

 
Dodane : 11/06/2020 9:43 pm
(@deltoro)
Wpisów: 4
Świeżak
 

@darton@ bardzo dziękuję za podpowiedź. Wszystko działa jak należy. Niestety nie obyło się bez problemu. Skopiowałem skrypt ze strony, wszystko zrobiłem jak jest napisane i nie działa...... Próbowałem na wszystkie sposoby. Przepisałem skrypt ręcznie bo to różnie jest z tym kopiowaniem i niestety nie działa.... Trochę się z tym męczyłem i na koniec zmieniłem wersję Pythona na 2 i dopiero zaskoczyło. Dziwne bo 3 też jest zainstalowana. Mam najnowszą wersję Bustera na rpi 3b +.

Mam jeszcze jedno małe pytanie. Miałem ten właśnie skrypt w katalogu domoticz.sh, żeby się odpalał na starcie programu. Gdy sprawdzałem status domoticza to pokazywał Failed, mimo, że wszystko działało normalnie, tak przynajmniej mnie się wydawało. Gdy usunąłem go to status jest Active running. Dlaczego tak się stało? 

Pozdrawiam i dziękuję 

 
Dodane : 12/06/2020 9:32 pm
(@darton)
Wpisów: 13
Bywalec
 
Dodane przez: @deltoro

Trochę się z tym męczyłem i na koniec zmieniłem wersję Pythona na 2 i dopiero zaskoczyło. Dziwne bo 3 też jest zainstalowana. Mam najnowszą wersję Bustera na rpi 3b +.

Prawdopodobnie masz potrzebne biblioteki dla Pythona w wersji 2.x a brakuje Ci tych bibliotek dla Pythona w wersji 3.x

Uruchom ręcznie

/usr/bin/python3 /home/pi/domoticz/scripts/kontaktron.py

i zobacz jakie błędy się pokażą.

 

 
Dodane : 13/06/2020 11:05 am
(@deltoro)
Wpisów: 4
Świeżak
 

@darton

File /home........./kontaktron.py , line 3, in <module>

import RPi,GPIO as GPIO

ModuleNotFoundError : No module named 'RPi'

taki blad wyskakuje

Pozdrawiam

 
Dodane : 14/06/2020 6:59 pm
(@darton)
Wpisów: 13
Bywalec
 

Zatem doinstaluj brakujący pakiet

sudo apt-get install python3-rpi.gpio

choć możliwe, że python3-dev też nie masz wtedy

sudo apt-get install python3-dev python3-rpi.gpio
 
Dodane : 15/06/2020 8:46 am
(@deltoro)
Wpisów: 4
Świeżak
 

@darton dziekuje serdecznie, wszystko dziala,

pozdrawiam

 
Dodane : 15/06/2020 7:50 pm
 ggu
(@ggu)
Wpisów: 1
Świeżak
 

Cześć, podłączę się pod temat, bo wcześniej korzystałem z wiringPi żeby sterować z domoticza zaworem podlewania. Z tego co wyczytałem WiringPi jest wycofane i nie działa na nowszej wersji Pythona/Raspberry(?)

Teraz chciałbym sterować oświetleniem za pomocą wyjść centrali Satel. Mam już do tego przeznaczone wyjście, ale musiałbym użyć jednego z GPIO na Raspberry żeby po zwarciu do masy wyjścia Satel móc odczystać stan na domoticzu (niestety nie posiadam modułu ETHM)

Skrypt @darton podoba mi się tylko mam pytanie: w wiringPi w pliku /etc/init.d/domoticz.sh deklarowałem które GPIO jest wejściem, a które wyjściem (3.3V). W skryppcie widzę same wejścia. 

Jak robi się wyjścia za pomocą "nowej" metody?
I czy w tym zapisie

"51" : Button(5, hold_time=0.2) 

 5 oznacza numer GPIO ?

 

 
Dodane : 08/07/2021 12:46 pm
(@darton)
Wpisów: 13
Bywalec
 

Button i jego parametry opisany jest w bibliotece gpiozero.

13. API - Input Devices — GPIO Zero 1.6.2 Documentation

 
Dodane : 08/07/2021 1:29 pm
Strona 1 / 2
Udostępnij: