AliIotHubEntity.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Text.Json.Serialization;
  5. namespace DeviceInfoToAliIotHubViaGateway
  6. {
  7. internal class Device3Tuple
  8. {
  9. internal Device3Tuple(string productKey, string deviceName, string deviceSecret) : this(null, productKey, deviceName, deviceSecret)
  10. {
  11. }
  12. internal Device3Tuple(string productName, string productKey, string deviceName, string deviceSecret)
  13. {
  14. this.ProductName = productName;
  15. this.ProductKey = productKey;
  16. this.DeviceName = deviceName;
  17. this.DeviceSecret = deviceSecret;
  18. }
  19. public string ProductName { get; set; }
  20. public string ProductKey { get; set; }
  21. public string DeviceName { get; set; }
  22. public string DeviceSecret { get; set; }
  23. }
  24. /// <summary>
  25. /// https://help.aliyun.com/document_detail/89298.html
  26. /// </summary>
  27. public class DynamicDevice2TupleParam
  28. {
  29. /// <summary>
  30. /// 子设备的名称。
  31. /// </summary>
  32. public string deviceName { get; set; }
  33. /// <summary>
  34. /// 子设备的产品Key。
  35. /// </summary>
  36. public string productKey { get; set; }
  37. }
  38. /// <summary>
  39. /// https://help.aliyun.com/document_detail/89298.html
  40. /// </summary>
  41. internal class DynamicDeviceRegResponseParam
  42. {
  43. /// <summary>
  44. /// 设备的唯一标识ID。
  45. /// </summary>
  46. public string iotId { get; set; }
  47. /// <summary>
  48. /// 设备秘钥。
  49. /// </summary>
  50. public string deviceSecret { get; set; }
  51. public string productKey { get; set; }
  52. public string deviceName { get; set; }
  53. }
  54. internal class DynamicDeviceRegRequest
  55. {
  56. /// <summary>
  57. /// 消息ID号。需定义为String类型的数字,且设备维度唯一
  58. /// </summary>
  59. public string id { get; set; }
  60. /// <summary>
  61. /// 协议版本号,目前协议版本号为1.0。
  62. /// </summary>
  63. public string version => "1.0";
  64. /// <summary>
  65. /// 设备动态注册的参数。
  66. /// </summary>
  67. [JsonPropertyName("params")]
  68. public List<DynamicDevice2TupleParam> Params { get; set; }
  69. /// <summary>
  70. /// 请求方法,取值thing.sub.register。
  71. /// </summary>
  72. public string method => "thing.sub.register";
  73. }
  74. internal class DynamicDeviceRegResponse
  75. {
  76. /// <summary>
  77. /// 结果信息。
  78. /// 200 succeed
  79. /// 460 request parameter error 请求参数错误。
  80. /// 6402 topo relation cannot add by self 设备不能将自己添加为自己的子设备。
  81. /// 401 request auth error 签名校验失败。
  82. /// </summary>
  83. public int code { get; set; }
  84. public List<DynamicDeviceRegResponseParam> data { get; set; }
  85. public string id { get; set; }
  86. public string message { get; set; }
  87. public string method { get; set; }
  88. public string version { get; set; }
  89. }
  90. /// <summary>
  91. /// https://help.aliyun.com/document_detail/89298.html
  92. /// </summary>
  93. internal class DynamicDeviceTopoAddRequestParam
  94. {
  95. /// <summary>
  96. /// 子设备的名称。
  97. /// </summary>
  98. public string deviceName { get; set; }
  99. /// <summary>
  100. /// 子设备的产品Key。
  101. /// </summary>
  102. public string productKey { get; set; }
  103. /// <summary>
  104. /// 签名。
  105. /// 加签算法:
  106. /// 1. 将所有提交给服务器的参数(sign,signMethod除外)按照字母顺序排序,然后将参数和值依次拼接(无拼接符号)。
  107. /// 2. 对加签内容,需通过signMethod指定的加签算法,使用设备的DeviceSecret值,进行签名计算。
  108. /// 签名计算示例:
  109. /// sign= hmac_md5(deviceSecret, clientId123deviceNametestproductKey123timestamp1524448722000)
  110. /// </summary>
  111. public string sign { get; set; }
  112. public string signmethod => "hmacSha1";
  113. /// <summary>
  114. /// like 1524448722000
  115. /// </summary>
  116. public string timestamp { get; set; }
  117. /// <summary>
  118. /// 设备本地标记,非必填。可以设置为具体的productKey&deviceName。
  119. /// </summary>
  120. public string clientId { get; set; }
  121. }
  122. /// <summary>
  123. /// 添加设备拓扑关系
  124. /// </summary>
  125. internal class DynamicDeviceTopoAddRequest
  126. {
  127. /// <summary>
  128. /// 消息ID号。需定义为String类型的数字,且设备维度唯一
  129. /// </summary>
  130. public string id { get; set; }
  131. /// <summary>
  132. /// 协议版本号,目前协议版本号为1.0。
  133. /// </summary>
  134. public string version => "1.0";
  135. /// <summary>
  136. /// 设备动态注册的参数。
  137. /// </summary>
  138. [JsonPropertyName("params")]
  139. public List<DynamicDeviceTopoAddRequestParam> Params { get; set; }
  140. /// <summary>
  141. /// 请求方法,取值:thing.topo.add。
  142. /// </summary>
  143. public string method => "thing.topo.add";
  144. }
  145. /// <summary>
  146. /// 添加设备拓扑关系
  147. /// </summary>
  148. internal class DynamicDeviceTopoAddResponse
  149. {
  150. /// <summary>
  151. /// 结果信息。
  152. /// 200 succeed
  153. /// 6402 topo relation cannot add by self 设备不能把自己添加为自己的子设备。
  154. /// 401 request auth error 签名校验失败。
  155. /// </summary>
  156. public int code { get; set; }
  157. public object data { get; set; }
  158. public string id { get; set; }
  159. public string message { get; set; }
  160. public string method { get; set; }
  161. public string version { get; set; }
  162. }
  163. /// <summary>
  164. /// 删除设备的拓扑关系
  165. /// </summary>
  166. internal class DynamicDeviceTopoDeleteRequest
  167. {
  168. /// <summary>
  169. /// 消息ID号。需定义为String类型的数字,且设备维度唯一
  170. /// </summary>
  171. public string id { get; set; }
  172. /// <summary>
  173. /// 协议版本号,目前协议版本号为1.0。
  174. /// </summary>
  175. public string version => "1.0";
  176. /// <summary>
  177. /// 设备动态注册的参数。
  178. /// </summary>
  179. [JsonPropertyName("params")]
  180. public List<DynamicDevice2TupleParam> Params { get; set; }
  181. /// <summary>
  182. /// 请求方法,取值thing.topo.delete。
  183. /// </summary>
  184. public string method => "thing.topo.delete";
  185. }
  186. /// <summary>
  187. /// 删除设备的拓扑关系
  188. /// </summary>
  189. internal class DynamicDeviceTopoDeleteResponse
  190. {
  191. public string id { get; set; }
  192. /// <summary>
  193. /// 结果信息。
  194. /// 200 succeed
  195. /// 460 request parameter error 请求参数错误。
  196. /// 6100 device not found 设备不存在。
  197. /// </summary>
  198. public int code { get; set; }
  199. public object data { get; set; }
  200. }
  201. /// <summary>
  202. /// 获取设备的拓扑关系
  203. /// </summary>
  204. internal class DynamicDeviceTopoGetRequest
  205. {
  206. /// <summary>
  207. /// 消息ID号。需定义为String类型的数字,且设备维度唯一
  208. /// </summary>
  209. public string id { get; set; }
  210. /// <summary>
  211. /// 协议版本号,目前协议版本号为1.0。
  212. /// </summary>
  213. public string version => "1.0";
  214. /// <summary>
  215. ///
  216. /// </summary>
  217. [JsonPropertyName("params")]
  218. public List<DynamicDevice2TupleParam> Params { get; }
  219. /// <summary>
  220. /// 请求方法,取值thing.topo.get。
  221. /// </summary>
  222. public string method => "thing.topo.get";
  223. }
  224. /// <summary>
  225. /// 获取设备的拓扑关系
  226. /// </summary>
  227. internal class DynamicDeviceTopoGetResponse
  228. {
  229. public string id { get; set; }
  230. /// <summary>
  231. /// 结果信息。
  232. /// 200 succeed
  233. /// 460 request parameter error 请求参数错误。
  234. /// </summary>
  235. public int code { get; set; }
  236. public List<DynamicDevice2TupleParam> data { get; set; }
  237. }
  238. /// <summary>
  239. /// 发现设备列表上报
  240. /// 在一些场景下,网关可以发现新接入的子设备。发现后,需将新接入子设备的信息上报云端,
  241. /// 然后通过数据流转到第三方应用,选择将哪些子设备接入该网关。
  242. /// </summary>
  243. internal class DynamicDeviceListFoundGetRequest
  244. {
  245. /// <summary>
  246. /// 消息ID号。需定义为String类型的数字,且设备维度唯一
  247. /// </summary>
  248. public string id { get; set; }
  249. /// <summary>
  250. /// 协议版本号,目前协议版本号为1.0。
  251. /// </summary>
  252. public string version => "1.0";
  253. /// <summary>
  254. ///
  255. /// </summary>
  256. [JsonPropertyName("params")]
  257. public List<DynamicDevice2TupleParam> Params { get; set; }
  258. /// <summary>
  259. /// 请求方法,取值thing.list.found。
  260. /// </summary>
  261. public string method => "thing.list.found";
  262. }
  263. /// <summary>
  264. /// 发现设备列表上报
  265. /// </summary>
  266. internal class DynamicDeviceListFoundResponse
  267. {
  268. public string id { get; set; }
  269. /// <summary>
  270. /// 结果信息。
  271. /// 200 succeed
  272. /// 460 request parameter error 请求参数错误。
  273. /// 6250 product not found 上报的子设备产品不存在。
  274. /// 6280 devicename not meet specs 上报的子设备的名称不符规范,设备名称支持英文字母、数字和特殊字符-_@.:,长度限制4 ~32。
  275. /// </summary>
  276. public int code { get; set; }
  277. public object data { get; set; }
  278. }
  279. /// <summary>
  280. /// 通知网关添加设备拓扑关系
  281. /// 通知网关设备对子设备发起添加拓扑关系,可以配合发现设备列表上报功能使用。
  282. /// 可以通过数据流转获取设备返回的结果,数据流转Topic为/{productKey}/{deviceName}/thing/downlink/reply/message。
  283. /// </summary>
  284. internal class DynamicDeviceTopoNotifyRequest
  285. {
  286. /// <summary>
  287. /// 消息ID号。需定义为String类型的数字,且设备维度唯一
  288. /// </summary>
  289. public string id { get; set; }
  290. /// <summary>
  291. /// 协议版本号,目前协议版本号为1.0。
  292. /// </summary>
  293. public string version => "1.0";
  294. /// <summary>
  295. ///
  296. /// </summary>
  297. [JsonPropertyName("params")]
  298. public List<DynamicDevice2TupleParam> Params { get; }
  299. /// <summary>
  300. /// 请求方法,取值thing.topo.add.notify。
  301. /// </summary>
  302. public string method => "thing.topo.add.notify";
  303. }
  304. /// <summary>
  305. /// 通知网关添加设备拓扑关系
  306. /// </summary>
  307. internal class DynamicDeviceTopoNotifyResponse
  308. {
  309. public string id { get; set; }
  310. /// <summary>
  311. /// 结果信息。
  312. /// 200 succeed
  313. /// </summary>
  314. public int code { get; set; }
  315. public object data { get; set; }
  316. }
  317. /// <summary>
  318. /// 子设备上线
  319. /// https://help.aliyun.com/document_detail/89300.html
  320. /// </summary>
  321. internal class DynamicDeviceOnlineRequestParam
  322. {
  323. /// <summary>
  324. /// 子设备的产品Key。
  325. /// </summary>
  326. public string productKey { get; set; }
  327. /// <summary>
  328. /// 子设备的名称。
  329. /// </summary>
  330. public string deviceName { get; set; }
  331. /// <summary>
  332. /// 设备本地标记,非必填。可以设置为具体的productKey&deviceName。
  333. /// </summary>
  334. public string clientId { get; set; }
  335. /// <summary>
  336. /// like 1524448722000
  337. /// </summary>
  338. public string timestamp { get; set; }
  339. public string signMethod => "hmacSha1";
  340. /// <summary>
  341. /// 签名。
  342. /// 加签算法:
  343. /// 1. 将所有提交给服务器的参数(sign,signMethod除外)按照字母顺序排序,然后将参数和值依次拼接(无拼接符号)。
  344. /// 2. 对加签内容,需通过signMethod指定的加签算法,使用设备的DeviceSecret值,进行签名计算。
  345. /// 签名计算示例:
  346. /// sign= hmac_md5(deviceSecret, clientId123deviceNametestproductKey123timestamp1524448722000)
  347. /// </summary>
  348. public string sign { get; set; }
  349. public string cleanSession => "true";
  350. }
  351. /// <summary>
  352. /// 子设备上线
  353. /// </summary>
  354. internal class DynamicDeviceOnlineRequest
  355. {
  356. public string id { get; set; }
  357. [JsonPropertyName("params")]
  358. public DynamicDeviceOnlineRequestParam Params { get; set; }
  359. }
  360. /// <summary>
  361. /// 子设备上线
  362. /// </summary>
  363. internal class DynamicDeviceOnlineResponse
  364. {
  365. /// <summary>
  366. /// 结果信息。
  367. /// 200 succeed
  368. /// 460 request parameter error 请求参数错误。
  369. /// 429 rate limit, too many subDeviceOnline msg in one minute 单个设备认证过于频繁被限流。
  370. /// 428 too many subdevices under gateway 网关下同时在线子设备过多。
  371. /// 6401 topo relation not exist 网关和子设备没有拓扑关系。
  372. /// 6100 device not found 子设备不存在。
  373. /// 521 device deleted 子设备已被删除。
  374. /// 522 device forbidden 子设备已被禁用。
  375. /// 6287 invalid sign 子设备密码或者签名错误。
  376. /// </summary>
  377. public int code { get; set; }
  378. public DynamicDevice2TupleParam data { get; set; }
  379. public string id { get; set; }
  380. public string message { get; set; }
  381. }
  382. /// <summary>
  383. /// 子设备下线
  384. /// </summary>
  385. internal class DynamicDeviceOfflineRequest
  386. {
  387. public string id { get; set; }
  388. [JsonPropertyName("params")]
  389. public DynamicDevice2TupleParam Params { get; set; }
  390. }
  391. /// <summary>
  392. /// 子设备下线
  393. /// </summary>
  394. internal class DynamicDeviceOfflineResponse
  395. {
  396. public string id { get; set; }
  397. /// <summary>
  398. /// 结果信息。
  399. /// 200 succeed
  400. /// 460 request parameter error 请求参数错误。
  401. /// 520 device no session 子设备会话不存在。
  402. /// </summary>
  403. public int code { get; set; }
  404. public string message { get; set; }
  405. public DynamicDevice2TupleParam data { get; set; }
  406. }
  407. /// <summary>
  408. /// {
  409. ///"id": "123",
  410. ///"version": "1.0",
  411. ///"params": {
  412. /// "temperature": "30.5"
  413. ///},
  414. ///"method": "thing.service.property.set"
  415. ///}
  416. /// </summary>
  417. public class Alink_PropertyChanging_FromLocal
  418. {
  419. public string id { get; set; }
  420. public string version => "1.0";
  421. [JsonPropertyName("params")]
  422. public object Params { get; set; }
  423. public string method => "thing.event.property.post";
  424. }
  425. /// <summary>
  426. ///{
  427. /// "id": "123",
  428. /// "version": "1.0",
  429. /// "params": {
  430. /// "value": {
  431. /// "errorCode": "error"
  432. /// },
  433. /// "time": 1524448722000
  434. /// },
  435. /// "method": "thing.event.alarm.post"
  436. ///}
  437. /// </summary>
  438. public class Alink_EventFiring_FromLocal
  439. {
  440. private string _method;
  441. public Alink_EventFiring_FromLocal(string eventName)
  442. {
  443. this._method = $"thing.event.{eventName}.post";
  444. this.time = DateTime.Now.Ticks;
  445. }
  446. public string id { get; set; }
  447. public string version => "1.0";
  448. public object sys => new { ack = 0 };
  449. [JsonPropertyName("params")]
  450. public object Params { get; set; }
  451. public long time { get; set; }
  452. public string method => this._method;
  453. }
  454. public class Alink_ServiceCalled_FromRemote
  455. {
  456. private string _method;
  457. public Alink_ServiceCalled_FromRemote(string eventName)
  458. {
  459. this._method = $"thing.event.{eventName}.post";
  460. this.time = DateTime.Now.Ticks;
  461. }
  462. public string id { get; set; }
  463. public string version => "1.0";
  464. public object sys => new { ack = 0 };
  465. [JsonPropertyName("params")]
  466. public object Params { get; set; }
  467. public long time { get; set; }
  468. public string method => this._method;
  469. }
  470. public class Alink_ThingModel_LogicalNozzle
  471. {
  472. public int CurState { get; set; }
  473. public int PumpId { get; set; }
  474. public string ProductName { get; set; }
  475. public double Price { get; set; }
  476. public double LastSaleVol { get; set; }
  477. public double LastSaleAmt { get; set; }
  478. public double CurSaleVol { get; set; }
  479. public double CurSaleAmt { get; set; }
  480. public double TotalizerVol { get; set; }
  481. public int SiteLevelNozzleId { get; set; }
  482. public string LastSaleTime { get; set; }
  483. public int LogicalId { get; set; }
  484. }
  485. }