3. Getting measurements through WiFi
a. Set up a Raspberry Pi with Home Assistant
Follow the Home Assistant installation instructions.
b. Install Mosquitto broker
Follow the Mosquitto installation instructions.
c. Upload the code
Replace the contents of code.py
with the following code:
import time
import ssl
import json
import alarm
import socketpool
import wifi
import adafruit_minimqtt.adafruit_minimqtt as MQTT
import board
import adafruit_bh1750
PUBLISH_DELAY = 5
MQTT_TOPIC = "state/light-sensor"
USE_DEEP_SLEEP = False
i2c = board.I2C()
sensor = adafruit_bh1750.BH1750(i2c)
# Add a secrets.py to your filesystem that has a dictionary called secrets with "ssid" and
# "password" keys with your WiFi credentials. DO NOT share that file or commit it into Git or other
# source control.
# pylint: disable=no-name-in-module,wrong-import-order
try:
from secrets import secrets
except ImportError:
print("WiFi secrets are kept in secrets.py, please add them there!")
raise
wifi.radio.connect(secrets["ssid"], secrets["password"])
print("Connected to %s!" % secrets["ssid"])
# Create a socket pool
pool = socketpool.SocketPool(wifi.radio)
# Set up a MiniMQTT Client
mqtt_client = MQTT.MQTT(
broker=secrets["mqtt_broker"],
port=secrets["mqtt_port"],
username=secrets["mqtt_username"],
password=secrets["mqtt_password"],
socket_pool=pool,
ssl_context=ssl.create_default_context(),
)
print("Attempting to connect to %s" % mqtt_client.broker)
mqtt_client.connect()
while True:
fc = sensor.lux * 0.09290304
print("%.2f footcandles" % fc)
output = {
"footcandles": fc,
}
mqtt_client.publish(MQTT_TOPIC, json.dumps(output))
if USE_DEEP_SLEEP:
mqtt_client.disconnect()
pause = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + PUBLISH_DELAY)
alarm.exit_and_deep_sleep_until_alarms(pause)
else:
last_update = time.monotonic()
while time.monotonic() < last_update + PUBLISH_DELAY:
mqtt_client.loop()