# OpenHAB and OneWire <abstract> This article describes how to OpenHAB can read a Dallas DS18B20 temperature sensor directly attached to a Raspberry 3 GPIO, and the equivalent attached to the dedicated socket of the CM3-Home. </abstract> The DS18B20 sensor has this pinout: <img src="./ds18b20_pin.jpg" class="img-responsive center-block"> It needs a 3.3V power supply and a 4.7 or 10KΩ resistor on the data line: <img src="./1wire_raspi.png" class="img-responsive center-block"> On the Raspberry PI3 connect the data line to PIN 7 (BCM 4) and add the lines below to **/boot/config.txt** file: <pre class="terminal"> # Enable 1Wire on GPIO dtoverlay=w1-gpio,gpiopin=4 </pre> On the CM3-Home connect the sensor as shown below: <img src="./1wire.jpg" class="img-responsive center-block"> As depicted on the [schematic diagram](https://www.acmesystems.it/cm3home/CM3-HOME/CM3-Home_rel10_schematic.pdf), the 1-wire data line is interfaced through a dedicated buffer in order to allow a more robust bus, therefore it doesn't require a pullup. add: <pre class="terminal"> # Enable the 1-wire bus dtoverlay=w1-gpio,gpiopin=16 </pre> Reboot the board. The sensors wired are automatically detected by the Linux Kernel and a new directory is created on the folder __/sys/bus/w1/devices__ for each of them. $ ls /sys/bus/w1/devices/ 28-000006c423d3 In this case a temperature sensor with id=28-000006c423d3 has been detected. To read the temperature value type: $ watch cat /sys/bus/w1/devices/28-000006c423d3/w1_slave a4 01 4b 46 7f ff 0c 10 da : crc=da YES a4 01 4b 46 7f ff 0c 10 da t=26250 ## OpenHab To read the sensor value we are going to use the binding that allows to execute periodically a script: Install the [Exec Binding](https://github.com/openhab/openhab2-addons/tree/master/addons/binding/org.openhab.binding.exec) ### Scripts Create the file /etc/openhab2/scripts/onewiretemp.sh add the following lines: #!/bin/bash wert=`cat /sys/bus/w1/devices/$1/w1_slave | tail -n1 | cut -d '=' -f2` wert2=`echo "scale=3; $wert/1000" | bc` echo $wert2 test the script executing the command **./onewiretemp.sh sensorID** ### Things Create the file /etc/openhab2/things/onewire.things add the following line: exec:command:onewiretemp1 [command="bash /etc/openhab2/scripts/onewiretemp.sh IDSensore", interval=60, timeout=5, autorun=false] ### Items Create the file /etc/openhab2/items/onewire.items add the following line: String onewiretemp1Value "La temperatura del sensore 1 è [%s °C]" <temperature> {channel="exec:command:onewiretemp1:output"} Add the sensor to sitemap to show the value on UI: Text item=onewiretemp1Value Or use the item value in a widget to show it in an habpanel, as in [this example](http://www.tanzolab.it/openhab_widget) # Links * [GPIO 1-Wire Temp sensors on Raspberry Pi with openHABian](https://community.openhab.org/t/gpio-1-wire-temp-sensors-on-raspberry-pi-with-openhabian/20941) * [Raspberry PIN setup](https://it.pinout.xyz/pinout/1_wire) * [Il sensore di temperatura Dallas DS18B20](https://docs.google.com/presentation/d/10pQjiw_0tmQRUp2UNKwDqC0lZnmItRjQlWFt5CzhzWs/edit#slide=id.g100f2d24ee_0_66) @include='bio_massimiliano_casini' @include='bio_sergio_tanzilli'
2018 Ⓒ TanzoLab