FHEM Forum

FHEM - Hardware => Einplatinencomputer => Thema gestartet von: Tueftler1983 am 05 Oktober 2016, 17:00:00

Titel: Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 05 Oktober 2016, 17:00:00
Hallo ich habe an meinem FHEM System eine AVR NET IO mit Ethersex Firmware über Netzwerk eingebunden  über das ich 4 Relais schalte und 2 Eingänge auswerte.
Jetzt gibt es aber des öfteren Probleme, Relais werden nicht geschaltet obwohl es angezeigt wird oder der Zustand der Eingänge wird nicht erfasst.

Jetzt wollte ich gerne eine kleine 4 Kanal Relaiskarte über die GPIO's schalten und über 2 GPIO's den Zustand der Schalter abfragen. Geht das so einfach?

An den GPIO'S hängen bis jetzt nur ein 433mhz Sender (GPIO17) und Empfänger (GPIO18)
Angesteuert bzw ausgelesen mit Pilight.
Damit ist auch Wiringpi installiert.

Wiringpi Pin 0 Sender und Empfänger Pin 1

Jetzt hätte ich gern
Relais1 auf Pin 2
Relais2 auf Pin 3
Relais3 auf Pin 4
Relais4 auf Pin 5
Eingang1 auf Pin 6
Eingang2  auf Pin 7

Wie stelle ich das an?
Elektrisch kein Problem aber wie konfiguriere ich das in Fhem?

Danke euch schonmal für die hilfe
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 06 Oktober 2016, 09:14:52
Schaue dir mal dieses (http://fhem.de/commandref_DE.html#RPI_GPIO) Modul an.
Damit kannst du die GPIOs unter FHEM nutzen.
Das Modul verwendet die BCM (https://de.pinout.xyz/) Nummerierung.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 06 Oktober 2016, 09:37:13
Okay wenn ich es richtig sehe muss ich aber immer den GPIO PIN  abfragen an dem z.b. Meine Klingel angeschlossen ist... oder?
Ich bekomme nicht automatisch den Zustand angezeigt.
Das wäre doof da ich ja eine Aktion auslösen möchte wenn es an der Türe klingelt.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 06 Oktober 2016, 09:41:41
Lies den Abschnitt doch erstmal bis zum Schluss durch.  8)
Pollen ist nicht notwendig, da der Interrupt verwendet werden kann.
Die Ports können nur 3,3V. Mit der Klingel solltest du da aufpassen.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Frank_Huber am 06 Oktober 2016, 10:33:38
Zitat von: Tueftler1983 am 05 Oktober 2016, 17:00:00Eingang1 auf Pin 6
Eingang2  auf Pin 7

Ich denke Du meinst GPIO 6 und 7.
Pin 6 wäre GND, Pin 7 wäre GPIO 04

Die GPIOs so:
define GPIO_IN_06 RPI_GPIO 6
attr GPIO_IN_06 active_low yes
attr GPIO_IN_06 debounce_in_ms 20
attr GPIO_IN_06 direction input
attr GPIO_IN_06 interrupt both

define GPIO_IN_07 RPI_GPIO 7
attr GPIO_IN_07 active_low yes
attr GPIO_IN_07 debounce_in_ms 20
attr GPIO_IN_07 direction input
attr GPIO_IN_07 interrupt both


0V auf den GPIO legt den Eingang auf aktiv.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 06 Oktober 2016, 13:54:40
Hallo
Mit der Klingel ist kein Problem da ich mit der Klingel Leitung auf einen Gleichrichter gehe mit Kondensator dahinter und dann auf ein Relais Modul das von 6-12v zuverlässig schaltet und mit dem Relaiskontakt gehe ich dann auf den Raspberry.

Mit den Pins meine ich die Belegung von WiringPI. Laut anhang.

Zu den Eingängen ich hatte das: http://www.fhemwiki.de/wiki/Raspberry_Pi:_GPIOs_schalten
gelesen da wurde es nicht klar draus.

Okay danke euch erstmal. Werde erstmal testen und nicht dann melden.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 06 Oktober 2016, 14:04:03
Sprich naCh BCM Belegung
Relais1 27
Relais2 22
Relais3 23
Relais4 24
Eingang1 10
Eingang2 9
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 06 Oktober 2016, 15:54:04
Zitat von: Tueftler1983 am 06 Oktober 2016, 13:54:40
Zu den Eingängen ich hatte das: http://www.fhemwiki.de/wiki/Raspberry_Pi:_GPIOs_schalten
gelesen da wurde es nicht klar draus.
Die WikiSeite ist auch alles andere als aktuell/korrekt. (wenn du magst kannst du das gern ändern  8))
In der Commandref sollte dafür alles drinstehen.

wiring pi wird nicht benötigt

Die GPIOs sind an sich alle verwendbar.
14 und 15 sind per default als RS232 für ein Terminal definiert, das müsste, wenn sie als GPIO verwendet werden sollen, abgestellt werden. Wenn du später I2C oder SPI nutzen willst, schränkt das die Anzahl weiter ein.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 10 Oktober 2016, 11:43:03
Hallo zusammen,
erste Nachricht: Ich kann meine 4 Relaisschalten über die GPIO´s 22,23,24,27
Aber sie schalten invertiert das heist in FHEN steht ON und das relais ist OFF habe es mit dem attr active_low versucht aber egal ob es auf yes oder no steht es bleibt dabei die Relais schalten Invertiert.

Kann mir da einer sagen wie ist das ändern kann??

Die Eingange für die Klingel frage ich über die GPIO´s 9 und 10 ab das klappt auch super.

Mein problem liegt noch bei den Relais, klar könnte ich einfach den State Style ändern aber das wäre gefuscht.

Hoffe ihr könnt mir helfen
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 10 Oktober 2016, 12:30:12
Zitat von: Tueftler1983 am 10 Oktober 2016, 11:43:03
erste Nachricht: Ich kann meine 4 Relaisschalten über die GPIO´s 22,23,24,27
Aber sie schalten invertiert das heist in FHEN steht ON und das relais ist OFF habe es mit dem attr active_low versucht aber egal ob es auf yes oder no steht es bleibt dabei die Relais schalten Invertiert.

Kann mir da einer sagen wie ist das ändern kann??

Mein problem liegt noch bei den Relais, klar könnte ich einfach den State Style ändern aber das wäre gefuscht.
Gepfuscht ist das nicht, der GPIO hat ja schließlich den Pegel  8) . Was zählt ist das Ergebnis.
Allerdings sollte active_low funktionieren.
Steht was im Logfile?
Poste mal der Ergebnis von ls -l /sys/class/gpio/gpio22/
oder über FHEM: {`ls -l /sys/class/gpio/gpio22/ `}
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 10 Oktober 2016, 14:03:04
Hallo das Ergebnis aus Fhem heraus sieht so aus wie Screenshot 1.
Das das Definierte Relais dazu Screenshot 2.

Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 10 Oktober 2016, 14:38:43
Könnte es damit zusammenhängen das ich WiringPI installiert habe? Das brauche ich Für Pilight um mein 433mhz Sender und Empfänger anzusprechen?

Habe dazu Grade das im Wiki gefunden:

Zitat
Wenn das Attribut pud_resistor verwendet werden soll und für ältere Raspbian Distributionen, muss zusätzlich das gpio Tool der WiringPi Bibliothek installiert werden, um den internen Pullup/down Widerstand zu aktivieren, bzw. GPIO's zu exportieren und die korrekten Nutzerrechte zu setzen (für den zweiten Fall funktioniert das active_low Attribut nicht).
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 10 Oktober 2016, 15:48:36
Zitat von: Tueftler1983 am 10 Oktober 2016, 14:38:43
Könnte es damit zusammenhängen das ich WiringPI installiert habe? Das brauche ich Für Pilight um mein 433mhz Sender und Empfänger anzusprechen?
Nein, wenn alles korrekt konfiguriert ist hat WiringPi keinen Einfluss. Es wird nur als Alternative verwendet wenn der Zugriff über SysFs nicht funktioniert.

Zitat von: Tueftler1983 am 10 Oktober 2016, 14:03:04
Hallo das Ergebnis aus Fhem heraus sieht so aus wie Screenshot 1.
Das das Definierte Relais dazu Screenshot 2.

Im ersten Bildchen ist das Problem schon zu sehen. Die Dateien laufen unter root:root
Edge und value sind bei dir dem User fhem und der Gruppe fhem zugewiesen.
Das ist ein Zeichen dafür, das dieser GPIO über WiringPi angelegt wurde.
WiringPi wird nur verwendet, wenn fhem keine Zugriffsrechte auf die GPIOs hat.

Es müsste eigentlich so aussehen:
-rwxrwx--- 1 root gpio 4096 Okt 10 09:31 active_low
lrwxrwxrwx 1 root gpio    0 Okt 10 09:31 device -> ../../../20200000.gpio
-rwxrwx--- 1 root gpio 4096 Okt 10 09:31 direction
-rwxrwx--- 1 root gpio 4096 Okt 10 09:31 edge
drwxrwx--- 2 root gpio    0 Okt 10 09:31 power
lrwxrwxrwx 1 root gpio    0 Okt 10 09:31 subsystem -> ../../../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Okt 10 09:31 uevent
-rwxrwx--- 1 root gpio 4096 Okt 10 09:31 value


Das kann daran liegen, das fhem nicht in der Gruppe gpio ist (hast du adduser wie in der commandref beschrieben ausgeführt?)
Oder du hast ein raspbian upgrade gemacht (von wheezy auf jessie).
Bei letzterem würde ein
ls -l /sys/class/gpio/
aufschluss bringen.

Grüße
Klaus

PS: bitte mit der Code Funktion hier im Form arbeiten (ist die "#" oben im Antworten Fenster) das erleichtert das lesen.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 10 Oktober 2016, 16:10:27
Hallo Fhem habe ich zur Gruppe gpio hinzugefügt mit dem Befehl
sudo adduser fhem gpio
Wenn ich den Befehl jetzt nochmal eingebe kommt die meldung:
Der Benutzer �fhem� ist bereits ein Mitglied der Gruppe �gpio�.

Als distribution ist folgend installiert.
root@fhemserver:~# cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 7 (wheezy)"
NAME="Raspbian GNU/Linux"
VERSION_ID="7"
VERSION="7 (wheezy)"
ID=raspbian
ID_LIKE=debian
ANSI_COLOR="1;31"
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"


Hoffe das hilft weiter
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 10 Oktober 2016, 16:46:03
Zitat von: Tueftler1983 am 10 Oktober 2016, 16:10:27
Hallo Fhem habe ich zur Gruppe gpio hinzugefügt mit dem Befehl
sudo adduser fhem gpio
Wenn ich den Befehl jetzt nochmal eingebe kommt die meldung:
Der Benutzer �fhem� ist bereits ein Mitglied der Gruppe �gpio�.

Als distribution ist folgend installiert.
...

Hoffe das hilft weiter
Mir musses nicht helfen ;)

Hast du auf dem System irgendwann einmal "apt-get upgrade" ausgeführt?
Da ist scheinbar irgendwas in der Rechtefreigabe verbogen.

Normalerweise:
die Dateien export und unexport haben folgende Rechte:
ls -l /sys/class/gpio/
-rwxrwx--- 1 root gpio 4096 Okt 10 09:32 export
...
-rwxrwx--- 1 root gpio 4096 Okt 10 09:31 unexport


wenn du jetzt einen Pin exportierst (unter dem user fhem) z.B.
echo 15 > /sys/class/gpio/export
haben alle Dateien unter /sys/class/gpio/gpio15/
die gleichen Rechte

Bei dir passen vermutlich die rechte von export und unexport. Aber die Rechte der gpioxx Dateien sind in der Gruppe root anstelle von gpio

Ich habe diese Problem nur durch eine Neuinstallation lösen können.
Oder du verzichtest halt auf die Invertierung.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 10 Oktober 2016, 18:59:07
Ja apt-get upgrade habe ich schonmal gemacht. Nadja neu Installation dann erst wenn ich meinen Raspberry PI3 habe.

Schade habe gehofft ich könnte die rechte anpassen. Kann ich nicht einfach von Hand die rechte ändern mit WinSCP habe damit schon rechte von Dateien von root auf fhem geändert
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 10 Oktober 2016, 22:10:15
Zitat von: Tueftler1983 am 10 Oktober 2016, 18:59:07
Schade habe gehofft ich könnte die rechte anpassen. Kann ich nicht einfach von Hand die rechte ändern mit WinSCP habe damit schon rechte von Dateien von root auf fhem geändert
Doch, das kannst du natürlich auch machen.
Beim Starten könntest du die Rechte jedes mal anpassen.
In der Commandref findest du Informationen dazu.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 11 Oktober 2016, 14:44:03
Kurze Info habe die rechte der active_low Datei in den 4 Ordnern der GPIO´s von den rechten als besitzer fhem geändert. jetzt gehts selbst nach nem Neustart des PI bleiben die rechte bei FHEM.

Jetzt also alles wunderbar
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 11 Oktober 2016, 18:26:48
Noch eine frage, wie lang muss das Signal am gpio Anliegen damit FHEM es zuverlässig erkennt?
Habe noch das Problem das teilweise das Klingeln nicht erkannt wird.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 12 Oktober 2016, 17:32:46
Zitat von: Tueftler1983 am 11 Oktober 2016, 14:44:03
Kurze Info habe die rechte der active_low Datei in den 4 Ordnern der GPIO´s von den rechten als besitzer fhem geändert. jetzt gehts selbst nach nem Neustart des PI bleiben die rechte bei FHEM.
Diese Dateien sind doch virtuell und werden bei jedem Booten neu angelegt.
Das muss ich nicht verstehen  :o
aber egal ... Hauptsache es läuft ;)

Zitat von: Tueftler1983 am 11 Oktober 2016, 18:26:48
Noch eine frage, wie lang muss das Signal am gpio Anliegen damit FHEM es zuverlässig erkennt?
Habe noch das Problem das teilweise das Klingeln nicht erkannt wird.
Wenn du den Interrupt nutzt, sollte es direkt erkannt werden, da auf die Flanke geschaut wird.
Poste mal deine Einstellungen:
list <definename>
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 12 Oktober 2016, 22:17:27
Hallo
Habe den Internen Pull_Down erst eben aktiviert muss morgen mal gucken ob es damit besser läuft

Internals:
   DEF        10
   EXCEPT_FD  19
   GPIO_Basedir /sys/class/gpio
   NAME       GPIO_Klingel_Eingang
   NR         159
   RPI_pin    10
   STATE      off
   TYPE       RPI_GPIO
   WiringPi_gpio /usr/bin/gpio
   lasttrg    1476280593.77971
   Readings:
     2016-10-12 15:54:31   Counter         10
     2016-10-12 16:56:38   Dblclick        off
     2016-10-12 16:56:38   Longpress       off
     2016-10-12 16:56:38   Pinlevel        low
     2016-10-12 16:56:38   state           off
   Fhem:
     interfaces switch
Attributes:
   direction  input
   interrupt  both
   pud_resistor down
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 13 Oktober 2016, 18:25:13
Also leider gehen immer noch klingel versuche verloren sie werden von FHEM aber nicht erkannt.

Wenn ich auf steigende Flanke stelle zählt der counter zwar jedes klingeln aber das doif das den auf ein on des Eingangs reagieren soll reagiert nicht.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 14 Oktober 2016, 15:46:27
Zitat von: Tueftler1983 am 13 Oktober 2016, 18:25:13
Also leider gehen immer noch klingel versuche verloren sie werden von FHEM aber nicht erkannt.

Wenn ich auf steigende Flanke stelle zählt der counter zwar jedes klingeln aber das doif das den auf ein on des Eingangs reagieren soll reagiert nicht.

beim GPIO das Attribut eventonchangereading auf counter setzen
doif kenne ich nicht aber wenn es wie at funktioniert dann kannst du auf den counter von gpio triggern und bei jeder Aktualisierung die Klingel auslösen
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: Tueftler1983 am 16 Oktober 2016, 17:21:35
Habe leider keine Ahnung wie ich auf den counter triggern kann, wäre da für Vorschläge offen.
Titel: Antw:Relais über GPIO schalten und Taster abfragen.
Beitrag von: klausw am 18 Oktober 2016, 15:42:09
Wie gesagt DOIF kenne ich nicht.
Wenn im eventonchangereading des GPIOs counter steht, wird bei jedem hochzählen des counters ein Event ausgelöst (kann man schön im Event monitor beobachten). Da dies nun das einzige Event des GPIOs ist kanns du auf alle Events des GPIO triggern.

Beispiel:
define >notifyname> notify <gpioname> set klingel on-for-timer 10
um auf ein spezielles Event zu triggern:
define >notifyname> notify <gpioname>:counter.* set klingel on-for-timer 10

Wie die events aussehen kannst du im Eventmonitor sehen.