Umstieg von Rasppi auf BBB - GPIO-Ansteuerung

Begonnen von blueberry63, 10 Juni 2014, 16:41:28

Vorheriges Thema - Nächstes Thema

blueberry63

Hallo,

da wohl wieder BBB (Rev C) im Handel sind, überlege ich von Rasppi auf BeagleBone Black umzusteigen. Ich lese z.Zt. einen Gaszähler über einen GPIO-Port aus (mittels des "RPI_GPIO"-Moduls) und möchte fragen, wie und mit welchem Aufwand dies mit dem BBB geht. Dabei möchte ich nur das Prinzip verstehen, in die Details arbeite ich mich später ein.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

epsrw1

um den gpio zu schreiben (out:1/0) oder lesen (in:1/0) brauchst Du nicht viel. falls Du mit interrupt arbeitest hilft Dir mein nachfolgender tipp leider nciht.

auf dieser basis:
http://forum.fhem.de/index.php/topic,23769.0.html
könntest Du dir ganz einfach durch austauschen der `syscommand` befehlszeilen basteln was Du für den fremden gpio brauchst

LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

blueberry63

@Florian,

Danke für die schnelle Antwort, aber das hilft mir wohl nicht weiter, da ich mit Interrupts auf dem Rasppi arbeite:


define gpio_pin11 RPI_GPIO 17
attr gpio_pin11 DbLogExclude .*Toggle.*,.*Counter.*,.*state.*
attr gpio_pin11 direction input
attr gpio_pin11 interrupt falling
attr gpio_pin11 pud_resistor up


Würde Dein Code denn auf einem BBB funktionieren oder ist er nicht nur für den Rasppi?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

epsrw1

der code ist nur insoweit für den raspi daß der aufruf von /usr/local/bin/gpio hardcoded ist. nach ersetzen mit was auch immer für einem anderen programm für deinen bbb sollte es auch dort laufen.

das gpio modul macht nichts anderes als den exportierten filehandle Deines gpio-pins zu öffnen und offenzuhalten:
zeile 497:
sub RPI_GPIO_inthandling($$) {      #start/stop Interrupthandling
das sollte auf dem bbb ähnlich gehen, mit wieviel gefummel das dann allerdings verbunden ist vermag ich nicht zu sagen.

evtl wäre ein arduino eine alternative (nur ein paar dollar...), der wird hardware-unabhängig unterstützt und bietet auch nen interrupt auf manchen pins

alles ohne garantie, habe mich selbst nicht eingehend mit dem interrupt handling auseinandergesetzt.

LG, florian

Ich habe keine Ahnung, aber davon wenigstens ganz viel

blueberry63

@alle:

könnte sich ein erfahrener Programmierer der Sache annehmen und ein Modul "BBB_GPIO" schreiben? Wenn ich Florian richtig verstehe, dann ist der Aufwand nicht serh hoch, wenn man das Modul "RPI_GPIO" als Basis nimmt.

Oder lohnt sich das Ganze nicht, weil kaum jemand FHEM auf dem BBB laufen hat?

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

Billy

Zitat von: blueberry63 am 11 Juni 2014, 11:04:58
@alle:
könnte sich ein erfahrener Programmierer der Sache annehmen und ein Modul "BBB_GPIO" schreiben? Wenn ich Florian richtig verstehe, dann ist der Aufwand nicht serh hoch, wenn man das Modul "RPI_GPIO" als Basis nimmt.
Oder lohnt sich das Ganze nicht, weil kaum jemand FHEM auf dem BBB laufen hat?
Gruß
Blueberry63

Also bei mir läuft schon seit über einem Jahr eine interrupt gesteuerte GPIO Abfrage auf dem BBB.
Diese dient zur Drucküberwachung meines Heizkreises. Bei Druckabfall wird eine E-mail Warnung erzeugt.
Basis ist "Setting up IO Python Library on BeagleBone Black" von Adafruit.
Inzwischen dürfte es auch andere Lösungen geben.

Zitatkönnte sich ein erfahrener Programmierer der Sache annehmen und ein Modul "BBB_GPIO" schreiben?

Für einen erfahrenen Modulschreiber sicher kein Problem. ;)

Gruss Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

blueberry63

ich würde es ja selbst programmieren, aber das übersteigt bei weitem meine Kenntnisse  :-[

Gruß
Blueberry63

P.S.: Es gibt ja auch noch den Cubietruck als beliebte Platform für FHEM, wenn ich das hier richtig mitbekommen habe. Könnte man das Modul nicht gleich so schreiben, daß es flexibel für viele dieses Einplatinen-Computer ist?
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

klausw

Naja, das RPI_GPIO könnte ich auch einfach modifizieren. Wegen so einer Kleinigkeit muss ja kein neues Modul her ;)
In Ansätzen könnte es bereits laufen (nur die GPIOs müssten vorher manuell exportiert werden).
Es kommt ganz darauf an, wie die Zugriffsrechte für die Dateien unter /sys/class/gpio beim BBB sind.
Beim Raspberry läuft dort alles unter root. Daher nutze ich das gpio utility von wiringpi (/usr/local/bin/gpio) um die GPIOs mit lese/schreibrechten für den FHEM User zu exportieren.
Wenn der fhem User beim BBB schon Zugriff auf die Dateien hat kann ich RPI_GPIO so erweitern, das es auch mit dem BBB funktioniert.
Also schau mal einer nach und gib mir Bescheid :)
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

Billy

#8
Zitat von: klausw am 11 Juni 2014, 22:44:25
Naja, das RPI_GPIO könnte ich auch einfach modifizieren.
Es kommt ganz darauf an, wie die Zugriffsrechte für die Dateien unter /sys/class/gpio beim BBB sind.
Beim Raspberry läuft dort alles unter root. Daher nutze ich das gpio utility von wiringpi (/usr/local/bin/gpio) um die GPIOs mit lese/schreibrechten für den FHEM User zu exportieren.
Der Zugriff bei BBB ist wie beim Raspi normalerweise nur unter root.
Vielleicht hilft dieser Link weiter.
https://www.npmjs.org/package/onoff

Oder hier Accessing GPIO pins with non-root user
https://groups.google.com/forum/#!topic/beagleboard/7a5l2QXklgM

Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

klausw

Zitat von: Billy am 12 Juni 2014, 08:37:58
Vielleicht hilft dieser Link weiter.
https://www.npmjs.org/package/onoff

Nicht so richtig. Hier werden, wenn ich nix überlesen habe, die GPIOs als superuser exportiert

Zitat von: Billy am 12 Juni 2014, 08:37:58
Oder hier Accessing GPIO pins with non-root user
https://groups.google.com/forum/#!topic/beagleboard/7a5l2QXklgM

Das ist auch nix, was ich in das Modul einbauen kann (mal abgesehen davon das ich nicht verstehe wie ich damit Userrechte der GPIOs ändern kann ;)).

eigentlich gibt es nur 3 Lösungen:

  • es gibt ein Tool (ähnlich dem gpio utility von wiringpi für das raspberry) welches mit Userrechten die GPIOs exportieren kann.
    Dieses könnte ich dann in das RPI2C Modul einbauen
  • die GPIOs werden vor FHEM Start exportiert (damit hätte ich dann gar nix zu tun)
    in diesem Fall würde ich nur eine Überprüfung der Zugriffsrechte einbauen
  • ein script, das mit chroot läuft und das ich vom RPII2C aus Aufrufe (dieses müsste dann halt manuell installiert werden)

Nummer 1 ist vermutlich die einfachste Variante für den Anwender.

Lasst euch was einfallen ;)
Ich baue es gern ein. Aber um die Sachen ausserhalb FHEM will ich mich eigentlich nicht kümmern.
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

Billy

@klausw
Also damit wir uns richtig verstehen ich habe damit kein Problem!
Ich wollte Blueberry63 nur einen Typ geben!

Bei mir habe ich das wie folgt vor dem fhem Start durch GPIO Initialisierung in rc.local gelöst!
# GPIO Initialisierung in rc.local
#---------------------------------------------------------------------
gpio=/sys/class/gpio
# Steckerleiste P9
# pin 12 --> gpio60 --> HK1
# pin 14 --> gpio50 --> HK2
# pin 16 --> gpio51 --> Frischwasser
echo 60 > /sys/class/gpio/export
echo 50 > /sys/class/gpio/export
echo 51 > /sys/class/gpio/export

# Bootwerte festlegen
echo low > /sys/class/gpio/gpio60/direction
echo low > /sys/class/gpio/gpio50/direction
echo low > /sys/class/gpio/gpio51/direction

# Rechte setzen, damit damit die gpio Scripte von fhem ausgeführt werden koennen
cd /sys/devices/virtual/gpio
chown -R fhem:root *
cd /sys/class/gpio
chown -R fhem:root *
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*

klausw

Zitat von: Billy am 12 Juni 2014, 11:22:38
Bei mir habe ich das wie folgt vor dem fhem Start durch GPIO Initialisierung in rc.local gelöst!
# GPIO Initialisierung in rc.local
#---------------------------------------------------------------------
gpio=/sys/class/gpio
# Steckerleiste P9
# pin 12 --> gpio60 --> HK1
# pin 14 --> gpio50 --> HK2
# pin 16 --> gpio51 --> Frischwasser
echo 60 > /sys/class/gpio/export
echo 50 > /sys/class/gpio/export
echo 51 > /sys/class/gpio/export

# Bootwerte festlegen
echo low > /sys/class/gpio/gpio60/direction
echo low > /sys/class/gpio/gpio50/direction
echo low > /sys/class/gpio/gpio51/direction

# Rechte setzen, damit damit die gpio Scripte von fhem ausgeführt werden koennen
cd /sys/devices/virtual/gpio
chown -R fhem:root *
cd /sys/class/gpio
chown -R fhem:root *


Mit dieser Vorbereitung sollte das Modul RPI_GPIO direkt funktionieren (abgesehen von ein paar Fehlern im Log).
Aber muss direction nicht auf "in" oder "out" gesetzt werden?

Wenn das mal jemand von den BBB Nutzern testet und Rückmeldung gibt, dann kann ich auch noch die Möglichkeit einbauen auch "direction" im Modul zu ändern.
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

blueberry63

@klausw, Billy,

super, daß Ihr Euch schon Gedanken macht. Mangels BBB kann ich leider noch nicht helfen. Die Benutzerrechte auf dem OS bekäme ich auch umgesetzt. Ich werde mir jezt mal einen BBB bestellen und dann sehen wir weiter.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

epsrw1

ich könnte moduländerungen auf dem cubie testen und so ggfs etwas beitragen. einen BBB hab ich nicht
Ich habe keine Ahnung, aber davon wenigstens ganz viel

klausw

Zitat von: epsrw1 am 12 Juni 2014, 14:57:35
ich könnte moduländerungen auf dem cubie testen und so ggfs etwas beitragen. einen BBB hab ich nicht
verhalten sich da die GPIOs vergleichbar zum BBB? Also können nur als root exportiert werden?
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