#!/usr/bin/env python2 import paho.mqtt.client as mqtt import time import Adafruit_DHT from configparser import ConfigParser import json config = ConfigParser(delimiters=('=', )) config.read('config.ini') sensor_type = config['sensor'].get('type', 'dht22').lower() if sensor_type == 'dht22': sensor = Adafruit_DHT.DHT22 elif sensor_type == 'dht11': sensor = Adafruit_DHT.dht11 elif sensor_type == 'am2302': sensor = Adafruit_DHT.AM2302 else: raise Exception('Supported sensor types: DHT22, DHT11, AM2302') pin = config['sensor'].get('pin', 10) topict = config['mqtt'].get('topic', 'temp/chodba') topich = config['mqtt'].get('topic', 'humid/chodba') decim_digits = config['sensor'].getint('decimal_digits', 4) # The callback for when the client receives a CONNACK response from the server. def on_connect(client, userdata, flags, rc): print("Connected with result code {}".format(rc)) client = mqtt.Client() client.on_connect = on_connect client.connect(config['mqtt'].get('hostname', 'homeassistant'), config['mqtt'].getint('port', 1883), config['mqtt'].getint('timeout', 60)) client.loop_start() while True: time.sleep(3) humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) if humidity is not None and temperature is not None: data = round(temperature, decim_digits) client.publish(topict, json.dumps(data)) data = round(humidity, decim_digits) client.publish(topich, json.dumps(data)) print('Published. Sleeping ...') else: print('Failed to get reading. Skipping ...')