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

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

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

相关推荐

YAML配置文件简介及使用(yaml 配置)

简介YAML是"YAMLAin'taMarkupLanguage"(YAML不是一种标记语言)的缩写。相比JSON格式的方便。...

教你如何解决最常见的58种网络故障排除方法

1.故障现象:网络适配器(网卡)设置与计算机资源有冲突。分析、排除:通过调整网卡资源中的IRQ和I/O值来避开与计算机其它资源的冲突。有些情况还需要通过设置主板的跳线来调整与其它资源的冲突。2.故障现...

一分钟带你了解服务器网卡(服务器网卡怎么用)

今天小编和大家聊一下服务器的网卡。什么是网卡?简单说网卡就是计算机与局域网互连的设备。计算机主要通过网卡接入网络。网卡又称为网络适配器或网络接口卡NIC(NetworkinterfaceCard)...

linux文件之ssh配置文件的含义与作用

ssh远程登录命令是操作系统(包括linux和window系统)下常用的操作命令,可以帮助用户,远程登录服务器系统,查看,操作系统相关信息。linux系统对于ssh命令有专门保存其相关配置的目录和文件...

Cilium 官方文档翻译 - IPAM(二)Kubernetes Host模式

KubernetesHostScopeciliumIPAM的kuberneteshost-scope模式通过选项ipam:kubernetes开启,将集群IP地址分配委托给每个独立的节点,并...

域名劫持跳转,域名劫持跳转的解决办法只需5步

简单来说,域名劫持就是把原本准备访问某网站的用户,在不知不觉中,劫持到仿冒的网站上,例如用户准备访问某家知名品牌的网上商店,黑客就可以通过域名劫持的手段,把其带到假的网上商店,同时收集用户的ID信息和...

Linux基本命令(linux基本命令总结)

...

Linux 磁盘和文件系统管理(linux磁盘管理fdisk)

1检测并确认新硬盘...

windows host文件怎么恢复?局域网访问全靠这些!

windowshost文件怎么恢复?windowshost文件是常用网址域名及其相应IP地址建立一个关联文件,通过这个host文件配置域名和IP的映射关系,以提高域名解析的速度,方便局域网用户使用...

Nginx配置文件详解与优化建议(nginx 配置详解)

1、概述今天来详解一下Nginx的配置文件,以及给出一些配置建议,希望能对大家有所帮助。...

Mac电脑hosts文件锁定,如何修改hosts文件权限

有时候我们需要修改hosts文件,但是网上很多教程都行不通,使用sudo命令也不行。其实有一个很简单的方法。打开终端命令行,使用如下命令即可:sudochflags-hvnoschg/etc/...

windows电脑如何修改hosts文件?(windows 修改hosts文件)

先来简单说下电脑host的作用hosts文件的作用:hosts文件是一个用于储存计算机网络中各节点信息的计算机文件;作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中...

Vigilante恶意软件行为怪异:修改Hosts文件以阻止受害者访问盗版网站

Sophos刚刚报道了一款名叫Vigilante的恶意软件,但其行为却让许多受害者感到不解。与其它专注于偷密码、搞破坏、或勒索赎金的恶意软件不同,Vigilante会通过修改Hosts文件...

hosts文件无法修改几种现象和解决方法

第一种、hosts文件修改完不是直接保存而是弹出另存为窗口解决:1、右击hosts文件——属性——把“只读”前面勾去掉。第二种、打开hosts文件时提示“你没有权限打开该文件,请向文件的所有者或管理员...

hosts文件位置在哪里,教你hosts文件位置在哪里

Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的I...

取消回复欢迎 发表评论: