Neues Modul i2cBMP180

Begonnen von Dirk, 21 Juli 2013, 23:52:20

Vorheriges Thema - Nächstes Thema

Dirk

Hallo zusammen,

Ich habe ein neues Modul Entwickelt um die I2C-Sensoren BMP180 und BMP085 am Raspberry Pi auszulesen.

Der BMP085 und sein Nachfolger BMP180  sind Luftdruck-Sensoen welche über den I2C Bus ausgelesen werden können.
Zur Kommunikation mkit dem I2C-Bus werden hier die Perl-Module HiPi::Device::I2C und HiPi::BCM2835::I2C verwendet.

Für die Schnelle Installation der Perl-Module:wget http://raspberry.znix.com/hipifiles/hipi-install
perl hipi-install


Die I2C-Kernelmodule müssen natürlich noch geladen werden:sudo modprobe i2c-bcm2708
sudo modprobe i2c-dev


Um das persistent zu bekommen, also damit die Module bereits beim Booten geladen werden, müssen diese beiden Zeilen ans Ende von /etc/modules kopiert werden:i2c-bcm2708
i2c-dev


Ein Beispiel für die Configuration des FHEM-Moduls:define BMP180 i2cBMP180 /dev/i2c-0
attr BMP180 oversampling_settings 1
attr BMP180 poll_interval 5
attr BMP180 route_i2c0_to_p5 1
attr BMP180 altitute 220


Dieses Beispiel und der Test läuft bei mir derzeit hier mit:
Link

Mit dem hier beschriebenen Modul sollte das aber auch funktionieren:
Link

Das FHEM-Modul würde ich derzeit als Beta einstufen. Und daher hoffe ich auf Feedback.

Gruß
Dirk

Edit: altes Modul entfernt.
Das Modul ist mittlerweile Bestandteil von FHEM (51_I2C_BMP180.pm)

betateilchen

Hallo Dirk,

die Namenswahl für Dein Modul finde ich etwas unglücklich, da gemischte klein- und Großbuchstaben nicht wirklich eine intuitive Benutzung ermöglichen.

Zu Deiner Micro-Luftdruckmeß-Platine ist bei mir am Wochenende noch die Frage aufgetaucht, wie zuverlässig die (auch temperaturabhängigen) Meßwerte sind, wenn man die Platine auf den Raspberry auflötet und den dann in ein Gehäuse einbaut. Noch dazu, wo die Zusatzplatine an der Unterseite sitzt, wo je nach Gehäusetyp ohnehin nahezu keine Luftzirkulation stattfinden kann. Hast Du dazu schon Erfahrungen gesammelt?

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ext23

Also die Temp ist bei mir um die 42 Grad, also völlig daneben klar, aber der Luftdruck stimmt bis jetzt so ziemlich genau mit dem überein was meine Wetterstation sagt.

Btw. das mit dem neuen Modul werd ich gleich mal ausprobieren. Allerdings wird mir das nicht viel bringen da ich den über FHEM2FHEm abfragen müsste.

/Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

Dirk

Die Temperatur ist natürlich nur eingeschränkt nutzbar, da im eingebauten Zustand wohl die Gehäusetemperatur gemessen und angezeigt wird.
Ansonsten müsste der Sensor über ein kleines Kabel aus dem Gehäuse geführt werden.

Wenn dein Gehäuse und der Raum in dem sich das Gehäuse befindet nicht hermetisch abgeschlossen ist, dann funktioniert die Luftdruckanzeige.

Gruß
Dirk

Dirk

Zitat von: betateilchen schrieb am Mo, 22 Juli 2013 10:25die Namenswahl für Dein Modul finde ich etwas unglücklich, da gemischte klein- und Großbuchstaben nicht wirklich eine intuitive Benutzung ermöglichen.
Inwiefern beeinflusst die Modulschreibweise die intuitive Benutzung?
Aber auch am Modulnamen halte ich nicht fest. Daher bin ich hier für Vorschläge offen :)

Zitat... wie zuverlässig die (auch temperaturabhängigen) Meßwerte sind, wenn man die Platine auf den Raspberry auflötet und den dann in ein Gehäuse einbaut. Noch dazu, wo die Zusatzplatine an der Unterseite sitzt, wo je nach Gehäusetyp ohnehin nahezu keine Luftzirkulation stattfinden kann. Hast Du dazu schon Erfahrungen gesammelt
Die Temperaturmessung stand bei dem Luftdruckmodul, zu mindest bei mir, erstmal im Hintergrund. Tempertursensoren für FHEM gibt es ja fast wie Sand am Meer. Bei bezahlbaren Luftdrucksensoren sieht das ganze hier etwas anders aus. Daher ist die Temperaturmessung hier eher "Beiwerk".
Zum Luftdruckmessen braucht es auch keinen Zirkulation. Wichtig ist, dass das Gehäuse nicht Luftdicht ist. Die zu messende Luftsäule erreicht den Sensor auch über ein kleines Loch oder Spalt.

Gruß
Dirk

Puschel74

Hallo,

ZitatDie zu messende Luftsäule erreicht den Sensor auch über ein kleines Loch oder Spalt.

Und dazu reicht beim RasPi bereits der Spalt für die SD-Karte völlig aus.

Und so extreme Luftdruckschwankungen in kürzester Zeit wird es nicht geben das der Sensor nicht hinter her kommen wird.
Es sei den der RasPi ist in einem Wirbelsturm (aber da hätte ich andere Sorgen als meine Luftdruckmessung ;-) ).

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

betateilchen

Zitat von: Dirk schrieb am Mo, 22 Juli 2013 12:59Inwiefern beeinflusst die Modulschreibweise die intuitive Benutzung?

ganz einfach: bisher ist es so, dass die allermeisten Gerätemodule in Grossbuchstaben angegeben werden, die ganzen Helpermodule (at dummy notify structure...) fast immer in Kleinbuchstaben. Ich weiss zwar nicht, ob das in den fhem-Developer-Guidelines so festgeschrieben steht, aber ich finde diese Logik nicht die schlechteste.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Vorab: die alternative Lösung mit dem Adafruit python Skript funktioniert nach der Hardwareinstallation und liefert plausible Werte.

Das Modul bekam ich aber nicht ohne weiteres zum Laufen.

aktueller Status:

Inzwischen habe ich die HiPi nochmal installiert.
das Install-Skript legt die generierten Dateien alle nach /usr/local/lib/perl ab.
ich habe sie alle in die richtigen Verzeichnisse nach /usr/lib/perl kopiert.
der Versuch, den define Befehl abzusetzen, führt zu einem komplette Absturz von fhem es scheint noch irgendein Berechtigungsproblem zu sein:

open error on /dev/i2c-0: Keine Berechtigung

also ein sudo chown fhem:root /dev/i2c-0 abgesetzt.

Und siehe da:

(http://up.picr.de/15266291po.png)a

(die beiden Attribute sind von Haus aus gesetzt?)

Aber dann wieder ein Totalabsturz beim Versuch, die oben angebenen weiteren Attribute zu setzen.

bcm2835_init: Unable to open /dev/mem: Keine Berechtigung
Failed to initialise libbcm2835 at ./FHEM/51_i2cBMP180.pm line 151


Also als "Beta" würde ich das Ganze noch nicht einstufen - eher als Alpha. Wobei ich mir noch nicht sicher bin, ob es wirklich am Modul liegt, oder an der Inbetriebnahmeanleitung.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

@Dirk hast Du Dein fhem als root laufen? Solche Probleme hätten doch eigentlich schon vorher auffallen müssen.

Der Absturz wird definitiv von diesem Attribut verursacht:

attr BMP180 route_i2c0_to_p5 1

Ist das der Ersatz für das HiPi Umschalten? Ich kann nämlich aus dem Sensor die Werte problemlos auslesen, wenn ich diesen Befehl weglasse.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

PeMue

Hallo zusammen,

Zitat... oder an der Inbetriebnahmeanleitung.
Naja, bei dem Korrekturleser kann das schon mal vorkommen ;-)

Ich habe aber dasselbe Problem mit
open error on /dev/i2c-0: Keine Berechtigunghabe das aber auf meinen mangelnden Speicherplatz (SD Karte fast zu 100 % voll) geschoben. Habe die BMP180 Zeilen auskommentiert und der fhem Server startete wieder. Leider werde ich diese Woche nicht dazukommen, das Modul weiter zu testen, daher warte ich mal auf Eure Infos, sorry.

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

Dirk

Zitat@Dirk hast Du Dein fhem als root laufen? Solche Probleme hätten doch eigentlich schon vorher auffallen müssen.
Äh, mist. Meine Entwicklungsumgebung läuft hier tatsächlich als root. Dann setze ich mir hier noch mal ran un da eine Lösung zu finden.

Dirk

Ok, das Problem liegt hier dran:
"Because HiPi::BCM2835 accesses the SOC registers directly via /dev/mem, it must run with the necessary root privileges to gain access to /dev/mem."

Allerdings wird der Aufruf nur zum Umrouten des I2C-Busses auf den P5 benötigt.

Also Entweder FHEM als Root laufen lassen, was ich nicht gut finde. Allerdings gibt es auch eine Möglichkeit die Berechtigungen wieder zu kappen:
ZitatHiPi::Utils::drop_permissions_name($user, $group);
Oder Das Umrouten des I2C-Busses vor dem Starten von FHEM seperat auszuführen.

Hat jemand noch eine andere Idee?

Dirk

betateilchen

ei ei ei... da ist aber noch eine Menge zu tun.

- Man muss vor jedem Lesen der Messwerte ein set BMP180 readValues absetzen, die Werte werden nicht automatisch aktualisiert.

Ich habe die beiden Zeilen

       hipi-i2c e 0 1
        chown fhem:root /dev/i2c-0


in das fhem-Startskript eingebaut. Jetzt werde ich mal schauen, ob das auch nach einem Raspi-Reboot noch funktioniert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dirk

ZitatIch habe die beiden Zeilen

       hipi-i2c e 0 1
        chown fhem:root /dev/i2c-0


in das fhem-Startskript eingebaut. Jetzt werde ich mal schauen, ob das auch nach einem Raspi-Reboot noch funktioniert.
Das währe der aktuelle Workaround.
Ich habe im Moment auch keine andere Idee wie das sonst zu lösen währ.

Zitat- Man muss vor jedem Lesen der Messwerte ein set BMP180 readValues absetzen, die Werte werden nicht automatisch aktualisiert.
Das macht das Modul aber selber. Man muss den Sensor halt pollen.

mit set BMP180 readValues kann man die Werte zusätzlich manuell anfordern. Ansonsten pollt das Modul selbständig im eingestellten Intervall.

betateilchen

was ist denn die Einheit für das Intervall? MInuten oder Sekunden? (vielleicht hab ich das irgendwo überlesen)

so klappts auch mit dem Startskript (/etc/init.d/fhem)

case "$1" in
'start')
        sudo hipi-i2c e 0 1
        sudo chown fhem:root /dev/i2c-0
        ...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!