Integration for ABB/FIMER/Power-One PVI inverters via **VSN300/VSN700 datalogger REST API**

ABB/FIMER PVI VSN REST Integration

GitHub ReleaseBuyMeCoffeeCommunity Forum

Home Assistant custom integration for ABB/FIMER/Power-One PVI inverters via VSN300/VSN700 datalogger REST API.

Overview

This integration connects to VSN300 or VSN700 dataloggers to monitor
ABB/FIMER/Power-One PV inverters. It communicates via the datalogger’s REST API
and normalizes data to SunSpec-compatible format for consistent Home Assistant
entity creation.

Features

  • :white_check_mark: Automatic Discovery: Detects VSN model (VSN300/VSN700) and discovers all connected devices
  • :white_check_mark: VSN300 Support: HTTP Digest authentication with X-Digest scheme
  • :white_check_mark: VSN700 Support: HTTP Basic authentication
  • :white_check_mark: Multi-Device: Supports inverters, meters, batteries, and storage devices
  • :white_check_mark: SunSpec Normalization: VSN data mapped to SunSpec standard format
  • :white_check_mark: Device Hierarchy: Proper device relationships (inverters via datalogger)
  • :white_check_mark: Complete Metadata: Model, manufacturer, firmware version, serial numbers
  • :white_check_mark: Configuration UI: Easy setup through Home Assistant UI
  • :white_check_mark: Multi-Language: English and Italian translations included

Supported Devices

VSN Dataloggers:

  • VSN300 (WIFI LOGGER CARD)
  • VSN700 (Ethernet/WiFi datalogger)

Inverters: (via datalogger)

  • Single-phase: REACT2-3.6-TL, REACT2-5.0-TL, etc.
  • Three-phase: PVI-10.0-OUTD, PVI-12.5-OUTD, etc.

Other Devices: (via datalogger)

  • Energy meters
  • Battery storage systems

Installation

HACS (Recommended)

This integration is available in HACS as a custom repository. Click this button to open HA directly on the integration page so you can easily install it:

Quick installation link

  1. Open HACS in Home Assistant
  2. Go to “Integrations”
  3. Click the three dots menu → “Custom repositories”
  4. Add repository: https://github.com/alexdelprete/ha-abb-fimer-pvi-vsn-rest
  5. Category: Integration
  6. Click “Add”
  7. Search for “ABB FIMER PVI VSN REST”
  8. Click “Download”
  9. Restart Home Assistant

Manual Installation

  1. Download the latest release from Releases
  2. Extract and copy custom_components/abb_fimer_pvi_vsn_rest to your config/custom_components/ directory
  3. Restart Home Assistant

Configuration

Prerequisites

  1. VSN300 or VSN700 datalogger connected to your network
  2. Datalogger IP address or hostname
  3. Valid credentials (default: username=guest, password=empty)

Setup Steps

  1. Go to SettingsDevices & Services
  2. Click “+ Add Integration”
  3. Search for “ABB FIMER PVI VSN REST”
  4. Enter configuration:
    • Host: IP address or hostname (e.g., 192.168.1.100 or abb-vsn300.local)
    • Username: Authentication username (optional, default: guest)
    • Password: Authentication password (optional, default: empty)
  5. Click “Submit”

The integration will:

  • Detect VSN model (VSN300 or VSN700)
  • Discover all connected devices (inverters, meters, batteries)
  • Create Home Assistant entities for all data points

Configuration Options

After setup, click “Configure” on the integration card to adjust:

  • Scan Interval: How often to poll data (default: 60 seconds, range: 30-600)

Reconfiguration

If you need to change the hostname/IP or credentials:

  1. Go to the integration card
  2. Click the three dots menu → “Reconfigure”
  3. Enter new settings

Entities

The integration creates sensor entities for all available data points from your devices.

Entity Naming

The integration uses Home Assistant’s modern entity naming pattern (has_entity_name=True).

Device Names: Friendly format for beautiful UI display

  • Format: {Manufacturer} {DeviceType} {Model} ({Serial})
  • Examples:
    • Power-One Inverter PVI-10.0-OUTD (077909-3G82-3112)
    • ABB Datalogger VSN300 (111033-3N16-1421)
    • FIMER Inverter REACT2-3.6-TL (123456-ABCD-5678)

Entity IDs: Automatically generated by Home Assistant (slugified device name + measurement)

  • Format: sensor.{manufacturer}_{device_type}_{model}_{serial}_{measurement}
  • Examples:
    • sensor.power_one_inverter_pvi_10_0_outd_077909_3g82_3112_ac_power
    • sensor.abb_datalogger_vsn300_111033_3n16_1421_firmware_version
    • sensor.fimer_inverter_react2_3_6_tl_123456_abcd_5678_ac_energy

Entity Friendly Names: Shown in the UI (device name + measurement display name)

  • Examples:
    • Power-One Inverter PVI-10.0-OUTD (077909-3G82-3112) AC Power
    • ABB Datalogger VSN300 (111033-3N16-1421) Firmware Version
    • FIMER Inverter REACT2-3.6-TL (123456-ABCD-5678) AC Energy

Notes:

  • Entity IDs are stable and won’t change once created
  • Friendly names make entities easy to identify in the UI
  • Device page groups all entities by device for easy management

Supported Languages

The integration includes native translations for entity names in 10 European languages:

Language Code Status
English en :white_check_mark: Complete (258 sensors)
Italian it :white_check_mark: Complete (258 sensors)
French fr :white_check_mark: Complete (258 sensors)
Spanish es :white_check_mark: Complete (258 sensors)
Portuguese pt :white_check_mark: Complete (258 sensors)
German de :white_check_mark: Complete (258 sensors)
Swedish sv :white_check_mark: Complete (258 sensors)
Norwegian Bokmål nb :white_check_mark: Complete (258 sensors)
Finnish fi :white_check_mark: Complete (258 sensors)
Estonian et :white_check_mark: Complete (258 sensors)

Automatic Language Selection: Home Assistant automatically selects the appropriate language based on your system settings. No configuration needed!

Examples:

  • English: Power-One Inverter PVI-10.0-OUTD (077909-3G82-3112) Power AC
  • Italian: Power-One Inverter PVI-10.0-OUTD (077909-3G82-3112) Potenza AC
  • French: Power-One Inverter PVI-10.0-OUTD (077909-3G82-3112) Puissance AC
  • German: Power-One Inverter PVI-10.0-OUTD (077909-3G82-3112) AC-Leistung

Note: Device names (manufacturer, model, serial) remain in their original format. Only measurement names are translated.

Device Information

Each device includes complete metadata:

Field Description Example
Name Device model + Serial PVI-10.0-OUTD (077909-3G82-3112)
Manufacturer From device data Power-One, ABB, FIMER
Model Device model PVI-10.0-OUTD
Serial Number Device S/N 077909-3G82-3112
Firmware Device firmware C008
Configuration URL Datalogger only http://abb-vsn300.local
Via Device Device connection Linked to datalogger

Typical Entities (Inverter)

Production:

  • AC Power (W)
  • AC Current (A)
  • AC Voltage (V)
  • AC Frequency (Hz)
  • Total Energy (Wh)
  • Daily Energy (Wh)

DC Inputs (per MPPT):

  • DC Voltage (V)
  • DC Current (A)
  • DC Power (W)

Status:

  • Operating State
  • Cabinet Temperature
  • Isolation Resistance

Architecture

Data Flow

VSN Datalogger
    ↓ (REST API)
VSN REST Client
    ↓ (Raw JSON)
Normalizer
    ↓ (SunSpec-compatible JSON)
Coordinator
    ↓ (Polling)
Sensor Platform
    ↓
Home Assistant Entities

Key Components

  1. Discovery Module (discovery.py)

    • Detects VSN model (VSN300/VSN700)
    • Discovers all connected devices
    • Extracts metadata (model, manufacturer, firmware)
    • Handles device identification (S/N, MAC addresses)
  2. REST Client (client.py)

    • Authenticates with VSN datalogger
    • Fetches data from REST API endpoints
    • Handles VSN300/VSN700 authentication differences
  3. Normalizer (normalizer.py)

    • Transforms VSN proprietary format to SunSpec standard
    • Uses mapping definitions from mapping/ directory
    • Provides consistent data structure
  4. Coordinator (coordinator.py)

    • Manages periodic data polling
    • Handles errors and retries
    • Distributes data to sensors
  5. Config Flow (config_flow.py)

    • User interface for setup
    • Connection validation
    • Reconfiguration support

VSN Authentication

The integration automatically detects which VSN model you have and uses the appropriate authentication method.

Detection Process

  1. Send unauthenticated request to /v1/status
  2. Examine 401 response:
    • If WWW-Authenticate contains x-digest or digestVSN300
    • Otherwise → Try preemptive Basic authentication → VSN700

VSN300

  • Scheme: Custom HTTP Digest (X-Digest header)
  • Process:
    1. Request challenge from endpoint
    2. Compute MD5 digest response: MD5(MD5(username:realm:password):nonce:MD5(method:uri))
    3. Send request with Authorization: X-Digest username="...", realm="...", nonce="...", response="..."

VSN700

  • Scheme: Preemptive HTTP Basic Authentication
  • Process: Send Authorization: Basic {base64(username:password)} with every request
  • Note: VSN700 accepts credentials immediately without requiring a challenge-response flow

Both authentication methods are handled automatically by the integration - no configuration needed!

Troubleshooting

Connection Issues

Symptom: “Cannot connect” error during setup

Solutions:

  1. Verify datalogger IP/hostname is correct
  2. Ensure datalogger is powered on and network-accessible
  3. Check firewall rules allow HTTP (port 80)
  4. Try accessing http://{host}/v1/status in browser

Authentication Issues

Symptom: “Authentication failed” error

Solutions:

  1. Try default credentials (username: guest, password: empty)
  2. Check credentials in datalogger web interface
  3. Reset datalogger credentials if necessary

No Entities Created

Symptom: Integration loads but no sensors appear

Solutions:

  1. Check Home Assistant logs for errors
  2. Verify inverter is connected to datalogger
  3. Check datalogger web interface shows inverter data
  4. Enable debug logging (see below)

Debug Logging

Add to configuration.yaml:

logger:
  default: info
  logs:
    custom_components.abb_fimer_pvi_vsn_rest: debug

Restart Home Assistant and check logs for detailed information.

Testing and Reporting Issues

If you’re experiencing connection or authentication issues, you can use the standalone test script to diagnose the problem and provide detailed logs when reporting issues.

Using the VSN Test Script

The repository includes a standalone diagnostic script that can test your VSN device without installing the integration:

  1. Download the script:

    wget https://raw.githubusercontent.com/alexdelprete/ha-abb-fimer-pvi-vsn-rest/master/scripts/vsn_client.py
    
  2. Install dependencies:

    pip install aiohttp
    
  3. Run the test:

    python vsn_client.py 192.168.1.100
    

    (Replace 192.168.1.100 with your datalogger’s IP address)

  4. Review output:

    The script will:

    • Auto-detect VSN300 vs VSN700
    • Test all REST API endpoints
    • Create JSON output files with raw and normalized data
    • Display comprehensive debug information
  5. When reporting issues:

    • Include the console output showing device detection and any errors
    • Attach the generated JSON files (especially vsn300_status.json or vsn700_status.json)
    • Specify your inverter model and VSN datalogger model

Common Test Results

Successful VSN300 detection:

[VSN Detection] Detected VSN300 (digest auth in WWW-Authenticate: X-Digest realm="...")
✓ Device detected: VSN300

Successful VSN700 detection:

[VSN Detection] Not VSN300. Attempting preemptive Basic authentication for VSN700.
[VSN Detection] Detected VSN700 (preemptive Basic authentication)
✓ Device detected: VSN700

Authentication failure:

[VSN Detection] Preemptive Basic auth failed with status 401.
Device authentication failed. Not VSN300/VSN700 compatible.

If you see this, verify your credentials and ensure the device is a VSN300/VSN700 datalogger.

Data Mapping

VSN data points are mapped to SunSpec-compatible schema using definitions in the mapping/ directory.

The mapping includes:

  • Device classification (inverter type, meter, battery, etc.)
  • Point name translation (VSN → SunSpec)
  • Unit conversions and scaling
  • Device class and state class for Home Assistant
  • Proper labels and descriptions

For details, see MAPPING_NOTES.md.

Translations

The integration includes complete translations for entity names in 10 European languages:

  • :uk: English (en.json) - 258 sensors
  • :it: Italian (it.json) - 258 sensors
  • :fr: French (fr.json) - 258 sensors
  • :es: Spanish (es.json) - 258 sensors
  • :portugal: Portuguese (pt.json) - 258 sensors
  • :de: German (de.json) - 258 sensors
  • :sweden: Swedish (sv.json) - 258 sensors
  • :norway: Norwegian (nb.json) - 258 sensors
  • :finland: Finnish (fi.json) - 258 sensors
  • :estonia: Estonian (et.json) - 258 sensors

The integration automatically uses the language configured in your Home Assistant instance. All UI strings, error messages, configuration flows, and entity names are fully translated.

Contributing Translations

Want to add a new language or improve existing translations? Here’s how:

For Entity Names (258 sensors in entity.sensor section):

  1. Fork the repository

  2. Copy translations/en.json to translations/[language_code].json

  3. Translate the entity.sensor section:

    "entity": {
      "sensor": {
        "watts": { "name": "Your Translation Here" },
        "dc_voltage_1": { "name": "Your Translation Here" },
        ...
      }
    }
    
  4. Keep the config and options sections from en.json (or translate those too!)

  5. Test with your Home Assistant instance (set HA language to your new language)

  6. Submit a pull request

Translation Tips:

  • Maintain technical accuracy (e.g., “Power AC” should remain related to AC power)
  • Keep translations concise (they appear in entity names)
  • Preserve measurement context (e.g., distinguish “Voltage DC - String 1” from “Voltage AC”)
  • Review existing languages for consistency

Questions? Open a GitHub Discussion - the community is happy to help!

See translations/ for existing translations.

Development

See CLAUDE.md for development guidelines and architecture details.

Project Structure

custom_components/abb_fimer_pvi_vsn_rest/
├── __init__.py              # Integration entry point
├── config_flow.py           # UI configuration
├── coordinator.py           # Data update coordinator
├── sensor.py                # Sensor platform
├── const.py                 # Constants and state mappings
├── manifest.json            # Integration manifest
├── translations/            # Entity name translations (10 languages)
│   ├── de.json             # German
│   ├── en.json             # English
│   ├── es.json             # Spanish
│   ├── et.json             # Estonian
│   ├── fi.json             # Finnish
│   ├── fr.json             # French
│   ├── it.json             # Italian
│   ├── nb.json             # Norwegian Bokmål
│   ├── pt.json             # Portuguese
│   └── sv.json             # Swedish
└── abb_fimer_vsn_rest_client/  # Client library
    ├── __init__.py         # Library exports
    ├── client.py           # REST API client
    ├── auth.py             # Authentication (VSN300/VSN700)
    ├── discovery.py        # VSN model and device discovery
    ├── normalizer.py       # VSN→SunSpec data normalization
    ├── mapping_loader.py   # Mapping file loader
    ├── models.py           # Data models
    ├── utils.py            # Helper utilities
    ├── exceptions.py       # Custom exceptions
    └── data/               # Client library resources
        └── vsn-sunspec-point-mapping.json  # VSN→SunSpec mapping (258 points)

Related Projects

Support

License

This project is licensed under the MIT License - see LICENSE file for details.

Credits

Developed by Alessandro Del Prete

SunSpec model definitions from SunSpec Models Repository (Apache-2.0 license)

Coffee

If you like this integration, I’ll gladly accept some quality coffee, but please don’t feel obliged. :slight_smile:

1 Like