巴法云 C#/.NET SDK。支持TCP和MQTT协议接入,并提供超级简单的设备操作API。跨平台,支持Linux、Windows、OSX,支持树莓派。
巴法云:https://cloud.bemfa.com/
MQTTnet: https://github.com/dotnet/MQTTnet
GodSharp.Socket: https://github.com/godsharp/GodSharp.Socket
| 包名 | 版本 | 说明 |
|---|---|---|
| BemfaCloud | NuGet Version | 基础包,如果只是使用TCP或MQTT连接,只需使用这个库。 |
| BemfaCloud.Devices | NuGet Version | 设备操作API,提供简单易用的设备操作API。 |
登录到巴法云之后,点击新建主题。
Tips:
巴发云通过主题名称后三位判断主题类型
- 001: 插座设备;
- 002: 灯泡设备;
- 003: 风扇设备;
- 004: 传感器设备;
- 005: 空调设备;
- 006: 开关设备;
- 009: 窗帘设备;
如testSwitch006,创建之后即为开关设备。
通过Nuget包管理器安装BemfaCloud NuGet Version 和BemfaCloud.Devices NuGet Version
或
通过Terminal安装:
dotnet add package BemfaCloud dotnet add package BemfaCloud.Devices
控制一个开关关设备testSwitchMqtt001的TCP接入完整示例。
using System; using System.Threading.Tasks; using BemfaCloud; using BemfaCloud.Connectors.Builder; using BemfaCloud.Devices; using BemfaCloud.Models; namespace ConsoleApp7 { internal class Program { static async Task Main(string[] args) { //构建一个Connector对象 using IBemfaConnector connector = new BemfaConnectorBuilder() .WithTcp() .WithSecret("在此处填写你的私钥") .WithTopics("testSwitch001") //可订阅多个 .WithErrorHandler((e) => { Console.WriteLine($"[LOG][{DateTime.Now}] {e.Message}"); }) .WithMessageHandler((MessageEventArgs e) => { if (e.Type == CommandType.GetTimestamp) { Console.WriteLine($"收到消息:" + e); } }) .Build(); //连接到服务器 bool isConnect = await connector.ConnectAsync(); if (!isConnect) { throw new Exception("Connect with server faild."); } //使用开关设备 BemfaSwitch @switch = new BemfaSwitch("testSwitch001", connector); @switch.On += (e) => { //执行开关打开动作 Console.WriteLine("哦呦~需要打开开关"); return true; }; @switch.Off += (e) => { //执行开关关闭动作 Console.WriteLine("哦呦~需要关闭开关"); return true; }; @switch.OnException += (e) => { Console.WriteLine($"发生了异常:{e.Message}"); }; @switch.OnMessage += (e) => { Console.WriteLine($"收到无法解析的消息:{e.ToString()}"); }; while (true) { string readStr = Console.ReadLine(); if (readStr.Equals("q", StringComparison.OrdinalIgnoreCase) || readStr.Equals("exit", StringComparison.OrdinalIgnoreCase)) { break; } } await connector.DisconnectAsync(); Console.WriteLine($"OK"); } } }
using IBemfaConnector connector = new BemfaConnectorBuilder() .WithTcp() .WithSecret("在此处填写你的私钥") .WithTopics("testSwitchMqtt001") //可订阅多个 .WithErrorHandler((e) => { Console.WriteLine($"[LOG][{DateTime.Now}] {e.Message}"); }) .WithMessageHandler((MessageEventArgs e) => { Console.WriteLine($"收到消息:" + e); }) .Build(); //连接到服务器 bool isConnect = await connector.ConnectAsync(); if (!isConnect) { throw new Exception("Connect with server faild."); }
using IBemfaConnector connector = new BemfaConnectorBuilder() .WithMqtt() .WithSecret("在此处填写你的私钥") .WithTopics("testSwitchMqtt001") //可订阅多个 .WithErrorHandler((e) => { Console.WriteLine($"[LOG][{DateTime.Now}] {e.Message}"); }) .WithMessageHandler((MessageEventArgs e) => { Console.WriteLine($"收到消息:" + e); }) .Build(); //连接到服务器 bool isConnect = await connector.ConnectAsync(); if (!isConnect) { throw new Exception("Connect with server faild."); }
支持巴法云常见的设备。
| 设备 | 枚举 | 类 |
|---|---|---|
| 插座 | 001 | BemfaSocket |
| 灯 | 002 | BemfaLight |
| 风扇 | 003 | BemfaFan |
| 传感器 | 004 | BemfaSensor |
| 空调 | 005 | BemfaAircon |
| 开关 | 006 | BemfaSwitch |
| 窗帘 | 009 | BemfaCurtain |
static void Socket(IBemfaConnector connector) { BemfaSocket socket = new BemfaSocket("填写设备主题", connector); socket.On += (e) => { //执行打开插座动作 Console.WriteLine("哦呦~需要打开插座"); return true; }; socket.Off += (e) => { //执行关闭插座动作 Console.WriteLine("哦呦~需要关闭插座"); return true; }; socket.OnException += (e) => { Console.WriteLine($"发生了异常:{e.Message}"); }; socket.OnMessage += (e) => { Console.WriteLine($"收到无法解析的消息:{e.ToString()}"); }; }
对于On或Off一类的操作,在操作完成之后,需要返回操作是否成功,用于向服务器指示当前设备状态。比如成功之后返回true,会像服务器指示已经完成操作且成功了。
https://github.com/withsalt/BemfaCloud/tree/main/src/Examples
得益于.NET的完全跨平台特性,且微软提供的用于直接访问GPIO的库(System.Device.Gpio)。我们可以C#基于树莓派搭建一个强大的智能家居控制中心。
树莓派示例:https://github.com/withsalt/BemfaCloud/blob/main/src/Examples/BemfaCloud.Example.RaspberryPi/Program.cs