using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Security.Cryptography; using System.Text; using System.Threading; using System.Threading.Tasks; using uPLibrary.Networking.M2Mqtt; using uPLibrary.Networking.M2Mqtt.Messages; using Newtonsoft.Json; using System.Collections.Concurrent; using System.Drawing; using HBLConsole.Model; using HBLConsole.Service; namespace HBLConsole.Communication { public class MqttM2 { private volatile static MqttM2 _Instance; public static MqttM2 GetInstance => _Instance ?? (_Instance = new MqttM2()); private MqttM2() { } string productKey = "grgp0rFA2uu";//产品密钥 string deviceName = "Machine01";//设备名称 string deviceSecret = "ee810ac992033ffc3047f4e80cb49521";//设备秘钥 MqttClient mqttClient; //IotMessage iotMessage = new IotMessage(); //LowerComputerStateInfo lowerComputerStateInfoClass = new LowerComputerStateInfo(); //string PublishContent; /// /// 连接成功 /// public Action ConnectOk { get; set; } public void Init() { // 计算MQTT连接参数。 MqttSign sign = new MqttSign(); sign.calculate(productKey, deviceName, deviceSecret); // 使用Paho连接阿里云物联网平台。 int port = 443; string broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"; mqttClient = new MqttClient(broker, port, true, MqttSslProtocols.TLSv1_2, null, null); mqttClient.Connect(sign.getClientid(), sign.getUsername(), sign.getPassword(), true, 60); if (mqttClient.IsConnected) { if (ConnectOk != null) ConnectOk(); MessageLog.GetInstance.Show("阿里云连接成功"); //订阅消息 //string[] topic = new string[] { "/sys/grgp0rFA2uu/Machine01/thing/event/property/post" }; //byte[] qosLevels = new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE }; // qos=2 //mqttClient.Subscribe(topic, qosLevels); //mqttClient.MqttMsgPublishReceived += MqttClient_MqttMsgPublishReceived;//接收消息事件 //PublishInfo(); } else MessageLog.GetInstance.Show("阿里云连接失败"); } private void MqttClient_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e) { MessageLog.GetInstance.Show($"接收到阿里云消息:{Encoding.UTF8.GetString(e.Message)}"); } /// /// 推送消息 /// public void PublishInfo(string Info) { mqttClient.Publish($"/sys/grgp0rFA2uu/{deviceName}/thing/event/property/post", Encoding.UTF8.GetBytes(Info), 0, false); //ThreadManagerment.GetInstance.StartLong(new Action(() => //{ // AlarmHelper.GetInstance.EdgeAlarm(GVL_Fault.GetInstance.MCUDisconnected, "单片机掉线", AlarmLevel.严重报警); // AlarmHelper.GetInstance.EdgeAlarm(GVL_Fault.GetInstance.IceCreamAbnormal, "冰淇淋机异常"); // AlarmHelper.GetInstance.EdgeAlarm(GVL_Fault.GetInstance.TakeBowlAbnormal, "取碗异常"); // AlarmHelper.GetInstance.EdgeAlarm(GVL_Fault.GetInstance.RobotAbnormal, "机器人异常", AlarmLevel.严重报警); // #region 报警信息设置 // lowerComputerStateInfoClass.AlarmInfo.Clear(); // foreach (var item in AlarmHelper.GetInstance.GetAlarmInfo) // { // lowerComputerStateInfoClass.AlarmInfo.Add(new IotAlarmInfo() // { // time = item.date, // AlarmLevel = item.AlarmLevel, // info = item.AlarmInfomation, // color = new ColorSet() // { // a = AlarmHelper.GetInstance.colorValue[item.AlarmLevel].A, // b = AlarmHelper.GetInstance.colorValue[item.AlarmLevel].B, // g = AlarmHelper.GetInstance.colorValue[item.AlarmLevel].G, // r = AlarmHelper.GetInstance.colorValue[item.AlarmLevel].R, // }, // infoSrc = "" // }); // } // #endregion // #region 报警频率显示 // lowerComputerStateInfoClass.AlarmHz.Clear(); // foreach (var item in Json.GetInstance.Base.AlarmHz) // { // lowerComputerStateInfoClass.AlarmHz.Add(new AlarmHzObj() { Count = item.Value, Name = item.Key }); // } // #endregion // #region 忙碌状态显示 // lowerComputerStateInfoClass.Busy = GVL_VAR.GetInstance.Busy ? "空闲" : "忙碌"; // #endregion // iotMessage.@params.LowerComputerStateInfo = JsonConvert.SerializeObject(lowerComputerStateInfoClass); // PublishContent = JsonConvert.SerializeObject(iotMessage); // mqttClient.Publish($"/sys/grgp0rFA2uu/{deviceName}/thing/event/property/post", Encoding.UTF8.GetBytes(PublishContent), 0, false); // Thread.Sleep(1000); //}), "阿里云数据上报", new Action(() => { if (mqttClient != null) mqttClient.Disconnect(); })); } /// /// 断开连接 /// public void DisConnect() { if (mqttClient != null) mqttClient.Disconnect(); } } }