mirror of
https://github.com/ckaczor/HomeMonitor.git
synced 2026-01-13 17:22:54 -05:00
74 lines
1.7 KiB
Python
Executable File
74 lines
1.7 KiB
Python
Executable File
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import config
|
|
import RPi.GPIO as GPIO
|
|
import time
|
|
import paho.mqtt.client as mqtt
|
|
|
|
from datetime import datetime as dt
|
|
from paho.mqtt.client import connack_string as ack
|
|
from paho.mqtt.properties import Properties
|
|
from paho.mqtt.packettypes import PacketTypes
|
|
|
|
|
|
def log(message=""):
|
|
print(dt.now().strftime("%H:%M:%S.%f")[:-2] + " " + message)
|
|
|
|
|
|
def on_connect(client, userdata, flags, rc, v5config=None):
|
|
log("Connection returned result: " + ack(rc))
|
|
|
|
|
|
def on_publish(client, userdata, mid, tmp=None):
|
|
log("Published message id: " + str(mid))
|
|
|
|
|
|
log("Config:")
|
|
|
|
for device in config.devices:
|
|
log(" pin %s: %s" % (device.pin, device.name))
|
|
|
|
log()
|
|
|
|
client = mqtt.Client(client_id="device_status_sender",
|
|
transport="tcp",
|
|
protocol=mqtt.MQTTv5)
|
|
|
|
|
|
properties = Properties(PacketTypes.CONNECT)
|
|
properties.SessionExpiryInterval = 30 * 60
|
|
|
|
client.connect("172.23.10.3", 1883, 60,
|
|
clean_start=mqtt.MQTT_CLEAN_START_FIRST_ONLY, properties=properties)
|
|
|
|
client.on_connect = on_connect
|
|
client.on_publish = on_publish
|
|
|
|
client.loop_start()
|
|
|
|
GPIO.setmode(GPIO.BCM)
|
|
|
|
for device in config.devices:
|
|
log("Setting up pin %s" % (device.pin))
|
|
GPIO.setup(device.pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
|
|
|
|
log()
|
|
|
|
while True:
|
|
for device in config.devices:
|
|
pin_status = GPIO.input(device.pin)
|
|
|
|
if pin_status != device.last_status:
|
|
log("pin %s: %s" % (device.pin, pin_status))
|
|
|
|
device.last_status = pin_status
|
|
|
|
info = client.publish(device.name, str(pin_status), 1)
|
|
|
|
info.wait_for_publish()
|
|
|
|
time.sleep(0.25)
|
|
|
|
GPIO.cleanup()
|