百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

臻识车牌识别配制MQTT通讯,解析车号

yuyutoo 2025-03-30 22:53 26 浏览 0 评论

在物联网项目中,我们的软件与车牌识别通讯,通常使用MQTT通讯更简单。

MQTT配制

测试工具

C# MqttHelper

using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Protocol;
using System;
using System.Collections.Generic;
using YUTU.DAL.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using YUTU.BLL.Global;
using System.Threading;

namespace YUTU.BLL.Common.ClientMidle
{
    public class MqttHelper
    {
        public IMqttClient _mqttClient;
        string serverIP, serverPort, user, pwd;

        public MqttHelper(string ipAddr, string port, string userName, string userPwd)
        {
            serverIP = ipAddr;
            serverPort = port;
            user = userName;
            pwd = userPwd;
        }
        public bool blconntion = false;
        MqttClientOptions options = null;
        public Action GetActionSubscribe;
        public async void ConntionServer() //async
        {
            try
            {
                LogMessage("serverIP[" + serverIP + "]serverPort[" + serverPort + "]user[" + user + "]pwd[" + pwd + "]");
                options = new MqttClientOptions() { ClientId = Guid.NewGuid().ToString("D") };
                options.ChannelOptions = new MqttClientTcpOptions()
                {
                    Server = serverIP,
                    Port = Convert.ToInt32(serverPort)
                };
                options.Credentials = new MqttClientCredentials()
                {
                    Username = user,
                    Password = pwd
                };
                options.CleanSession = true;
                options.KeepAlivePeriod = TimeSpan.FromSeconds(100.5);
                options.KeepAliveSendInterval = TimeSpan.FromSeconds(20000);

                if (null != _mqttClient)
                {
                    await _mqttClient.DisconnectAsync();//await
                    _mqttClient = null;
                }
                _mqttClient = new MqttFactory().CreateMqttClient();

                _mqttClient.ApplicationMessageReceived += (sender, args) =>
                {
                    GetActionSubscribe?.Invoke(Encoding.UTF8.GetString(args.ApplicationMessage.Payload));
                    //ActionSubscribe?.Invoke(Encoding.UTF8.GetString(args.ApplicationMessage.Payload));
                    LogMessage($"ApplicationMessageReceived--ClientID:{args.ClientId} | TOPIC:{args.ApplicationMessage.Topic} | Payload:{Encoding.UTF8.GetString(args.ApplicationMessage.Payload)} | QoS:{args.ApplicationMessage.QualityOfServiceLevel} | Retain:{args.ApplicationMessage.Retain}");

                };

                _mqttClient.Connected += (sender, args) =>
                {
                    LogMessage($"Connected--Client is Connected:  IsSessionPresent:{args.IsSessionPresent}");
                };

                _mqttClient.Disconnected += (sender, args) =>
                {
                    LogMessage($"Client is DisConnected ClientWasConnected:{args.ClientWasConnected}");
                };

                await _mqttClient.ConnectAsync(options);//await
            }
            catch (Exception ex)
            {
                LogMessage("ConntionServer异常:" + ex.Message);
            }
        }

        public async void DisConntionServer()
        {
            try
            {
                LogMessage("开始执行DisConntionServer");
                if (null != _mqttClient && _mqttClient.IsConnected)
                {
                    await _mqttClient.DisconnectAsync();
                    _mqttClient.Dispose();
                    _mqttClient = null;
                }
                LogMessage("执行DisConntionServer成功...");
            }
            catch (Exception ex)
            {
                LogMessage("DisConntionServer异常:" + ex.Message);
            }
        }

        public async void HeartConntionServer()
        {
            try
            {
                LogMessage("开始执行HeartConntionServer");
                if (null != _mqttClient && options != null)
                {
                    await _mqttClient.ConnectAsync(options);
                }
                LogMessage("执行HeartConntionServer成功...");
            }
            catch (Exception ex)
            {
                LogMessage("HeartConntionServer异常:" + ex.Message);
            }
        }

        public void SendMessage(string Topic, string Payload)
        {
            try
            {
                LogMessage("SendMessage---Topic[" + Topic + "]Payload[" + Payload + "]");
                Task.Factory.StartNew(async () =>
                {
                    var msg = new MqttApplicationMessage()
                    {
                        Topic = Topic,
                        Payload = Encoding.UTF8.GetBytes(Payload),

                        QualityOfServiceLevel =
                            (MqttQualityOfServiceLevel)
                                Enum.Parse(typeof(MqttQualityOfServiceLevel), "1"),//Level
                        Retain = false
                    };

                    if (null != _mqttClient)
                    {
                        await _mqttClient.PublishAsync(msg);
                    }
                    else
                    {
                        LogMessage("SendMessage_mqttClient为null");
                    }
                    LogMessage("SendMessage成功:" + Payload);
                });

            }
            catch (Exception ex)
            {
                LogMessage("SendMessage异常:" + ex.Message);
            }
        }

        public async void SubscribeAsync(string Topic)
        {
            try
            {
                LogMessage("SubscribeAsync---Topic[" + Topic + "]");
                if (_mqttClient == null) return;

                Thread.Sleep(1000);
                await _mqttClient.SubscribeAsync(
                 new List
                 {
                    new TopicFilter(
                        Topic,
                        (MqttQualityOfServiceLevel)
                            System.Enum.Parse(typeof (MqttQualityOfServiceLevel), "1"))
                 });
            }
            catch (Exception ex)
            {
                LogMessage("SubscribeAsync异常:" + ex.Message);
            }
        }
    }
}

订阅消息

private MqttHelper _mqttHelper = null;
private static string mqttIP = ConfigurationManager.AppSettings["MqttIP"];
private static string mqttTCPPort = ConfigurationManager.AppSettings["MqttTCPPort"];
private static string mqttUser = ConfigurationManager.AppSettings["MqttUser"];
private static string mqttPwd = ConfigurationManager.AppSettings["MqttPwd"];

public void Init()
{
    try
    {
        //MQTT参数配置
        string ipAddr = mqttIP;
        string port = mqttTCPPort;
        string userName = mqttUser;
        string userPwd = mqttPwd;
        //mqtt消息队列
        _mqttHelper = new MqttHelper(ipAddr, port, userName, userPwd);

    }
    catch (Exception e)
    {
        throw new Exception($"Init异常,{e.Message}");
    }
}

public void TurnOn()
{
    try
    {
        if (_mqttHelper == null)
            throw new Exception("Init异常");
            
        _mqttHelper.ConntionServer();

        //接收订阅消息
        _mqttHelper.GetActionSubscribe = (obj) =>
        {
            var msgObj = JsonConvert.DeserializeObject(obj);
            if (msgObj != null)
            {
                ReceiveMsgCallback?.Invoke(msgObj);
            }
        };

        //订阅消息
        _mqttHelper.SubscribeAsync($"071c55ad-f1a5a757/device/message/up/ivs_result");

        //MQTT心跳
        MessageListenerTimer = new System.Timers.Timer(240000);
        MessageListenerTimer.Elapsed += new ElapsedEventHandler(MessageListenerTimer_Elapsed);
        MessageListenerTimer.Enabled = true;
    }
    catch (Exception e)
    {
        throw new Exception($"TurnOn异常,{e.Message}");
    }
}

public void TurnOff()
{
    try
    {
        MessageListenerTimer.Enabled = false;
        if (_mqttHelper != null)
            _mqttHelper.DisConntionServer();
    }
    catch (Exception e)
    {
        throw new Exception($"TurnOff异常,{e.Message}");
    }
}

解析车号

var license = msgObj.payload.AlarmInfoPlate.result.PlateResult.license;
// 解码车号
string base64License = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(license));

相关推荐

ETCD 故障恢复(etc常见故障)

概述Kubernetes集群外部ETCD节点故障,导致kube-apiserver无法启动。...

在Ubuntu 16.04 LTS服务器上安装FreeRADIUS和Daloradius的方法

FreeRADIUS为AAARadiusLinux下开源解决方案,DaloRadius为图形化web管理工具。...

如何排查服务器被黑客入侵的迹象(黑客 抓取服务器数据)

---排查服务器是否被黑客入侵需要系统性地检查多个关键点,以下是一份详细的排查指南,包含具体命令、工具和应对策略:---###**一、快速初步检查**####1.**检查异常登录记录**...

使用 Fail Ban 日志分析 SSH 攻击行为

通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...

《5 个实用技巧,提升你的服务器安全性,避免被黑客盯上!》

服务器的安全性至关重要,特别是在如今网络攻击频繁的情况下。如果你的服务器存在漏洞,黑客可能会利用这些漏洞进行攻击,甚至窃取数据。今天我们就来聊聊5个实用技巧,帮助你提升服务器的安全性,让你的系统更...

聊聊Spring AI Alibaba的YuQueDocumentReader

序本文主要研究一下SpringAIAlibaba的YuQueDocumentReaderYuQueDocumentReader...

Mac Docker环境,利用Canal实现MySQL同步ES

Canal的使用使用docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中,并在springboo...

RustDesk:开源远程控制工具的技术架构与全场景部署实战

一、开源远程控制领域的革新者1.1行业痛点与解决方案...

长安汽车一代CS75Plus2020款安装高德地图7.5

不用破解原车机,一代CS75Plus2020款,安装车机版高德地图7.5,有红绿灯读秒!废话不多讲,安装步骤如下:一、在拨号状态输入:在电话拨号界面,输入:*#518200#*(进入安卓设置界面,...

Zookeeper使用详解之常见操作篇(zookeeper ui)

一、Zookeeper的数据结构对于ZooKeeper而言,其存储结构类似于文件系统,也是一个树形目录服务,并通过Key-Value键值对的形式进行数据存储。其中,Key由斜线间隔的路径元素构成。对...

zk源码—4.会话的实现原理一(会话层的基本功能是什么)

大纲1.创建会话...

Zookeeper 可观测性最佳实践(zookeeper能够确保)

Zookeeper介绍ZooKeeper是一个开源的分布式协调服务,用于管理和协调分布式系统中的节点。它提供了一种高效、可靠的方式来解决分布式系统中的常见问题,如数据同步、配置管理、命名服务和集群...

服务器密码错误被锁定怎么解决(服务器密码错几次锁)

#服务器密码错误被锁定解决方案当服务器因多次密码错误导致账户被锁定时,可以按照以下步骤进行排查和解决:##一、确认锁定状态###1.检查账户锁定状态(Linux)```bash#查看账户锁定...

zk基础—4.zk实现分布式功能(分布式zk的使用)

大纲1.zk实现数据发布订阅...

《死神魂魄觉醒》卡死问题终极解决方案:从原理到实战的深度解析

在《死神魂魄觉醒》的斩魄刀交锋中,游戏卡死犹如突现的虚圈屏障,阻断玩家与尸魂界的连接。本文将从技术架构、解决方案、预防策略三个维度,深度剖析卡死问题的成因与应对之策,助力玩家突破次元壁障,畅享灵魂共鸣...

取消回复欢迎 发表评论: