PanStamp Umweltsensor: Unterschied zwischen den Versionen

Aus FHEMWiki
Zeile 466: Zeile 466:


== Links ==
== Links ==
* [https://www.diefaeuste.de/owncloud/index.php/s/sluxhVyQrXtY19u Alle benötigten Dateien auf der Seite des Authors]
* [https://www.diefaeuste.de/owncloud/index.php/s/OkS8nfXkAtkgQEM Alle Dateien in der Cloud des Autors]
* [https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/ Bodenfeuchtesensor auf I2C-Basis]
* [https://www.tindie.com/products/miceuz/i2c-soil-moisture-sensor/ Bodenfeuchtesensor auf I2C-Basis]
* [http://vegetronix.com/Products/VH400/ Vegetronix Bodenfeuchtesensor]
* [http://vegetronix.com/Products/VH400/ Vegetronix Bodenfeuchtesensor]

Version vom 27. Oktober 2016, 06:35 Uhr


PanStamp Umweltsensor
panStamp
Allgemein
Protokoll SWAP
Typ Sensor
Kategorie HardwareMods
Technische Details
Kommunikation 868MHz (433/915MHz)
Kanäle
Betriebsspannung 3.3V
Leistungsaufnahme
Versorgung Battery AA
Abmessungen 48.5 x 100 mm
Sonstiges
Modulname 34_panStamp.pm 34_SWAP.pm
Ersteller für diesen Sketch: Tobias
Hersteller panStamp


panStamps sind Arduino Clones, die ein CC1101 Funkmodul beinhalten. Mit ihnen lassen sich Sensoren und Aktoren drahtlos an FHEM anbinden. Sie lassen sich genau wie Arduinos über die Arduino IDE oder mit dem ino Kommandozeilen Binary programmieren. Dieser bildet das Herzstück des Umweltsensors

Weiterführende Information zu panStamps und den grundlegenden Modulen um sie mit Fhem zu integrieren finden sich im zugehörigen Wiki Artikel.

Beschreibung

Der auf dem panStamp (Arduino328p) basierende Umweltsensor hat die folgenden Eigenschaften:

  • 4x Analogeingänge
  • Helligkeitserfassung per TSL2561
  • Temperatur- und Luftfeuchtemessung mit DHT22
  • Luftdruck- und Temperaturmessung per BMP180
  • Anschluss von 1..n 1wire Temperatursensoren DS18B20
  • Messung der Batteriespannung
  • Messung der Solarspannung
  • Anpassbare MessFrequenz für Tag und Nacht
  • passt alles in ein ELV IP65 (Nr: G203/G203C) Gehäuse und ist damit geeignet für den Außeneinsatz

Alle benötigten Dateien sind hier zu finden:

  • Sketch
  • EnvironmentSensor.xml
  • Target3001 Dateien

Unbestückte Platinen können beim Ersteller, falls vorrätig, angefragt und erworben werden.

WICHTIG! Schaltplan und Platinen sind für den Panstamp AVR 1.

Schaltplan und Bauteilliste

Schaltplan
Platinenlayout Oberseite
Platinenlayout Unterseite
fertiger Aufbau
Plot Nr 1

Bauteilliste:

Bauteil Bezeichnung Shop BauteilNr
L1 LQH4C Speicherdrossel Mouser.com

Reichelt

Reichelt

81-LQH43CN100K03L

L-1212FPS 10µ

L-1616FPS 10µ

C1, C2 Keramikkondensator Typ:X7R 10uf Reichelt

Mouser.com

X5R-G0805 10/16

810-CGJ4J1X7R0J106AC

C3 Keramikkondensator Typ:X7R 1uF Reichelt

Mouser.com

X7R-G0805 1,0/16

810-C2012X5R1C105K-2

C4, C7 Keramikkondensator Typ:X7R 100nF Reichelt

Mouser.com

X7R-G0805 100N

581-0805YD104KAT2A

IC1 MAX1724 Schaltregler 1.5uA IQ Step-Up DC/DC Converter Mouser.com

tme.eu

Ebay: G&C Supermarket

MAX1724EZK33T

MAX1724EZK33+T

MAX1724

K1,K2,K3,K4,K5 Anreihklemme 3,5mm 3Pol IT-WNS AK-3.5-3-GY
R1 Widerstandsnetzwerk 100K Reichelt SIL 5-4 100K
R2 SMD Widerstand 1k Reichelt

Mouser.com

SMD-0805 1K

71-CRCW0805-1.0K-E3

R3 SMD Widerstand 10k Reichelt

Mouser.com

SMD-0805 10K

71-CRCW0805-10K-E3

R4 SMD Widerstand 4k7 Reichelt

Mouser.com

SMD-0805 4,70K

71-CRCW0805-4.7K-E3

J1 Stiftleiste 1x5Pol Reichelt MPE 087-1-005
D1 LED 3mm LowCurrent 2mA Reichelt LED 3MM 2MA GN
TASTER Reset TASTER 9314 Reichelt TASTER 9314
Batteriehalter Batteriehalter 1x AA Mignon(Akku) Reichelt HALTER 1XAAP
K7 Anschluss Solarpanel (VERT PCB 2Pin TIN FRICTION LOCK) Reichelt

Mouser

zb. MPE 087-1-002

538-22-23-2021

D2 BAV70 Schaltdiode SMD, SOT-23, 250V, 1A Reichelt BAV 70 SMD
T1 BCW 61 Transistor SMD PNP SOT-23 32V 0,1A 0,25W Reichelt BCW 61C SMD
T2 BC847 Transistor SMD NPN SOT-23 45V 0,1A 0,25W Reichelt BC 847B SMD
T3 BSS138 Transistor SMD N-FET SOT-23 50V 0,22A Reichelt BSS 138 SMD
IC panStamp AVR panstamp.com panStamp AVR
-- Female Header 2,54 mm, 1X16, straight Reichelt MPE 094-1-016
-- DHT22 lipoly.de DHT22
-- BMP180 lipoly.de BMP180
-- TSL2561 lipoly.de TSL2561
-- Dallas DS18B20 lipoly.de DS18B20

Hinweise zum Aufbau

Soll kein 1Wire genutzt werden, so wird empfohlen den R4 (4k7) nicht zu bestücken da dieser Pullup bei jedem Messvorgang bei denen 1wire/DHT22/BMP180 oder TSL2561 involviert sind zusätzlich die Batterie belasten.

Soll kein DHT22 genutzt werden, so wird empfohlen R3 und C7 (4k7) nicht zu bestücken da beide bei jedem Messvorgang bei denen 1wire/DHT22/BMP180 oder TSL2561 involviert sind zusätzlich die Batterie belasten.

Hinweise zum Betrieb mit FHEM

Configuration

Nach upload des Sketches auf den Panstamp ist zuerst die korrekte Kennung über das Register 09 sowie der gewünschte Sendezyklus über das Register 0A zu setzen (siehe Inbetriebname im Wiki Artikel zum den panStamps). Anschließend ist die Konfiguration mittels Register 0B zu setzen:

Bezeichnung Länge Position Beschreibung
Sync Intervall 2 Byte 0+1 Intervall in Sekunden zur Synronisation mit der Zentrale. 0000 ist deaktiviert
SendDelay 2 Byte 2+3 Sendeverzögerung in ms zwischen dem Senden von mehreren Registern. Soll Sendeüberlagerung bei Nutzung von Repeatern minimieren
Altitude 2 Byte 4+5 Angabe des Standortes des Sensors in Höhenmetern ünN. Notwendig zur Berechnung von SeaLevelPressure
Day/NichtShift Type 1 Byte 6 Type:1 -> Nutzung des Solarwertes ; Type:2 -> Nutzung der Helligkeit vom TSL2561
Day/NigthShift Threshold 3 Byte 7+8+9 Schwellwert bei dem Day/Night umgeschaltet werden soll, Type 1: in mV ;Type 2: in Lum
Day/NightShift TX Intervall 2 Byte 10+11 Intervall in Sekunden im Tagesrhythmus, Das "normale" TX_INTERVAL (Register 0A) ist dann NachtRhythmus
HAS_Analog4 1Bit 12.0 Die analoge Spannung am A3 wird gemessen. VCC liegt an D3 an.
HAS_Analog3 1Bit 12.1 Die analoge Spannung am A2 wird gemessen. VCC liegt an D3 an.
HAS_Analog2 1Bit 12.2 Die analoge Spannung am A1 wird gemessen. VCC liegt an D6 an.
HAS_Analog1 1Bit 12.3 Die analoge Spannung am A0 wird gemessen. VCC liegt an D7 an.
HAS_DS18B20 1Bit 13.0 Ein oder mehrere DS18B20 sind angeschlossen und sollen ausgelesen werden
HAS_DHT22 1Bit 13.1 Ein DHT22 ist angeschlossen und soll ausgelesen werden
HAS_TSL2561 1Bit 13.2 Ein Hellihkeitssensor TSL2561 ist angeschlossen und soll ausgelesen werden.
HAS_BMP180 1Bit 13.3 Ein Luftdrucksensor BMP180 ist angeschlossen und soll ausgelesen werden.
Transmit BatVol 1Bit 14.0 Die aktuelle Batteriespannung soll übermittelt werden.
Transmit SolarVol 1Bit 14.1 Die aktuelle Spannung von der Solarzelle soll übermittelt werden.
Enable Debug LED 1Bit 14.2 Aktivierung der LED als Debug Ausgabe zur Initialisierung und zu jedem Sendezeitpunkt
Enable Day/NightShift 1Bit 14.3 Die Sendeintervalle für Tag und Nachtrhythmus sollen aktiviert werden

Nutzung von unterschiedlichen Sendeintervallen bei Tag/Nacht

Soll das Sendeintervall tagsüber anders sein als in der Nacht, so ist dies über die Day/NightShift Funktionen einzustellen. Beispielsweise soll der Umweltsensor für eine Rolladensteuerung benutzt werden. Dann ist es besser die Messung minütlich durchzuführen. In der Nacht wäre dann 10-minütlich ausreichend. Über den ConfigParameter "Day/NichtShift Type" kann angegeben werden, auf welcher Grundlage die Tag/Nachterkennung stattfinden soll. Entweder über eine Solarspannung die normalerweise nur am Tage vorliegt, oder über eine Helligkeitsmessung des TSL2561 falls einer bestückt ist. In beiden Fällen wird über "Day/NichtShift Threshold" der Schwellwert angegeben an welchem Punkt die Tag/Nacht Grenze gesetzt werden soll. Bei Nutzung von Solarspannung ist hier der Schwellwert in mV anzugeben (zb. 500 für 0.5V) oder in Lumen als gemsssener Lumenwert des TSL2561. Hier sollten man vorher die Messerte der jeweiligen Sensoren über einige Tage genau beobachten um einen geeigneten Wert zu finden. Durch die angabe des Intervalls mit "Day/NichtShift TX Intervall" wird das Sendeintervall für den Tagrhythmus angegeben. Das Standardsendeintervall aus dem Register 0A ist das für den Nachtrhythmus verantwortlich.

Setzen der Konfiguration

Ein Register ist als Hex-Wert zu setzen. Folgende Tabelle zeigt eine exemplarische Konfiguration:

Bezeichnung Wert Binär Wert Hex Wert
Sync Intervall 12h -> 43200s A8C0
SendDelay 100ms 0064
Altitude 53m 0035
Day/NichtShift Type 1 01
Day/NigthShift Threshold 1000mV 0003E8
Day/NightShift TX Intervall 60s 003C
HAS_Analog4 nein 0
HAS_Analog3 nein 0
HAS_Analog2 ja 1
HAS_Analog1 ja 1
00001100 0C
HAS_DS18B20 ja 1
HAS_DHT22 nein 0
HAS_TSL2561 nein 0
HAS_BMP180 nein 1
00001001 09
Transmit BatVol ja 1
Transmit SolarVol ja 1
Enable Debug LED nein 0
Enable Day/NightShift ja 1
00001011 0B

In obigem Fall ist das Konfigurationsregister wie folgt aufgebaut: A8C0 0064 0035 01 0003E8 003C 0C 09 0B Aufgrunddessen wird die Konfiguration folgendermaßen gesetzt:

set <MySwapDevice> regSet 0B A8C000640035010003E8003C0C090B

Es ist auch möglich die einzelnen Endpoints unabhängig voneinander zu setzen. z.B.:

 set <MySwapDevice> regSet 0B.17 1

Syncronisation mit der Zentrale

Jede Syncronisation kostet zusätzlichen Strom und belastet damit die Batterie. Allerdings benötigt man eine Synronisation um Befehle von der Zentrale entgegenzunehmen. Z.B. für eine neue Konfiguration. Im Normalfall benötigt man keine automatisiert Synronisation da mit Druck auf den Reset-Button ebenfalls eine Synronisation erfolgt. Hat man aber ein Szenario vorliegen, beidem FHEM automatisiert die Konfiguration ändern soll, so ist ein SyncIntervall notwendig. Um die automatisierte Syncronisation abzuschalten ist als Wert 0000 zu setzen.

Nutzung von mehreren DS18B20

Die Messwerte für die 1wire Temperatursensoren werden in einem einzelnen Register 0E übertragen. Das bedeutet, falls mehrere DS18B20 am Bus angeschossen sind, überschreiben diese sich gegenseitig. Dieses Verhalten ist aber vom Author so gewollt um eine gewissen Generik zu gewährleisten. Um nun auf die einzelnen Messerte in FHEM zugriff zu bekommen, schafft folgendes UserReading Abhilfe:

attr <MySwapDevice> userReadings Temperature_Sun:0E.1-1wire_Address:.*28D6CF710400009C {SWAP_1wire($name)}

Die im Beispiel verwendete 1Wire ID ist natürlich an die eigenen Gegebenheiten anzupassen. Pro angeschlossenem DS18B20 ist ein weiteres userReading anzulegen.

Anschließend ist folgende Prozedur in 99_MyUtils.pm zu ergänzen:

sub SWAP_1wire($) {
  my ($SwapDevice) = @_;
  return (hex(ReadingsVal($SwapDevice, "0E.0-1wire_Temperature", ""))*0.01) - 50;
}

Nun wird pro eindeutiger 1Wire-ID ein neues Reading erzeugt welches den Messwert enthält.

Weitere Hinweise

Keine.

Links