from blinker import signal from blinker import Signal import json import gv import time import os import sys # MQTT import paho.mqtt.publish as publish from mqtt import get_mqtt_options ### login ### def notify_login(name, **kw): body = "Someone logged in." publish_mqtt("mqtzc",body) loggedin = signal('loggedin') loggedin.connect(notify_login) def publish_mqtt(notify,body): datamq=get_mqtt_options() #load data from file try: with open('./data/mqtt.json', 'r') as f: # Read the settings from file file_data = json.load(f) for key, value in file_data.iteritems(): if key in datamq: datamq[key] = value except Exception as err: print "couldnt get option values :" + str(err) pass if datamq[notify] != "off": if type(body) != str : payload = json.dumps(body,f) else: payload= body notify1 = notify + 'topic' topic = datamq[notify1] datamq = get_mqtt_options() if datamq['mqthost'] != '' and datamq['mqtport'] != '' : mqtt_host = datamq['mqthost'] # MQTT Broker Host name/IP mqtt_port = datamq['mqtport'] # MQTT Broker port publish.single(topic, payload,hostname=mqtt_host,port=int(mqtt_port),retain=True,qos=0) else: pass return ### valves ### def notify_zone_change(name, **kw): body={U"gv.sd":gv.sd} publish_mqtt("mqtzc",body) zones = signal('zone_change') zones.connect(notify_zone_change) ### System settings ### def notify_value_change(name, **kw): body={U"gv.sd":gv.sd} publish_mqtt("mqtcc",body) value_change = signal('value_change') value_change.connect(notify_value_change) ### Option settings ### def notify_option_change(name, **kw): print gv.sd body={U"gv.sd":gv.sd} publish_mqtt("mqtoc",body) option_change = signal('option_change') option_change.connect(notify_option_change) ### Reboot ### def notify_rebooted(name, **kw): body="System rebooted" publish_mqtt("mqtrb",body) rebooted = signal('rebooted') rebooted.connect(notify_rebooted) ### station names ### def notify_station_names(name, **kw): body={U"snames":gv.snames} publish_mqtt("mqtsc",body) station_names = signal('station_names') station_names.connect(notify_station_names) ### program change ## def notify_program_change(name, **kw): body={U"gv.ps":gv.ps} publish_mqtt("mqtpc",body) program_change = signal('program_change') program_change.connect(notify_program_change) ### program deleted ### def notify_program_deleted(name, **kw): # Programs are in gv.pd and /data/programs.json body={U"gv.ps":gv.ps} publish_mqtt("mqtpc",body) program_deleted = signal('program_deleted') program_deleted.connect(notify_program_deleted) ### program toggled ### def notify_program_toggled(name, **kw): body={U"gv.ps":gv.ps} publish_mqtt("mqtpc",body) program_toggled = signal('program_toggled') program_toggled.connect(notify_program_toggled) def get_mqtt_options(): """Returns the defaults data from file.""" datamq = { 'mqthost': 'localhost', 'mqtport': '1883', 'mqtzc': 'on', # zones changed 'mqtzctopic':'OSPI/zc', 'mqtcc': 'on', # controller changed 'mqtcctopic':'OSPI/cc', 'mqtoc':'on', # options change 'mqtoctopic':'OSPI/oc', 'mqtrb':'on', # reboot 'mqtrbtopic':'OSPI/rb', 'mqtsc':'on', # Station names changed 'mqtsctopic':'OSPI/sc', 'mqtpc':'on', # Programs changed 'mqtpctopic':'OSPI/pc', 'mqtlg':'on', # Someone logged in 'mqtlgtopic':'OSPI/lg', 'status': ' ' } try: with open('./data/mqtt.json', 'r') as f: # Read the settings from file file_data = json.load(f) for key, value in file_data.iteritems(): if key in datamq: datamq[key] = value except Exception: pass return datamq