Raspberry Pi GPIO s einlesen und anzeigen

Begonnen von RalfKruppa, 11 September 2013, 10:51:51

Vorheriges Thema - Nächstes Thema

RalfKruppa

Hallo,

ich bin dabei mich in das Thema einzuarbeiten und möchte letzendlich die Möglichkeiten des Raspberry Pi nutzen.
Sprich ich möchte Ausgänge ein und ausschalten (das habe ich schon zum laufen) und ich möchte Eingänge auslesen.

Der Zustand der Eingänge liegt ja als Datei vor.

Ein Shell-Script zu schreiben der dieses ausliest ist auch kein Problem.
Wie bekomme ich dieses nun auf FHEM.

FHEM müte regelmäßig zum Beispiel alle 10 Sekunden das Script ausführen, den Rückgabewert in eine Variable schreiben und auf der Web-Seite aktualiesieren.

Wer kann mir da weiter helfen ?

Gruß Ralf

PeMue

Hallo Ralf,

hier und hier gab's schon mal was dazu. Vielleicht hilft Dir das weiter.

Gruß PeMue
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

RalfKruppa

Hi PeMue,

ja die Artikel habe ich gelesen und auch noch andere im Forum sie bezihen sich alle auf die Ausgänge und das läuft auch.
Ich möchte aber die Eingänge lesen und auf der WEB Oberfläche ausgeben.

Gruß Ralf

PeMue

Hallo Ralf,

bei RN Wissen wirst Du fündig. Einfach die WiringPi Bibliothek installieren und auf der Raspberry Pi Konsole mit
gpio readallmal schauen, welcher Pin wie geschaltet ist und z.B. mit
gpio -g read 24 auslesen bzw. auf der fhem Konsole dann mit
{qx(gpio -g read 24)} auslesen.

Gruß PeMue
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

RalfKruppa

Hallo PeMue,

danke für die IInfo. Habe es mal Innstalliert und auf den RPi läuft dieses auch.

Aber mit der einbindung in FHEM (fhem.cfg) geht es nicht.


define act_on_gpio_17 notyfy gpio_17 {
if ("%" ne "off") {\
qx(gpio -g write 17 1)\
} else {
qx(gpio -g write 17 0)\
}\
}


Da ich das seten schon drin hatte habe ich dieses damit erstmal versucht einzubinden.
Aber der Ausgang wird nicht umgeschatet.
Vorher hatte ich anstatt der Zeile mit qx dieses drin stehen:

system("/usr/local/bin/fhem-gpio.sh 17 0 &")


Dieses ist ein Script was auf den RPi liegt.

Was mache ich falsch bei der qx Zeile ?

Gruß Ralf

PeMue

Hallo Ralf,

kommt keine Fehlermeldung bei fhem?

Es sollte eigentlich so notify heißen.

Mit ist aber nicht klar, was der GPIO Pin machen soll.

Ist das ein Eingang und über das Lesen und Setzen soll fhem etwas tun? Dann müsstest Du zyklisch auslesen und fhem sagen, was es im Falle von "1" tun soll.

Oder ist der Pin ein Ausgang (wegen write?) und Du willst mit fhem ereignisgesteuert den Pin (und das was dranhängt) anschalten.

Oder die kombinierte Version: über einen Pin liest Du etwas und wenn auf "1" ist, wird ein anderer Pin geschaltet ...

Beschreib erstmal in Worten, was Du machen willst, dann findet sich eine Lösung.

Gruß PeMue
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

RalfKruppa

Hi,

also letzendlich möchte ich ein Raum überwachen.
Ich möchte über zwei Kontakte einlesen an den ein Türkontakt und ein Fensterkontakt hängt.
Über ein dritten KOmtakt der als OUT konfiguriert ist eine Lampe an machen.

Von der daher benötige ich also read und auch write.

Das wirte hatte ich mit einem sh Script und über den system Befehl genacht aber darüber kann ich keine Werte einlesen.

Das was du mir geschickt hat ist ja ein Prgramm das beides kann, sprich wenn ich dieses ansteuern kann wäre ich ein Stück weiter.

Deshalb habe ich ersteinmal den Write den ich über mein Script gemacht hatte über das neue Programm versucht zu machen und das hat nicht geklappt.

Sichlich muß ich dann zyklisches einlesen und so auch einbauen aber so weit bin ich noch nicht.

Von da her wolte ich jetzt erdsteinmal das eine (write) zum laufen bringen bis ich dann mit read beginne.

Fehler stehen nicht im Log nur set gpio_17 on bzw. set gpio_17 off, aber es passiert nichts.

Gruß Ralf



PeMue

Hallo Ralf,

kopiere mal folgendes
#------------------------------------------------------------------------------
# RPiSetGPIO:
# set GPIO port pin
#
# reference:
# http://wiringpi.com/the-gpio-utility/
#------------------------------------------------------------------------------
sub RPiSetGPIO ($$)
{
my ($port, $value) = @_;

# test, if WiringPi is installed
if (-e "/usr/local/bin/gpio")
{
# range of port/nomenclature/direction should be also checked tbd.
# check and adjust parameter value
$value = ($value > 1) ? 1 : $value;
$value = ($value < 0) ? 0 : $value;
# set the GPIO value
my $command = "gpio -g write " . $port . " " . $value;
#Log(1, $command);
qx($command);
}
else {return "error: WiringPi is not installed"};
}
#-----RPiSetGPIO---------------------------------------------------------------

#------------------------------------------------------------------------------
# RPiReadGPIO:
# reads GPIO port pin
#------------------------------------------------------------------------------
sub RPiReadGPIO ($)
{
my ($port) = @_;

# test, if WiringPi is installed
if (-e "/usr/local/bin/gpio")
{
# range of port/nomenclature should be also checked tbd.
# read the GPIO value
my $command = "gpio -g read " . $port;
#Log(1, $command);
my $result = qx($command);
return $result;
}
else {return "error: WiringPi is not installed"};
}
#-----RPiReadGPPIO-------------------------------------------------------------

in Deine 99_MyUtils.pm. Ist noch relativ rudimentär, aber Du solltest mit
RPiReadGPIO(<port>) bzw. mit
RPiSetGPIO(<port>, <value>)
auf die Ports zugreifen können. Wenn die Routine halbwegs vernünftig funktioniert, werde ich sie in die RPiUtils mit einbauen.

Gruß PeMue

Edit:
Frage an die Runde: Kennt jemand eine Möglichkeit, den Status (ob input/output/...) eines Pins beim Raspberry Pi auszulesen? Ich würde ungerne auf einen als input (ggf. mit anliegendem high) geschalteten Pin ein low schreiben wollen. Oder ist der Raspberry Pi hier fehlertolerant und führt das gar nicht aus? WiringPi gibt diesbezüglich leider nichts her ...
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

klausw

Zitat von: PeMue schrieb am Do, 12 September 2013 17:11Hallo Ralf,
Frage an die Runde: Kennt jemand eine Möglichkeit, den Status (ob input/output/...) eines Pins beim Raspberry Pi auszulesen? Ich würde ungerne auf einen als input (ggf. mit anliegendem high) geschalteten Pin ein low schreiben wollen. Oder ist der Raspberry Pi hier fehlertolerant und führt das gar nicht aus? WiringPi gibt diesbezüglich leider nichts her ...

Die HiPi Perl Bibliothek unterstützt das meines Wissens, mit ihr kann man auch die Interruptfunktion unter Perl nutzen.
http://raspberry.znix.com/
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

chr2k

Dieser Thread ist ja schon etwas älter, aber ich bin im Forum darüber gestolpert da ich nach einer Möglichkeit suche eine GPIO eines Raspberry dauerhaft zu überwachen. Sobald sich der Zustand des GPIO ändert (High/low) soll etwas in FHEM passieren (dabei ist es erstmal egal ob etwas geschaltet wird, eine whatsapp Nachricht gesandt wird oder sonst was).

Ein Device für den passenden GPIO Eingang habe ich angelegt und in den Readings wird mir auch das Pinlevel angezeigt. Leider nie so richtig "live". Immer erst wenn ich die Seite im Browser aktualisiere bekomme ich das aktuelle Pinlevel angezeigt. Im Event monitor wird dies auch nicht angezeigt, sonst könnte ich es mir ja dort abgreifen.

Daher habe ich mich mal an diesem Thread versucht und den Code in meien 99_myutils eingefügt. Danach den Befehl RPiReadGPIO(<port>) ausgeführt aber dann wird mir von FHEM gesagt, dass RPiReadGPIO kein bekanntes Kommando ist. Auch dann steht weder im Log noch im Event Monitor etwas darüber (Fehlermeldung bspw)...

Da nun 2 Jahre vergenagen sind, gibt es womöglich andere Lösungswege die ich bisher hier nicht gefunden habe.

Kann mir jemand Tipps geben?

Danke.

Gruß
Christian

klausw

benutze doch das Modul RPI_Gpio
Beschreibung findest du in der commandref
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

chr2k


pechnase

Hallo,

ich versuche es mal in diesem alten Thread. Ich möchte über das RPI GPIO vier Eingänge abfragen. Habe auf einem Testsystem das neueste debian Image 2016-02-09-raspbian-jessie-lite.img installiert und die üblichen updates und Zusatzmodule für FHEM eingespielt.
FHEM kann ich dann, wie erwartet über Web erreichen.
Jetzt wollte ich das Modul RPI_GPIO verwenden und habe entsprechend der Command Referenz sudo adduser fhem gpio
sudo reboot auf der Linux Kommandozeile ausgeführt. Danach ist FHEM nicht mehr über WEB erreichbar. Ein /etc/init.d/fhem status sagt, dass fhem running ist.
Woran kann das liegen?

Viele Grüße
Wolfgang
2 x RPI mit FHEM 5.8 (RPI B+ & RPI 2B) verbunden über FHEM2FHEM
- HM Fensterkontakte, Rauchmelder, Fernbedienung, Schalter
- Optolink (Selbstbau) Vitotronic 200KW2
- 1-wire DS1820 Temp.Sensoren, TX29DT-IT
- CUL (busware), nanoCUL, Jeelink (Nachbau), FHEMduino

klausw

schau mal, was das logfile sagt:
cat /opt/fhem/log/fhem-2016-02.log
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

pechnase

erstmal danke für die schnelle Antwort.

Das log sieht so aus:

2016.02.13 15:15:45 1: Including fhem.cfg
2016.02.13 15:15:45 3: telnetPort: port 7072 opened
2016.02.13 15:15:46 3: WEB: port 8083 opened
2016.02.13 15:15:46 3: WEBphone: port 8084 opened
2016.02.13 15:15:46 3: WEBtablet: port 8085 opened
2016.02.13 15:15:46 2: eventTypes: loaded 0 events from ./log/eventTypes.txt
2016.02.13 15:15:46 1: Including ./log/fhem.save
2016.02.13 15:15:46 1: usb create starting
2016.02.13 15:15:46 3: Probing CUL device /dev/ttyAMA0
2016.02.13 15:15:47 3: Probing TCM_ESP3 device /dev/ttyAMA0
2016.02.13 15:15:47 3: Probing FRM device /dev/ttyAMA0


irgend wie fehlt da was am Ende im Vergleich zu meinen anderen FHEM Installationen. Warum das Probing TCM_ESP3 und Probing FRM device da steht, kenne ich so auch nicht. Ist zwar ein ganz 'nacktes' FHEM, also noch ohne irgend eine zusätzliches define, aber wie oben erwähnt, vor dem adduser und reboot konnte ich mich wie gewohnt auf der FHEM Web-Oberfläche bewegen.
Ich habe das ganze jetzt auch schon zweimal vom flashen der SDcard angefangen durchgeführt und das Verhalten ist reproduzierbar.

VG Wolfgang
2 x RPI mit FHEM 5.8 (RPI B+ & RPI 2B) verbunden über FHEM2FHEM
- HM Fensterkontakte, Rauchmelder, Fernbedienung, Schalter
- Optolink (Selbstbau) Vitotronic 200KW2
- 1-wire DS1820 Temp.Sensoren, TX29DT-IT
- CUL (busware), nanoCUL, Jeelink (Nachbau), FHEMduino