fblocks_Soloviev/esphome/test1.py
2026-07-12 23:11:45 +03:00

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()