--- 模块功能:DTU主逻辑 -- @author openLuat -- @module create -- @license MIT -- @copyright openLuat -- @release 2018.12.27 MQTT=require("mqtt_library") require "utils" http = require("socket.http") mime = require("mime") module(..., package.seeall) aries={user="Admin@admin.com",passwd="Password1",server="staging.aries.panabattery.com:80"} function aries.serverSet(server) -- 平台配下来的总是错误的 -- if server then aries.server = server end end function aries.Ping() os.execute(string.format("curl -X \"%s\" http://%s/ARIES/api/Ping --connect-timeout 3 -u \"%s:%s\" -H \"accept: */*\" -H \"Content-Type: application/json-patch+json\"","GET",aries.server,aries.user,aries.passwd)) return true end function aries.IfuAutoPolling(payload) local cmd = string.format("curl -X \"%s\" http://%s/ARIES/api/IfuAutoPolling --connect-timeout 3 -u \"%s:%s\" -H \"accept: */*\" -H \"Content-Type: application/json-patch+json\" -d \"%s\"","POST",aries.server,aries.user,aries.passwd,string.gsub( payload,"\"","\\\"",99999)) print(cmd) return true -- 假装成功 end function aries.IfuAddOrUpdate(payload) local cmd = string.format("curl -X \"%s\" http://%s/api/Battery/v2/AddOrUpdate --connect-timeout 3 -u \"%s:%s\" -H \"accept: */*\" -H \"Content-Type: application/json-patch+json\" -d '%s'","POST",aries.server,aries.user,aries.passwd,payload) print(cmd) os.execute(cmd) end function aries.IfuSettingRequest(groupid) local cmd = string.format("curl -X \"%s\" http://%s/api/UserGroups/%s/Settings --connect-timeout 3 -u \"%s:%s\" -H \"accept: */*\" -H \"Content-Type: application/json-patch+json\" ","GET",aries.server,groupid,aries.user,aries.passwd) local f = assert(io.popen(cmd)) local s = nil if f then s = assert(f:read('*a')) end f:close() return s end function aries.IfuSchedulesRequest(groupid) -- local cmd = string.format("curl -X \"%s\" http://staging.aries.panabattery.com/api/UserGroups/%s/Settings -u \"%s:%s\" -H \"accept: */*\" -H \"Content-Type: application/json-patch+json\" ","GET",groupid,aries.user,aries.passwd) -- local f = assert(io.popen(cmd)) -- local s = nil -- if f then -- s = assert(f:read('*a')) -- end -- f:close() local schedule={ Id="87", BatteryId="04d0d5be-51e1-480c-9a0a-229cb6449399", ScheduleItems = { { StartDate="2020-07-08T11:45:00", EndDate="2020-07-08T11:46:00", -- Signal:0 Auto 1 Charge 2 Discharge 3 Standby Signal=0 , TargetSoC = 100, PowerRate = 3 }, { StartDate="2020-07-08T11:47:00", EndDate="2020-07-08T11:48:00", -- Signal:0 Auto 1 Charge 2 Discharge 3 Standby Signal=1 , TargetSoC = 100, PowerRate = 3 }, { StartDate="2020-07-08T11:49:00", EndDate="2020-07-08T11:50:00", -- Signal:0 Auto 1 Charge 2 Discharge 3 Standby Signal=2 , TargetSoC = 100, PowerRate = 3 } } } return cjson.encode(schedule) end function control_dev(gw_sn,dev_sn,port,identifier,param) topic = string.format( "ipc/%s/%s/device/%s/data/Set_Rglt",gw_sn,port,dev_sn) obj_send={} obj_send['mi'] = mi -- obj_send['len'] = #data obj_send['identifier'] = identifier obj_send['sn'] = dev_sn obj_send['timestamp'] = os.time() if param then for k,v in pairs(param)do obj_send[k] = v end end json_str = cjson.encode(obj_send) syslog.syslog("LOG_INFO","control_dev:" .. json_str) mqtt_client:publish(topic, json_str) end ---------------------------------------------------------- 外部消息---------------------------------------------------------- function mqtt_session(id, addr, port, usr, pwd, subscribe, qos,on_mqtt_msg) mqtt_client = MQTT.client.create(addr, port, on_mqtt_msg) sys.taskInit(function() mqtt_client:connect(id .. "ifu") mqtt_client:subscribe(subscribe) while true do sys.wait(5000) local error_msg = mqtt_client:handler() if error_msg then syslog.syslog("LOG_INFO","MQTT client break,error message:" .. error_msg) os.exit(5) end end MQTT.client:destroy() end) end