// Copyright (C) 2019-2023 Fredrik Öhrström (gpl-3.0-or-later)
driver {
    name           = abbb23
    meter_type     = ElectricityMeter
    default_fields = name,id,total_energy_consumption_kwh,timestamp
    detect {
        mvt = ABB,20,02
    }
    fields {
        field {
            name       = status
            quantity   = Text
            info       = 'Status, error, warning and alarm flags.'
            attributes = STATUS,INCLUDE_TPL_STATUS
        }
        field {
            name     = total_energy_consumption
            quantity = Energy
            info     = 'Total cumulative active imported energy.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                add_combinable_raw = 0
            }
        }
        field {
            name     = 'total_energy_consumption_tariff_{tariff_counter}'
            quantity = Energy
            info     = 'Total cumulative active imported energy per tariff.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                tariff_nr          = 1,4
                add_combinable_raw = 0
            }
        }
        field {
            name     = total_energy_production
            quantity = Energy
            info     = 'Total cumulative active exported energy.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                tariff_nr          = 0
                subunit_nr         = 1
                add_combinable_raw = 0
            }
        }
        field {
            name     = 'total_energy_production_tariff_{tariff_counter}'
            quantity = Energy
            info     = 'Total cumulative active exported energy per tariff.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                tariff_nr          = 1,4
                subunit_nr         = 1
                add_combinable_raw = 0
            }
        }
        field {
            name         = active_tariff
            quantity     = Dimensionless
            info         = 'Active tariff.'
            vif_scaling  = None
            display_unit = nr
            match {
                difvifkey = 01FF9300
            }
        }
        field {
            name         = ct_numerator
            quantity     = Dimensionless
            info         = 'Current transformer ratio (numerator).'
            vif_scaling  = None
            display_unit = factor
            match {
                difvifkey = 04FFA015
            }
        }
        field {
            name         = vt_numerator
            quantity     = Dimensionless
            info         = 'Voltage transformer ratio (numerator).'
            vif_scaling  = None
            display_unit = factor
            match {
                difvifkey = 04FFA115
            }
        }
        field {
            name         = ct_denominator
            quantity     = Dimensionless
            info         = 'Current transformer ratio (denominator).'
            vif_scaling  = None
            display_unit = factor
            match {
                difvifkey = 04FFA215
            }
        }
        field {
            name         = vt_denominator
            quantity     = Dimensionless
            info         = 'Voltage transformer ratio (denominator).'
            vif_scaling  = None
            display_unit = factor
            match {
                difvifkey = 04FFA315
            }
        }
        field {
            name       = error_flags
            quantity   = Text
            info       = 'Error flags.'
            attributes = INJECT_INTO_STATUS
            match {
                measurement_type = Instantaneous
                difvifkey        = 07FFA600
            }
            lookup {
                name            = ERROR_FLAGS
                map_type        = BitToString
                mask_bits       = 0xffffffffffffffff
                default_message = OK
            }
        }
        field {
            name       = warning_flags
            quantity   = Text
            info       = 'Warning flags.'
            attributes = INJECT_INTO_STATUS
            match {
                measurement_type = Instantaneous
                difvifkey        = 07FFA700
            }
            lookup {
                name            = WARNING_FLAGS
                map_type        = BitToString
                mask_bits       = 0xffffffffffffffff
                default_message = OK
            }
        }
        field {
            name     = information_flags
            quantity = Text
            info     = 'Information flags.'
            match {
                measurement_type = Instantaneous
                difvifkey        = 07FFA800
            }
            lookup {
                name            = INFORMATION_FLAGS
                map_type        = BitToString
                mask_bits       = 0xffffffffffffffff
                default_message = ''
            }
        }
        field {
            name       = alarm_flags
            quantity   = Text
            info       = 'Alarm flags.'
            attributes = INJECT_INTO_STATUS
            match {
                measurement_type = Instantaneous
                difvifkey        = 07FFA900
            }
            lookup {
                name            = ALARM_FLAGS
                map_type        = BitToString
                mask_bits       = 0xfffffffffffffff
                default_message = OK
            }
        }
        field {
            name     = unknown_vif_FFAD
            quantity = Text
            info     = 'Unknown byte.'
            match {
                measurement_type = Instantaneous
                difvifkey        = 01FFAD00
            }
            lookup {
                name            = UNKNOWN
                map_type        = BitToString
                mask_bits       = 0xff
                default_message = OK
            }
        }
        field {
            name     = firmware_version
            quantity = Text
            info     = 'Firmware version.'
            match {
                measurement_type   = Instantaneous
                vif_range          = FirmwareVersion
                add_combinable_raw = 0
            }
        }
        field {
            name            = product_no
            quantity        = Text
            readable_string = Reversed
            info            = 'The meter device product number.'
            match {
                difvifkey = 0DFFAA00
            }
        }
        field {
            name        = power_fail
            quantity    = Dimensionless
            info        = 'Power fail counter.'
            vif_scaling = None
            match {
                difvifkey = 04FF9800
            }
        }
        field {
            name     = active_consumption
            quantity = Power
            info     = 'Instantaneous total active imported power.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                add_combinable_raw = 0
            }
        }
        field {
            name     = active_consumption_l1
            quantity = Power
            info     = 'Instantaneous active imported power for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = active_consumption_l2
            quantity = Power
            info     = 'Instantaneous active imported power for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = active_consumption_l3
            quantity = Power
            info     = 'Instantaneous active imported power for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = reactive_consumption
            quantity = Power
            info     = 'Instantaneous total reactive imported power.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                subunit_nr         = 2
                add_combinable_raw = 0
            }
        }
        field {
            name     = reactive_consumption_l1
            quantity = Power
            info     = 'Instantaneous reactive imported power for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                subunit_nr         = 2
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = reactive_consumption_l2
            quantity = Power
            info     = 'Instantaneous reactive imported power for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                subunit_nr         = 2
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = reactive_consumption_l3
            quantity = Power
            info     = 'Instantaneous reactive imported power for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                subunit_nr         = 2
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = apparent_consumption
            quantity = Power
            info     = 'Instantaneous total apparent imported power.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                subunit_nr         = 4
                add_combinable_raw = 0
            }
        }
        field {
            name     = apparent_consumption_l1
            quantity = Power
            info     = 'Instantaneous apparent imported power for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                subunit_nr         = 4
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = apparent_consumption_l2
            quantity = Power
            info     = 'Instantaneous apparent imported power for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                subunit_nr         = 4
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = apparent_consumption_l3
            quantity = Power
            info     = 'Instantaneous apparent imported power for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyPowerVIF
                subunit_nr         = 4
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = voltage_l1_n
            quantity = Voltage
            info     = 'Instantaneous voltage between L1 and neutral.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Voltage
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = voltage_l2_n
            quantity = Voltage
            info     = 'Instantaneous voltage between L2 and neutral.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Voltage
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = voltage_l3_n
            quantity = Voltage
            info     = 'Instantaneous voltage between L3 and neutral.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Voltage
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = voltage_l1_l2
            quantity = Voltage
            info     = 'Instantaneous voltage between L1 and L2.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Voltage
                add_combinable_raw = 0x7f05
            }
        }
        field {
            name     = voltage_l2_l3
            quantity = Voltage
            info     = 'Instantaneous voltage between L2 and L3.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Voltage
                add_combinable_raw = 0x7f06
            }
        }
        field {
            name     = voltage_l3_l1
            quantity = Voltage
            info     = 'Instantaneous voltage between L3 and L1.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Voltage
                add_combinable_raw = 0x7f07
            }
        }
        field {
            name     = current_l1
            quantity = Amperage
            info     = 'Instantaneous current in the L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Amperage
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = current_l2
            quantity = Amperage
            info     = 'Instantaneous current in the L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Amperage
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = current_l3
            quantity = Amperage
            info     = 'Instantaneous current in the L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = Amperage
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name         = frequency
            quantity     = Frequency
            info         = 'Frequency of AC.'
            vif_scaling  = None
            force_scale  = 0.01
            display_unit = hz
            match {
                difvifkey = 0AFFD900
            }
        }
        field {
            name         = power
            quantity     = Dimensionless
            info         = 'Power factor.'
            vif_scaling  = None
            force_scale  = 0.001
            display_unit = factor
            match {
                difvifkey = 02FFE000
            }
        }
        field {
            name         = power_l1
            quantity     = Dimensionless
            info         = 'Power factor for phase L1.'
            vif_scaling  = None
            force_scale  = 0.001
            display_unit = factor
            match {
                difvifkey = 02FFE0FF8100
            }
        }
        field {
            name         = power_l2
            quantity     = Dimensionless
            info         = 'Power factor for phase L2.'
            vif_scaling  = None
            force_scale  = 0.001
            display_unit = factor
            match {
                difvifkey = 02FFE0FF8200
            }
        }
        field {
            name         = power_l3
            quantity     = Dimensionless
            info         = 'Power factor for phase L3.'
            vif_scaling  = None
            force_scale  = 0.001
            display_unit = factor
            match {
                difvifkey = 02FFE0FF8300
            }
        }
        field {
            name         = power_phase_angle
            quantity     = Angle
            info         = 'Total power phase angle.'
            vif_scaling  = None
            force_scale  = 0.1
            display_unit = deg
            match {
                difvifkey = 02FFD200
            }
        }
        field {
            name         = phase_angle_power_l1
            quantity     = Angle
            info         = 'Power phase angle for phase L1.'
            vif_scaling  = None
            force_scale  = 0.1
            display_unit = deg
            match {
                difvifkey = 02FFD2FF8100
            }
        }
        field {
            name         = phase_angle_power_l2
            quantity     = Angle
            info         = 'Power phase angle for phase L2.'
            vif_scaling  = None
            force_scale  = 0.1
            display_unit = deg
            match {
                difvifkey = 02FFD2FF8200
            }
        }
        field {
            name         = phase_angle_power_l3
            quantity     = Angle
            info         = 'Power phase angle for phase L3.'
            vif_scaling  = None
            force_scale  = 0.1
            display_unit = deg
            match {
                difvifkey = 02FFD2FF8300
            }
        }
        field {
            name     = total_reactive_energy_consumption
            quantity = Reactive_Energy
            info     = 'Total cumulative reactive kvarh imported energy.'
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 2
            }
        }
        field {
            name         = 'total_reactive_energy_consumption_tariff_{tariff_counter}'
            quantity     = Energy
            info         = 'Total cumulative reactive kvarh imported energy per tariff.'
            display_unit = kvarh
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 2
                tariff_nr        = 1,4
            }
        }
        field {
            name     = total_reactive_energy_production
            quantity = Reactive_Energy
            info     = 'Total cumulative reactive kvarh exported energy.'
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 3
            }
        }
        field {
            name         = 'total_reactive_energy_production_tariff_{tariff_counter}'
            quantity     = Energy
            info         = 'Total cumulative reactive kvarh exported energy per tariff.'
            display_unit = kvarh
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 3
                tariff_nr        = 1,4
            }
        }
        field {
            name         = current_quadrant
            quantity     = Dimensionless
            info         = 'The quadrant in which the current is measured.'
            vif_scaling  = None
            display_unit = nr
            match {
                difvifkey = 01FF9700
            }
        }
        field {
            name         = current_quadrant_l1
            quantity     = Dimensionless
            info         = 'The quadrant in which the current is measured for phase L1.'
            vif_scaling  = None
            display_unit = nr
            match {
                difvifkey = 01FF97FF8100
            }
        }
        field {
            name         = current_quadrant_l2
            quantity     = Dimensionless
            info         = 'The quadrant in which the current is measured for phase L2.'
            vif_scaling  = None
            display_unit = nr
            match {
                difvifkey = 01FF97FF8200
            }
        }
        field {
            name         = current_quadrant_l3
            quantity     = Dimensionless
            info         = 'The quadrant in which the current is measured for phase L3.'
            vif_scaling  = None
            display_unit = nr
            match {
                difvifkey = 01FF97FF8300
            }
        }
        field {
            name     = 'digital_output_{subunit_counter}'
            quantity = Text
            info     = 'The state for output register 1-2.'
            match {
                measurement_type = Instantaneous
                vif_range        = DigitalOutput
                storage_nr       = 0
                tariff_nr        = 0
                subunit_nr       = 1,2
            }
            lookup {
                name      = OUTPUT
                map_type  = BitToString
                mask_bits = 0xff
            }
        }
        field {
            name     = 'digital_input_{subunit_counter-2counter}'
            quantity = Text
            info     = 'The state for input register 1-2.'
            match {
                measurement_type = Instantaneous
                vif_range        = DigitalInput
                subunit_nr       = 3,4
            }
            lookup {
                name      = INPUT
                map_type  = BitToString
                mask_bits = 0xff
            }
        }
        field {
            name     = 'digital_historic_input_{subunit_counter-2counter}'
            quantity = Text
            info     = 'The state for input register 3-4.'
            match {
                measurement_type = Instantaneous
                vif_range        = DigitalInput
                storage_nr       = 1
                subunit_nr       = 3,4
            }
            lookup {
                name      = INPUT
                map_type  = BitToString
                mask_bits = 0xff
            }
        }
        field {
            name     = 'digital_input_{subunit_counter-2counter}'
            quantity = Dimensionless
            info     = 'Number of times input 1-2 counted a 1.'
            match {
                measurement_type = Instantaneous
                vif_range        = CumulationCounter
                subunit_nr       = 3,4
            }
        }
        field {
            name     = resettable_energy_consumption
            quantity = Energy
            info     = 'Resettable cumulative active imported energy.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                add_combinable_raw = 0x7f72
            }
        }
        field {
            name     = resettable_energy_production
            quantity = Energy
            info     = 'Resettable cumulative active exported energy.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 1
                add_combinable_raw = 0x7f72
            }
        }
        field {
            name     = resettable_reactive_energy_consumption
            quantity = Energy
            info     = 'Resettable cumulative reactive imported energy.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 2
                add_combinable_raw = 0x7f72
            }
        }
        field {
            name     = resettable_reactive_energy_production
            quantity = Energy
            info     = 'Resettable cumulative reactive exported energy.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 3
                add_combinable_raw = 0x7f72
            }
        }
        field {
            name         = energy_co2
            quantity     = Mass
            info         = 'Energy in co2.'
            vif_scaling  = None
            force_scale  = 0.01
            display_unit = kg
            match {
                difvifkey = 0EFFF9C400
            }
        }
        field {
            name         = co2_conversion
            quantity     = Dimensionless
            info         = 'CO2 conversion factor (kg * 10-3 /kWh).'
            vif_scaling  = None
            display_unit = factor
            match {
                difvifkey = 04FFA400
            }
        }
        field {
            name        = energy_currency
            quantity    = Dimensionless
            info        = 'Energy in currency.'
            vif_scaling = None
            match {
                difvifkey = 0EFFF9C900
            }
        }
        field {
            name         = currency_conversion
            quantity     = Dimensionless
            info         = 'Currency conversion factor (curr * 10-3 /kWh).'
            vif_scaling  = None
            display_unit = factor
            match {
                difvifkey = 04FFA500
            }
        }
        field {
            name     = total_apparent_energy_consumption
            quantity = Apparent_Energy
            info     = 'Total cumulative apparent kvah imported energy.'
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 4
            }
        }
        field {
            name     = total_apparent_energy_production
            quantity = Apparent_Energy
            info     = 'Total cumulative apparent kvah exported energy.'
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 5
            }
        }
        field {
            name     = total_energy_consumption_l1
            quantity = Energy
            info     = 'Total imported active energy for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = total_energy_consumption_l2
            quantity = Energy
            info     = 'Total imported active energy for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = total_energy_consumption_l3
            quantity = Energy
            info     = 'Total imported active energy for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = total_reactive_energy_consumption_l1
            quantity = Energy
            info     = 'Total imported reactive energy for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 2
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = total_reactive_energy_consumption_l2
            quantity = Energy
            info     = 'Total imported reactive energy for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 2
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = total_reactive_energy_consumption_l3
            quantity = Energy
            info     = 'Total imported reactive energy for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 2
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = total_apparent_energy_consumption_l1
            quantity = Energy
            info     = 'Total imported apparent energy for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 4
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = total_apparent_energy_consumption_l2
            quantity = Energy
            info     = 'Total imported apparent energy for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 4
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = total_apparent_energy_consumption_l3
            quantity = Energy
            info     = 'Total imported apparent energy for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 4
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = total_energy_production_l1
            quantity = Energy
            info     = 'Total exported active energy for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 1
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = total_energy_production_l2
            quantity = Energy
            info     = 'Total exported active energy for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 1
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = total_energy_production_l3
            quantity = Energy
            info     = 'Total exported active energy for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 1
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = total_reactive_energy_production_l1
            quantity = Energy
            info     = 'Total exported reactive energy for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 3
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = total_reactive_energy_production_l2
            quantity = Energy
            info     = 'Total exported reactive energy for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 3
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = total_reactive_energy_production_l3
            quantity = Energy
            info     = 'Total exported reactive energy for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 3
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = total_apparent_energy_production_l1
            quantity = Energy
            info     = 'Total exported apparent energy for L1 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 5
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = total_apparent_energy_production_l2
            quantity = Energy
            info     = 'Total exported apparent energy for L2 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 5
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = total_apparent_energy_production_l3
            quantity = Energy
            info     = 'Total exported apparent energy for L3 phase.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 5
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name     = total_net_energy
            quantity = Energy
            info     = 'Active net energy total.'
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 6
            }
        }
        field {
            name     = total_net_energy_l1
            quantity = Energy
            info     = 'Active net energy total for phase L1.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 6
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name     = total_net_energy_l2
            quantity = Energy
            info     = 'Active net energy total for phase L2.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 6
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name     = total_net_energy_l3
            quantity = Energy
            info     = 'Active net energy total for phase L3.'
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 6
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name         = total_net_reactive_energy
            quantity     = Energy
            info         = 'Active net reactive energy total.'
            display_unit = kvarh
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 7
            }
        }
        field {
            name         = total_net_reactive_energy_l1
            quantity     = Energy
            info         = 'Active net reactive energy total for phase L1.'
            display_unit = kvarh
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 7
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name         = total_net_reactive_energy_l2
            quantity     = Energy
            info         = 'Active net reactive energy total for phase L2.'
            display_unit = kvarh
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 7
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name         = total_net_reactive_energy_l3
            quantity     = Energy
            info         = 'Active net reactive energy total for phase L3.'
            display_unit = kvarh
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 7
                add_combinable_raw = 0x7f03
            }
        }
        field {
            name         = total_net_apparent_energy
            quantity     = Energy
            info         = 'Active net apparent energy total.'
            display_unit = kvah
            match {
                measurement_type = Instantaneous
                vif_range        = AnyEnergyVIF
                subunit_nr       = 8
            }
        }
        field {
            name         = total_net_apparent_energy_l1
            quantity     = Energy
            info         = 'Active net apparent energy total for phase L1.'
            display_unit = kvah
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 8
                add_combinable_raw = 0x7f01
            }
        }
        field {
            name         = total_net_apparent_energy_l2
            quantity     = Energy
            info         = 'Active net apparent energy total for phase L2.'
            display_unit = kvah
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 8
                add_combinable_raw = 0x7f02
            }
        }
        field {
            name         = total_net_apparent_energy_l3
            quantity     = Energy
            info         = 'Active net apparent energy total for phase L3.'
            display_unit = kvah
            match {
                measurement_type   = Instantaneous
                vif_range          = AnyEnergyVIF
                subunit_nr         = 8
                add_combinable_raw = 0x7f03
            }
        }
    }
    tests {
        test {
            args     = 'ABBmeter abbb23 33221100 NOKEY'
            telegram = 844442040011223320027A3E000020_0E840017495200000004FFA0150000000004FFA1150000000004FFA2150000000004FFA3150000000007FFA600000000000000000007FFA700000000000000000007FFA800000000000000000007FFA90000000000000000000DFD8E0007302E38322E31420DFFAA000B3030312D313131203332421F
            json     = '{"_":"telegram","media":"electricity","meter":"abbb23","name":"ABBmeter","id":"33221100","ct_denominator_factor":0,"ct_numerator_factor":0,"total_energy_consumption_kwh":5249.17,"vt_denominator_factor":0,"vt_numerator_factor":0,"alarm_flags":"OK","error_flags":"OK","firmware_version":"B1.28.0","information_flags":"","product_no":"001-111 32B","status":"OK","warning_flags":"OK","timestamp":"1111-11-11T11:11:11Z"}'
            fields   = 'ABBmeter;33221100;5249.17;1111-11-11 11:11.11'
        }
    }
}