JLChen
2020-05-28 04bd96cbf5d12a4e4b116d2b05fd0d05ea81ee23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
using System;
using Shared.SimpleControl;
 
namespace Shared
{
    public class Thermostat : Common
    {
        public Thermostat ()
        {
            this.Type = DeviceType.Thermostat;
            DeviceTextID = 527; //SimpleControl.R.MyInternationalizationString.CapillaryAC;
            
        }
        /// <summary>
        /// 主机号
        /// </summary>
        public byte HostID = 1;
 
        /// <summary>
        /// 分机号
        /// </summary>
        public byte ExtensionID = 1;
 
        /// <summary>
        /// 开/关机    0--关 1--开
        /// </summary>
        public byte Power = 0;
 
        /// <summary>
        /// 主机属性
        /// 当前模式
        /// 1-制冷,2-制热,3-通风,4-除湿,5-制热除湿
        /// </summary>
        public byte CurrentMode = 0;
        public string CurrentModeString {
            get {
                string str = "";
                switch (CurrentMode) {
                case 1:
                    str = "Cooling";
                    break;
                case 2:
                    str = "Heating";
                    break;
                case 3:
                    str = "Aeration";
                    break;
                case 4:
                    str = "Dehumidification";
                    break;
                case 5:
                    str = "HeatingAndDehumidification";
                    break;
                }
                return str;
            }
        }
 
        /// <summary>
        /// 主机属性
        /// 当前场景 
        /// 1-在家,2-离家,3-睡眠
        /// </summary>
        public byte CurrentScene = 0;
        public string CurrentSceneString {
            get {
                var str = "";
                switch (CurrentScene) {
                case 1:
                    str = "atHome";
                    break;
                case 2:
                    str = "awayHome";
                    break;
                case 3:
                    str = "sleep";
                    break;
                }
                return str;
            }
        }
 
        /// <summary>
        /// 主机属性
        /// 湿度等级
        /// 1-低,2-中,3-高(只在制热模式下可以设置)
        /// </summary>
        public byte HumidityLevel = 0;
 
        /// <summary>
        /// 主机属性
        /// 滤网(%)
        /// </summary>
        public byte StrainerState = 100;
 
        /// <summary>
        /// 主机属性
        /// 分机总数
        /// </summary>
        public byte ExtensionCount = 32;
 
        /// <summary>
        /// 主机属性
        /// 故障信息1
        /// </summary>
        public int FaultInformation1 = 0;
        /// <summary>
        /// 主机属性
        /// 故障信息2
        /// </summary>
        public int FaultInformation2 = 0;
        /// <summary>
        /// 主机属性
        /// 故障信息3
        /// </summary>
        public int FaultInformation3 = 0;
        /// <summary>
        /// 主机属性
        /// 故障信息4
        /// </summary>
        public int FaultInformation4 = 0;
        /// <summary>
        /// 主机属性
        /// 故障信息5
        /// </summary>
        public int FaultInformation5 = 0;
        /// <summary>
        /// 主机属性
        /// 故障信息6
        /// </summary>
        public int FaultInformation6 = 0;
 
        /// <summary>
        /// 模拟量激活位  从低位开始 如bit0对应温控器环境温度值
        /// </summary>
        public byte AnalogActivationByte = 0;
        public byte AnalogActivationByte2 = 0;
 
        public bool Temperature_Enable {
            get { return Convert.ToString (AnalogActivationByte, 2) [0] == 0; }
        }
 
        /// <summary>
        /// 设置的环境温度值
        /// </summary>
        public float Setting_Temperature_Values {
            get {
                //int data = Setting_Temperature_Values1 << 24 | Setting_Temperature_Values2 << 16 | Setting_Temperature_Values3 << 8 | Setting_Temperature_Values4;
 
                //int nSign;
                //if ((data & 0x80000000) > 0) {
                //    nSign = -1;
                //} else {
                //    nSign = 1;
                //}
                //int nExp = data & (0x7F800000);
                //nExp = nExp >> 23;
                //float nMantissa = data & (0x7FFFFF);
 
                //if (nMantissa != 0)
                //    nMantissa = 1 + nMantissa / 8388608;
 
                //float value = nSign * nMantissa * (2 << (nExp - 128));
                //return value;
                //return CommonPage.floatChange (Setting_Temperature_Values4, Setting_Temperature_Values3, Setting_Temperature_Values2, Setting_Temperature_Values1);
 
                try {
                    return CommonPage.floatChange (Setting_Temperature_Values1, Setting_Temperature_Values2, Setting_Temperature_Values3, Setting_Temperature_Values4);
                } catch {
                    return 0;
                }
            }
        }
        public byte Setting_Temperature_Values1 = 0;
        public byte Setting_Temperature_Values2 = 0;
        public byte Setting_Temperature_Values3 = 0;
        public byte Setting_Temperature_Values4 = 0;
        /// <summary>
        /// 设置的环境湿度值
        /// </summary>
        public float Setting_Humidity_Values {
            //get {return CommonPage.floatChange (Setting_Humidity_Values4, Setting_Humidity_Values3, Setting_Humidity_Values2, Setting_Humidity_Values1); }
            get {
                try {
                    return CommonPage.floatChange (Setting_Humidity_Values1, Setting_Humidity_Values2, Setting_Humidity_Values3, Setting_Humidity_Values4);
                } catch  {
                    return 0;
                }
            }
        }
        public byte Setting_Humidity_Values1 = 0;
        public byte Setting_Humidity_Values2 = 0;
        public byte Setting_Humidity_Values3 = 0;
        public byte Setting_Humidity_Values4 = 0;
 
 
        /// <summary>
        /// 室内温度
        /// </summary>
        public float Indoor_Temperature_Values {
            //get { return CommonPage.floatChange (Indoor_Temperature_Values4, Indoor_Temperature_Values3, Indoor_Temperature_Values2, Indoor_Temperature_Values1); }
            get {
                try {
                    return CommonPage.floatChange (Indoor_Temperature_Values1, Indoor_Temperature_Values2, Indoor_Temperature_Values3, Indoor_Temperature_Values4);
                } catch {
                    return 0;
                }
                //set {
                //    //Float
                //    Indoor_Temperature_Values = value;
                //}
            }
        }
        public byte Indoor_Temperature_Values1 = 0;
        public byte Indoor_Temperature_Values2 = 0;
        public byte Indoor_Temperature_Values3 = 0;
        public byte Indoor_Temperature_Values4 = 0;
        /// <summary>
        /// 室外温度
        /// </summary>
        public float Outdoor_Temperature_Values {
            //get { return CommonPage.floatChange (Outdoor_Temperature_Values4, Outdoor_Temperature_Values3, Outdoor_Temperature_Values2, Outdoor_Temperature_Values1); }
            get {
                try {
                    return CommonPage.floatChange (Outdoor_Temperature_Values1, Outdoor_Temperature_Values2, Outdoor_Temperature_Values3, Outdoor_Temperature_Values4);
                } catch {
                    return 0;
                }
            }
        }
        public byte Outdoor_Temperature_Values1 = 0;
        public byte Outdoor_Temperature_Values2 = 0;
        public byte Outdoor_Temperature_Values3 = 0;
        public byte Outdoor_Temperature_Values4 = 0;
 
 
        /// <summary>
        /// 室内湿度
        /// </summary>
        public float Indoor_Humidity_Values {
            //get { return CommonPage.floatChange (Outdoor_Humidity_Values4, Outdoor_Humidity_Values3, Outdoor_Humidity_Values2, Outdoor_Humidity_Values1); }
            get {
                try {
                    return CommonPage.floatChange (Indoor_Humidity_Values1, Indoor_Humidity_Values2, Indoor_Humidity_Values3, Indoor_Humidity_Values4);
                } catch {
                    return 0;
                }
            }
        }
        public byte Indoor_Humidity_Values1 = 0;
        public byte Indoor_Humidity_Values2 = 0;
        public byte Indoor_Humidity_Values3 = 0;
        public byte Indoor_Humidity_Values4 = 0;
        /// <summary>
        /// 室外湿度
        /// </summary>
        public float Outdoor_Humidity_Values {
            //get { return CommonPage.floatChange (Outdoor_Humidity_Values4, Outdoor_Humidity_Values3, Outdoor_Humidity_Values2, Outdoor_Humidity_Values1); }
            get {
                try {
                    return CommonPage.floatChange (Outdoor_Humidity_Values1, Outdoor_Humidity_Values2, Outdoor_Humidity_Values3, Outdoor_Humidity_Values4);
                } catch {
                    return 0;
                }
            }
        }
        public byte Outdoor_Humidity_Values1 = 0;
        public byte Outdoor_Humidity_Values2 = 0;
        public byte Outdoor_Humidity_Values3 = 0;
        public byte Outdoor_Humidity_Values4 = 0;
 
 
        /// <summary>
        /// 室内PM25
        /// </summary>
        public float Indoor_PM25_Values {
            //get { return CommonPage.floatChange (Indoor_PM25_Values4, Indoor_PM25_Values3, Indoor_PM25_Values2, Indoor_PM25_Values1); }
            get {
                try {
                    return CommonPage.floatChange (Indoor_PM25_Values1, Indoor_PM25_Values2, Indoor_PM25_Values3, Indoor_PM25_Values4);
                } catch {
                    return 0;
                }
            }
        }
        public byte Indoor_PM25_Values1 = 0;
        public byte Indoor_PM25_Values2 = 0;
        public byte Indoor_PM25_Values3 = 0;
        public byte Indoor_PM25_Values4 = 0;
        /// <summary>
        /// 室外PM25
        /// </summary>
        public float Outdoor_PM25_Values {
            get {
                try {
                    return CommonPage.floatChange (Outdoor_PM25_Values1, Outdoor_PM25_Values2, Outdoor_PM25_Values3, Outdoor_PM25_Values4);
                } catch {
                    return 0;
                }
            }
            //get { return CommonPage.floatChange (Outdoor_PM25_Values4, Outdoor_PM25_Values3, Outdoor_PM25_Values2, Outdoor_PM25_Values1); }
        }
        public byte Outdoor_PM25_Values1 = 0;
        public byte Outdoor_PM25_Values2 = 0;
        public byte Outdoor_PM25_Values3 = 0;
        public byte Outdoor_PM25_Values4 = 0;
 
 
 
        /// <summary>
        /// 室内二氧化碳
        /// </summary>
        public float Indoor_CO2_Values {
            get {
                try {
                    return CommonPage.floatChange (Indoor_CO2_Values1, Indoor_CO2_Values2, Indoor_CO2_Values3, Indoor_CO2_Values4);
                } catch {
                    return 0;
                }
            }
            //get { return CommonPage.floatChange (Indoor_CO2_Values4, Indoor_CO2_Values3, Indoor_CO2_Values2, Indoor_CO2_Values1); }
        }
        public byte Indoor_CO2_Values1 = 0;
        public byte Indoor_CO2_Values2 = 0;
        public byte Indoor_CO2_Values3 = 0;
        public byte Indoor_CO2_Values4 = 0;
 
        /// <summary>
        /// 室内TVOC
        /// </summary>
        public float Indoor_TVOC_Values {
            get {
                try {
                    return CommonPage.floatChange (Indoor_TVOC_Values1, Indoor_TVOC_Values2, Indoor_TVOC_Values3, Indoor_TVOC_Values4);
                } catch {
                    return 0;
                }
            }
        }
        public byte Indoor_TVOC_Values1 = 0;
        public byte Indoor_TVOC_Values2 = 0;
        public byte Indoor_TVOC_Values3 = 0;
        public byte Indoor_TVOC_Values4 = 0;
 
 
        /// <summary>
        ///  设置温控器属性
        /// </summary>
        public byte [] SetExtension ()
        {
            /// <summary>
            /// 控制温控器分机指令
            /// 发送
            /// 1   通道号 1-255
            /// 2   温控器分机开/关机   0-关机,1-开机
            /// 3   模拟量激活位  从低位开始 如bit0对应温控器环境温度值
            /// 4-7 温控器分机设置温度值  浮点型数据  ℃ IEEE 754浮点数
            /// 8-11    温控器分机湿度值    浮点型数据   % IEEE 754浮点数
            /// 回复
            /// 1   通道号 1-255
            /// 2   温控器开/关机 0-关机,1-开机
            /// 3   模拟量激活位  从低位开始 如bit0对应温控器环境温度值
            /// 4-7 温控器环境温度值    浮点型数据  ℃ IEEE 754浮点数
            /// 8-11    温控器设置温度值    浮点型数据  ℃ IEEE 754浮点数
            /// 12-15   温控器环境湿度值    浮点型数据   % IEEE 754浮点数
            /// 16-19   温控器设置湿度值    浮点型数据   % IEEE 754浮点数
            /// </summary>
            var setRecBytes = Control.ControlBytesSendHasReturn (Command.SetThermostatExtension, SubnetID, DeviceID, new byte [] {this.ExtensionID,this.Power,this.AnalogActivationByte,
                this.Setting_Temperature_Values1,this.Setting_Temperature_Values2,this.Setting_Temperature_Values3,this.Setting_Temperature_Values4,
                this.Setting_Humidity_Values1,this.Setting_Humidity_Values2,this.Setting_Humidity_Values3,this.Setting_Humidity_Values4 });
            return setRecBytes;
        }
 
        public byte[] SetHost()
        {
            /// <summary>
            /// 控制温控器主机指令
            /// 发送
            /// 1   通道号 
            /// 2   开/关机    0--关 1--开
            /// 3   运行模式    1-制冷,2-制热,3-通风,4-除湿,5-制热除湿
            /// 4   运行场景    1-在家,2-离家,3-睡眠
            /// 5   湿度档位    1-低,2-中,3-高(只在制热模式下可以设置)
            /// 回复
            /// 1   通道号 
            /// 2   开/关机    0--关 1--开
            /// 3   运行模式    1-制冷,2-制热,3-通风,4-除湿,5-制热除湿
            /// 4   运行场景    1-在家,2-离家,3-睡眠
            /// 5   湿度档位    1-低,2-中,3-高(只在制热模式下可以设置)
            /// 6   滤网百分比   %
            /// 7   温控器分机数量 1-32
            /// 8-9 故障信息1   
            /// 10-11   故障信息2   
            /// 12-13   故障信息3   
            /// 14-15   故障信息4   
            /// 16-17   故障信息5   
            /// 18-19   故障信息6   
            /// 20-21   模拟量激活位  从低位开始,如enable[0] 的bit0--->室内温度
            /// 22-25   模拟量1(bit0)室内温度  浮点型数据 IEEE 754浮点数
            /// 26-29   模拟量2(bit1)室内湿度  浮点型数据 0-100 % IEEE 754浮点数
            /// 30-33   模拟量3(bit2)室内CO2 浮点型数据 PPM IEEE 754浮点数
            /// 34-37   模拟量4(bit3)室内TVOC    浮点型数据 级 IEEE 754浮点数
            /// 38-41   模拟量5(bit4)室内PM2.5   浮点型数据 PPM IEEE 754浮点数
            /// 42-45   模拟量6(bit5)室外温度  浮点型数据 IEEE 754浮点数
            /// 46-49   模拟量7(bit6)室外湿度  浮点型数据 0-100 % IEEE 754浮点数
            /// 50-53   模拟量8(bit7)室外PM2.5   浮点型数据 PPM IEEE 754浮点数
            /// </summary>
            var setRecBytes = Control.ControlBytesSendHasReturn (Command.SetThermostatHost, SubnetID, DeviceID, new byte [] { this.HostID, this.Power, this.CurrentMode, this.CurrentScene, this.HumidityLevel});
            return setRecBytes;
 
        }
 
    }
}