Modul für RPi GPIO Zugriff mit Interrupt Funktion für Input

Begonnen von klausw, 15 November 2013, 14:28:41

Vorheriges Thema - Nächstes Thema

knxhm

#300
@wernieman, über die 777 hier kann man natûrlich trefflich streiten, ich sehe das jedenfalls im context. Wenn das Ding zuhause in einer privaten Umgebung werkelt und es auch nur einen User gibt dann ist das wohl egal. In einer Multiuserumgebung gebe ich dir natürlich recht.
KNX, HM, HMLAN, RPi 2 mit Raspbian Jessie, knxd und FHEM, 1w Temperaturmessung mit gpio4, Dämmerungssensor, autom. Rolladensteuerung

r_knipp

Zitat von: knxhm am 26 April 2016, 07:35:53
@wernieman, über die 777 hier kann man natûrlich trefflich steiten,ich sehe das jedenfalls im context. Wenn das Ding zuhause in einer privaten Umgebung werkelt und es auch nur einen User gibt dann ist das wohl egal. In einer Multiuserumgebung gebe ich dir natürlich recht.

Genauso sehe ich das auch. Das über Gruppen, bzw. User zu lösen ist sicher besser. Die Lösung über die 777 ist aber etwas einfacher.
Bei mir soll das Teil das Aquarium überwachen und Signale an mein Haupt-FHEM senden. Ist also nur von mir selber per LAN zu erreichen. Also alles gut denke ich ;-)

Zitat von: klausw am 25 April 2016, 18:29:51
meinst du mit reboot den raspberry Neustart?
unter /sys/ gibt es nur virtuelle Dateien. Die sind nicht auf der SD Karte abgelegt und werden folglich bei jedem Neustart neu erzeugt. Daher lassen sich die Rechte auch nicht permanent speichern.
Wenn du Jessie als Neuinstallation hast sollte aber das hinzufügen von fhem zur Gruppe gpio vollkommen ausreichen.
Das minibian scheint die gpios ander zu behandeln
Export sollte nämlich so aussehen:

-rwxrwx--- 1 root gpio 4096 Apr 22 22:56 export


Ja, mit reboot meinte ich den Neustart des Raspis.
OK, wenn die GPIO Dateien nicht auf der SD-Karte abgelegt werden ist es klar dass sie bei Neustart weg sind. Dann ist das Skript wohl erstmal die beste Lösung.
Den Sinn dahinter muss man aber nicht verstehen, oder?

Das Minibian behandelt die GPIO glaube ich auch nicht anders. Aber die Gruppe GPIO gibt's nicht (User fhem sowieso nicht). Die musste ich selber anlegen.
Das Minibian ist halt maximal abgespeckt. Dafür ist es aber keine 500MB groß und braucht gerade mal knapp über 30MB RAM und bootet sauschnell.
Gefühlte 80%-90% des Raspbian braucht man für FHEM doch nicht. Außer FHEM und nano habe ich mir bisher nur Raspi-Config nachinstalliert weil damit das Resizen des Dateisystems etwas einfacher von der Hand geht.

Wernieman

ZitatWenn das Ding zuhause in einer privaten Umgebung werkelt
Da der Rechner über Deinen Router im INet hängt, sehe ich es leider anders. Mann sollte auch bei solchen "Kleingeräten" sich Gedanken über die Sicherheit machen. Deine Momentane Sicherheit ist, das es wenig fhem-Installationen gibt. Aber dieses kann  sich durchaus Ändern ;o)

Also 1-2 Gedanken über die Sicherheit, dazugehört hier das 777, ist eventuell nicht verkehrt.
Wie man es anders löst, findet man pr google auch schnell ;o)

Wollte es nur mal erwähnt haben ;o)
- 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

Zitat von: r_knipp am 26 April 2016, 08:28:41
Ja, mit reboot meinte ich den Neustart des Raspis.
OK, wenn die GPIO Dateien nicht auf der SD-Karte abgelegt werden ist es klar dass sie bei Neustart weg sind. Dann ist das Skript wohl erstmal die beste Lösung.
Den Sinn dahinter muss man aber nicht verstehen, oder?
Der Sinn ist einfach der, daß du eine GPIO über das Dateisystem ansprechen kannst.
Es ist eine Virtuelle Datei, die auf den GPIO gemappt ist.
Eine Datei auf der SD Karte macht da doch keinen Sinn.

Zitat von: r_knipp am 26 April 2016, 08:28:41
Das Minibian behandelt die GPIO glaube ich auch nicht anders. Aber die Gruppe GPIO gibt's nicht (User fhem sowieso nicht). Die musste ich selber anlegen.
Das Minibian ist halt maximal abgespeckt. Dafür ist es aber keine 500MB groß und braucht gerade mal knapp über 30MB RAM und bootet sauschnell.
Gefühlte 80%-90% des Raspbian braucht man für FHEM doch nicht. Außer FHEM und nano habe ich mir bisher nur Raspi-Config nachinstalliert weil damit das Resizen des Dateisystems etwas einfacher von der Hand geht.
Bisschen schon wie mir scheint, die Gruppe gpio ist beim Raspbian vorhanden und die GPIOs sind per default von dieser Gruppe aus verwendbar.
Aber schnell booten ist auch ein Vorteil, da musst du halt abwägen.
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

r_knipp

Zitat von: klausw am 26 April 2016, 15:26:34
Der Sinn ist einfach der, daß du eine GPIO über das Dateisystem ansprechen kannst.
Es ist eine Virtuelle Datei, die auf den GPIO gemappt ist.
Das ist ist mir klar.

Zitat von: klausw am 26 April 2016, 15:26:34
Eine Datei auf der SD Karte macht da doch keinen Sinn.
Sorry, aber das verstehe ich nicht. Das sollte doch genauso auch funktionieren wenn die Dateien auf der SD-Karte liegen würden.
Oder etwa nicht?

Zitat von: klausw am 26 April 2016, 15:26:34
Aber schnell booten ist auch ein Vorteil, da musst du halt abwägen.
Naja, die Bootzeit finde ich primär nicht so wichtig. Wenns einmal läuft braucht mans ja nicht oft rebooten.
Eine kurze Bootzeit bedeutet doch aber auch, dass viel weniger Programme und Services beim Start geladen werden, die man eigentlich gar nicht braucht und die nur die Performance negativ beeinflussen würden.

Wernieman

Unix hat die Philosophie: Alles liegt im Dateisystem.

Es gibt mehr als ein "Pseudo-Dateisystem" unter Linux. Das ist z.B. /sys oder /proc. Wenn Du in diese absteigst (z.B. cd /proc) landest Du nicht auf Deiner Platte, sondern in einem eigenen "Treiber", der dieses Dateisystem abbildet.

Im Gegensatz zu Windows ist ein Device nicht ein Laufwerk, sondern liegt "nur" unter einem Ordner im Dateisystem. Dies kann irgendwo im Dateisystem liegen .... ist eigentlich relativ simple.

Ich glaube, ich sollte den Leipzig-Stammtisch mal voranbringen und dort einen Linux-Kurs "halten" ....
- 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

#306
Zitat von: Wernieman am 26 April 2016, 18:43:57
Ich glaube, ich sollte den Leipzig-Stammtisch mal voranbringen und dort einen Linux-Kurs "halten" ....

...wenn der in der MB stattfindet könnte ich schwach werden  8)

Zitat von: r_knipp am 26 April 2016, 17:33:04
Naja, die Bootzeit finde ich primär nicht so wichtig. Wenns einmal läuft braucht mans ja nicht oft rebooten.
Eine kurze Bootzeit bedeutet doch aber auch, dass viel weniger Programme und Services beim Start geladen werden, die man eigentlich gar nicht braucht und die nur die Performance negativ beeinflussen würden.
Die kannst du auch im Raspbian deaktivieren und da gibt es inzwischen auch eine abgespeckte Version.
Wie erwähnt dort musst du kein script für die GPIOs schreiben...die funktionieren einfach.
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

r_knipp

Zitat von: Wernieman am 26 April 2016, 18:43:57
Unix hat die Philosophie: Alles liegt im Dateisystem.
Ich weiß, das hat uns unser Prof in den Vorlesungen für Netzwerke und Betriebssysteme schon immer eingetrichtert.

Trotzdem verstehe ich immer noch nicht warum die Dateien für die GPIOs nicht permanent auf der SD-Karte erzeugt werden können.
Sorry, vielleicht bin ich da ja etwas begriffsstutzig.
Aber ich nehme das erstmal so hin. Will den Thread ja nicht für eine Linux Schulung missbrauchen. Komme ja erstmal klar.

Zitat von: Wernieman am 26 April 2016, 18:43:57
Ich glaube, ich sollte den Leipzig-Stammtisch mal voranbringen und dort einen Linux-Kurs "halten" ....
Wär ich auch sofort dabei, wenn die Anfahrt nur nicht so weit wäre...
Webinar?

Zitat von: klausw am 26 April 2016, 21:41:18
Die kannst du auch im Raspbian deaktivieren und da gibt es inzwischen auch eine abgespeckte Version.
Wie erwähnt dort musst du kein script für die GPIOs schreiben...die funktionieren einfach.
Dazu fehlt mir leider das Know How  :(
Webinar?  ;)

Wernieman

OT:
@klausw
Was meinst Du mit MB

@r_knipp
Die Dateien können nicht angelegt werden, da es eben kein Dateisystem ist!
- 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

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

Kein Problem .... sollten wir nur im passenden Thread diskutieren

Habe mal einen neuen aufgemacht: https://forum.fhem.de/index.php/topic,52727.0.html

@Klaus:
Habe Dir dort eine Frage gestellt ;o)
- 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

PeMue

#311
Zitat von: Puschel74 am 22 April 2014, 10:49:43
Heute wurde bei uns (endlich) ein Wasserzähler mit Impulsausgang montiert.
Diesen Impulsausgang (1 Imp. = 1 Liter) möchte ich nun gerne an meinen RasPi klemmen und (logischerweise) abfragen.

Geht mein Vorhaben oder kommt sich I2C(GPIO1/2) und z.B. GPIO 17 in die Quere?
Nicht das sich das Modul resp. die WiringPi erstmal alle GPIO krallt und der I2C dann nichtmehr zur Verfügung steht.
Die Frage ist zwar schon eine Weile her, aber ich habe auch vor kurzem einen Wasserzähler mit Impulsausgang bekommen. Vorlage für die Realisierung war http://voizchat.de/gaszaehler-verbrauch-erfassen-mit-fhem-und-raspberry-gpio/

Ich habe den Impulsausgang auf den Stecker P5 geklemmt, P5-06 und P5-08. Der Pullup kommt vom RaspberryPi GPIO.

Die Definition für RPIO_GPIO lautet wie folgt:
# water counter over RaspberryPi GPIO 31 (P5-6) and GND (P5-8)
define WZpin RPI_GPIO 31
attr WZpin active_low yes
attr WZpin devStateIcon on:ios-on-blue.png off:ios-off
attr WZpin direction input
attr WZpin interrupt both
attr WZpin pud_resistor up
attr WZpin room 3.1_Wasser
attr WZpin toggletostate yes


Für das zählen selber nutze ich HourCounter:
define Wasser HourCounter WZpin:on WZpin:off

Hier habe ich mir zwei zusätzliche Readings gebaut, die mir am Tagesende den Tagesgesamtverbrauch schreibt:
# prepare reading total water volume in every night)
define WasserDay_at at *23:59:30 {my $new=ReadingsVal("Wasser","countsPerDay","0");;fhem "setreading Wasser countsPerDay_tot $new";;}
attr WasserDay_at room 3.1_Wasser

bzw. alle 15 min. die Differenz berechnet:
# prepare reading for every 15 minutes difference to before
define Wasser15min_at at +*00:15:00 {\
my $last=ReadingsVal("Wasser", "counts15min_last", "0");;;; \
my $act=ReadingsVal("Wasser","countsOverall","0");;;; \
my $val15min=$act-$last;;;; \
fhem "setreading Wasser counts15min $val15min";;;; \
fhem "setreading Wasser counts15min_last $act";;;; \
}
attr Wasser15min_at room 3.1_Wasser

(ok, ich gebe zu, dass ich die fhem.cfg bearbeite, aber mit den Semikola weiß ich nicht, was ich tue  >:().

Da ich nicht alles loggen will, hier der Rest vom Code (10 min. countsOverall, nur bei Änderung countsPerDay bzw. jedes Reading counts15min):
attr Wasser event-min-interval countsOverall:600
attr Wasser event-on-change-reading countsPerDay
attr Wasser event-on-update-reading counts15min,countsPerDay_tot
attr Wasser room 3.1_Wasser
# log values
define Wasser_log FileLog ./log/wasser-%Y-%m.log Wasser:countsOverall:.*|Wasser:countsPerDay:.*|Wasser:counts15min:.*
define 1_Wasser_svg SVG Wasser_log:PM_wasser:CURRENT
attr 1_Wasser_svg label "Wasserverbrauch: Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr 1_Wasser_svg room 3.1_Wasser
define Wasser_day_log FileLog ./log/wasser_d-%Y-%m.log Wasser:countsPerDay_tot:.*
define 2_Wasser_day_svg SVG Wasser_day_log:PM_wasser_d:CURRENT
attr 2_Wasser_day_svg label "Wasserverbrauch pro Tag: Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr 2_Wasser_day_svg fixedrange month
attr 2_Wasser_day_svg room 3.1_Wasser


Zum Schluß habe ich mir noch eine Übersicht gebaut:
# summary of readings
define 0_Wasser readingsGroup <Wasser>,<Gesamt>,<gestern>,<aktuell>,<15 min.> <hr> Wasser:countsOverall,countsPerDay_tot,countsPerDay,counts15min
attr 0_Wasser valueFormat {countsOverall => "%.0f l", countsPerDay_tot => "%.0f l", countsPerDay => "%.0f l", counts15min => "%.0f l"}
attr 0_Wasser room 3.1_Wasser


Man sieht sehr schön, wann ich mit event-on-xxx gekämpft habe  ;)

Die gplots hänge ich auch mal ran, vielleicht kann es jemand brauchen.

Gruß PeMue

Edit: Eine Variable nachgetragen, damit auch der tägliche Verbrauch geloggt wird  ;)
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

huhu

Hallo,

weiß jemand warum ich den user fhem nicht in die Gruppe gpio hinzufügen kann? Die Gruppe existiert bei mir nicht.. aber warum?
sudo adduser fhem gpio ->

adduser: The Group "gpio" does not exist.

Verwende das letzte raspian ::)

klausw

Zitat von: huhu am 03 August 2016, 10:37:38
Verwende das letzte raspian ::)

Hast du eine Neuinstallation gemacht, oder aktualisiert?
Die Gruppe sollte eigentlich vorhanden sein.
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

Tueftler1983

Hallo ich nutze SED heute dein Modul.
Erstmal muss ich sagen klasse das auslesen zweier GPIO funktionierte auf anhieb.

Aber beim schalten meiner 4 Relais habe ich das Problem das diese Invertiert sind. In FHEM steht On und die relais sind OFF.
Auch das attr aktive_low bringt keine Abhilfe egal ob es auf yes oder no steht.

Meine Relais brauchen GND zum schalten.

Kann es an WiringPI liegen das ich für Pilight und meine 433mhz Sender und Empfänger installiert habe?

Gibt es sonst noch ne Möglichkeit das Signal zu invertieren?