Raspberry, Firmata und I2C

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

Vorheriges Thema - Nächstes Thema

thymjan

@Klaus: ich hab nur "timer" gedacht, da hast Du's schon umgesetzt, super! Werd' ich nacher gleich testen.
Gruß,
Stefan

schami23

Funktioniert ohne Probleme, die Werte kommen mit 1 Sekunde abstand an.


2016.01.05 17:31:21 5: empfangen: 101 192
2016.01.05 17:31:23 5: empfangen: 84 106
2016.01.05 17:32:24 5: empfangen: 101 68
2016.01.05 17:32:25 5: empfangen: 83 110
2016.01.05 17:33:26 5: empfangen: 101 36
2016.01.05 17:33:27 5: empfangen: 81 78
2016.01.05 17:34:28 5: empfangen: 101 16
2016.01.05 17:34:29 5: empfangen: 81 126
2016.01.05 17:35:30 5: empfangen: 101 0
2016.01.05 17:35:31 5: empfangen: 82 114



2016-01-05_17:31:21 AdaSensor temperature: 23.0
2016-01-05_17:31:23 AdaSensor humidity: 35.2
2016-01-05_17:32:24 AdaSensor temperature: 22.7
2016-01-05_17:32:25 AdaSensor humidity: 34.7
2016-01-05_17:33:26 AdaSensor temperature: 22.6
2016-01-05_17:33:27 AdaSensor humidity: 33.7
2016-01-05_17:34:28 AdaSensor temperature: 22.5
2016-01-05_17:34:29 AdaSensor humidity: 33.8
2016-01-05_17:35:30 AdaSensor temperature: 22.5
2016-01-05_17:35:31 AdaSensor humidity: 34.3
2016-01-05_17:36:32 AdaSensor temperature: 22.5
2016-01-05_17:36:33 AdaSensor humidity: 33.9
2016-01-05_17:37:34 AdaSensor temperature: 22.4
2016-01-05_17:37:35 AdaSensor humidity: 34.0
2016-01-05_17:38:39 AdaSensor temperature: 22.4
2016-01-05_17:38:40 AdaSensor humidity: 34.0
2016-01-05_17:39:42 AdaSensor temperature: 22.4
2016-01-05_17:39:43 AdaSensor humidity: 33.9
2016-01-05_17:40:44 AdaSensor temperature: 22.4
2016-01-05_17:40:45 AdaSensor humidity: 33.9
2016-01-05_17:41:46 AdaSensor temperature: 22.5
2016-01-05_17:41:47 AdaSensor humidity: 33.9
FHEM auf Debian Stretch, HM-CFG-LAN, HM Thermostat und Rauchmelder, ESPEasy, viel selbst gebasteltes mit MQTT, Snips

klausw

#47
äh, gut 1s zwischen Temperatur und Feuchte ... aber dann sollte erstmal für den Poll Interval ruhe sein

weil ich gerade dabei bin, noch eine Version mit aktiviertem CRC Check.
Werte werden ab jetzt nur noch aktualisiert, wenn die CRC Prüfsummenberechnung gut geht.
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

#48
Super arbeitet einwandfrei. :)

So werde mich jetzt dran machen, mehrere von den HTU21 an meinen FRM anzubinden.
Ich möchte sie über einen Multiplexer schalten und abfragen.

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

klausw

So muss es sein, werde es heute Abend 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

thymjan

Bei  mir hier auch alles im grünen Bereich!

klausw

Zitat von: thymjan am 06 Januar 2016, 10:52:33
Bei  mir hier auch alles im grünen Bereich!
Über RPII2C oder FRM?

mal was viel interessanteres ;) : welche Stellmotoren nutzt du im Keller?
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

Sowohl bei RPII2C und FRM-USB bis jetzt keine Fehler sichtbar, läuft gut.

Stellmotor habe ich aus Italien (http://r.ebay.com/JewXPG), leider schlimme Versandkosten. Den Antrieb habe ich jetzt knapp ein Jahr in Betrieb. Versorgungsspannung ist 24V. Steuern tu ich es mit dem Stellmotor-Modul (http://www.fhemwiki.de/wiki/STELLMOTOR) und den 2 Relais vom PiFace Digital (da tuts aber auch jede andere Relaiskarte). Dachte eigentlich, dass ich die Tasten vom PiFace auch implementiert kriege, aber die werden von FHEM nur spartanisch unterstützt. Habe zunächst was mit Lego Technik aufgebaut, das war mir dann aber zu klobig...
Der Antrieb hat 2 bzw. 3 Endschalter. Benutze aber nur einen (beim Schließen vom Fenster) als Referenz. Der Motor wird zeitgesteuert vom Stellmotor ein und ausgeschaltet. Funktioniert eigentlich zuverlässig. Gelegentlich mache ich eine Referenzfahrt (selten ca. 1x im Quartal).

Grüße,
Stefan

klausw

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 darf ich zwei Profis um einen rat fragen?

Ich hab es geschafft, dass ich mehre HTU21 abfragen kann. Ich wollte eigentlich mehrere Sensoren mit dem SHT21 Modul anlegen.
Hab aber dann bemerkt wenn ich ein readValues einleite ändert sich der Wert bei allen SHT21 Sensoren desselben IODev.
Hab jetzt mehre Dummys angelegt die jetzt mit den werten des einen SHT21 Sensors gefüttert werden.

Jetzt hab ich aber folgendes Problem, wenn ein readValues eingeleitet wird und es kommt kein wert zurück (CRC error) wird der letzte Wert des vorigen Sensors weitergegeben.

Habt ihr einen Tipp, wie ich eine Überprüfung ob ein Wert zurückkommt machen kann und falls nicht wird auch keiner weiter gegeben.

Auszug aus 99_myUtils.pm
##############################################################################
#MUX Channel
#

sub channel($) {
my ($num) = @_;
my ($Sen) = "AdaSensor1";
 
 
if ($num eq "0")
  {
  fhem("set s0 off; set s1 off; set s2 off; set s3 off; set $Sen readValues");
  }
elsif ($num eq "1")
  {
  fhem("set s0 on; set s1 off; set s2 off; set s3 off; set $Sen readValues");
  }
elsif ($num eq "2")
  {
  fhem("set s0 off; set s1 on; set s2 off; set s3 off; set $Sen readValues");
  }
elsif ($num eq "3")
  {
  fhem("set s0 on; set s1 on; set s2 off; set s3 off; set $Sen readValues");
  }
elsif ($num eq "4")
  {
  fhem("set s0 off; set s1 off; set s2 on; set s3 off; set $Sen readValues");
  }
}


sub Sensor($){

  my ($Ts) = @_;
  my ($Sen) = "AdaSensor1";
 
 
  my $val = ReadingsVal("$Sen","humidity",0);
  my $val1 = ReadingsVal("$Sen","temperature",0);
  fhem("setreading Sensor$Ts humidity $val");
  fhem("setreading Sensor$Ts temperature $val1");
  fhem("setreading Sensor$Ts state T: $val H: $val1")
   
}


und das at

+*00:05:00 {
fhem("define sensor1_1 at +00:00:05 {channel(0)}");
fhem("define sensor1_2 at +00:00:10 {Sensor(1)}");
fhem("define sensor2_1 at +00:00:15 {channel(1)}");
fhem("define sensor2_2 at +00:00:20 {Sensor(2)}");
fhem("define sensor3_1 at +00:00:25 {channel(2)}");
fhem("define sensor3_2 at +00:00:30 {Sensor(3)}");
fhem("define sensor4_1 at +00:00:35 {channel(3)}");
fhem("define sensor4_2 at +00:00:40 {Sensor(4)}")
}


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

klausw

Zitat von: schami23 am 11 Januar 2016, 14:19:48
Ich hab es geschafft, dass ich mehre HTU21 abfragen kann. Ich wollte eigentlich mehrere Sensoren mit dem SHT21 Modul anlegen.
Hab aber dann bemerkt wenn ich ein readValues einleite ändert sich der Wert bei allen SHT21 Sensoren desselben IODev.
Jetzt, wo du es sagst, ist es logisch.
Die I2C Adresse wird genutzt, um das logische Device zu identifizieren. Daher bekommen alle Module mit der selben I2C Adresse diese Botschaft zugestellt. Macht grundsätzlich Sinn, da an einem I2C Bus jede Adresse nur 1x vorkommt.
Evtl könnte man ein Modul für den Multiplexer erstellen, das dazwischen geschaltet wird. Dieses ist das IODev für den SHT11 und nutzt selbst als IODev den FRM. Die Identifikation könnte in diesem Fall anders gelöst werden.

Zitat von: schami23 am 11 Januar 2016, 14:19:48
Jetzt hab ich aber folgendes Problem, wenn ein readValues eingeleitet wird und es kommt kein wert zurück (CRC error) wird der letzte Wert des vorigen Sensors weitergegeben.

Habt ihr einen Tipp, wie ich eine Überprüfung ob ein Wert zurückkommt machen kann und falls nicht wird auch keiner weiter gegeben.
Lese in deiner sensor Sub mit InternalVal($$$) den _SENDSTAT vom SHT21 aus. Das sollte vergleichbar zu ReadingsVal sein.
Wenn der Ok ist übernimmst du die Werte wenn nicht lässt du es.
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