mqtt.cli.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env python3
  2. import paho.mqtt.client as mqtt
  3. import RPi.GPIO as GPIO
  4. import datetime
  5. import time
  6. import json
  7. def on_connect(client, userdata, flags, reason_code, properties):
  8. print('connesso',reason_code)
  9. client.subscribe('sensor/+',0)
  10. client.subscribe('message/+',0)
  11. client.subscribe('request/#',0)
  12. client.subscribe('Irrigatore/#',0)
  13. client.subscribe('Pompa/#',0)
  14. client.subscribe('Valvola/#',0)
  15. client.subscribe('Status/#',0)
  16. #client.subscribe('$SYS/#',0)
  17. topic = 'Status'
  18. messaggio = json.dumps({'Status':'AvvioMqttClient'})
  19. print(client.publish(topic,messaggio))
  20. client.publish('message',"{'message':'avvio'}")
  21. def on_message(client,userdata,msg):
  22. ora = datetime.datetime.now().strftime("%H:%M:%S %d-%m-%Y")
  23. print('tipo dato ricevuto',type(msg.payload.decode()))
  24. print('msg.topic',msg.topic)
  25. print('msg.payload',str(msg.payload))
  26. # if type(msg.payload) == bytes:
  27. # print('msg.payload:',msg.payload.decode())
  28. data=None
  29. ok=False
  30. try:
  31. data = json.loads(msg.payload)
  32. print("{}: {}".format(ora,data))
  33. ok=True
  34. except json.decoder.JSONDecodeError as jse:
  35. print("errore",jse)
  36. print('payload',msg.payload)
  37. if ok:
  38. if 'irrigatore' in data:
  39. print(data['irrigatore'],data['status'],type(data['irrigatore']))
  40. if data['status'] == 1:
  41. GPIO.output(data['irrigatore'],GPIO.HIGH)
  42. else:
  43. GPIO.output(data['irrigatore'],GPIO.LOW)
  44. topic = f"Status/Irrigatore/{data['irrigatore']}"
  45. message = json.dumps({'status':GPIO.input(data['irrigatore']),})
  46. print(topic,message,client.publish(topic,message))
  47. if 'pompa' in data:
  48. print(data['pompa'],data['status'],type(data['pompa']))
  49. if data['status'] == 1:
  50. GPIO.output(data['pompa'],GPIO.HIGH)
  51. else:
  52. GPIO.output(data['pompa'],GPIO.LOW)
  53. topic = f"Status/Pompa/{data['pompa']}"
  54. message = json.dumps({'status':GPIO.input(data['pompa']),})
  55. print(topic,message,client.publish(topic,message))
  56. if 'valvola' in data:
  57. print(data['valvola'],data['status'],type(data['valvola']))
  58. if data['status'] == 1:
  59. GPIO.output(data['valvola'],GPIO.HIGH)
  60. else:
  61. GPIO.output(data['valvola'],GPIO.LOW)
  62. topic = f"Status/Valvola/{data['valvola']}"
  63. message = json.dumps({'status':GPIO.input(data['valvola']),})
  64. print(topic,message,client.publish(topic,message))
  65. if 'request' in data:
  66. print('ricevuta richiesta')
  67. GPIO.setmode(GPIO.BCM)
  68. GPIO.setwarnings(False)
  69. for i in range(4,12):
  70. print('linea',i)
  71. GPIO.setup(i,GPIO.OUT)
  72. client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
  73. client.on_connect = on_connect
  74. client.on_message = on_message
  75. client.username_pw_set('swarn','Abcd.1234')
  76. client.connect('nuc',1883,60)
  77. client.loop_forever()