platformübergreifende I2C Module

Begonnen von klausw, 05 Februar 2014, 14:01:47

Vorheriges Thema - Nächstes Thema

klausw

Zitat von: ntruchsess am 25 März 2014, 22:07:59
Wie so ein Wrapper aussehen kann kannst Du z.B. hier im I2C_LCD modul sehen. Der Wrapper bietet die gleiche i2c_write-methode an, wie die firmata-library, die das Modul vorher verwendet hat und ruft statt dessen die I2CWrtFn im IODev auf. (So ein Objektorientierter Wrapper ist auch sonst nicht schlecht, ich finde er macht den übrigen code durchaus auch lesbarer)
Irendwie stehe ich auf den Schlauch. Ich kann nur eine i2c_write methode erkennen. Wo ist die von der firmata library?
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

ntruchsess

#46
Zitat von: klausw am 26 März 2014, 10:41:16Ich kann nur eine i2c_write methode erkennen. Wo ist die von der firmata library?

-> hier

Der Witz ist, dass es der LCD-library egal ist, ob sie Device::Firmata::Platform::i2c_write oder I2C_LCD_IO::i2c_write aufruft, solange sich die beiden gleich benannten Methoden nach außen hin gleich verhalten. Wenn man das Package mit 'bless' als Klasse verwendet (hier der Aufruf des new-constructors), dann steckt der Packagename implizit im Objekt, wenn man den methodennamen mit $objekt->methode(..) aufruft.
while (!asleep()) {sheep++};

klausw

Grundsätzlich verstehe ich es. Aber ich muss in einer ruhigen Minute mal drüberschauen um es im Detail zu verstehen.

Mir ist noch etwas anderes aufgefallen: Wenn das IODev im Client nicht beim starten von FHEM definiert ist und man es nachträglich hinzufügt, dann wir die InitFn nicht ausgeführt.
Das ist kein riesen Problem, aber schön ist es nicht.
Hast Du eine Idee wie man das beheben kann?
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

betateilchen

Warum heißt es eigentlich RPII2C aber im Gegensatz dazu RPI_GPIO (mit Unterstrich, wie bei allen anderen zugehörigen/ähnlichen Module auch)?

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

klausw

Zitat von: betateilchen am 28 März 2014, 09:04:08
Warum heißt es eigentlich RPII2C aber im Gegensatz dazu RPI_GPIO
Ein Unterstrich im Master Modul (RPI_I2C) hatte dazu geführt das die Verbindung zwischen den Modulen nicht funktioniert.
Nur RPI finde ich unpassend weil es nicht das einzige Modul für den Pi ist.
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

betateilchen

Zitat von: klausw am 25 März 2014, 22:27:17
Für das Device::SMBus musst du ein paar Stunden einplanen. Der Cpan Kram dauert ewig.

wieso ein paar Stunden? Ich habe das gerade installiert (allerdings manuell, da die automatische Installation per CPAN bereits beim Entpacken des Modularchivs scheitert)

Erster Schritt (Dauer ca. 10 Sekunden):


root@fhem-dev ~/.cpan/sources/authors/id/S/SH/SHANTANU/Device-SMBus-1.06 # perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Moose 0 not found.
Writing Makefile for Device::SMBus
Writing MYMETA.yml



Die Warnung bezüglich Moose sollte man ernstnehmen und das fehlende Paket nachinstallieren! (Dauer ca. 1 Minute)



apt-get install libmoose-perl



Nächster Schritt (Dauer ca. 1 Minute)



root@fhem-dev ~/.cpan/sources/authors/id/S/SH/SHANTANU/Device-SMBus-1.06 # make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00-compile.t ......... ok   
t/00-report-prereqs.t .. # Prerequisite Report:
#   Version Module               
#   ------- ---------------------
#      1.20 Carp                 
#   6.57_05 ExtUtils::MakeMaker 
#      1.11 Fcntl               
#      1.19 File::Find           
#      3.33 File::Spec::Functions
#      0.22 File::Temp           
#      1.15 IO::File             
#      1.23 List::Util           
#    2.0603 Moose               
#      0.98 Test::More           
#      0.13 XSLoader             
#      1.21 constant             
#      1.04 strict               
#      1.12 warnings             
t/00-report-prereqs.t .. ok   
t/Device-SMBus.t ....... ok   
All tests successful.
Files=3, Tests=3, 17 wallclock secs ( 0.57 usr  0.05 sys + 15.53 cusr  0.50 csys = 16.65 CPU)
Result: PASS



Letzter Schritt (Dauer ca. 8 Sekunden):


root@fhem-dev ~/.cpan/sources/authors/id/S/SH/SHANTANU/Device-SMBus-1.06 # make install
Manifying blib/man3/Device::SMBus.3pm
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /usr/local/lib/perl/5.14.2/auto/Device/SMBus/SMBus.bs
Installing /usr/local/lib/perl/5.14.2/auto/Device/SMBus/SMBus.so
Installing /usr/local/lib/perl/5.14.2/Device/SMBus.pm
Installing /usr/local/man/man3/Device::SMBus.3pm
Appending installation info to /usr/local/lib/perl/5.14.2/perllocal.pod
root@fhem-dev ~/.cpan/sources/authors/id/S/SH/SHANTANU/Device-SMBus-1.06 #


Alles in allem weniger als 5 Minuten.

Danach klappts dann auch mit dem define in fhem (Den Luftdrucksensor habe ich aber trotzdem noch nicht zum Laufen gebracht)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klausw

#51
Zitat von: betateilchen am 28 März 2014, 10:15:56
wieso ein paar Stunden? Ich habe das gerade installiert (allerdings manuell, da die automatische Installation per CPAN bereits beim Entpacken des Modularchivs scheitert)
Auch gut, das kann ich noch mit in die commandref aufnehmen. Für manuell war ich zu faul ;)

Zitat von: betateilchen am 28 März 2014, 10:15:56
Danach klappts dann auch mit dem define in fhem (Den Luftdrucksensor habe ich aber trotzdem noch nicht zum Laufen gebracht)
Im RPII2C Module ein read 77 AA bringt einen Wert zurück?

Auf welchem System setzt Du es ein?
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

betateilchen

#52
Ich nutze die kleine BMP180 Platine von Dirk auf einem Raspberry.

Das Ganze funktioniert nur, wenn ich hardwaremäßig genau so vorgehe, wie bisher auch. Ich muss mit den hipi-tools den I2C Bus umschalten:

hipi-i2c e 0 1

Dann funktioniert es auch mit RPII2C und I2C_BMP180 Aber was habe ich dann eigentlich mit den neuen Modulen gewonnnen? Ich dachte, Sinn und Zweck wäre es, gerade die HiPi-Tools nicht mehr zu brauchen?

(http://up.picr.de/17786090vs.png)

Achja: Könnte man die Adresse in den Internals bitte in hex darstellen (77 statt 119)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klausw

wie kommt man denn dahin:
root@fhem-dev ~/.cpan/sources/authors/id/S/SH/SHANTANU/Device-SMBus-1.06 # make install
du hast das Paket nicht runtergeladen, oder?
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

klausw

Zitat von: betateilchen am 28 März 2014, 10:46:47
Ich dachte, Sinn und Zweck wäre es, gerade die HiPi-Tools nicht mehr zu brauchen?
Die HiPi tools brauch man auch nicht mehr. Die sind nur eine Alternative

Gibt es ein Dir in den Internals:
HiPi_exists 1
HiPi_used 1


Dann hast Du vergessen /dev/i2c-1 im define zu entfernen
Ausserdem musst Du das attribut IODev vergeben
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

betateilchen

Wer lesen kann, ist klar im Vorteil  8)

Ich hatte doch weiter oben schon geschrieben, dass die automatische Installation über CPAN am Entpacken des Modul-Archivs scheitert. Das Archiv-File selbst ist aber nach dem Abbruch im angegebenen Pfad durchaus vorhanden.


root@fhem-dev ~/.cpan/sources/authors/id/S/SH/SHANTANU # ls
insgesamt 148K
drwxr-xr-x 3 root root 4,0K Mär 28 09:54 .
drwxr-xr-x 3 root root 4,0K Mär 28 09:52 ..
-rw-r--r-- 1 root root  71K Mär 28 09:52 CHECKSUMS
drwxr-xr-x 6 pi   pi   4,0K Mär 28 10:02 Device-SMBus-1.06
-rw-r--r-- 1 root root  62K Mär 28 09:52 Device-SMBus-1.06.tar.gz


Dann habe ich das Archiv eben "von Hand" ausgepackt und dann mit der perl-"üblichen" manuellen Installationsvariante weitergemacht, was problemlos funktioniert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: klausw am 28 März 2014, 11:03:52
Die HiPi tools brauch man auch nicht mehr. Die sind nur eine Alternative

Gibt es ein Dir in den Internals:

Du fragst mich lauter Zeugs, das ich längst beantwortet habe. Die Internals siehst Du oben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klausw

Zitat von: betateilchen am 28 März 2014, 11:03:58
Das Archiv-File selbst ist aber nach dem Abbruch im angegebenen Pfad durchaus vorhanden.
Diese Info wäre im obere Post hilfreich gewesen :)

Zitat von: betateilchen am 28 März 2014, 11:04:48
Du fragst mich lauter Zeugs, das ich längst beantwortet habe. Die Internals siehst Du oben.
Eben nicht ... Filtert die Firewall raus.


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

betateilchen

Dass das Archiv nach dem fehlgeschlagenen Entpacken nicht gelöscht wird, nur weil das Entpacken nicht klappt, ist eigentlich normal und bedarf für mich keiner Erwähnung.

Und ich kann nix für Deine Firewall.


Internals:
   CFGFN     
   HiPi_exists 1
   I2C_Address 119
   I2C_RAWMSG 64
   I2C_SENDSTAT Ok
   IODev      I2C
   NAME       BMP180
   NR         31
   STATE      T: 32.7 P: 1010.8 P-NN: 1020.2
   TYPE       I2C_BMP180
   Readings:
     2014-03-28 11:19:36   _state          T: 32.7 P: 1010.8 P-NN: 1020.2
     2014-03-28 11:19:36   altitude        80
     2014-03-28 11:19:36   pressure        1010.8
     2014-03-28 11:19:36   pressure-nn     1020.2
     2014-03-28 11:19:36   state           T: 32.7 P: 1010.8 P-NN: 1020.2
     2014-03-28 11:19:36   temperature     32.7
   Calibrationdata:
     ac1        8566
     ac2        -1206
     ac3        -14749
     ac4        33641
     ac5        24820
     ac6        20318
     b1         6515
     b2         49
     b5         5224.65443544762
     mb         -32768
     mc         -11786
     md         2929
Attributes:
   IODev      I2C
   oversampling_settings 3
   poll_interval 5
   userReadings _state:.* {ReadingsVal('BMP180','state','')}
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Das Problem ist, dass ohne die hipi-tools der Sensor auf Dirks Platine weder auf Bus0 noch auf Bus1 gefunden wird, weil diese Platine auf P5 montiert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!