Raspberry, Firmata und I2C

Begonnen von doesel, 20 Mai 2015, 11:46:41

Vorheriges Thema - Nächstes Thema

klausw

Hi thymian,

dauert bei mir im mom bisschen mit den Antworten.

Die Lösung hat einen Nachteil, sie bekämpft nicht die Ursache. Der BMP180 beispielsweise funktioniert dann immer noch nicht. Bei dem ließe sich das auch nicht ohne weitere einbauen, da Druck und Temperatur soweit ich mich erinnere gleichlange Ergebnisse zurückliefern und damit die Unterscheidung unmöglich machen.
Eigentlich müsste 10_FRM.pm angepasst werden, das {type} mit zurück geliefert wird.

Grüße
Klaus
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

thymjan

Beim BMP180 stehen Druck und Temperatur in unterschiedlichen Registern. Danach wird auch beim Empfang im Modul unterschieden ({reg}). Der läuft hier tadellos mit FRM.

klausw

Ah, ok. Ist lange her, das ich das Bmp Modul angepasst hatte. Ich hatte nur hier irgendwo gelesen, das es nicht mit Ftm läuft. Aber vermutlich wurden dann frm_i2c verwendet...
Ok, da das Sht21 im mom das Einzige mit {type} ist kann ich auch deinen Lösungsansatz einbauen. Ich werde aber auch die {type} Variante drin lassen
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

thymjan

#18
Der key {type} ist redundant,  aber natürlich schöner zu lesen als die Bitmaske. Will man das konsequent umsetzen, müsste man {type} ja bis in die ConfigurableFirmata einpflegen, oder?

Hier noch die Definitionen mit denen ich I2C_SHT21 und I2C_BMP180 über FRM und Firmata auf Arduino Nano (Ethernet) und Arduino Mirco (USB) zum Laufen gebracht habe:

# Arduino Micro mit ConfigurableFirmata per USB am RasPi
define FRM_0 FRM /dev/ttyACM0@57600
attr FRM_0 i2c-config 1

# Arduino Nano mit ConfigurableFirmata per Ethernet
define FRM_1 FRM 3031 global
attr FRM_1 i2c-config 1
attr FRM_1 model nano

# BMP180 angeschlossen am Arduino Nano und Ethernet
define BMP180 I2C_BMP180
attr BMP180 IODev FRM_1
attr BMP180 icon weather_barometric_pressure
attr BMP180 oversampling_settings 0
attr BMP180 poll_interval 5

# SHT21 angeschlossen am Arduino Micro und USB
define AdaSensor I2C_SHT21
attr AdaSensor IODev FRM_0
attr AdaSensor icon temperature_humidity
attr AdaSensor poll_interval 5


Im Modul I2C_BMP180 werden momentan mit shutdown restart die oversampling_settings und das poll_interval immer mit den default-Werten 3 und 5 überschrieben. Ich hab die zwei Zeilen aus I2C_MBP180.pm rausgenommen.

Im übrigen setze ich nicht den SHT21 ein, sondern den HTU21D-F. Der hat das gleiche Protokoll und funktioniert auch tadellos mit I2C_SHT21.

klausw

#19
Zitat von: thymjan am 07 September 2015, 20:44:17
Der key {type} ist redundant,  aber natürlich schöner zu lesen als die Bitmaske. Will man das konsequent umsetzen, müsste man {type} ja bis in die ConfigurableFirmata einpflegen, oder?
Nein, im Modul 10_FRM.pm ist ausreichend. Es gibt jede I2C Adresse pro Bus nur 1x.

Wenn ich es mir genauer überlege ist deine Lösung doch die elegantere.
Den Satz in der Spec bezüglich Bit 1 zur Unterscheidung habe ich damals überlesen.  :(
Das logische Modul (in diesem Fall) das SHT21 muss schließlich selbst wissen, was es angefordert hat.
Damit muss das physikal Modul (z.B. FRM) nix mit zu tun haben.

Deine Modifikation läuft bei dir ohne Probleme?
Wenn ja teste ich sie auch noch paar Tage bei mit und pflege es ein.

Zitat von: thymjan am 07 September 2015, 20:44:17
Im übrigen setze ich nicht den SHT21 ein, sondern den HTU21D-F. Der hat das gleiche Protokoll und funktioniert auch tadellos mit I2C_SHT21.
Gut zu wissen, der ist um einiges günstiger :)
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

thymjan

Hallo Klaus,

habe die Modifikation von I2C_SHT21.pm noch in Verbindung mit einem Arduino micro per USB an einem raspi B getestet. Lief auf Anhieb und spuckt stabil plausible Messwerte aus.

Gruß,
Stefan


klausw

Ok, bei mir läuft es auch.
Werde es heute einchecken.
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

schami23

Hallo,
ich benutze einen Arduino mit Firmata drauf und möchte einen HTU21D Sensor einbinden ich habe den Sensor wie folgt eingebunden:


Internals:
   FIRMATA_SENDSTAT Ok
   I2C_Address 64
   IODev      FIRMATA
   NAME       AdaSensor
   NR         177
   STATE      T: 23.2 H: 35.0
   TYPE       I2C_SHT21
   Readings:
     2016-01-02 14:45:35   humidity        35.0
     2016-01-02 14:45:35   state           T: 23.2 H: 35.0
     2016-01-02 19:51:36   temperature     22.6
Attributes:
   IODev      FIRMATA
   poll_interval 5


Das auslesen der Temperatur funktioniert aber aber die Luftfeuchtigkeit wird kurz nach dem anlegen ausgelesen aber dann nicht mehr.
Was mir seltsam erscheint ist das laut Log die Temperatur zweimal ausgelesen wird.


2016-01-02_14:45:35 AdaSensor temperature: 23.2
2016-01-02_14:45:35 AdaSensor humidity: 35.0
2016-01-02_14:48:37 AdaSensor temperature: 23.1
2016-01-02_14:48:37 AdaSensor temperature: 23.1
2016-01-02_14:48:40 AdaSensor temperature: 23.1
2016-01-02_14:48:40 AdaSensor temperature: 23.1
2016-01-02_14:48:42 AdaSensor temperature: 23.1
2016-01-02_14:48:42 AdaSensor temperature: 23.1
2016-01-02_14:48:43 AdaSensor temperature: 23.1
2016-01-02_14:48:43 AdaSensor temperature: 23.1
2016-01-02_14:50:36 AdaSensor temperature: 23.1
2016-01-02_14:50:36 AdaSensor temperature: 23.1
2016-01-02_14:55:36 AdaSensor temperature: 22.9
2016-01-02_14:55:36 AdaSensor temperature: 22.9
2016-01-02_15:00:36 AdaSensor temperature: 22.9
2016-01-02_15:00:36 AdaSensor temperature: 22.9
2016-01-02_15:05:36 AdaSensor temperature: 22.8
2016-01-02_15:05:36 AdaSensor temperature: 22.8
2016-01-02_15:10:36 AdaSensor temperature: 22.8
2016-01-02_15:10:36 AdaSensor temperature: 22.8
2016-01-02_15:15:36 AdaSensor temperature: 22.9
2016-01-02_15:15:36 AdaSensor temperature: 22.9
2016-01-02_15:20:36 AdaSensor temperature: 22.7
2016-01-02_15:20:36 AdaSensor temperature: 22.7
2016-01-02_15:25:37 AdaSensor temperature: 22.8
2016-01-02_15:25:37 AdaSensor temperature: 22.8
2016-01-02_15:30:37 AdaSensor temperature: 22.7
2016-01-02_15:30:37 AdaSensor temperature: 22.7
2016-01-02_15:35:37 AdaSensor temperature: 22.8
2016-01-02_15:35:37 AdaSensor temperature: 22.8
2016-01-02_15:40:37 AdaSensor temperature: 22.7
2016-01-02_15:40:38 AdaSensor temperature: 22.7
2016-01-02_15:45:37 AdaSensor temperature: 22.8
2016-01-02_15:45:37 AdaSensor temperature: 22.8
2016-01-02_15:50:37 AdaSensor temperature: 22.7
2016-01-02_15:50:37 AdaSensor temperature: 22.7
2016-01-02_15:55:37 AdaSensor temperature: 22.8
2016-01-02_15:55:37 AdaSensor temperature: 22.8
2016-01-02_16:00:38 AdaSensor temperature: 22.8
2016-01-02_16:00:38 AdaSensor temperature: 22.8
2016-01-02_16:05:38 AdaSensor temperature: 22.7
2016-01-02_16:05:38 AdaSensor temperature: 22.7
2016-01-02_16:10:38 AdaSensor temperature: 22.8
2016-01-02_16:10:38 AdaSensor temperature: 22.8
2016-01-02_16:15:38 AdaSensor temperature: 22.8
2016-01-02_16:15:38 AdaSensor temperature: 22.8
2016-01-02_16:20:38 AdaSensor temperature: 22.7
2016-01-02_16:20:38 AdaSensor temperature: 22.7
2016-01-02_16:25:38 AdaSensor temperature: 22.7
2016-01-02_16:25:38 AdaSensor temperature: 22.7
2016-01-02_16:30:38 AdaSensor temperature: 22.7
2016-01-02_16:30:38 AdaSensor temperature: 22.7
2016-01-02_16:35:38 AdaSensor temperature: 22.6
2016-01-02_16:35:38 AdaSensor temperature: 22.6
2016-01-02_16:40:39 AdaSensor temperature: 22.7
2016-01-02_16:40:39 AdaSensor temperature: 22.7
2016-01-02_16:45:39 AdaSensor temperature: 22.6
2016-01-02_16:45:39 AdaSensor temperature: 22.6
2016-01-02_16:50:39 AdaSensor temperature: 22.5
2016-01-02_16:50:39 AdaSensor temperature: 22.5
2016-01-02_16:55:39 AdaSensor temperature: 22.4
2016-01-02_16:55:39 AdaSensor temperature: 22.4
2016-01-02_17:00:39 AdaSensor temperature: 22.4
2016-01-02_17:00:39 AdaSensor temperature: 22.4
2016-01-02_17:05:39 AdaSensor temperature: 22.3
2016-01-02_17:05:39 AdaSensor temperature: 22.3
2016-01-02_17:10:39 AdaSensor temperature: 22.2
2016-01-02_17:10:39 AdaSensor temperature: 22.2
2016-01-02_17:15:40 AdaSensor temperature: 22.3
2016-01-02_17:15:40 AdaSensor temperature: 22.3
2016-01-02_17:20:40 AdaSensor temperature: 22.3
2016-01-02_17:20:40 AdaSensor temperature: 22.3
2016-01-02_17:25:40 AdaSensor temperature: 22.2
2016-01-02_17:25:40 AdaSensor temperature: 22.2
2016-01-02_17:30:40 AdaSensor temperature: 22.2
2016-01-02_17:30:40 AdaSensor temperature: 22.2
2016-01-02_17:35:40 AdaSensor temperature: 22.2
2016-01-02_17:35:40 AdaSensor temperature: 22.2
2016-01-02_17:40:40 AdaSensor temperature: 22.3
2016-01-02_17:40:40 AdaSensor temperature: 22.3
2016-01-02_17:45:40 AdaSensor temperature: 22.5
2016-01-02_17:45:40 AdaSensor temperature: 22.5
2016-01-02_17:50:41 AdaSensor temperature: 22.5
2016-01-02_17:50:41 AdaSensor temperature: 22.5
2016-01-02_17:55:41 AdaSensor temperature: 22.4
2016-01-02_17:55:41 AdaSensor temperature: 22.4
2016-01-02_18:00:41 AdaSensor temperature: 22.4
2016-01-02_18:00:41 AdaSensor temperature: 22.4
2016-01-02_18:05:41 AdaSensor temperature: 22.4
2016-01-02_18:05:41 AdaSensor temperature: 22.4
2016-01-02_18:10:41 AdaSensor temperature: 22.3
2016-01-02_18:10:41 AdaSensor temperature: 22.3
2016-01-02_18:15:41 AdaSensor temperature: 22.5
2016-01-02_18:15:41 AdaSensor temperature: 22.5
2016-01-02_18:20:41 AdaSensor temperature: 22.5
2016-01-02_18:20:41 AdaSensor temperature: 22.5
2016-01-02_18:25:42 AdaSensor temperature: 22.4
2016-01-02_18:25:42 AdaSensor temperature: 22.4
2016-01-02_18:30:42 AdaSensor temperature: 22.5
2016-01-02_18:30:42 AdaSensor temperature: 22.5
2016-01-02_18:35:42 AdaSensor temperature: 62.7
2016-01-02_18:35:42 AdaSensor temperature: 62.7
2016-01-02_18:40:42 AdaSensor temperature: 62.7
2016-01-02_18:40:42 AdaSensor temperature: 62.7
2016-01-02_18:50:32 AdaSensor temperature: 22.4
2016-01-02_18:50:32 AdaSensor temperature: 22.4
2016-01-02_18:55:32 AdaSensor temperature: 22.4
2016-01-02_18:55:32 AdaSensor temperature: 22.4
2016-01-02_19:00:32 AdaSensor temperature: 22.4
2016-01-02_19:00:32 AdaSensor temperature: 22.4
2016-01-02_19:05:33 AdaSensor temperature: 22.3
2016-01-02_19:05:33 AdaSensor temperature: 22.3
2016-01-02_19:10:33 AdaSensor temperature: 22.4
2016-01-02_19:10:33 AdaSensor temperature: 22.4
2016-01-02_19:15:33 AdaSensor temperature: 22.5
2016-01-02_19:15:33 AdaSensor temperature: 22.5
2016-01-02_19:20:33 AdaSensor temperature: 22.6
2016-01-02_19:20:33 AdaSensor temperature: 22.6
2016-01-02_19:25:33 AdaSensor temperature: 22.5
2016-01-02_19:25:33 AdaSensor temperature: 22.5
2016-01-02_19:30:33 AdaSensor temperature: 22.6
2016-01-02_19:30:33 AdaSensor temperature: 22.6
2016-01-02_19:35:33 AdaSensor temperature: 22.6
2016-01-02_19:35:33 AdaSensor temperature: 22.6
2016-01-02_19:40:33 AdaSensor temperature: 22.6
2016-01-02_19:40:33 AdaSensor temperature: 22.6
2016-01-02_19:40:41 AdaSensor temperature: 22.6
2016-01-02_19:40:41 AdaSensor temperature: 22.6
2016-01-02_19:40:43 AdaSensor temperature: 22.6
2016-01-02_19:40:43 AdaSensor temperature: 22.6
2016-01-02_19:40:44 AdaSensor temperature: 22.6
2016-01-02_19:40:44 AdaSensor temperature: 22.6
2016-01-02_19:40:45 AdaSensor temperature: 22.6
2016-01-02_19:40:45 AdaSensor temperature: 22.6
2016-01-02_19:45:34 AdaSensor temperature: 22.6
2016-01-02_19:45:34 AdaSensor temperature: 22.6
2016-01-02_19:50:34 AdaSensor temperature: 22.6
2016-01-02_19:50:34 AdaSensor temperature: 22.6
2016-01-02_19:51:34 AdaSensor temperature: 22.6
2016-01-02_19:51:34 AdaSensor temperature: 22.6
2016-01-02_19:51:35 AdaSensor temperature: 22.7
2016-01-02_19:51:35 AdaSensor temperature: 22.7
2016-01-02_19:51:36 AdaSensor temperature: 22.6
2016-01-02_19:51:36 AdaSensor temperature: 22.6
2016-01-02_19:55:34 AdaSensor temperature: 22.6
2016-01-02_19:55:34 AdaSensor temperature: 22.6


Ich habe auch schon einen anderen Arduino und zwei andere HTU21D versucht.

Bitte um Hilfe

danke
FHEM auf Debian Stretch, HM-CFG-LAN, HM Thermostat und Rauchmelder, ESPEasy, viel selbst gebasteltes mit MQTT, Snips

thymjan

Hallo schami23,

Das ist ein seltsames Verhalten.

ist Dein FHEM aktuell (welche Version; mit "update" in der ersten Zeile im WebInterface wird auf die aktuellste Version geupdated)? Welche Firmata-Version verwendest Du denn?
Wie ist Dein Arduino angeschlossen (per USB oder per Ethernet)?

Gruß,
Stefan

schami23

#24
Im Event monitor kommt folgende ausgabe wenn ich set readValues ausführe.

2016-01-03 13:00:02 I2C_SHT21 AdaSensor readValues
2016-01-03 13:00:02 I2C_SHT21 AdaSensor temperature: 22.3
2016-01-03 13:00:02 FRM FIRMATA error: I2C: Too few bytes received
2016-01-03 13:00:02 I2C_SHT21 AdaSensor temperature: 22.3


Ich benutze einen Arduino Mega mit Ethernet hab es aber auch schon mit Uno versucht.
FHEM hab ich erst vor kurzen abgedatet.

Grüße Jürgen
FHEM auf Debian Stretch, HM-CFG-LAN, HM Thermostat und Rauchmelder, ESPEasy, viel selbst gebasteltes mit MQTT, Snips

thymjan

Stell mal sowohl beim SHT21 als auch beim FRM Module verbose auf 5 und schau Dir dann das Log-File dazu an.
Gruß,
Stefan

schami23

Hier das die log von FRM  und SHT21 Modul :

2016.01.03 20:19:27 5: FRM:>f07640007301f7
2016.01.03 20:19:27 5: FRM:>f07640080200f7
2016.01.03 20:19:27 5: FRM:>f07640007501f7
2016.01.03 20:19:27 5: FRM:>f07640080200f7
2016.01.03 20:19:27 5: FRM:<f07740
2016.01.03 20:19:27 5: FRM:<000000
2016.01.03 20:19:27 5: FRM:<640008
2016.01.03 20:19:27 5: FRM:<01f7
2016.01.03 20:19:27 5: onI2CMessage address: '64', register: '0' data: [100,136]
2016.01.03 20:19:27 5: empfangen: 100 136
2016.01.03 20:19:27 5: FRM:<f07149
2016.01.03 20:19:27 5: FRM:<0032004300
2016.01.03 20:19:27 5: FRM:<3a00
2016.01.03 20:19:27 5: FRM:<200054
2016.01.03 20:19:27 5: FRM:<006f
2016.01.03 20:19:27 5: FRM:<006f
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<2000
2016.01.03 20:19:27 5: FRM:<66
2016.01.03 20:19:27 5: FRM:<0065
2016.01.03 20:19:27 5: FRM:<0077
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<2000
2016.01.03 20:19:27 5: FRM:<62
2016.01.03 20:19:27 5: FRM:<0079
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<74
2016.01.03 20:19:27 5: FRM:<0065
2016.01.03 20:19:27 5: FRM:<0073
2016.01.03 20:19:27 5: FRM:<0020
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<72
2016.01.03 20:19:27 5: FRM:<0065
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<63
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<65
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<6900
2016.01.03 20:19:27 5: FRM:<76
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<65
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<64
2016.01.03 20:19:27 5: FRM:<00
2016.01.03 20:19:27 5: FRM:<f7
2016.01.03 20:19:27 3: received String_data: I2C: Too few bytes received
2016.01.03 20:19:27 5: FRM:<f0774000000064000801f7
2016.01.03 20:19:27 5: onI2CMessage address: '64', register: '0' data: [100,136]
2016.01.03 20:19:27 5: empfangen: 100 136


FHEM auf Debian Stretch, HM-CFG-LAN, HM Thermostat und Rauchmelder, ESPEasy, viel selbst gebasteltes mit MQTT, Snips

thymjan

Hallo Jürgen,

verwendest Du die Standard Firmata oder die ConfigurableFirmata? Welche Version genau?

Was hängt sonst noch an Deinem Arduino?

Gruß,
Stefan

schami23

Hallo Stefan,

ich verwende die ConfigurableFirmata, und es hängt noch ein BMP180 am Arduino.
Seit dem letzten update Gestern geht die Verbindung  zum FRM immer wieder verloren.
Ich habe mich entschlossen meinen Server zu aktualisieren und die neue Version von FHEM zu installieren, mal schauen ob es dann funktioniert.
Melde mich dann wieder.

Grüße Jürgen
FHEM auf Debian Stretch, HM-CFG-LAN, HM Thermostat und Rauchmelder, ESPEasy, viel selbst gebasteltes mit MQTT, Snips

klausw

Ich habe mit jetzt auch ein paar Arduino Nanos bestellt und würde einen Versuchsaufbau mit Firmata machen wollen.
Gibt es eine kurze Anleitung/Tutorial, welches Firmata ich wie draufbekommen soll/muss?  8)
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