#!/usr/bin/python3 # -*- coding: utf-8 -*- import requests import json import time import board import adafruit_dht config = json.load(open("/etc/dht22_sensing.json")) dht_device = adafruit_dht.DHT22(getattr(board, config['dht_pin'])) def send_to_home_assistant(temperature, humidity): headers = { 'x-ha-access': config['token'], 'Authorization': "Bearer {}".format(config['token']) } temperature_url = "{}/api/states/sensor.{}".format(config['ha_url'], config['ha_temp_sensor_name']) temperatur_data = { "state": str(temperature), "attributes": { "device_class": "temperature", "friendly_name": config['ha_temp_friendly_name'], "unit_of_measurement": "°C" } } requests.post(temperature_url, json=temperatur_data, headers=headers) humidity_url = "{}/api/states/sensor.{}".format(config['ha_url'], config['ha_humidity_sensor_name']) humidity_data = { "state": str(humidity), "attributes": { "device_class": "humidity", "friendly_name": config['ha_humidity_friendly_name'], "unit_of_measurement": "%" } } requests.post(humidity_url, json=humidity_data, headers=headers) def sense(): try: send_to_home_assistant(dht_device.temperature, dht_device.humidity) except RuntimeError as error: # Errors happen fairly often, DHT's are hard to read, just keep going print(error.args[0]) time.sleep(config['polling_sleep_time_seconds']) while True: sense()