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

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

yuyutoo 2025-03-30 22:53 25 浏览 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));

相关推荐

深度解读Spring框架的核心原理

深度解读Spring框架的核心原理在Java开发的世界里,提到Spring框架,就像提起一位久经沙场的老将,它几乎成了企业级应用开发的代名词。那么,这个被无数开发者膜拜的框架究竟有何独特之处?今天,我...

「Spring认证」Spring 框架概述

Spring是最流行的企业Java应用程序开发框架。全球数以百万计的开发人员使用SpringFramework来创建高性能、易于测试和可重用的代码。Spring框架是一个开源的Java...

学习Spring框架 这一篇就够了

1.spring概述1.1Spring是什么(理解)...

Spring框架双核解析:IOC与AOP的本质与实战

#Spring核心#IOC容器#AOP编程#Java框架设计...

Spring Boot与传统Spring框架的对比:探索Java开发的新境界

SpringBoot与传统Spring框架的对比:探索Java开发的新境界在Java生态系统中,Spring框架无疑是一个里程碑式的存在。从最初的简单依赖注入容器,到如今覆盖企业级开发方方面面的庞大...

Spring MVC框架源码深度剖析:从入门到精通

SpringMVC框架源码深度剖析:从入门到精通SpringMVC框架简介SpringMVC作为Spring框架的一部分,为构建Web应用程序提供了强大且灵活的支持。它遵循MVC(Model-V...

Spring框架入门

一.spring是什么?Spring是分层...

程序员必知必会技能之Spring框架基础——面向切面编程!

面向切面编程AOP(AspectOrientedProgramming)与OOP(ObjectOrientedProgramming,面向对象编程)相辅相成。AOP提供了与OOP不同的抽象软件结...

Spring Security安全框架深度解读:为你的应用穿上“钢铁铠甲”

SpringSecurity安全框架深度解读:为你的应用穿上“钢铁铠甲”在现代网络世界里,保护我们的应用程序免受各种威胁攻击至关重要。而在这个过程中,SpringSecurity框架无疑是我们最可...

Spring框架的设计哲学与实现:打造轻量级的企业级Java应用

Spring框架的设计哲学与实现:打造轻量级的企业级Java应用Spring框架自2003年诞生以来,已成为企业级Java应用开发的代名词。它不仅仅是一个框架,更是一种设计理念和哲学的体现。本文将带你...

Spring框架深度解析:从核心原理到底层实现的全方位避坑指南

一、Spring框架核心概念解析1.控制反转(IoC)与依赖注入(DI)Spring的核心思想是通过IoC容器管理对象的生命周期和依赖关系。传统开发中,对象通过new主动创建依赖对象,导致高耦合;而S...

Java框架 —— Spring简介

简介一般来说,Spring指的是SpringFramework,它提供了很多功能,例如:控制反转(IOC)、依赖注入...

Spring 框架概述,模块划分

Spring框架以控制反转(InversionofControl,IoC)和面向切面编程(Aspect-OrientedProgramming,AOP)为核心,旨在简化企业级应用开发,使开发者...

spring框架怎么实现依赖注入?

依赖注入的作用就是在使用Spring框架创建对象时,动态的将其所依赖的对象注入到Bean组件中,其实现方式通常有两种,一种是属性setter方法注入,另一种是构造方法注入。具体介绍如下:●属性set...

Spring框架详解

  Spring是一种开放源码框架,旨在解决企业应用程序开发的复杂性。一个主要优点就是它的分层体系结构,层次结构让你可以选择要用的组件,同时也为J2EE应用程序开发提供了集成框架。  Spring特征...

取消回复欢迎 发表评论: