有对接过充电桩大佬,求教如何对接

临阵磨枪上岗充电桩,厂家发过来协议基于TCP/IP 的通信方式
没搞过相关方面,不知道这个是直接通信还是要使用mqtt这类

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 44

是汽车电桩还是什么?是自营场站还是三方场站,如果是三方汽车充电中电联有个标准文档,直接对接就好啦。走http的

6个月前 评论
臭鼬 (楼主) 6个月前

最近也在弄一个基于tcp/ip的生鲜柜,对方说是stock通信。留个脚印。看看有没有php方案

6个月前 评论
臭鼬 (楼主) 6个月前
ononl (作者) 6个月前
臭鼬 (楼主) 6个月前
6个月前 评论
臭鼬 (楼主) 6个月前
美国总统 (作者) 6个月前

走mqtt就好啦

6个月前 评论

react/socket

6个月前 评论

没有文档吗

6个月前 评论
臭鼬 (楼主) 6个月前
工匠 6个月前

我是用wokerman实现业务,一般都是基于TCP/IP ⚠️:鉴于交互量较大,尽可能的少走数据库,后期电桩数量多上传多的话需要安装libevent扩展来支持N多设备的连接。正常代码就好,具体业务就看充电桩厂家的文档就好

6个月前 评论
臭鼬 (楼主) 6个月前
qiuwang 4个月前
GDDD

workerman轻松解决,各种协议都支持

6个月前 评论

留个眼,我目前也在对接共享洗车业务也涉及到这方面

6个月前 评论
臭鼬 (楼主) 6个月前
QIN秦同学
我这也需要对接板子,不过是很简单的那种,正在纠结用 php 还是 go 对接那,持续关注下本帖。
6个月前 评论
臭鼬 (楼主) 6个月前

@ononl @SevenMonths @SammlHui 加个v(sym134)互相交流一下

6个月前 评论
zds

做过,用hyperf做了一半tcp服务。后面客户要求又改用java netty+springboot做。需要的话可以加个好友我和你说说之前的架构和逻辑

5个月前 评论
mrpzx001 4个月前

最近也在对接插座设备,监控电流数据,还有设备开关,用laravelS做胶水层,一般来说就是将设备上传的字节流字符串转成ASCII码,然后再转成十六进制,之后就是看着文档对接了

5个月前 评论
臭鼬 (楼主) 5个月前
silie (作者) 5个月前

插个眼

5个月前 评论

用python,过来人的建议

5个月前 评论

具体不太清楚,我一般都是轮训后端接口

4个月前 评论

TCP/IP是一种基础的网络通信协议,它定义了计算机之间如何在网络上进行数据传输。MQTT是一种基于TCP/IP协议的消息传输协议,它是为低带宽和不可靠网络环境设计的,主要用于物联网设备之间的通信。

如果厂家发过来的协议是基于TCP/IP的,那么你可以直接使用TCP/IP协议进行通信,不一定需要使用MQTT。但是,如果你的应用场景需要低带宽和高可靠性,或者需要实现设备之间的消息发布和订阅功能,那么使用MQTT可能会更加合适。

总的来说,是否使用MQTT取决于你的具体需求和应用场景。如果厂家没有明确要求使用MQTT,你可以根据自己的需求选择合适的通信方式。 Workerman是一个高性能的PHP socket服务器框架,可以用来开发TCP、UDP、UnixSocket、Websocket等多种协议的应用。以下是一个使用Workerman开发的基于TCP/IP的简单socket服务器和客户端的例子。

首先,确保你已经安装了Workerman。如果没有安装,可以通过Composer来安装:

bash composer require workerman/workerman 然后,创建一个名为tcp_server.php的文件,用于启动TCP服务器:

php <?php require_once DIR . '/vendor/autoload.php';

use Workerman\Worker;

// 创建一个Worker监听2345端口,使用tcp协议通讯 $tcp_worker = new Worker("tcp://0.0.0.0:2345");

// 启动4个进程对外提供服务 $tcp_worker->count = 4;

// 当客户端发来数据时 $tcp_worker->onMessage = function($connection, $data) { // 向客户端发送hello $data $connection->send('hello ' . $data); };

// 运行worker Worker::runAll(); 然后,创建一个名为tcp_client.php的文件,用于启动TCP客户端:

php <?php require_once DIR . '/vendor/autoload.php';

use Workerman\Worker; use Workerman\Connection\AsyncTcpConnection;

// 不需要设置 Worker,直接使用 AsyncTcpConnection 发送数据。 $connection = new AsyncTcpConnection('tcp://127.0.0.1:2345');

// 当连接建立成功时,发送数据 $connection->onConnect = function($connection) { echo "Connected to server\n"; $connection->send("Hello World\n"); };

// 当连接收到服务端发送的数据时,打印数据并关闭连接 $connection->onMessage = function($connection, $data) { echo "Received data: $data\n"; $connection->close(); };

// 如果连接失败,显示错误信息 $connection->onError = function($connection, $code, $msg) { echo "Error: $msg\n"; };

// 当连接关闭时,显示日志 $connection->onClose = function($connection) { echo "Connection closed\n"; };

// 连接服务端 $connection->connect(); 运行服务器:

bash php tcp_server.php start 在另一个终端运行客户端:

bash php tcp_client.php 客户端将连接到服务器,发送"Hello World"字符串,然后服务器会响应"hello Hello World"字符串。客户端收到响应后,将打印出来并关闭连接。

请注意,这只是一个非常基础的例子,实际使用中你可能需要处理更多的逻辑,比如异常处理、连接管理、协议编码解码等。

4个月前 评论

刚好对接过两个厂家的tcp设备,用的swoole做的服务端

遇到几个比较明显的坑

  • 1、设备量如果不多的话,还是别开启coroutine,不然复杂程度暴增;
  • 2、对接厂家协议需要注意下二进制数据和二进制字符串的区别,这里有遇到一些坑,直接使用包长度检测解决黏包问题。
  • 3、如果需要控制指定设备还需要管理所有连接的fd和设备id的映射,建议是使用共用内存的实现进行管理(比如swoole 的table),使用redis的话就很痛苦。
  • 4、如果不幸使用coroutine,需要使用连接池管理连接(mysql和redis),这时候还要注意内存泄露的问题。
4个月前 评论
臭鼬 (楼主) 4个月前
redfish (作者) 4个月前

设备打1量少tcp就好了,设备量过万就用mqtt

4个月前 评论
臭鼬 (楼主) 4个月前
baisegezishan (作者) 4个月前

看了评论区又涨知识了

4个月前 评论

这种直接gatewayworker最合适,网关协议自己实现一下,逻辑服务处理设备请求。

3个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!