61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
import time
|
|
import paho.mqtt.client as mqtt # pip install paho-mqtt
|
|
|
|
# --- НАСТРОЙКИ ПОД СЕБЯ ---
|
|
MQTT_HOST = "192.168.xx.xx" # брокер (или возьми из secrets)
|
|
MQTT_PORT = 1883
|
|
MQTT_USER = "xxxx"
|
|
MQTT_PASS = "xxxx"
|
|
|
|
DEVICE_NAME = "can_pcf8574_bridge" # esphome.name
|
|
TOPIC_PCF_20 = f"{DEVICE_NAME}/number/pcf_0x20/command"
|
|
TOPIC_PCF_21 = f"{DEVICE_NAME}/number/pcf_0x21/command"
|
|
|
|
# задержка между публикациями (в секундах)
|
|
DELAY = 0.1 # 0.1 c = 100 мс
|
|
|
|
# диапазоны из твоего YAML
|
|
PCF_20_MIN, PCF_20_MAX = 7, 7
|
|
PCF_21_MIN, PCF_21_MAX = 0, 4
|
|
|
|
|
|
def on_connect(client, userdata, flags, rc, properties=None):
|
|
print("Connected with result code", rc)
|
|
|
|
|
|
def main():
|
|
#client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
|
|
client = mqtt.Client() # для paho-mqtt < 2.0.0
|
|
client.username_pw_set(MQTT_USER, MQTT_PASS)
|
|
client.on_connect = on_connect
|
|
|
|
client.connect(MQTT_HOST, MQTT_PORT, keepalive=60)
|
|
client.loop_start()
|
|
|
|
try:
|
|
# бесконечный цикл перебора значений
|
|
while True:
|
|
# двойной цикл: перебираем сначала pcf_0x21, внутри него pcf_0x20
|
|
for v21 in range(PCF_21_MIN, PCF_21_MAX + 1):
|
|
# установить значение number.pcf_0x21
|
|
client.publish(TOPIC_PCF_21, payload=str(v21), qos=0, retain=False)
|
|
print(f"Set pcf_0x21 = {v21}")
|
|
time.sleep(DELAY)
|
|
|
|
for v20 in range(PCF_20_MIN, PCF_20_MAX + 1):
|
|
# установить значение number.pcf_0x20
|
|
client.publish(TOPIC_PCF_20, payload=str(v20), qos=0, retain=False)
|
|
print(f" Set pcf_0x20 = {v20}")
|
|
time.sleep(DELAY)
|
|
|
|
except KeyboardInterrupt:
|
|
print("Interrupted by user")
|
|
|
|
finally:
|
|
client.loop_stop()
|
|
client.disconnect()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |