Repository navigation
Releases: softi-dev/tag-historian-clients
Release list
2026.11.2 · Collector 1.0.48: bad rows skipped, Modbus heartbeat, one source per tag · Integration brand icons
Collector 1.0.48 for Windows, and the Home Assistant integration now carries its own brand icons. The integration's code is the same as in 2026.11.1.
Collector 1.0.48
- Tag files skip a bad row instead of stopping. A row the collector cannot use is named in the log with its line and column, and the rest of the file is collected; the health line counts such rows as
tagsSkipped. A tag file that cannot be read, or in which not one row can be used, still stops the start with exit code 78 - now for a Modbus tag file as well as an OPC UA one. - Modbus TCP (beta): a steady value is sent again every 5 minutes by default (
HeartbeatSeconds300), so a "no data for" alert on a setpoint fires when the device stops answering, not because the value held. That is at most 288 readings a day for a tag that never changes;HeartbeatSeconds0 sends changes only, as before. - One source per tag name across OPC UA servers, Modbus devices, MQTT and Sparkplug B: a second definition is skipped with an error naming both places, instead of two sources writing into one tag. At start the collector also warns once if the tags in its configuration will not fit your plan, and how many will be refused.
- Fixed: a computer clock that steps back no longer holds off writing readings to disk, nor makes the age limit drop the newest ones from the queue. A queue whose files were deleted, or that was restored from a copy, is sent from its oldest file instead of being skipped without a word.
Guides: OPC UA, Modbus TCP.
Home Assistant integration 2026.11.2
- Its own brand icons, so HACS and Home Assistant show Tag Historian's icon instead of a placeholder.
- Open in My Home Assistant links in the README: one opens Tag Historian in HACS on your own Home Assistant, the other starts the integration's setup.
Python client and MCP server
compressionDeadband is described as what it is: a fraction of the last stored value, 0 to 1 - not a distance in the tag's unit. The API refuses any other value from 1.0.48.
Upgrading the collector
Existing configurations keep working as they are.
Docker: a restart keeps the old image. Pull, and create the container again on the same volume with the same -e options as before (the collector README's "Updating the collector" shows how to list them):
docker pull ghcr.io/softi-dev/tag-historian-clients/collector:latest
docker stop tag-collector
docker rm tag-collector
docker run -d --name tag-collector --restart unless-stopped -v tag-collector:/config -e TagHistorian__ApiKey="<your-api-key>" ghcr.io/softi-dev/tag-historian-clients/collector:latest
With compose: docker compose pull, then docker compose up -d.
Windows: extract the zip and run powershell -ExecutionPolicy Bypass -File .\install.ps1 from an elevated PowerShell in that folder. It keeps your configuration, queue and certificates.
SHA-256 d1f54c52a9c90393e9c5ce11ea0a18555a8c383de91d356e28764eb081de7833 TagHistorianCollector-1.0.48-win-x64.zip
The program and scripts are not signed yet: Windows SmartScreen warns about them, and Windows 11 with Smart App Control blocks them.
2026.11.1 · Collector 1.0.47: Modbus TCP (beta), OPC UA browse and tag files · HACS in every country
Collector 1.0.47 for Windows, and HACS now offers the integration in every country. The Home Assistant integration's code is the same as in 2026.11.0.
Collector 1.0.47
Modbus TCP, in beta. Poll energy meters, older PLCs and Modbus RTU devices behind a TCP gateway from the same collector as MQTT and OPC UA: holding and input registers, coils and discrete inputs, 16 to 64 bit integers and floats in any word order, with scaling and a CSV tag list. Only changed values are sent, and a device that stops answering is marked in its tags' history, never filled in. Beta means it has been tested against a Modbus TCP simulator - every data type and word order, and devices that stop answering - but not yet against a real meter or PLC. Tell us in this repository's issues what you run it against. Guide: taghistorian.com/docs/modbus.
OPC UA tag files and browse.
TagsFileon a server names a CSV tag list, saved from Excel in any language:NodeIdandTagName, and if you likeUnits,Description,SamplingIntervalMs,CompressionDeadbandandEnabled.- The new
browsecommand writes that file for you: every variable on the server, with a suggested tag name, its data type and its unit. Delete the rows you do not want, and pointTagsFileat what is left.- Docker:
docker run --rm --pull always -v tag-collector:/config ghcr.io/softi-dev/tag-historian-clients/collector:latest browse - Windows, from an elevated PowerShell:
& "C:\Program Files\Tag Historian\Collector\TagHistorianCollector.exe" browse --output "$HOME\Documents\browse-plant.csv"
- Docker:
- A row the collector cannot read stops it at start, with exit code 78 and the row's line and column, rather than leaving that tag quietly empty. A bad row in a Modbus tag file is skipped with an error in the log instead.
Guide: taghistorian.com/docs/opc-ua#browse.
Units and descriptions now reach the tag. This one is on the server, so it works with the collector you already run: an OPC UA tag's or a Modbus row's Units and Description, an MQTT source's Units and a Sparkplug metric's engineering unit are now stored on the tag. The upload every collector uses dropped them before. One the collector sends replaces the tag's; leave it out and the tag keeps what it has. A collector's deadband still does not set the tag's: on OPC UA, CompressionDeadband is a filter at the PLC, in engineering units, and each tag keeps its own deadband (Picking CompressionDeadband).
Home Assistant integration 2026.11.1
HACS hid the integration from anyone who had set HACS to a country other than Sweden, because the hacs.json in 2026.11.0 named Sweden. This release's names no country, so HACS lists it everywhere. Nothing else changes in Home Assistant.
Upgrading the collector
Existing configurations keep working as they are. TagsFile, browse and ModbusDevices need 1.0.47 or later; an older collector ignores the settings without a word.
Docker: a restart keeps the old image. Pull, and create the container again on the same volume, with the same -e options as before: they belong to the container, not the volume. docker inspect tag-collector --format '{{json .Config.Env}}' lists them before you remove it; PATH, APP_UID, ASPNETCORE_HTTP_PORTS and the DOTNET_ entries come with the image.
docker pull ghcr.io/softi-dev/tag-historian-clients/collector:latest
docker stop tag-collector
docker rm tag-collector
docker run -d --name tag-collector --restart unless-stopped -v tag-collector:/config -e TagHistorian__ApiKey="<your-api-key>" ghcr.io/softi-dev/tag-historian-clients/collector:latest
Put your key in the last line, and any other -e option you created the container with: a setting left out falls back to the file or its default. With compose, where the environment is in docker-compose.yml: docker compose pull, then docker compose up -d.
Windows: extract the zip and run powershell -ExecutionPolicy Bypass -File .\install.ps1 from an elevated PowerShell in that folder. It keeps your configuration, queue and certificates.
The collector writes its example appsettings.json once and never overwrites it, so a file from an older collector has no ModbusDevices list. To add a Modbus device, add the list yourself, as the Modbus guide shows.
SHA-256 05b8e8ee26da69e2517b1fbaa46ad9eb501e0e8816cd3fdaec9dafbec91e0f26 TagHistorianCollector-1.0.47-win-x64.zip
The program and scripts are not signed yet: Windows SmartScreen warns about them, and Windows 11 with Smart App Control blocks them.
2026.11.0 · Import your history, keep it through renames · InfluxDB migration · Collector 1.0.41
Bring the history you already have, keep every reading through restarts and outages, and keep your history when an entity is renamed. Plus a way out of InfluxDB with your history.
This release uses the history import and the tag rename and merge that Tag Historian itself gained on 18 October 2026; they are live, so nothing needs doing on your side first.
Home Assistant integration 2026.11.0
Import the history you already have. Configure → Import the history Home Assistant has already recorded, or the tag_historian.import_history action.
- It sends the recorder's state changes with their original timestamps, by the same rules as live readings.
- It counts against your import allowance - your plan's daily readings × its full-resolution window in days, shown on the import screen - not against the daily allowance.
- It imports history only: readings older than the import's start, the entity's first live reading and its first import (for a renamed tag, under any of its former names), and only inside your plan's full-resolution window. Running it again stores nothing twice.
- The Tag Historian history import sensor shows progress, and a notification says when it is done. A restart carries it on.
- Home Assistant's hourly long-term statistics are not imported.
A restart or an outage no longer costs readings.
- Readings not yet delivered are saved to
.storage(at most 10,000) and sent at the next start. - Readings let go of during an outage, a restart or while the entry was disabled are read back from the recorder, while it still has them, and sent first. They are late live data and count against the daily allowance.
- Readings let go of while the day's allowance is spent are not read back.
- New attributes on the readings-dropped sensor:
backfilled_from_recorder,restored_after_restart.
Renamed entities are followed. Before, renaming a selected entity stopped its readings without a word.
- The selection follows the new id, and readings keep going into the entity's existing tag.
- The new option Rename tags when entities are renamed renames the tag in Tag Historian, history and all, or merges it for a replacement meter given the old meter's id. With the option off, a Repairs card asks: rename or start a new tag, or for a replaced meter, merge or keep apart.
- Renaming a whole device, renaming during a reload and renaming while Tag Historian is unreachable are all followed.
- Readings held over a restart, read back from the recorder or in a running import go with the rename into the same series.
- Answer the card with Start a new tag instead or Keep them apart and the import leaves that entity out: its history stays in the old tag.
Configure now opens a menu.
New: leave InfluxDB with your history
influxdb-migration/- taghistorian-influx-migrate copies Home Assistant's history out of InfluxDB 1.x or 2.x into Tag Historian, under the names live forwarding uses, with each entity's friendly name and unit. Dry run first, a resume file throughout, and it leaves room in the daily allowance for live data. Tested against simulated InfluxDB 1.x and 2.x servers. Guide: taghistorian.com/docs/migrate-from-influxdb.grafana/home-assistant.json- a Grafana dashboard for Home Assistant entities in Tag Historian: an entity dropdown and one chart per entity, in its tag's unit, through the Infinity data source.
Collector 1.0.41 for Windows
Fixes upgrading the Windows service. With 1.0.38, running install.ps1 from a newer package over a running collector could fail with "The process cannot access the file ... because it is being used by another process" and leave the service stopped: Windows reports a service stopped a moment before its process has let go of the program. install.ps1 and uninstall.ps1 now wait for the process itself, and try a briefly locked file again for up to 30 seconds.
To upgrade, extract the zip and run powershell -ExecutionPolicy Bypass -File .\install.ps1 from an elevated PowerShell in that folder. It keeps your configuration, queue and certificates, and it also finishes an earlier upgrade that stopped with the error above.
SHA-256 355396f448e6ec8fa7063422757b9c0a1440e17cfb3c060c016a3ddf2b6eb2af TagHistorianCollector-1.0.41-win-x64.zip
The program and scripts are not signed yet: Windows SmartScreen warns about them, and Windows 11 with Smart App Control blocks them.
2026.10.0 · Home Assistant integration 2026.10.0 · Collector 1.0.38 for Windows
The first release of this repository. From here on, HACS offers the Home Assistant integration by release - the version you see in HACS is the name of a release here - instead of following the newest commit. Each release also carries the collector for Windows when there is a new one.
Home Assistant integration 2026.10.0
- Names and units follow your entities. Every reading now goes to Tag Historian with its entity's friendly name and unit, so a chart in Explorer says Living room temperature in °C instead of
sensor.living_room_temperatureover bare numbers. Change an entity's name or unit in Home Assistant and Explorer follows with the next reading. Nothing to configure. - Leave Scope on Write. Explorer's API key dialog now opens on Write, which is the scope sending data needs; the setup text says so.
Update from HACS as usual. Your configuration and the history already in Tag Historian are unchanged.
Collector 1.0.38 for Windows
TagHistorianCollector-1.0.38-win-x64.zip: the collector as a Windows service, for the SCADA PC or plant server where Docker is not an option. One self-contained program for 64-bit Windows 10, 11 and Windows Server 2016 or later - no Docker, no .NET to install. It speaks OPC UA, MQTT and Sparkplug B, keeps every reading in a disk queue that survives a lost connection, and runs as its own low-privilege service account.
Extract the zip and, from an elevated PowerShell in that folder:
powershell -ExecutionPolicy Bypass -File .\install.ps1The first start writes a commented example configuration to C:\ProgramData\Tag Historian\Collector\appsettings.json and stops; fill in your API key and what to collect, then Start-Service TagHistorianCollector. collector/README.md and the README.txt in the zip have the rest.
The program and scripts are not signed yet. Windows SmartScreen warns about them, and Windows 11 with Smart App Control blocks them. Check the zip against its checksum before you run it:
SHA-256 a9e2462435699f677b801681dd33c9067513d172baccebb040971ddacf657557 TagHistorianCollector-1.0.38-win-x64.zip
The Linux image is unchanged in place: ghcr.io/softi-dev/tag-historian-clients/collector for amd64 and arm64.