![](https://www.codeproject.com/KB/Articles/5375803/image001.jpg)
介绍
本文的基础是我之前文章中的描述:
在我的上一篇文章中,我写道这个系列将结束......事情有时会与你想象的不同......
一方面,我可以访问其他设备(Shelly Button、Shelly Plug、Shelly 4pm、Shelly Bulb Vintage、Shelly Bulb Duo 和 Shelly Bulb Duo RGBW)并添加它们。对于雪莉灯泡来说,控制它们的文档并不是特别好。这就是为什么我在本文中专门用一小部分来讨论这一点。
此后,我在现有工具箱中实现了附加功能或修改了旧功能 - 也涉及 DRY 概念(不要重复)。
此外,根据我的游戏本能,我更改了操作的属性行为,以便只有适用于上下文的属性才是可见的。在本文中,我特别介绍了这些内容,它们与 Shelly 设备没有任何直接关系,但其他人可能也会感兴趣 - 使用我的工具箱中的应用程序示例。本文也可以称为使用 PropertyDescriptor 进行属性操作。
该下载包含完整的工具箱,其中包含所有当前组件(VB.NET 和 C# 版本),基本上完全取代了之前文章的下载。
ShellyCom2 内的新功能
这里添加了一些新函数和助手:
帮手 | |
Shelly_CheckIp |
检查传递的IP地址是否合法,是否实际存在,导致一个Shelly设备,并且该设备也可以用于该任务。由于此处检查了属性的输入,因此所有违规行为都会作为消息框消息输出。 |
JsonPrettify |
将传递的 JSON 字符串转换为更易读的格式 |
ConvertUnixTimestamp |
将 Shelly 使用的 Unix 时间戳转换为 MicrosoftDateTime 格式 |
Shelly_GetStatusString |
返回任何要传递的 Shelly 请求的状态字符串 |
Shelly_ShowDeviceInfo |
提供DeviceInfo 传递的 IP 地址处的 Shelly 设备的信息以用于显示目的 |
CheckColorIsKnown |
检查从 Shelly 设备传递的值是否Color.ARGB 对应于已知的颜色分配 |
要求 | |
Shelly_GetType |
确定传递的 IP 地址处的 Shelly 类型。现在这里存储的类型比我实际检查的要多。但传递的标识符是正确的...... |
Shelly_GetInfo |
在传递的IP地址处传递Shelly设备的基本信息 |
Shelly_GetBaseType |
返回传递的 IP 地址处的 Shelly 设备的基本类型(输入、输出单通道、输出多通道、调光器、灯) |
Shelly_GetNrOutputs |
返回 Shelly 设备在传递的 IP 地址处的可用输出数量 |
Shelly_DimmerRGBW_GetStatus |
提供 RGBW 设备的状态。 |
命令 | |
AssignAction |
根据传输,选择相关的功能例程来执行命令。由于每个组件中基本上都使用了该方法,因此我将其从组件中删除并作为收集例程存储在这里。 |
Shelly_SetRoller |
为Shelly Pro Dual Cover准备,因为这里可以配置和使用2个百叶窗 |
Shelly_ToggleRoller |
|
Shelly_SetLamp + 1 覆盖层 |
将相应的数据分配给位于传输的 IP 地址的灯 |
Shelly_ToggleLamp + 1 覆盖层 |
使用相应的数据切换所传递的 IP 地址处的灯的状态 |
控制雪莉灯泡
不同的雪莉灯泡有非常不同的行为和可能性:
- Shelly-Bulb Vintage 基本上与 Shelly Dimmer 具有相同的行为 - 因此可以以相同的方式对其进行处理。
- Shelly-Bulb Duo 还提供改变白色颜色的选项。
-
最后,Shelly-Bulb RBGW 有 2 种操作模式。在 中
Mode=White
,它的行为与 Bulb Duo 相同,只是temp
色温 (3000 ... 6500) 使用具有不同值范围的不同属性 ( )。还有一种Mode=Color
可以使用 Windows RGB 颜色表来控制灯并且可以操纵其亮度。还可以选择效果。Shelly_SetLamp
我已在相关方法或中考虑了这些方面Shelly_ToggleLamp
。
不同组件的项目定义
最初,每个组件都有自己的项目定义 - 我现在已经为所有组件总结了这一点。因此,在定义文件中,只有 和SceneActionDefinition
,ControlActionDefinition
它派生自SceneActionDefinition
.
这些定义的基本结构保持不变 - 仅添加了一些额外必需的属性...以及...接口ICustomTypeDescriptor
,它允许根据PropertyGrid
预选使 中的各个属性可见或不可见。我将在下面描述它是如何工作的。
此外,作为一种噱头,还UITypeEditor
Symbol2Property
添加了在其中2个属性前面显示图像符号的功能。为了使其工作,必须将包含的图形作为资源导入到项目中。我还将在下面更详细地描述这一点。
最后的待遇是TypeConverter SelectionOnOffConverter
,它现在代表ON
和 ,OFF
而不是TRUE
和FALSE
代表State
财产。下面我也会谈到这一点。
选择开关转换器
此转换器将变量属性的标准输出bool
从True
/更改False
为On
/ Off
。
首先,它的代码:
它PropertyGrid
本身基本上代表了显示在那里的每个变量,无论它是什么类型,作为文本(即string
)。因此,转换器string
从每个属性生成一个。对于系统已知的所有变量,都有一个相应使用的转换器。但是......您当然也可以指定一个完全不同的转换器,甚至您自己创建的转换器应该用于该属性。在本系列的上一篇文章中,我已经介绍了DropDownConverter
作为一种工具。
CodeProject 已经撰写了许多关于TypeConverter
s 主题的文章 - 因此,如果您有兴趣自己创建类似的内容,我建议您只