Modul RPI_GPIO auf einem Cubietruck - Keine PIN-Nummer

Begonnen von fantalin, 27 Oktober 2020, 18:32:59

Vorheriges Thema - Nächstes Thema

fantalin

Hallo,

ich würde gerne mit dem Modul RPI_GPIO auf einem Cubietruck die System-Leds
(blue, orange, white, green)
Der Kernel stellt sie hier bereit: /sys/class/leds/cubietruck:blue:usr/

Nun verlangt das Modul RPI_GPIO als ersten Parameter eine PIN-Nummer, die ich habe bzw. ermitteln kann.

Was könnte ich tun? Für ein neues FHEM-Modul reicht mein Perl-Knowhow nicht aus.

Viele Grüße
Jochen

Cubietruck
Armbian 20.08.13 Buster
kernel:    5.8.16-sunxi
perl_version:    5.028001


Otto123

Hallo Jochen,

ich habe nur marginale Ahnung vom RPI_GPIO und habe keinen Cubie - aber was geht denn nicht wenn Du doch alles hast?
https://fhem.de/commandref_DE.html#RPI_GPIO

Der User fhem ist in der Gruppe gpio?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

Wenn der Kernel das Device bereit hält, kannst Du es dann auch per Console An/Abschalten? Dann könntest Du es auch per "kleines Script" erledigen ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

klausw

Das Modul greift auf die GPIOs über das Verzeichnis /sys/class/gpio/ zu.
Die LEDs sind da nicht vorgesehen.
Selbst, wenn du den Pfad auswählen könntest würde es nicht funktionieren, weil die LEDs anders angesteuert werden als die GPIOs. Dafür bräuchte es ein neues Modul (was vermutlich aber weitere Probleme mit sich bringt, denn die LEDs kann bestimmt nur der root beschreiben).

Daher ist die Empfehlung von Werniemann sicher die beste.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Wernieman

Nur mal als Info:
Genau so mache ich es bei mir, da die LEDs nicht an dem gleichen Rechner angeschlossen sind.
Bei mir zusätzlich 3 LEDs, die als Statuslampen gebraucht wurden.
Im FHEM dann 3 Dummys PI_LED_(ROT|GRUEN|GELB) und ein Notify:
PI_LED_.* "ssh fhem@raspi1.maxel.home /home/fhem/schalte.py $NAME $EVENT"

Und in "schalte pi":
#!/usr/bin/python
import sys
import time
import RPi.GPIO as GPIO

LED = [38,36,40]
max = 3
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print('Invalid Numbers of Arguments. Script will be terminated.')
    else:

        # Zuerst LED uebergeben
        Nummer = sys.argv[1]
        if Nummer.upper() == "PI_LED_ROT":
                Nummer = 0
        elif Nummer.upper() == "PI_LED_GELB":
                Nummer = 1
        elif Nummer.upper() == "PI_LED_GRUEN":
                Nummer = 2
        else:
                print('Invalid LED. Script will be terminated.')
                exit(1)

        # Dann Schaltzustand uebergeben
        Zustand = sys.argv[2]
        if Zustand.upper() == "ON":
                Zustand = GPIO.HIGH
        elif Zustand.upper() == "OFF":
                Zustand = GPIO.LOW
        else:
                print('Invalid Mode. Script will be terminated.')
                exit(1)

        # Innitialisieren und schalten
        GPIO.setup(LED[Nummer],GPIO.OUT)
        GPIO.output(LED[Nummer],Zustand)


Also nicht Weltbewegendes (Ginge bestimmt auch besser). Habe es irgendwoher (Weiß nicht mehr wo)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

fantalin

Meinen Dank an Wernieman für seinen guten Vorschlag mit python-Coding.

Ich versuche erst einmal, bei meinem Cubietruck mit bash Scripten und perl auszukommen.

Schritt 1: Neuer systemctl service, der vor dem fhem service gestartet wird:


# $Id: init_fhem.service 2020-10-25 kow $

[Unit]
Description=FHEM Home Automation Init-Script
Wants=network.target
After=network.target
#Requires=postgresql.service
#After=postgresql.service
# Changed to make sure mysql is up.
Requires=mysql.service
After=mysql.service

[Service]
Type=simple
# User=fhem
# Group=dialout
WorkingDirectory=/opt/fhem
ExecStart=/bin/bash init_fhem
Restart=always

[Install]
WantedBy=multi-user.target


Es wird dieses kleine Script ausgeführt. Die orangene LED wird angeschaltet, die blaue aus.
Zwei GPIO Pins werden exportiert und als Ausgang geschaltet und können dann mit dem normalen GPIO-Module angesteuert werden.


#!/bin/bash
echo 0 > /sys/class/leds/cubietruck:blue:usr/brightness
echo "Switching off Blue LED"
echo 1 > /sys/class/leds/cubietruck:orange:usr/brightness
echo "Switching on Orange LED"
chown -R fhem:root /sys/class/leds/*
# Export, set as output for PI20 (276) and PI21 (277)
echo 276 > /sys/class/gpio/export
echo 277 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio276/direction
echo out > /sys/class/gpio/gpio277/direction
chown fhem:root /sys/class/gpio/gpio276/*
chown fhem:root /sys/class/gpio/gpio277/*
echo "Exported PI20 (276) & PI21 (277) as Output"


Zuletzt noch eine kleine Anpassung in der Datei fhem.service, damit das DBLOG-Modul Datensätze wegschreiben kann und das bash Script auch vorher ausgeführt wurde.


--snip---
[Unit]
Description=FHEM Home Automation
Wants=network.target
# Changed to make sure mysql is up.
Requires=mysql.service
After=network.target mysql.service init_fhem.service

#Requires=postgresql.service
#After=postgresql.service


Passende Befehle für den Debian systemd Dienst:

systemctl restart|stop|start fhem

Pfad:
/etc/systemd/system/init_fhem.service

systemctl enable init_fhem.service

systemctl daemon-reload

systemctl start init_fhem


Die 4 Front-LED's vom Cubietruck schalte ich dann mit einem modifizierten RPI_GPIO.pm Modul nach Bedarf abends aus und morgens wieder an. 8)