import requests import json import sys args = sys.argv debug = 0 #Target device list if args[2] == "Master": url = "http://192.168.1.200/dsiot/multireq" elif args[2] == "Bed2": url = "http://192.168.1.201/dsiot/multireq" else: print("Device Unknown, exiting") exit(1) #Poll AC for status param_stat = '{"requests":[{"op":2, "to":"/dsiot/edge/adr_0100.dgc_status?filter=pv"}]}' r = requests.post(url, param_stat) data = r.json() params = {} #Register e_3001's "p_**" in the dictionary to make it easier to change the value for i in range(20): key = json.dumps(data["responses"][0]["pc"]["pch"][2]["pch"][14]["pch"][i]["pn"]) .strip('"') val = json.dumps(data["responses"][0]["pc"]["pch"][2]["pch"][14]["pch"][i]["pv"]) params[key] = val if debug : print(params) #Parse data from dump. e_A002 = json.dumps(data["responses"][0]["pc"]["pch"][2]["pch"][3]["pch"][0]["pv"]) temp = int(json.dumps(data["responses"][0]["pc"]["pch"][2]["pch"][5]["pch"][0]["pv" ]).strip('"'), 16) #Temperature hum = int(json.dumps(data["responses"][0]["pc"]["pch"][2]["pch"][5]["pch"][1]["pv" ]).strip('"'), 16) #Humidity if args[1] == "Get": e_A002 = json.dumps(data["responses"][0]["pc"]["pch"][2]["pch"][3]["pch"][0]["pv"]) if e_A002 == '"00"' : status = "Off" elif e_A002 == '"01"' : status = "On" else : status = "Unknown" print(e_A002) print("Power is",status) if params["p_01"] == '"0300"': #For automatic set_temp = int(params["p_1D"].strip('"'),16)/2 #Convert the specified temperature to a decimal number elif params["p_01"] == '"0200"': #Cooling set_temp = int(params["p_02"].strip('"'), 16)/2 elif params["p_01"] == '"0100"': #Heating set_temp = int(params["p_03"].strip('"'), 16)/2 else : #Dehumid/FanOnly set_temp = "N/A" print("Setpoint is",set_temp) # p_01 is operation mode if params["p_01"] == '"0000"': #FanOnly mode = "FanOnly" elif params["p_01"] == '"0100"': #Heating mode = "Heating" elif params["p_01"] == '"0200"': #Cooling mode = "Cooling" elif params["p_01"] == '"0300"': #Auto mode = "Auto" elif params["p_01"] == '"0500"': #Dehumidify mode = "Dehumidify" else: #Unknown mode = "Unknown" print(params["p_01"]) print("Mode is",mode) # p_02 is Cooling Setpoint # p_03 is Heating Setpoint # p_04 Unknown # p_05 is U/D swing; 00000000 for off; 0F000000 for on; # p_06 is L/R swing; 00000 for off; 0F000 for on; 3D mode toggles both on if params["p_05"] == '"00000000"' and params["p_06"] == '"000000"' : #SwingOff swing = "Off" elif params["p_05"] == '"0F000000"' and params["p_06"] == '"0F0000"' : #Swing3D swing = "3D" elif params["p_05"] == '"0F000000"' and params["p_06"] == '"000000"' : #Swing3D swing = "Vertical" elif params["p_05"] == '"00000000"' and params["p_06"] == '"0F0000"' : #Swing3D swing = "Horizontal" else: #Unknown swing = "Unknown" print(params["p_05"],params["p_06"]) print("Swingmode is",swing) # p_07 Unknown # p_08 Unknown # p_09 is fan mode if params["p_09"] == '"0A00"': #FanAuto fan = "Auto" elif params["p_09"] == '"0B00"': #FanQuiet fan = "Quiet" elif params["p_09"] == '"0300"': #FanLow fan = "Low" elif params["p_09"] == '"0400"': #FanMediumLow fan = "MediumLow" elif params["p_09"] == '"0500"': #FanMedium fan = "Medium" elif params["p_09"] == '"0600"': #FanMediumHigh fan = "MediumHigh" elif params["p_09"] == '"0700"': #FanHigh fan = "High" else: #Unknown fan = "Unknown" print(params["p_09"]) print("Fanspeed is",fan) print("RoomTemp is",temp) print("RoomHumidity is",hum) # p_0A Unknown # p_1D is Auto Setpoint # p_20 Unknown # p_21 Unknown # p_22 Unknown # p_23 Unknown # p_24 Unknown # p_25 Unknown # p_26 Unknown # p_27 Unknown # p_28 Unknown # p_34 Unknown exit(0) #control processing if args[1] == "Set": e_3003 = "02" #Change settings #Start/stop processing if args[3] == "State": #start operation if args[4] == "1": if e_A002 == '"00"': #If currently stopped e_A002 = '"01"' e_3003 = '"00"' print("Starting") else: #Do not process if currently running print("Already Started") exit(0) #Stop processing elif args[4] == "0": if e_A002 == '"01"': #If currently running e_A002 = '"00"' e_3003 = '"01"' print("Stopping") else: #Do not process if currently stopped print("Already Stopped") exit(0) #Change operating status elif args[3] == "Mode": if args[4] == "Fan": #FanOnly params["p_01"] = '"0000"' elif args[4] == "Heat": #Heating params["p_01"] = '"0100"' elif args[4] == "Cool": #Cooling params["p_01"] = '"0200"' elif args[4] == "Auto": #Automatic params["p_01"] = '"0300"' elif args[4] == "Dry": #Dehumidify params["p_01"] = '"0500"' #Change Temperature Setpoint elif args[3] == "Setpoint": if params["p_01"] == '"0300"' : #If automatic, convert the specified temperature to +- temperature (hexadecimal) params["p_1D"] = "{:03x}".format(0x100 + int(float(args[4])*2)) params["p_1D"] = '"' + params["p_1D"][-2:] + '"' elif params["p_01"] == '"0200"' : #Cooling, convert the specified temperature to hexadecimal. params["p_02"] = "{:03x}".format(0x100 + int(float(args[4])*2)) params["p_02"] = '"' + params["p_02"][-2:] + '"' elif params["p_01"] == '"0100"' : #Heating params["p_03"] = "{:03x}".format(0x100 + int(float(args[4])*2)) params["p_03"] = '"' + params["p_03"][-2:] + '"' else : print("Setpoint not valid for current mode") #ie Dehumid or FanOnly exit(1) elif args[3] == "Fan" : # 0=Quiet 1,2,3,4,5=speeds 6=Auto if args[4] == "Quiet": #Quiet params["p_09"] = '"0B00"' elif args[4] == "Low": #Low params["p_09"] = '"0300"' elif args[4] == "MLow": #MediumLow params["p_09"] = '"0400"' elif args[4] == "Medium": #Medium params["p_09"] = '"0500"' elif args[4] == "MHigh": #MediumHigh params["p_09"] = '"0600"' elif args[4] == "High": #High params["p_09"] = '"0700"' elif args[4] == "Auto": #Auto params["p_09"] = '"0A00"' elif args[3] == "Swing" : if args[4] == "Off": #Swing Off params["p_05"] = '"00000000"' params["p_06"] = '"000000"' elif args[4] == "Ver": #Vertical Swing params["p_05"] = '"0F000000"' params["p_06"] = '"000000"' elif args[4] == "Hor": #Horizontal Swing params["p_05"] = '"00000000"' params["p_06"] = '"0F0000"' elif args[4] == "3D": #3D swing (both Ver & Hor) params["p_05"] = '"0F000000"' params["p_06"] = '"0F0000"' else: exit(1) #Setup the post parameters if params["p_01"] == '"0000"': #FanOnly # print("Setting FanOnly Mode") param = '{"requests": [{"op": 3,"to": "/dsiot/edge/adr_0100.dgc_status","pc": {"pn": "dgc_status","pch": [{"pn": "e_1002","pch": [{"pn": "e_A002","pch": [{"pn": "p_01","pv": '+e_A002+'}]},{"pn": "e_3003","pch": [{"pn": "p_2D","pv": '+e_3003+'}]},{"pn": "e_3001","pch": [{"pn": "p_01","pv": '+params["p_01"]+'},{"pn": "p_05","pv": '+params["p_05"]+'},{"pn": "p_06","pv": '+params["p_06"]+'},{"pn": "p_09","pv": '+params["p_09"]+'},{"pn": "p_24","pv": '+params["p_24"]+'},{"pn": "p_25","pv": '+params["p_25"]+'},{"pn": "p_28","pv": '+params["p_28"]+'}]}]} ]}}]}' elif params["p_01"] == '"0100"': #Heating # print("Setting HeatingMode") param = '{"requests": [{"op": 3,"to": "/dsiot/edge/adr_0100.dgc_status","pc": {"pn": "dgc_status","pch": [{"pn": "e_1002","pch": [{"pn": "e_A002","pch": [{"pn": "p_01","pv": '+e_A002+'}]},{"pn": "e_3003","pch": [{"pn": "p_2D","pv": '+e_3003+'}]},{"pn": "e_3001","pch": [{"pn": "p_01","pv": '+params["p_01"]+'},{"pn": "p_03","pv": '+params["p_03"]+'},{"pn": "p_05","pv": '+params["p_05"]+'},{"pn": "p_06","pv": '+params["p_06"]+'},{"pn": "p_07","pv": '+params["p_07"]+'},{"pn": "p_08","pv": '+params["p_08"]+'},,{"pn": "p_09","pv": '+params["p_09"]+'}{"pn": "p_0A","pv": '+params["p_0A"]+'}]}]}]}}]}' elif params["p_01"] == '"0200"': #cooling # print("Setting Cooling Mode") param = '{"requests": [{"op": 3,"to": "/dsiot/edge/adr_0100.dgc_status","pc": {"pn": "dgc_status","pch": [{"pn": "e_1002","pch": [{"pn": "e_A002","pch": [{"pn": "p_01","pv": '+e_A002+'}]},{"pn": "e_3003","pch": [{"pn": "p_2D","pv": '+e_3003+'}]},{"pn": "e_3001","pch": [{"pn": "p_01","pv": '+params["p_01"]+'},{"pn": "p_02","pv": '+params["p_02"]+'},{"pn": "p_05","pv": '+params["p_05"]+'},{"pn": "p_06","pv": '+params["p_06"]+'},{"pn": "p_09","pv": '+params["p_09"]+'}]}]}]}}]}' elif params["p_01"] == '"0300"': #Auto # print("Setting Automatic Mode") param = '{"requests": [{"op": 3,"to": "/dsiot/edge/adr_0100.dgc_status","pc": {"pn": "dgc_status","pch": [{"pn": "e_1002","pch": [{"pn": "e_A002","pch": [{"pn": "p_01","pv": '+e_A002+'}]},{"pn": "e_3003","pch": [{"pn": "p_2D","pv": '+e_3003+'}]},{"pn": "e_3001","pch": [{"pn": "p_01","pv": '+params["p_01"]+'},{"pn": "p_05","pv": '+params["p_05"]+'},{"pn": "p_06","pv": '+params["p_06"]+'},{"pn": "p_09","pv": '+params["p_09"]+'},{"pn": "p_1D","pv": '+params["p_1D"]+'},{"pn": "p_20","pv": '+params["p_20"]+'},{"pn": "p_21","pv": '+params["p_21"]+'},{"pn": "p_26","pv": '+params["p_26"]+'}]}]}]}}]}' elif params["p_01"] == '"0500"': #Dehumidify # print("Setting Dehumidify Mode") param = '{"requests": [{"op": 3,"to": "/dsiot/edge/adr_0100.dgc_status","pc": {"pn": "dgc_status","pch": [{"pn": "e_1002","pch": [{"pn": "e_A002","pch": [{"pn": "p_01","pv": '+e_A002+'}]},{"pn": "e_3003","pch": [{"pn": "p_2D","pv": '+e_3003+'}]},{"pn": "e_3001","pch": [{"pn": "p_01","pv": '+params["p_01"]+'},{"pn": "p_05","pv": '+params["p_05"]+'},{"pn": "p_06","pv": '+params["p_06"]+'},{"pn": "p_09","pv": '+params["p_09"]+'},{"pn": "p_22","pv": '+params["p_22"]+'},{"pn": "p_23","pv": '+params["p_23"]+'},{"pn": "p_27","pv": '+params["p_27"]+'}]}]}]}}]}' else: exit(1) #Send the commands to the AC. r = requests.post(url, param) exit(0) exit(1)