1 个不稳定版本
新增 0.1.0 | 2024年8月25日 |
---|
在 网络编程 中排名第 303
每月下载量 56
165KB
4K SLoC
taptap
该项目实现了 Tigo TAP 协议,特别用于通过 TAP 的通信电缆监控 Tigo TAP 及相关的太阳能阵列。这允许100%本地离线数据收集。
TAP 协议在 docs/protocol.md
中描述。此系统使用两个网络,一个有线“网关网络”和一个无线“PV 网络”
Gateway PV device
device (TAP) (optimizer)
┌─────────────────┐ ┌─────────────────┐
PV ┌─▶│ Application │ │ Application │ Proprietary
network │ ├─────────────────┤ ├─────────────────┤ │
│ │ Network │ │ Network │ │
│ ├─────────────────┤ ├─────────────────┤
│ │ Link │ │ Link │ 802.15.4
│ ├─────────────────┤ ├─────────────────┤ │
│ │ Physical │ │ Physical │ │
│ └─────────────────┘ └─────────────────┘
│ ▲ ▲
│ └ ─ ─ ─ ─ ┘
│ ┌─────────────────┐
Gateway └─▶│ Transport │ Proprietary
network ├─────────────────┤ │
│ Link │ │
├─────────────────┤
│ Physical │ RS-485
└─────────────────┘
连接
网关网络通过 RS-485 运行,可以支持超过两个连接。因此,所有者可以连接一个 USB RS-485 适配器、RS-485 帽或任何其他 RS-485 接口,而不会中断通信。
网关网络支持单个控制器。大多数所有者使用 Tigo Cloud Connect Advanced (CCA),但还有其他替代方案,包括旧款 Tigo 产品和嵌入在 GoodWe 逆变器中的类似控制器。 taptap
可以观察控制器的通信,而无需发送任何内容;对于其他组件来说,它不存在。这使得所有者能够从自己的硬件中收集实时信息,而无需通过 Tigo 的云平台,也不需要修改控制器、他们的 TAP 或任何其他硬件。
放置注意事项
此系统使用四线总线:地线(- 或 ⏚)、电源(+)、A 和 B。这些线应从控制器连接到 TAP,然后可能连接到另一个 TAP,依此类推。A 和 B 线携带 RS-485 信号。Tigo 建议在最后一个 TAP 的 A 和 B 线上放置一个 120Ω 电阻以终止总线远端,并且它们在控制器中内置了一个 120Ω 电阻以终止总线近端。
如果您要将监控设备添加到现有安装中,最好将控制器的 A 和 B 线移至监控设备,然后从这里运行新线到控制器。话虽如此,将控制器 A 和 B 端口连接到监控设备的短电线应没问题,尤其是如果您计划永不发送。(您的监控设备可能还有一个“地”或“参考”端子,应连接到控制器的网关 ⏚ 地线。)在任一情况下,请确保您添加的 RS-485 接口不包含第三个终止电阻。总线应始终在控制器和最远端的 TAP 处终止。
┌─────────────────────────────────────┐ ┌────────────────────────────┐
│ CCA │ │ TAP │
│ │ │ │
│ AUX RS485-1 GATEWAY RS485-2 POWER│ │ ┌~┐ │
│┌─┬─┐ ┌─┬─┬─┐ ┌─┬─┬─┬─┐ ┌─┬─┬─┐ ┌─┬─┐│ │ ┌─┬─┬─┬─┐ ┌─┬─┬│┬│┐ │
││/│_│ │-│B│A│ │-│+│B│A│ │-│B│A│ │-│+││ │ │-│+│B│A│ │-│+│B│A│ │
│└─┴─┘ └─┴─┴─┘ └│┴│┴│┴│┘ └─┴─┴─┘ └─┴─┘│ │ └│┴│┴│┴│┘ └─┴─┴─┴─┘ │
└───────────────│─│─│─│───────────────┘ └────│─│─│─│─────────────────┘
│ │ │ │ │ │ │ │
│ │ │ ┃───────────────────────────│─│─│─┘
│ │ ┃─┃───────────────────────────│─│─┘
│ └─┃─┃───────────────────────────│─┘
┃───┃─┃───────────────────────────┘
┗━┓ ┃ ┃
┌───┃─┃─┃───┐
│ ┌┃┬┃┬┃┐ │
│ │-│B│A│ │
│ └─┴─┴─┘ │
│ Monitor │
└───────────┘
未来工作:无控制器操作
如果没有其他控制器,taptap
可以自行从网关请求PV数据包。网关和PV模块配置后似乎可以独立工作,因此对于完全投入使用的系统,即使没有向模块发送任何数据,仅从网关接收PV数据包也足以进行监控。
基于软件的连接方法,适用于拥有控制器root
权限的用户
一些用户拥有控制器上的root
权限。这些用户可以在他们的控制器上安装tcpserial_hook
,以便通过局域网使串行数据可用,包括对taptap
,而无需物理添加另一个RS-485接口。
这种方法有几个缺点:它需要root
权限,需要(可逆地)修改控制器上的文件,可能在未来的固件更新中停止工作,仅当控制器正常工作时才有效等。它是一些用户快速开始的方法,但请考虑连接一个单独的RS-485接口。
项目结构
taptap
由一个库和一个可执行文件组成。该可执行文件是一个命令行界面(CLI)
% taptap
Usage: taptap <COMMAND>
Commands:
observe Observe the system, extracting data as it runs
list-serial-ports List `--serial` ports
peek-bytes Peek at the raw data flowing at the gateway physical layer
peek-frames Peek at the assembled frames at the gateway link layer
peek-activity Peek at the gateway transport and PV application layer activity
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
% taptap observe --tcp 172.21.3.44
{"gateway":{"id":4609},"node":{"id":116},"timestamp":"2024-08-24T09:16:41.686961-05:00","voltage_in":30.6,"voltage_out":30.2,"current":6.94,"dc_dc_duty_cycle":1.0,"temperature":26.8,"rssi":132}
{"gateway":{"id":4609},"node":{"id":116},"timestamp":"2024-08-24T09:17:01.691683-05:00","voltage_in":30.75,"voltage_out":30.4,"current":6.895,"dc_dc_duty_cycle":1.0,"temperature":26.8,"rssi":132}
{"gateway":{"id":4609},"node":{"id":82},"timestamp":"2024-08-24T09:16:41.686961-05:00","voltage_in":30.55,"voltage_out":30.2,"current":6.845,"dc_dc_duty_cycle":1.0,"temperature":29.3,"rssi":147}
{"gateway":{"id":4609},"node":{"id":82},"timestamp":"2024-08-24T09:17:01.691683-05:00","voltage_in":30.95,"voltage_out":30.6,"current":6.765,"dc_dc_duty_cycle":1.0,"temperature":29.3,"rssi":147}
{"gateway":{"id":4609},"node":{"id":19},"timestamp":"2024-08-24T09:16:41.686961-05:00","voltage_in":30.35,"voltage_out":29.9,"current":6.865,"dc_dc_duty_cycle":1.0,"temperature":28.7,"rssi":147}
{"gateway":{"id":4609},"node":{"id":19},"timestamp":"2024-08-24T09:17:01.691683-05:00","voltage_in":29.85,"voltage_out":29.4,"current":7.005,"dc_dc_duty_cycle":1.0,"temperature":28.7,"rssi":147}
{"gateway":{"id":4609},"node":{"id":121},"timestamp":"2024-08-24T09:16:41.686961-05:00","voltage_in":29.8,"voltage_out":21.9,"current":5.25,"dc_dc_duty_cycle":0.7607843137254902,"temperature":29.8,"rssi":120}
{"gateway":{"id":4609},"node":{"id":121},"timestamp":"2024-08-24T09:17:01.691683-05:00","voltage_in":30.55,"voltage_out":22.8,"current":5.3,"dc_dc_duty_cycle":0.7725490196078432,"temperature":29.8,"rssi":120}
截至当前初始版本,observe
子命令以JSON格式向标准输出输出taptap::observer::Event
事件,而不是向InfluxDB或Prometheus输出指标,并且它不会持久化自己的状态,这意味着网关和节点是通过它们的内部ID而不是条形码进行识别的。这是接下来要添加的两个功能。
依赖项
~7.5MB
~135K SLoC