import json from datetime import datetime import requests import paho.mqtt.client as mqtt from datetime import datetime import json import traceback last_weather = None def on_log(client, userdata, level, buff): print(datetime.now().isoformat(), client, userdata,level,buff) def on_connect(client, userdata, flags, rc): # The callback for when the client connects to the broker print("Connected with result code {0}".format(str(rc))) # Print result of connection attempt #client.subscribe("zigbee2mqtt/0x00a5") #client.subscribe("zigbee2mqtt/#") def on_message(client, userdata, msg): # The callback for when a PUBLISH message is received from the server. payload = str(msg.payload) print("Message received -> " + msg.topic + " " + payload) # Print a received msg try: m_in=json.loads(msg.payload.decode('utf-8')) print(m_in) if type(m_in) == list: print("no data in this message") return print(datetime.now().isoformat(), m_in.get("humidity"), m_in.get("temperature")) temp = m_in.get("temperature") humidity = m_in.get("humidity") pressure = m_in.get("pressure") if not temp and not humidity: print("no weather data in this message") return if last_weather is not None and (datetime.now() - last_weather).seconds < 300: print("too soon weather data", (datetime.now() - last_weather).seconds) return globals()['last_weather'] = datetime.now() time_weather = datetime.now().strftime('%Y-%m-%d %H:%M:%S') url = 'http://wow.metoffice.gov.uk/automaticreading?siteid=f2000c0-0000-e000-0000-000000000&siteAuthenticationKey=00000000' url += '&dateutc='+datetime.utcnow().strftime("%Y-%m-%d+%H:%M:%S").replace(':','%3A') url += '&softwaretype=custom_software' url += '&humidity='+str(humidity) url += '&tempf='+str((temp*1.8)+32) url += '&baromin='+str(pressure*0.02953) print(url) r = requests.get(url) print(r) except: traceback.print_exc() client = mqtt.Client("weather") client.on_connect = on_connect client.on_message = on_message client.on_log = on_log client.username_pw_set("mqtt", "mqtt") client.connect('192.168.1.1') client.loop_forever() # Start networking daemon