Tigo optimizer local monitoring - without cloud now possible!

Hi,

I have a TIGO system with 16 FV pannels optimizers with the following software:

{ “code”: 0, “serial”: “04C05BA003B1”, “software”: “4.0.0-ct”, “uts”: 2051980183, “sysconfig_ts”: 1752395497, “sysid”: 163281, “status”:[ { “id”: 1, “name”: “Cloud Connection”, “status”: 0 }, { “id”: 3, “name”: “Gateway Communication”, “status”: 0 }, { “id”: 4, “name”: “Modules Communication”, “status”: 1 }, { “id”: 5, “name”: “Discovery: 15/16”, “status”: 3 }, { “id”: 6, “name”: “S/N: 04C05BA003B1”, “status”: 0 }, { “id”: 7, “name”: “S/W: 4.0.0-ct”, “status”: 0 }, { “id”: 8, “name”: “Last Data Sync: 3 min ago”, “status”: 0 }, { “id”: 9, “name”: “Cellular detected”, “status”: -1 }, { “id”: 10, “name”: “Cellular up”, “status”: -1 }, { “id”: 11, “name”: “Kernel: 4.1.15-2.0.4”, “status”: 0} ] }

I used a simple local approach, just accessed the device at its local IP and got this data:

What can be used in Home Assistant (or elsewhere):

The access is simple – just do an HTTP GET request to e.g.
http://local_IPaddres/cgi-bin/summary_data?date=2025-07-13&temp=pin

Where:

  • temp=pin = power
  • temp=vin = voltage
  • temp=iin = current
  • temp=rssi = signal strength

You need HTTP basic authentication:
User: Tigo
Password: $olar

Based on the request, you get this in your browser:

{“lastData”:“2025-07-13 23:59:59.000”,“sunrise”:6.350000,“sunset”:16.690000,“light”:4.870000,“dark”:18.170000,“dataset”:[{“order”:[“A1”,“A2”,“A6”,“A7”,“A8”,“A9”,“A10”,“A11”,“A12”,“A14”,“A15”,“A16”],“data”:[{“t”:“00:00”,“d”:},
{“t”:“20:00”,“d”:[16,16,15,14,14,16,14,16,8,8,8,8,8,8,8]},
{“t”:“20:01”,“d”:[20,19,19,18,19,20,17,20,7,8,7,7,7,8,6]},
{“t”:“20:02”,“d”:[26,24,24,22,24,26,20,27,8,8,8,8,8,8,8]},
{“t”:“20:03”,“d”:[15,14,14,14,13,14,13,15,8,8,8,8,8,7,7]},
{“t”:“20:04”,“d”:[12,12,12,12,11,11,11,12,7,8,7,8,7,7,7]},
{“t”:“20:05”,“d”:[11,12,12,11,11,11,11,11,7,8,7,7,7,7,7]}]}]}

And this can be read directly into Home Assistant as sensors.

Something like that:

- platform: rest
  name: Tigo Vykon
  resource_template: "http://YOUR_LOCAL_IP/cgi-bin/summary_data?date={{ now().strftime('%Y-%m-%d') }}&temp=pin"
  username: Tigo
  password: $olar
  authentication: basic
  headers:
    Accept: application/json
  value_template: "OK"
  json_attributes:
    - dataset
    - order
  scan_interval: 60
- sensor:
    - name: "Tigo Vykon Last"
      unique_id: tigo_vykon_last
      state: >
        {% set ds = state_attr('sensor.tigo_vykon', 'dataset') %}
        {% if ds and ds[-1].data and ds[-1].data[-1].d %}
          {{ ds[-1].data[-1].d | join(',') }}
        {% else %}
          unavailable
        {% endif %}
      attributes:
        t: >
          {% set ds = state_attr('sensor.tigo_vykon', 'dataset') %}
          {% if ds and ds[-1].data %}
            {{ ds[-1].data[-1].t }}
          {% else %}
            unavailable
          {% endif %}
- sensor:
    # VYKON
    - name: "Tigo A1 Vykon"
      unique_id: tigo_a1_vykon
      state: >
        {% set v = states('sensor.tigo_vykon_last').split(',') %}
        {{ v[0] | float(0) if v|length > 0 else 'unavailable' }}
    - name: "Tigo A2 Vykon"
      unique_id: tigo_a2_vykon
      state: >
        {% set v = states('sensor.tigo_vykon_last').split(',') %}
        {{ v[1] | float(0) if v|length > 1 else 'unavailable' }}
    - name: "Tigo A3 Vykon"
      unique_id: tigo_a3_vykon
      state: >
        {% set v = states('sensor.tigo_vykon_last').split(',') %}
        {{ v[2] | float(0) if v|length > 2 else 'unavailable' }}
    - name: "Tigo A4 Vykon"
      unique_id: tigo_a4_vykon
      state: >
        {% set v = states('sensor.tigo_vykon_last').split(',') %}
        {{ v[3] | float(0) if v|length > 3 else 'unavailable' }}

I’m just using this ESPHome Component: GitHub - N30dG/esphome-components. Which works really reliable for me and only requires a ESP32 and a cheap RS485-TTL-Converter.

But your approch looks more elegant as it doesn’t require any additional
hardware. Sadly your post was to late.
For now as I already have the requried Hardware I probably stick to the ESPHome Solution as I can pull data at a faster interval.
But if I hade to start over I would probaly stick with your template.

If your solution can handle readings more often than after 1 minute, compared to mine, it won’t hurt, at least it will be more accessible in more realistic values. Then give feedback on whether it is possible to read after, for example, 10 seconds.

And I also see that your solution should be able to read more information with TIGO, such as temperature.

Hallo, great work making Tigo data available locally. Tried different approaches, but favor taptap.
Unfortunately I ended up at about where Alfio76 ended - everything started, but no panels are recognized, all nodes (44) reported offline.
Is there a simple way to confirm that at least communication is picked up by the WS (RS486 to RJ45).
Any idea / tip how to proceed?

I have a similar experience, however I note that MQTT data is being published for most or all panels (sample log below - haven’t audited yet to compare as I have 38 panels).

Running HAOS in virtualbox.

New to HA so may have something to do with my being unable to figure out steps to install “requirements.txt”. Unclear if a command line, or text to put in a config file somewhere?

Updated all configuration entries in the Taptap add-on under config tab, and as indicated based on logs (see below) it’s seeing and able to report panel data but not find the id’s?

Excerpt of Log showing unknown id warnings but then panel data following -

[2025-07-31 13:25:49.703515] WARNING: Unknown node id: ‘21’
[2025-07-31 13:25:49.703537] DEBUG: {‘node’: {‘id’: 21}, ‘timestamp’: ‘2025-07-31T13:25:46.857505126-04:00’, ‘voltage_in’: 34.35, ‘voltage_out’: 31.1, ‘current’: 7.6, ‘dc_dc_duty_cycle’: 0.9372549019607843, ‘temperature’: 64.8, ‘rssi’: 117, ‘gateway_id’: 4609}
[2025-07-31 13:25:49.703599] DEBUG: Received taptap data
[2025-07-31 13:25:49.703621] DEBUG: b’{“gateway”:{“id”:4609},“node”:{“id”:10},“timestamp”:“2025-07-31T13:25:46.857505126-04:00”,“voltage_in”:37.7,“voltage_out”:37.3,“current”:7.785,“dc_dc_duty_cycle”:1.0,“temperature”:62.7,“rssi”:42}\n’
[2025-07-31 13:25:49.703650] WARNING: Unknown node id: ‘10’
[2025-07-31 13:25:49.703671] DEBUG: {‘node’: {‘id’: 10}, ‘timestamp’: ‘2025-07-31T13:25:46.857505126-04:00’, ‘voltage_in’: 37.7, ‘voltage_out’: 37.3, ‘current’: 7.785, ‘dc_dc_duty_cycle’: 1.0, ‘temperature’: 62.7, ‘rssi’: 42, ‘gateway_id’: 4609}
[2025-07-31 13:25:49.703729] DEBUG: Received taptap data
[2025-07-31 13:25:49.703752] DEBUG: b’{“gateway”:{“id”:4609},“node”:{“id”:10},“timestamp”:“2025-07-31T13:25:48.857505126-04:00”,“voltage_in”:37.75,“voltage_out”:37.4,“current”:7.725,“dc_dc_duty_cycle”:1.0,“temperature”:62.7,“rssi”:42}\n’
[2025-07-31 13:25:49.703780] WARNING: Unknown node id: ‘10’
[2025-07-31 13:25:49.703802] DEBUG: {‘node’: {‘id’: 10}, ‘timestamp’: ‘2025-07-31T13:25:48.857505126-04:00’, ‘voltage_in’: 37.75, ‘voltage_out’: 37.4, ‘current’: 7.725, ‘dc_dc_duty_cycle’: 1.0, ‘temperature’: 62.7, ‘rssi’: 42, ‘gateway_id’: 4609}
[2025-07-31 13:25:49.703860] DEBUG: Received taptap data
[2025-07-31 13:25:49.703882] DEBUG: b’{“gateway”:{“id”:4609},“node”:{“id”:37},“timestamp”:“2025-07-31T13:25:44.839670492-04:00”,“voltage_in”:36.75,“voltage_out”:36.4,“current”:7.665,“dc_dc_duty_cycle”:1.0,“temperature”:61.6,“rssi”:111}\n’
[2025-07-31 13:25:49.703910] WARNING: Unknown node id: ‘37’
[2025-07-31 13:25:49.703932] DEBUG: {‘node’: {‘id’: 37}, ‘timestamp’: ‘2025-07-31T13:25:44.839670492-04:00’, ‘voltage_in’: 36.75, ‘voltage_out’: 36.4, ‘current’: 7.665, ‘dc_dc_duty_cycle’: 1.0, ‘temperature’: 61.6, ‘rssi’: 111, ‘gateway_id’: 4609}
[2025-07-31 13:25:49.703989] DEBUG: Received taptap data
[2025-07-31 13:25:49.704012] DEBUG: b’{“gateway”:{“id”:4609},“node”:{“id”:37},“timestamp”:“2025-07-31T13:25:46.857505126-04:00”,“voltage_in”:36.75,“voltage_out”:36.4,“current”:7.655,“dc_dc_duty_cycle”:1.0,“temperature”:61.6,“rssi”:111}\n’
[2025-07-31 13:25:49.704040] WARNING: Unknown node id: ‘37’
[2025-07-31 13:25:49.704061] DEBUG: {‘node’: {‘id’: 37}, ‘timestamp’: ‘2025-07-31T13:25:46.857505126-04:00’, ‘voltage_in’: 36.75, ‘voltage_out’: 36.4, ‘current’: 7.655, ‘dc_dc_duty_cycle’: 1.0, ‘temperature’: 61.6, ‘rssi’: 111, ‘gateway_id’: 4609}
[2025-07-31 13:25:49.704118] DEBUG: Received taptap data
[2025-07-31 13:25:49.704141] DEBUG: b’{“gateway”:{“id”:4609},“node”:{“id”:36},“timestamp”:“2025-07-31T13:25:44.839670492-04:00”,“voltage_in”:36.05,“voltage_out”:35.6,“current”:7.445,“dc_dc_duty_cycle”:1.0,“temperature”:62.8,“rssi”:111}\n’
[2025-07-31 13:25:49.704168] WARNING: Unknown node id: ‘36’
[2025-07-31 13:25:49.704189] DEBUG: {‘node’: {‘id’: 36}, ‘timestamp’: ‘2025-07-31T13:25:44.839670492-04:00’, ‘voltage_in’: 36.05, ‘voltage_out’: 35.6, ‘current’: 7.445, ‘dc_dc_duty_cycle’: 1.0, ‘temperature’: 62.8, ‘rssi’: 111, ‘gateway_id’: 4609}
[2025-07-31 13:25:49.704251] DEBUG: Received taptap data
[2025-07-31 13:25:49.704274] DEBUG: b’{“gateway”:{“id”:4609},“node”:{“id”:36},“timestamp”:“2025-07-31T13:25:46.857505126-04:00”,“voltage_in”:35.55,“voltage_out”:35.2,“current”:7.56,“dc_dc_duty_cycle”:1.0,“temperature”:62.8,“rssi”:111}\n’
[2025-07-31 13:25:49.704301] WARNING: Unknown node id: ‘36’
[2025-07-31 13:25:49.704323] DEBUG: {‘node’: {‘id’: 36}, ‘timestamp’: ‘2025-07-31T13:25:46.857505126-04:00’, ‘voltage_in’: 35.55, ‘voltage_out’: 35.2, ‘current’: 7.56, ‘dc_dc_duty_cycle’: 1.0, ‘temperature’: 62.8, ‘rssi’: 111, ‘gateway_id’: 4609}
[2025-07-31 13:25:49.704378] DEBUG: Received taptap data
[2025-07-31 13:25:49.704400] DEBUG: b’{“gateway”:{“id”:4609},“node”:{“id”:34},“timestamp”:“2025-07-31T13:25:44.839670492-04:00”,“voltage_in”:36.8,“voltage_out”:36.4,“current”:7.64,“dc_dc_duty_cycle”:1.0,“temperature”:57.2,“rssi”:156}\n’
[2025-07-31 13:25:49.704438] WARNING: Unknown node id: ‘34’
[2025-07-31 13:25:49.704460] DEBUG: {‘node’: {‘id’: 34}, ‘timestamp’: ‘2025-07-31T13:25:44.839670492-04:00’, ‘voltage_in’: 36.8, ‘voltage_out’: 36.4, ‘current’: 7.64, ‘dc_dc_duty_cycle’: 1.0, ‘temperature’: 57.2, ‘rssi’: 156, ‘gateway_id’: 4609}…

And here is the first part of log on startup processing config file -

[16:21:30] INFO: Starting taptap…

s6-rc: info: service legacy-services successfully started

[2025-07-31 16:21:31.160420] INFO: Reading config file: /etc/taptap/config.ini

[2025-07-31 16:21:31.166733] DEBUG: Configured nodes: {‘2’: ‘a1’, ‘3’: ‘a2’, ‘4’: ‘a3’, ‘5’: ‘a4’, ‘6’: ‘a5’, ‘7’: ‘a6’, ‘8’: ‘a7’, ‘9’: ‘a8’, ‘10’: ‘b1’, ‘11’: ‘b2’, ‘12’: ‘b3’, ‘13’: ‘b4’, ‘14’: ‘b5’, ‘15’: ‘b6’, ‘16’: ‘b7’, ‘17’: ‘c1’, ‘18’: ‘c2’, ‘19’: ‘c3’, ‘20’: ‘c4’, ‘21’: ‘c5’, ‘22’: ‘c6’, ‘23’: ‘c7’, ‘24’: ‘d1’, ‘26’: ‘d2’, ‘27’: ‘d3’, ‘28’: ‘d4’, ‘29’: ‘d5’, ‘30’: ‘d6’, ‘31’: ‘d7’, ‘32’: ‘e1’, ‘33’: ‘e2’, ‘34’: ‘e3’, ‘35’: ‘e4’, ‘36’: ‘e5’, ‘37’: ‘e6’, ‘38’: ‘e7’, ‘39’: ‘e8’, ‘40’: ‘f1’, ‘41’: ‘f2’}

[2025-07-31 16:21:31.169553] DEBUG: Into mqtt_init

[2025-07-31 16:21:32.172697] DEBUG: Into mqtt_on_connect

[2025-07-31 16:21:32.172746] INFO: MQTT client connected

[2025-07-31 16:21:32.175056] DEBUG: Into taptap_init

[2025-07-31 16:21:32.177299] INFO: TapTap process started

[2025-07-31 16:21:32.177753] DEBUG: Into taptap_discovery

[2025-07-31 16:21:32.177863] DEBUG: Into taptap_discovery_device

[2025-07-31 16:21:32.187640] DEBUG: Publish MQTT discovery topic homeassistant/device/tigo/config

[2025-07-31 16:21:32.188902] DEBUG: {‘device’: {‘ids’: ‘ec97d8e6-3b3a-52c6-aa9c-57264759e889’, ‘name’: ‘Tigo’, ‘mf’

And here is sampling of Nodes offline from log -

[2025-07-31 16:21:32.198204] DEBUG: Into taptap_tele

[2025-07-31 16:21:32.198809] DEBUG: Node a1 init as offline

[2025-07-31 16:21:32.199985] DEBUG: Node a2 init as offline

[2025-07-31 16:21:32.200231] DEBUG: Node a3 init as offline

[2025-07-31 16:21:32.200342] DEBUG: Node a4 init as offline

[2025-07-31 16:21:32.200438] DEBUG: Node a5 init as offline

[2025-07-31 16:21:32.200535] DEBUG: Node a6 init as offline

[2025-07-31 16:21:32.200648] DEBUG: Node a7 init as offline

[2025-07-31 16:21:32.200744] DEBUG: Node a8 init as offline

[2025-07-31 16:21:32.200836] DEBUG: Node b1 init as offline…

Add-on: TapTap
Tigo CCA to HomeAssistant MQTT bridge

Add-on version: 0.1.5
You are running the latest version of this add-on.
System: Home Assistant OS 16.0 (amd64 / qemux86-64)
Home Assistant Core: 2025.7.4
Home Assistant Supervisor: 2025.07.2

The same, I created the issues about current problems

Hallo, as reported on Jul 25, I have installed Taptap but cannot get panel data (all 44 panels reported offline).
In the meantime I have installed the original Taptap project (see litinoveweedle initial post Mar 26). I could see the raw data, could see frames, but nothing else (ie. panel data). However, there are some inconsistencies between the two (raw and frame): the first payload byte of the Receive response is (Hex): 81 (@ raw byte), however 41 (@ frame). This indicates at least a small problem in interpreting the raw data, which could (?) also be the reason for „my problems“.
To be more precise, my system is maybe not a standard system (but Tigo handles it without any issue): I have 44 panels / TIGOs with two Taps (an old one and a new one).
So, I will probably have to contact the author of the Taptap project.
Any other thoughts ?
Cheers

@ litinoveweedle

Hallo, as reported on Jul 25, I have installed the HA Taptap addon but cannot get panel data (all 44 panels reported offline).
In the meantime I have installed the original Taptap project (see initial post Mar 26). I could see the raw data, could see frames, but nothing else (ie. panel data). However, there are some inconsistencies between the two (raw and frame): the first payload byte of the Receive response is (Hex): 81 (@ raw byte), however 41 (@ frame). This indicates at least a small problem in interpreting the raw data, which could (?) also be the reason for „my problems“.
To be more precise, my system is maybe not a standard system (but Tigo handles it without any issue): I have 44 panels / TIGOs with two Taps (an old one and a new one).
Any thoughts ?
Cheers

Hello, How it works on the last CCA version 4?

Hey folks. I just had a solar install in the UK with a Tigo CCA and optimisers for all my panels.

I’m really pi**ed off at the cloud requirement, and generally the state of data ownership in solar installations; my sunsynk inverter also came with some stupid cloud only logger, which I’ve since replaced with a USR-W630 for local access.

Since the installers haven’t given me access to the app for days since installation of the Tigo, I decided to play around a bit.

It’s on 4.0.1-ct, I have access to all of the web UI; the summary page is available with the standard credentials, however, for the “main” UI with all the settings etc, I have to use the 10.11.1.1 trick. I have no idea what I can do with the stuff in that web-UI, it has a lot of features, but I noticed “LocalDataAccess” tab which requires a password, and I don’t see anywhere online what that password could be so I can’t look any deeper.

I’m curious; if I got another USR-W630 for RS485->WiFi, can I use that and remove the CCA entirely, or is the CCA still required to be in the system for things to function?

If I block the CCA from the internet because I’m using other local-access addons, will that cause any issues? I saw elsewhere mentions of the data storage filling up because of data not being able to send to the server. Those addons provide much less detail though, unfortunately.

If I can’t get much further with the access I have, I will disassemble the CCA and use hardware means to gain root access for more tinkering but was hoping to avoid that.

product :wink:
https://fr.aliexpress.com/item/1005008220892003.html?channel=twinner

great and thank you, I just bought it because already an rs232 / ethernet for years from this brand which works wonderfully: my cca being already connected 25m from my garden shed on a dedicated IOT mesh wifi network, it will end up on the same network as HA so I will install TAPTAP directly on the same nuc as HA so nothing more to do it’s perfect as a device.

Use the official TapTap Add-on

The author of the project (litinoveweedle) provides a ready-to-install Home Assistant add-on.

It is located here:

You can add it as a repository in your Supervisor (Settings / Add-ons / Custom repositories) and directly install TapTap MQTT Bridge from the HA interface.

This is the official and clean method for HA OS.

litinoveweedle also recently fixed the timestamp issue (with negative timezones) so it should work properly for everyone with that issue now!

My setup consists of 2 TAPs and data seems to be flowing no issue. Only thing I’m running into is my Waveshare RS485 - Ethernet (POE) adapter seems to be going offline every night when there is no panel data. Probably a setting somewhere that I haven’t found yet…sigh.

Thanks so much @litinoveweedle for this project!

This is too cool and what I had hoped to find, working on an EG4 Flexboss/Gridboss setup that with Tigo Optmizers.

Really want local viewing of everything I hate cloud. So for the Inverter I think I’ll go Solar Assitant and use MQTT to send to HA, and now for the Tigos this looks like the soluiton!

Is there a best/preferred RJ45 Ethernet to RS485 module?

Hello there,
my tigo firware are locked, so I tried to buy a waveshare and install the hassio addon.

I think I change everything as per instruction (like the pics pubblished), but everything is marked offline.

I don’t understand if I am using wrong ids (it is very likely, where to find them?) or the communication is not established.

My log looks like that

[2025-10-25 11:05:13.409360] INFO: TapTap process started

[2025-10-25 11:05:13.410145] DEBUG: Into taptap_discovery

[2025-10-25 11:05:13.411020] DEBUG: Into taptap_discovery_device

[2025-10-25 11:05:13.416018] DEBUG: Publish MQTT discovery topic homeassistant/device/tigo/config

[2025-10-25 11:05:13.416064] DEBUG: {'device': {'ids': 'ec97d8e6-3b3a-52c6-aa9c-57264759e889', 'name': 'Tigo', 'mf': 'Tigo', 'mdl': 'Tigo CCA'}, 'origin': {'name': 'TapTap MQTT Bridge', 'sw': '0.1', 'url': 'https://github.com/litinoveweedle/taptap2mqtt'}, 'components': {'tigo_voltage_in_min': {'p': 'sensor', 'name': 'Voltage In Min', 'unique_id': '5c8c6d1d-5183-51b7-b3e3-881138871b9f', 'object_id': 'tigo_voltage_in_min', 'device_class': 'voltage', 'unit_of_measurement': 'V', 'state_topic': 'taptap/tigo/state', 'value_template': '{{ value_json.stats.voltage_in.min }}', 'availability_mode': 'all', 'availability': [{'topic': 'taptap/tigo/lwt'}, {'topic': 'taptap/tigo/state', 'value_template': '{{ value_json.state }}'}]}, 'tigo_voltage_in_max': {'p': 'sensor', 'name': 'Voltage In Max', 'unique_id':

and so on… any clue will be much appreciated!

@josher-mi I bought the same exact convert with the same settings of your pics, but it doesn’t communicate with tigo.

maybe I have to change something in expand function and/or misc config?

Just few updates from the project. Tap tap addon uses taptap binary from other developer. That project is unfortunately in limbo, which forced me into Rust programing language crash course. (And AI GitHub copilot usage :rofl::see_no_evil:) But I was able to implement two features heavily needed to make HA taptap addon more useful.

  1. There was a problem when TCP session between taptap and converter get interrupted, then no reconnect happened (as no such functionality was implemented). There was no systematic way how to detect that state from addon. That lead very often to situation, where especially on some of the converters and networks PV data were stopped to be received and you had to restart addon to make it work again. I fixed this in the taptap binary and released addon v 0.1.2 and I can confirm that it works without any problems.

  2. There was nasty bug in the taptap binary preventing receiving messages with Tigo optimizers nodes identification (addresses/barcodes). I fixed that too, and I can confirm that now am able to identify optimizers by barcodes. But that requires heavy modification in the taptap-mqtt bridge and addon itself. The goal is to get rid of the addon required configuration of the NODE IDs and replace it by optimizers serial numbers - aka barcodes.

As usual nothing is that simple as mentioned messages are not generated by Tigo regularly, but rather only during the night time! And as some of the users of this addon are even now unable to read documentation and use logs to get nodes IDs I am afraid it will be lost fight to try to explain, that your addon will only starts collecting data after one whole day. Therefore additional functionality needs to be implemented in all parts of the solution to allow for necessary guess work to start monitoring without knowing which node has what identification. That work is ongoing - I am in the testing phase now.

  1. I see lot of issue with making the HW parts of the setup working. It would be niece if community here could produce list of working Modbus converters together with screenshots of the configuration page/pages. For some strange reasons people think, they that can choose whatever not tested converter they like and then ask me in the GitHub issue for help to make it work. Especially enlightening are issues without any logs, configuration and/or detail description of theirs issues.

If you like to get this addon better please help other user here as much as possible. This would help me to fix real issues and implement new features faster. (Btw that you for the negative timezones discovery and fix!). I don’t want to sound angry, but the reality that some issue created in my repos (not only of this addon) can drive me crazy any day. :rofl:

BTW I never tested taptap binary with the other Tigo devices than this:

So @Smanny taptap compatibility with your device needs to be tested first, before using addon. Maybe someone already tested such Tigo CCA? @Smanny do you have more information about your device?

  1. You need to have Linux on some computer.
  2. You need to properly setup Modbus converter
  3. Go to my fork of taptap binary repo download latest compiled binary a try to get it running from the command line in the: peek-bytes and peek-frames modes first. You will see if you receiving any packets and if taptap understand those.

@litinoveweedle I didn’t really want to bother you, just to understand how things work. I am quite sure the adapter is ok and its configuration is correct. I double checked everything, cables too.

So, I installed taptap from your repo and I can use it (I do always read the documentation and it is not a lost fight with me).

With peek-bytes:

[2025-10-26T18:25:50Z INFO  taptap] opening source connection...
[2025-10-26T18:25:50Z INFO  taptap] source opened, entering read loop
00 FF FF 7E 07 12 01 00 42 00 40 00 00 00 00 00 01 46 2F 7E 08
FF 7E 07 92 01 00 43 82 00 14 00 00 00 00 00 00 00 00 0D 00 01 00 00 00 00 63 FF 7E 08
00 FF FF 7E 07 12 01 00 42 00 40 00 00 00 00 00 01 46 2F 7E 08
FF 7E 07 92 01 00 43 82 00 14 01 00 00 00 00 00 00 00 0D 00 01 00 00 00 00 49 B7 7E 08
00 FF FF 7E 07 12 01 00 42 00 40 00 00 00 00 00 01 46 2F 7E 08

and so on…

with peek-frames:

[2025-10-26T18:28:01Z INFO  taptap] opening source connection...
[2025-10-26T18:28:01Z INFO  taptap] source opened, entering read loop
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64,                                                                                                  0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130,                                                                                                  0, 20, 67, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64,                                                                                                  0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130,                                                                                                  0, 20, 67, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64,                                                                                                  0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130,                                                                                                  0, 20, 67, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64,                                                                                                  0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130,                                                                                                  0, 20, 67, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64,                                                                                                  0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130,                                                                                                  0, 20, 67, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64,                                                                                                  0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130,                                                                                                  0, 20, 67, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64,                                                                                                  0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130,                                                                                                  0, 20, 67, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }

and there is something else:

Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x08), payload: [94, 48, 48, 68, 105, 115, 95, 70, 70, 13, 64, 48, 48, 49, 53, 56, 68, 48, 48, 48, 48, 54, 55, 69, 68, 65, 69, 13] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x09), payload: [] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64, 0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130, 0, 20, 68, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64, 0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130, 0, 20, 68, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64, 0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130, 0, 20, 68, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64, 0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130, 0, 20, 68, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64, 0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130, 0, 20, 69, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64, 0, 0, 0, 0, 0, 1] }
Frame { address: From(GatewayID(0x1201)), frame_type: Type(0x43), payload: [130, 0, 20, 69, 0, 0, 0, 0, 0, 0, 0, 13, 0, 1, 0, 0, 0, 0] }
Frame { address: To(GatewayID(0x1201)), frame_type: Type(0x42), payload: [0, 64, 0, 0, 0, 0, 0, 1] }

What do you thing?

Good, now we are talking.

So this means, that at least on the link and transport layer everything’s works as expected. (Means you converter is properly configured and there seems to be no changes in the implementation to those protocols layers.)

So now please try the two other taptap modes, first peek-activity which shall be hopefully able to decrypt application layer and then observe mode. Please note, that observe will only generate power reports (when the sun is shining) and persistent events (topology reports, rarely during night time) you need to be patient for those.

Try and post back.