platformübergreifende I2C Module

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

Vorheriges Thema - Nächstes Thema

ntruchsess

Zitat von: klausw am 25 März 2014, 15:19:20
Das heisst also, ich muss in Zukunft immer das DevIO Attribut setzen?
das macht AssignIoPort für Dich. Dazu muss 'IODev' in der Liste der Attribute mit aufgeführt sein.
while (!asleep()) {sheep++};

klausw

Zitat von: ntruchsess am 25 März 2014, 15:22:06
das macht AssignIoPort für Dich. Dazu muss 'IODev' in der Liste der Attribute mit aufgeführt sein.
Genau das meinte ich, ohne diese Attribut wird es also in Zukunft nicht gehen.
Aus diesem Grund funktionierte es sicherlich auch nicht bei mir. Ich habe das Attribut nicht gesetzt.
Dann probiere ich das gleich mal aus ... und vervollständige die commandref diesbezüglich
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

#32
Eine Kleinigkeit: wir sollten uns darauf einigen die I2C-addresse einheitlich zu interpretieren. Ich habe das bisher dezimal gemacht, Deine Module erwarten hex. Ich wäre dafür das so wie Perl selbst Integer Literale interpretiert zu machen: führende 0: oktal, 0x/0X hex 0b/0B binaer alles andere dezimal. Also mit ~= /^0.*/ testen ob es mit 0 anfängt - wenn ja, dann 'oct'  benutzen, ansonsten direkt den Wert, so wie er kommt.
while (!asleep()) {sheep++};

klausw

Zitat von: ntruchsess am 25 März 2014, 15:46:45
Eine Kleinigkeit: wir sollten uns darauf einigen die I2C-addresse einheitlich zu interpretieren. Ich habe das bisher dezimal gemacht, Deine Module erwarten hex. Ich wäre dafür das so wie Perl selbst Integer Literale interpretiert zu machen: führende 0: oktal, 0x/0X hex 0b/0B binaer alles andere dezimal. Also mit ~= /^0.*/ testen ob es mit 0 anfängt - wenn ja, dann 'oct'  benutzen, ansonsten direkt den Wert, so wie er kommt.
Gute Idee, ich kopiere es dann aus Deinem Modul :)
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

while (!asleep()) {sheep++};

klausw

Zitat von: ntruchsess am 25 März 2014, 16:22:04
bitte schön :-)
Danke :D
Jetzt funktioniert es soweit...falls ich heute Abend dazukomme werde ich es einchecken.

Die Geschichte mir generellen IN/ OUT Modulen muss ich mir noch überlegen. Das ist etwas komplexer.
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

Bin noch am überlegen, was ich mit dem 52_I2C_BMP180.pm mache.
Der 51_I2C_BMP180.pm wir ja eigentlich obsolete...
Oder ich benenne ihn in 52_I2C_Pressure.pm oder so um.
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

Zitat von: klausw am 25 März 2014, 17:40:47
Bin noch am überlegen, was ich mit dem 52_I2C_BMP180.pm mache.
Der 51_I2C_BMP180.pm wir ja eigentlich obsolete...
Oder ich benenne ihn in 52_I2C_Pressure.pm oder so um.

Frag doch den Dirk Hoffman, was er dazu sagt.
while (!asleep()) {sheep++};

betateilchen

Für mich ist das bisherige Modul keineswegs obsolet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

klausw

@Norbert: kann man in Perl abfragen ob eine Bibliothek existiert und sie dann verwenden?
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

natürlich kann man: eval {"use blaLibrary"} wahlweise auch mit require statt use.

Wird auch in diversen Modulen so verwendet, z.B. 02_RSS.pm, 32_mailcheck.pm ...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ntruchsess

#41
Zitat von: klausw am 25 März 2014, 17:40:47
Bin noch am überlegen, was ich mit dem 52_I2C_BMP180.pm mache.

eine Möglichkeit wäre beides zu mergen und über ein Attribut umschaltbar zu machen, ob man die neue hardwareunabhängige I2C-api (über IODev) oder den direkten Zugriff auf die hardwarespezifische lib (im Modul) benutzen möchte. Der BMP180-spezifische code ist in beiden Fällen ja praktisch der gleiche. Dazu wrapped man am z.B. die neue API in einem Package welches die gleichen benötigten Methoden wie die hardwarespezifische Lib hat. Dann kann man weite Teile des codes unverändert lassen. 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)

while (!asleep()) {sheep++};

ntruchsess

Ach so - am Wochenende würde ich das mal mit meinem Pi ausprobieren. Brauch ich (außer den I2C-kernelmodulen) irgendwelche Hardware, oder kann man die I2C-devices direkt an den GPIO-pins anschließen?

Gruß,

Norbert
while (!asleep()) {sheep++};

klausw

Zitat von: ntruchsess am 25 März 2014, 22:21:11
Ach so - am Wochenende würde ich das mal mit meinem Pi ausprobieren. Brauch ich (außer den I2C-kernelmodulen) irgendwelche Hardware, oder kann man die I2C-devices direkt an den GPIO-pins anschließen?

Gruß,

Norbert
Nein, einfach an die Pins anschließen. Auch die Pullups sind schon drauf.
Die Pins sind 3,3V Logik!
Für das Device::SMBus musst du ein paar Stunden einplanen. Der Cpan Kram dauert ewig.
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 25 März 2014, 19:48:01
natürlich kann man: eval {"use blaLibrary"} wahlweise auch mit require statt use.

Wird auch in diversen Modulen so verwendet, z.B. 02_RSS.pm, 32_mailcheck.pm ...
an sich leicht verständlich, wenn man die Beispiele sieht ;)
das sollte ich hinbekommen
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