1 个不稳定版本

新增 0.1.0 2024年8月25日

网络编程 中排名第 303

Download history 56/week @ 2024-08-19

每月下载量 56

MIT 许可协议

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