#SONOFF TH10/16 integration tests <abstract> Notes on OpenHAB SONOFF devices integration </abstract> To interface a Sonoff device with applications other than the original app, requires flashing a new firmware on the board and an MQTT broker. The firmware, valid for all the Sonoff family is available on [Github](https://github.com/arendst/Sonoff-Tasmota). An installation tutorial is available on [Youtube](https://www.youtube.com/watch?v=n4MDRm2yAJg). To install the MQTT broker (Mosquitto) on the [CM3-Home board](https://www.acmesystems.it/CM3-HOME) it can be used the Openhabian configuration menu: sudo openhabian-config Setup the client for connection to CM3-Home MQTT broker using the web configuration page of Sonoff-Tasmota: <img src="./sonoff_mqtt_config" class="img-responsive center-block" width="30%"/> Once installed the [MQTT binding on OpenHAB](https://docs.openhab.org/addons/bindings/mqtt1/readme.html), it has to be configured: ### File /etc/openhab2/service/mqtt.cgf # URL to the MQTT broker, e.g. tcp://localhost:1883 or ssl://localhost:8883 localbroker.url=tcp://localhost:1883 # Optional. User id to authenticate with the broker. localbroker.user=openhabian # Optional. Password to authenticate with the broker. localbroker.pwd=openhabian To use the switch with Basic or Classic UI configure sitemap: ### sonoff.sitemap sitemap sonoff label="Sonoff" { Frame label="Sonoff" { Switch item=LivingRoom_Light } } ### sonoff.items Switch LivingRoom_Light "Interruttore WiFi Sonoff" <light> (LR,gLight) { mqtt=">[localbroker:cmnd/DVES_41E25A/POWER:command:*:default],<[localbroker:stat/DVES_41E25A/POWER:state:default]" } Using either out (>) and in (<) configuration, enables the reading of the Sonoff device status, in order to update the OpenHAB panel icon even if the power is driven by the device physical button. The Sonoff TH10/16 device is available also with [temperature and humidity sensors](https://www.itead.cc/sonoff-th.html). To read the enviromental data requires to more items: Number Sonoff1Temp "Temp. zona Nord (Soggiorno)[%.1f °C]" <temperature> (sonoff) { mqtt="<[localbroker:tele/TH10_sensor/SENSOR:state:JSONPATH($.SI7021.Temperature)]" } Number Sonoff1Hum "Umidità zona Nord [%.1f %%]" <humidity> (sonoff) { mqtt="<[localbroker:tele/TH10_sensor/SENSOR:state:JSONPATH($.SI7021.Humidity)]" } to be used on sitemap: Frame label="Meteo Locale" { Text label="Interno" icon=presence { Text item=TempIntValue valuecolor=[>25="red",>20="green",<=20="blue"] Text item=Sonoff1Temp valuecolor=[>25="red",>20="green",<=20="blue"] Text item=Netatmo_Indoor_Temperature valuecolor=[>25="red",>20="green",<=20="blue"] Text item=Netatmo_Indoor_Humidex valuecolor=[<20.1="green",<29.1="blue",<28.1="yellow",<45.1="orange",<54.1="red",>54.1="maroon"] Text item=Sonoff1Hum valuecolor=[>60="blue",>40="green",<=40="orange"] Text item=Netatmo_Indoor_Humidity valuecolor=[>60="blue",>40="green",<=40="orange"] Text item=Netatmo_Indoor_Dewpoint Text item=Netatmo_Indoor_Co2 valuecolor=[<800="green",<1000="orange",<1400="red",>1399="maroon"] Text item=Netatmo_Indoor_Pressure Text item=Netatmo_Indoor_Noise Text item=Netatmo_Indoor_WifiStatus Text item=Netatmo_Indoor_TimeStamp Text item=Netatmo_Indoor_Location } } <img src="./ClassicUI.png" class="img-responsive center-block" width="30%"/> or in an Habpanel <table id="weather-table"> <tr> <td><img id="weather-icon" src="../static/weather-data/images/{{IconSet}}/{{statesnames[itemValue('Condition_ID')]}}.png" align="left"></td> <td id="weather-temp">{{'%.1f' | sprintf:itemValue('Netatmo_Outdoor_Temperature')}}</td> <td id="weather-temp-sign">°C <BR> ext</td> <td id="weather-temp">{{'%.1f' | sprintf:itemValue('TempIntValue')}}</td> <td id="weather-temp-sign">°C <BR> int Nord L</td> <td id="weather-temp">{{'%.1f' | sprintf:itemValue('Sonoff1Temp')}}</td> <td id="weather-temp-sign">°C <BR> int Nord S</td> <td id="weather-temp">{{'%.1f' | sprintf:itemValue('Netatmo_Indoor_Temperature')}}</td> <td id="weather-temp-sign">°C <BR> int Sud</td> </tr> <tr> <td></td> <td id="weather-table-details1">Umidità:  </td> <td id="weather-table-details2">{{'%.0f' | sprintf:itemValue('Netatmo_Outdoor_Humidity')}} %</td> <td id="weather-table-details1"> </td> <td id="weather-table-details2"> </td> <td id="weather-table-details1">Umidità:  </td> <td id="weather-table-details2">{{'%.0f' | sprintf:itemValue('Sonoff1Hum')}} %</td> <td id="weather-table-details1">Umidità:  </td> <td id="weather-table-details2">{{'%.0f' | sprintf:itemValue('Netatmo_Indoor_Humidity')}} %</td> </tr> <tr> <td></td> <td id="weather-table-details1">Pressione: </td> <td id="weather-table-details2">{{'%.0f' | sprintf:itemValue('Netatmo_Indoor_Pressure')}} mBar</td> <td id="weather-table-details1"> </td> <td id="weather-table-details2"> </td> <td id="weather-table-details1"> </td> <td id="weather-table-details2"> </td> <td id="weather-table-details1">CO2: </td> <td id="weather-table-details2">{{'%.0f' | sprintf:itemValue('Netatmo_Indoor_Co2')}} ppm</td> </tr> <tr> <td></td> <td id="weather-table-details1">Percepita: </td> <td id="weather-table-details2">{{'%.0f' | sprintf:itemValue('Netatmo_Outdoor_Humidex')}} °C</td> <td id="weather-table-details1"> </td> <td id="weather-table-details2"> </td> <td id="weather-table-details1"> </td> <td id="weather-table-details2"> </td> <td id="weather-table-details1">Percepita: </td> <td id="weather-table-details2">{{'%.0f' | sprintf:itemValue('Netatmo_Indoor_Humidex')}} °C</td> </tr> <img src="./Habpanel.png" class="img-responsive center-block" width="50%"/> ### The direct MQTT commands: mosquitto_pub -h localhost --username openhabian --pw openhabian -t cmnd/DVES_41E25A/power -m 0 ### Messages check mosquitto_sub --username openhabian --pw openhabian -t "#" <img src="http://ewelink.coolkit.cc/wp-content/uploads/2016/09/JIEXIAN.jpg"> ## Links * [MQTT Binding](https://github.com/arendst/Sonoff-Tasmota/wiki/openHAB) * [Tasmota OTA firmware repository](https://github.com/arendst/Sonoff-Tasmota) * [Tutorial on Youtube](https://www.youtube.com/watch?v=n4MDRm2yAJg) * [SONOFF TH16 info](http://ewelink.coolkit.cc/?p=149) * [SONOFF devices info](http://ewelink.coolkit.cc/?p=67) * [SONOFF without OpenHab: firmware modifications to use with RPI/MQTT/Nodered](http://www.instructables.com/id/Powerful-Standalone-Home-Automation-System-Pi-Sono/) @include='bio_guido_ottaviani' @include='bio_sergio_tanzilli'
2018 Ⓒ TanzoLab