| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #!/usr/bin/env python3
- import paho.mqtt.client as mqtt
- import RPi.GPIO as GPIO
- import datetime
- import time
- import json
- def on_connect(client, userdata, flags, reason_code, properties):
- print('connesso',reason_code)
- client.subscribe('sensor/+',0)
- client.subscribe('message/+',0)
- client.subscribe('request/#',0)
- client.subscribe('Irrigatore/#',0)
- client.subscribe('Pompa/#',0)
- client.subscribe('Valvola/#',0)
- client.subscribe('Status/#',0)
- #client.subscribe('$SYS/#',0)
- topic = 'Status'
- messaggio = json.dumps({'Status':'AvvioMqttClient'})
- print(client.publish(topic,messaggio))
- client.publish('message',"{'message':'avvio'}")
- def on_message(client,userdata,msg):
- ora = datetime.datetime.now().strftime("%H:%M:%S %d-%m-%Y")
- print('tipo dato ricevuto',type(msg.payload.decode()))
- print('msg.topic',msg.topic)
- print('msg.payload',str(msg.payload))
- # if type(msg.payload) == bytes:
- # print('msg.payload:',msg.payload.decode())
- data=None
- ok=False
- try:
- data = json.loads(msg.payload)
- print("{}: {}".format(ora,data))
- ok=True
- except json.decoder.JSONDecodeError as jse:
- print("errore",jse)
- print('payload',msg.payload)
- if ok:
- if 'irrigatore' in data:
- print(data['irrigatore'],data['status'],type(data['irrigatore']))
- if data['status'] == 1:
- GPIO.output(data['irrigatore'],GPIO.HIGH)
- else:
- GPIO.output(data['irrigatore'],GPIO.LOW)
- topic = f"Status/Irrigatore/{data['irrigatore']}"
- message = json.dumps({'status':GPIO.input(data['irrigatore']),})
- print(topic,message,client.publish(topic,message))
- if 'pompa' in data:
- print(data['pompa'],data['status'],type(data['pompa']))
- if data['status'] == 1:
- GPIO.output(data['pompa'],GPIO.HIGH)
- else:
- GPIO.output(data['pompa'],GPIO.LOW)
- topic = f"Status/Pompa/{data['pompa']}"
- message = json.dumps({'status':GPIO.input(data['pompa']),})
- print(topic,message,client.publish(topic,message))
- if 'valvola' in data:
- print(data['valvola'],data['status'],type(data['valvola']))
- if data['status'] == 1:
- GPIO.output(data['valvola'],GPIO.HIGH)
- else:
- GPIO.output(data['valvola'],GPIO.LOW)
- topic = f"Status/Valvola/{data['valvola']}"
- message = json.dumps({'status':GPIO.input(data['valvola']),})
- print(topic,message,client.publish(topic,message))
- if 'request' in data:
- print('ricevuta richiesta')
- GPIO.setmode(GPIO.BCM)
- GPIO.setwarnings(False)
- for i in range(4,12):
- print('linea',i)
- GPIO.setup(i,GPIO.OUT)
- client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
- client.on_connect = on_connect
- client.on_message = on_message
- client.username_pw_set('swarn','Abcd.1234')
- client.connect('nuc',1883,60)
- client.loop_forever()
|