hunterfox 发表于 2021-4-8 16:26:24

uart (已实现)通过NR实现和设备的串口的透传Tasmota固件

本帖最后由 hunterfox 于 2021-4-9 22:25 编辑


采用 alei643 大神建议,在Tasmota已基本实现交互,
目前进制的方法 采用Tasmota 的command的一个属性




例如:serialsend5 C0010102A5EF可以通过控制台发出16进制数据,同时接收也支持到十六进制
感谢      mitu 大神   指点

原帖需求:
目标功能:
期望实现的功能:
    NR(mqtt)---ESP8266(esphome固件)---串口---RTU设备。想实现这样的一个双向通信功能,调试了1个星期
没有解决掉问题
参考的https://bbs.hassbian.com/forum.php?mod=viewthread&tid=9794大神的帖子及编写方法
目前仅能实现:NR向串口写入数据
无法 读取串口数据,还请大神可以指点一下。附件代码为esphome

另中途也刷了 Tasmota 固件:配置TX RX ,可以实现自动接收:
    命令:      {"SSerialReceived":{"Data":"<string>"}}      Baudrate 9600即:esphome 仅实现了发的个功能Tasmota仅实现了收的功能,悲催啊~~~~~~~~~相当绝望esphome实现的发功能截图



Tasmota实现了收的功能

#------- 固件说明 -------
#芯片模组:esp826601S
#硬件功能: 串口透传
#安装位置:待定
esphome:
includes:
#    - uart_read_line_sensor.h
    - uarttext_sensor.h


substitutions:


config_version: 'esp01_0203'   #
#设备名称(多个dc1改成不一样的,API接入和ESPHOME容器会识别这个作为名称显示)
device_name: esp12f_01_test#

#---------不使用api与设备连接的话删除api配置---------

packages:
wifiset: !include config_wifi.yaml

#------- MQTT配置,注意此配置与API配置互斥,只能选择1个 -------
mqtt:
id: mqtt_client
broker: !secret mqtt_broker
port: !secret mqtt_port
username: !secret mqtt_username
password: !secret mqtt_password
client_id: $device_name
keepalive: $mqtt_keepalive
reboot_timeout: $mqtt_reboot_timeout

topic_prefix: $mqtt_topic_prefix
log_topic:
    topic: "${device_name}/logs"
    level: debug
#topic 注入:{"cmd":"11442233445566"}
on_json_message:
    topic: esphome32/listen/topic
    qos: 0
    then:
      lambda: |-
      const char* cmd="FD0301010160DF";
      auto sent_uart_eng = new CustomP1UartComponent(id(uart_bus));
      unsigned char temp[]={0xFD,0x03,0x01,0x02,0x09,0x60,0xDF,0x0};
      if (x.containsKey("cmd")){
          cmd = x["cmd"];
          sent_uart_eng->write_message(cmd);}

#---------不使用api与设备连接的话删除api配置---------
#api:
#reboot_timeout: $api_reboot_timeout
#password: !secret publicpassword

#----------------------------------------------------

debug:
#-------打印log设置,注意实际输出端口为主板上面的log_tx,而不是刷机用到的tx-------
logger:
#不同的log等级看到的信息详细程度不一样,信息量从少到多依次为NONE、ERROR、WARN、INFO、DEBUG、VERBOSE、VERY_VERBOSE

level: DEBUG
#设置为0关闭通过UART的log输出
baud_rate: 0

uart:
id: uart_bus
tx_pin: GPIO1
rx_pin: GPIO3
baud_rate: 9600

text_sensor:
- platform: custom
    lambda: |-
      auto uart_custext_sensor = new CustomP1UartComponent(id(uart_bus));
      App.register_component(uart_custext_sensor);
      return {uart_custext_sensor->uart_text_sensors};   
    text_sensors:
      id: "uart_readline"
      name: "${device_name}_UART"

switch:
- platform: template
    name: "${device_name} switchtemp"
    lambda: |-
      if (id(uart_readline).state == "*POW=ON#") {
      return true;
      } else if(id(uart_readline).state == "*POW=OFF#") {
      return false;
      } else {
      return {};
      }
    turn_on_action:
      - uart.write: "\r*pow=on#\r"
    turn_off_action:
      - uart.write: "\r*pow=off#\r"

interval:
- interval: 10s
    then:
      - uart.write: "\r*pow=?#\r"

下下策,放弃esphome,放弃Tasmota,采用单片机+ESP8266AT指令来控制 ,自由度完全没有了。


alei643 发表于 2021-4-8 17:09:45

Tasmota也可以发送啊,如果要通过NodeRed向Tasmota发送串口数据的话,可以用Http请求

hunterfox 发表于 2021-4-8 17:20:59

alei643 发表于 2021-4-8 17:09
Tasmota也可以发送啊,如果要通过NodeRed向Tasmota发送串口数据的话,可以用Http请求 ...

感谢回复,我通过命令控制台能发数据到串口,向问下http请求怎么处理。
另外我的交互都是string的,只支持0-127,怎么变成16进制的。命令格式怎么写都不响应

alei643 发表于 2021-4-8 17:35:10

https://tasmota.github.io/docs/Commands/ 官方文档有说明,with Web Requests一节,NR中用http request的节点,请求方式选择POST,URL输入tasmota的Http请求命令就可以了。第二个问题没明白你的意思,协议是Hex还是ASCII?利用NR转换?

hunterfox 发表于 2021-4-8 17:49:34

alei643 发表于 2021-4-8 17:35
https://tasmota.github.io/docs/Commands/ 官方文档有说明,with Web Requests一节,NR中用http request的 ...

我想用十六进制HEX进行串口交互。

fenytk 发表于 2021-4-8 21:42:54

可以参考这位https://bbs.hassbian.com/thread-11623-1-1.html,HEX在NR中直接tcp in / tcp out。

hunterfox 发表于 2021-4-8 22:10:44

fenytk 发表于 2021-4-8 21:42
可以参考这位https://bbs.hassbian.com/thread-11623-1-1.html,HEX在NR中直接tcp in / tcp out。
...

NR 有个不好的地方 tcp in 和tcp out需要占用2个端口,我可以通过AT指令将esp8266切换至透传状态,但只能连接一个端口,即要么实现串口的发,要么实现串口的收,无法交互

neroxps 发表于 2021-4-8 22:45:29

esphome 自定义 c 自由度也很高~

alei643 发表于 2021-4-9 08:02:09

通信协议贴出来看看

mitu 发表于 2021-4-9 08:48:01

hunterfox 发表于 2021-4-8 17:20
感谢回复,我通过命令控制台能发数据到串口,向问下http请求怎么处理。
另外我的交互都是string的,只支 ...
Tasmota用serialsend5命令和SSerialsend5来发送16进制。
页: [1] 2 3
查看完整版本: uart (已实现)通过NR实现和设备的串口的透传Tasmota固件