Universalsensor HomeMatic

Temperature, Barometer, Light svg

Click here for English version

Wie baue ich einen Temperatur-, Licht-, Feuchtigkeits-, Drucksensor für HomeMatic?

  1. Arduino Nano, CC1101 868Mhz und Temperatur-, Licht-, Feuchtigkeits-, Drucksensoren (BME280, TSL2561) kaufen
  2. Alle Bauteile verdrahten
  3. Unisensor Code auf den Arduino flashen
  4. Unisensor in FHEM oder HomeMatic aufsetzen

Motivation

Ein Universalsensor HB-Uni-Sensor für Temperatur, Luftdruck, Luftfeuchtigkeit und Licht läßt sich sehr kostengünstig bauen und mittels eines CUL 868 mit FHEM oder direkt mit der HomeMatic CCU  verbinden. Ein solcher Universalsensor kann für die Steuerung einer Heizung oder für die Gartenbewässerung genutzt werden.

Ich habe schon einige Aktoren und Sensoren gebaut und mir dafür eine kleine Platine in China erstellen lassen, damit ich nicht jedes Mal die Drähte löten muss. Aber im Prinzip geht es auch mit einer Lochrasterplatine oder einfachen Drähten.

platine homematic schaltaktor

Materialliste

Wir benötigen einen Arduino Nano, einen CC1101 868Mhz und Sensoren. Bei dem Arduino ist darauf zu achten, daß er einen echten FTDI Chip hat um Ärger zu vermeiden und keinen CH340. Wenn man mehrere dieser Sensoren baut, kann kan auch Pro Minis kaufen und diese mit einem Programmer flashen. Bzgl. den Sensoren werden in dem Sketch folgende unterstützt:

  • DS18X20: Temperatursensor
  • BME280:  Luftfeuchtigkeits-, Druck- und Temperatursensoren von Bosch  mit einem digitalen I2C
  • BMP180: Druck- und Temperatursensor
  • TSL2561: Helligkeitssensor
  • MAX44009: Lichtsensor
  • SHT10: Temperatur- und Feuchtigkeitssensor

Offensichtlich treffen wir nur eine Auswahl an den oben genannten Sensoren, zB BME280 und TSL2561.

Bauteil
Arduino Nano FT232RL mit USB Kabel
CC1101 868
BME280
BMP180
TSL2561
MAX44009
SHT10

Verdrahtung

Die prinzipielle Verdrahtung des CC1101 ist die gleiche wie bei dem Universalaktor.

ArduinoCC1101
VCC 3.3vVDD
PIN GNDGND
nicht verbundenGDO2
PIN D02GDO0
PIN D10CSn (SS) (ggfs über 4k7 Widerstand mit 10k gegen GND)
PIN D11SI (MOSI) (ggfs über 4k7 Widerstand mit 10k gegen GND)
PIN D12SO (MISO)
PIN D13SCK (ggfs über 4k7 Widerstand mit 10k gegen GND)

Wer den CC1101 schonen möchte, kann auch Widerstände einbauen um vom 5V Niveau auf 3.3V zu konvertieren. Dazu verwendet man 10k und 4k7 Widerstände. Die Alternative ist einen 3.3v Arduino zu verwenden, so haben Arduino und CC1101 das gleiche Spannungsniveau.

Die jeweiligen Sensoren werden wie auf dem Schaltplan ersichtlich verdrahtet.

wiring-uni-sensor

Software

Für den Universalsensor verwende ich AsksinPP die man als Library in den Arduino einbindet. Denkt auch daran, die benötigten Libraries zu installieren, sowie die Libraries für die verwendeten Sensoren. Im Speziellen verwende ich den Sketch Universalsensor. In diesem Sketch kommentieren wir mit „//“ diejenigen Sensoren aus / ein, die wir nicht haben bzw. angeschlossen haben.

 //#define SENSOR_DS18X20 // Achtung, ONEWIRE_PIN define weiter unten muss zur HW passen! #define SENSOR_BME280 //#define SENSOR_BMP180 #define SENSOR_TSL2561 // Achtung, TSL2561_ADDR define weiter unten muss zur HW passen! //#define SENSOR_MAX44009 // Achtung, MAX44009_ADDR define weiter unten muss zur HW passen! //#define SENSOR_SHT10 // Achtung, SHT10_DATAPIN/SHT10_CLKPIN define weiter unten muss zur HW passen! //#define SENSOR_DIGINPUT // Achtung, DIGINPUT_PIN define weiter unten muss zur HW passen! 

Device ID und Serial

Die Device ID und Serial können wir wie unten angeben belassen, außer für den Fall, daß mehrere Sensoren um Einsatz sind. In diesem Fall würden wir verschiedene device IDs vergeben.

/ define all device properties
// Bei mehreren Geräten des gleichen Typs muss Device ID und Device Serial unterschiedlich sein!
// Device ID und Device Serial werden aus der Datei "DeviceID.h" geholt um mehrere Geräte ohne Änderung des Sketches flashen zu können
const struct DeviceInfo PROGMEM devinfo = {
cDEVICE_ID,        // Device ID
cDEVICE_SERIAL,    // Device Serial
{ 0xF1, 0x03 },    // Device Model
// Firmware Version
// die CCU Addon xml Datei ist mit der Zeile
// fest an diese Firmware Version gebunden! cond_op: E Equal, GE Greater or Equal
// bei Änderungen von Payload, message layout, Datenpunkt-Typen usw. muss die Version an beiden Stellen hochgezogen werden!
0x12,
as::DeviceType::THSensor,    // Device Type
{ 0x01, 0x01 }               // Info Bytes
};

Software aufspielen

Nun sind wir auch schon soweit um den Code zu kompilieren und hochzuladen. Wir verbinden unseren Arduino mit dem PC und achten auf den richtigen COM Port. Dann kompilieren wir die Software und laden sie auf den Arduino.

hm-uni-sensor1-arduino

Universalsensor in FHEM anlegen

Wenn wir den Universalsensor HB-Uni-Sensor mit FHEM pairen, dann kopieren wir die Datei HMConfig_UniSensor1.pm nach /opt/fhem/FHEM und starten FHEM neu.

cp HMConfig_UniSensor1.pm /opt/fhem/FHEM
chown fhem /opt/fhem/FHEM/HMConfig_UniSensor1.pm
chgrp dialout /opt/fhem/FHEM/HMConfig_UniSensor1.pm

Universalsensor in der HomeMatic anlegen

Wenn wir den Universalsensor in der HomeMatic CCU anlegen wollten, dann folgen wir den Anweisungen in HM Anbindung.

Pairing

Wir können den Universalsensor mit FHEM oder mit einer HomeMatic CCU pairen. Dazu wechseln wir zu unserem FHEM Frontend. Wir geben in das Kommandofeld

set CUL1 hmPairForSec 600
attr CUL1 hmPairForSec 600.JPG

ein um den CUL in den Pairing Modus zu versetzen. Jetzt haben wir 10 Minuten Zeit unseren Universalsensor zu pairen. Wir öffnen den Serial Monitor des Arduinos mit 57600 Baud und den Event Monitor (ganz unten links) von FHEM.

Event Monitor

Dann verbinden wir PIN8 des Arduinos ca. 5 Sekunden mit GND. Ihr müsstet nun die Kommunikation zwischen dem Universalsensor und dem CUL / HomeMatic in dem seriellen Monitor beobachten können. Falls nicht, könnt ihr den Vorgang beliebig oft wiederholen. Nach erfolgreichem Pairing seht ihr in FHEM einen neuen Tab namens CUL_HM, welches ihr öffnet.

CUL_HM.JPG

Ihr erhaltet den Screen Device Overview und solltet ein Device unter THPL Sensor erhalten.

thpl sensor

Ihr seht schon unter T, P, H und B die Readings des Devices.

Logging

Wir werden nun einige User Readings definieren. Wir geben in dem Kommandofeld von FHEM

attr HM_A5A500  userReadings OneLine {"T: ".ReadingsVal($NAME,"temperature",0)." P: ".ReadingsVal($NAME,"pressure",0)." H: ".ReadingsVal($NAME,"humidity",0)." L: ".ReadingsVal($NAME,"brightness",0) % 99999}

ein. Das Brightness % 99999 habe ich eingefügt, um Werte, die 99999 sind auf Null zu setzen. Diese Werte treten auf, wenn es komplett dunkel ist. Mit

define FileLog_HM_Temp_WZ FileLog /opt/fhem/log/HM_Temp_WZ-%Y-%m.log HM_A5A500:(OneLine).*

schreiben wir alle Werte in ein File. Um ein SVG Plot zu erzeugen klicken wir unter Regexp parts

create svg plot

auf „Create SVG Plot“. Die Einstellungen um den SVG Plot zu erstellen, könnt ihr dem folgenden Screenshot entnehmen.

setting svg plot

Vergesst nicht, alles in FHEM zu speichern. Fertig!

English Version

How do I build a temperature, light, humidity, barometer sensor for HomeMatic?

  • Buy Arduino Nano, CC1101 868Mhz and temperatur, light-, humidity-, barometer sensor (BME280, TSL2561)
  • Wire up all parts
  • Flash the Unisensor Code to Arduino
  • Setup the Unisensor in FHEM or HomeMatic

Motivation

A universal sensor HB-Uni-Sensor for temperature, air pressure, humidity and light can be built very economically and connected by means of a CUL 868 with FHEM or directly with the HomeMatic CCU. Such a universal sensor can be used to control a heating system or for garden irrigation. I have already built several actuators and sensors and had a small circuit board made in China so that I don’t have to solder the wires every time. But in principle it also works with a hole grid board or simple wires.

platine homematic schaltaktor

Material list

We need an Arduino Nano, a CC1101 868Mhz and sensors. With the Arduino you have to make sure that it has a real FTDI chip to avoid trouble and no CH340. If you build several of these sensors, you can also buy Pro Minis and flash them with a programmer. Regarding the sensors the following are supported in the sketch:

  • DS18X20: Temperature sensor
  • BME280:  Humidity, barometer and temperatur sensor with a digital I2C
  • BMP180: barometer and temperature sensor
  • TSL2561: light sensor
  • MAX44009: light sensor
  • SHT10: temperature and humidity sensor

Apparently we buy only a subset of sensors for example the BME280 und TSL2561.

Part
Arduino Nano FT232RL mit USB Kabel
CC1101 868
BME280
BMP180
TSL2561
MAX44009
SHT10

Wiring

The basic wiring of the CC1101 is the same as for the universal actor.

ArduinoCC1101
VCC 3.3vVDD
PIN GNDGND
not connectedGDO2
PIN D02GDO0
PIN D10CSn (SS) (if necessary via 4k7 resistor with 10k against GND)
PIN D11SI (MOSI) (if necessary via 4k7 resistor with 10k against GND)
PIN D12SO (MISO)
PIN D13SCK (if necessary via 4k7 resistor with 10k against GND)

If you want to treat the CC1101 with care, you can also install resistors to convert from 5V to 3.3V. For this you use 10k and 4k7 resistors. The alternative is to use a 3.3v Arduino, so Arduino and CC1101 have the same voltage level. The respective sensors are wired as shown on the circuit diagram.

wiring-uni-sensor

Software

For the universal sensor HB-Uni-Sensor  I use AsksinPP which can be integrated into the Arduino as a library. Also remember to install the required libraries, as well as the libraries for the used sensors. In particular I use the Sketch Universal Sensor. In this Sketch we comment with „//“ those sensors we don’t have or haven’t connected.

//#define SENSOR_DS18X20  // Achtung, ONEWIRE_PIN define weiter unten muss zur HW passen!
#define SENSOR_BME280
//#define SENSOR_BMP180
#define SENSOR_TSL2561  // Achtung, TSL2561_ADDR define weiter unten muss zur HW passen!
//#define SENSOR_MAX44009    // Achtung, MAX44009_ADDR define weiter unten muss zur HW passen!
//#define SENSOR_SHT10  // Achtung, SHT10_DATAPIN/SHT10_CLKPIN define weiter unten muss zur HW passen!
//#define SENSOR_DIGINPUT   // Achtung, DIGINPUT_PIN define weiter unten muss zur HW passen!

Device ID und Serial

The Device ID and Serial can be left as shown below, except when multiple sensors are in use. In this case we would assign different device IDs.

/ define all device properties
// Bei mehreren Geräten des gleichen Typs muss Device ID und Device Serial unterschiedlich sein!
// Device ID und Device Serial werden aus der Datei "DeviceID.h" geholt um mehrere Geräte ohne Änderung des Sketches flashen zu können
const struct DeviceInfo PROGMEM devinfo = {
cDEVICE_ID,        // Device ID
cDEVICE_SERIAL,    // Device Serial
{ 0xF1, 0x03 },    // Device Model
// Firmware Version
// die CCU Addon xml Datei ist mit der Zeile
// fest an diese Firmware Version gebunden! cond_op: E Equal, GE Greater or Equal
// bei Änderungen von Payload, message layout, Datenpunkt-Typen usw. muss die Version an beiden Stellen hochgezogen werden!
0x12,
as::DeviceType::THSensor,    // Device Type
{ 0x01, 0x01 }               // Info Bytes
};

Flash Software

Now we are ready to compile and upload the code. We connect our Arduino with the PC and pay attention to the correct COM port. Then we compile the software and upload it to the Arduino.

hm-uni-sensor1-arduino

Create universal sensor in FHEM

If we pair the universal sensor HB-Uni-Sensor with FHEM, we copy the file HMConfig_UniSensor1.pm to /opt/fhem/FHEM and restart FHEM.

cp HMConfig_UniSensor1.pm /opt/fhem/FHEM
chown fhem /opt/fhem/FHEM/HMConfig_UniSensor1.pm
chgrp dialout /opt/fhem/FHEM/HMConfig_UniSensor1.pm

Create universal sensor in HomeMatic

If we wanted to create the universal sensor in the HomeMatic CCU, then we follow the instructions in HM Connection.

Pairing

We can pair the universal sensor with FHEM or with a HomeMatic CCU. Therefore we switch to our FHEM frontend. We enter into the command field

set CUL1 hmPairForSec 600
attr CUL1 hmPairForSec 600.JPG

to set the CUL to pairing mode. Now we have 10 minutes to pair our universal sensor. We open the Serial Monitor of the Arduino with 57600 Baud and the Event Monitor (bottom left) of FHEM.

Event Monitor

Then we connect PIN8 of the Arduino with GND for about 5 seconds. Now you should be able to observe the communication between the universal sensor and the CUL / HomeMatic in the serial monitor. If not, you can repeat the process as often as you like. After successful pairing you will see a new tab called CUL_HM in FHEM, which you open.

CUL_HM.JPG

You get the Screen Device Overview and should get a Device under THPL Sensor.

thpl sensor

You can already see the readings of the device under T, P, H and B.

Logging

We will now define some user readings. In the command field of FHEM we enter

attr HM_A5A500  userReadings OneLine {"T: ".ReadingsVal($NAME,"temperature",0)." P: ".ReadingsVal($NAME,"pressure",0)." H: ".ReadingsVal($NAME,"humidity",0)." L: ".ReadingsVal($NAME,"brightness",0) % 99999}

I inserted the brightness % 99999 to set values that are 99999 to zero. These values occur when it is completely dark. With

define FileLog_HM_Temp_WZ FileLog /opt/fhem/log/HM_Temp_WZ-%Y-%m.log HM_A5A500:(OneLine).*

we write all values into a file. To create a SVG plot we click under Regexp parts

create svg plot

on „Create SVG Plot“. The settings to create the SVG plot are shown in the following screenshot.

setting svg plot

Don’t forget to save everything in FHEM. Done!