// Copyright (C) 2026 Fredrik Öhrström (gpl-3.0-or-later)
driver {
    name           = topaseskr2
    meter_type     = WaterMeter
    default_fields = name,id,status,total_m3,timestamp
    detect {
        mvt = IMT,f2,07
    }
    library {
        use = total_m3
        use = access_counter
        use = flow_temperature_c
        use = volume_flow_m3h
    }
    fields {
        field {
            name     = status
            quantity = Text
            info     = 'Status and error flags.'
            match {
                measurement_type = Instantaneous
                vif_range        = ErrorFlags
            }
            lookup {
                name            = ERROR_FLAGS
                mask_bits       = 0xffffffff
                map_type        = BitToString
                default_message = OK
            }
        }
        field {
            name         = battery
            quantity     = Time
            info         = 'Remaining battery life in years.'
            display_unit = y
            match {
                measurement_type = Instantaneous
                vif_range        = RemainingBattery
            }
        }
        field {
            name     = target_year
            quantity = Volume
            info     = 'Volume up to end of last year.'
            match {
                measurement_type = Instantaneous
                vif_range        = Volume
                storage_nr       = 1
            }
        }
        field {
            name         = target_year
            quantity     = PointInTime
            info         = 'Meter date for end of last year.'
            display_unit = date
            match {
                measurement_type = Instantaneous
                vif_range        = Date
                storage_nr       = 1
            }
        }
        field {
            name     = target
            quantity = Volume
            info     = 'Total volume when previous billing period ended.'
            match {
                measurement_type = Instantaneous
                vif_range        = Volume
                storage_nr       = 8
            }
        }
        field {
            name     = target
            quantity = PointInTime
            info     = 'Previous billing period ended at this time.'
            match {
                measurement_type = Instantaneous
                vif_range        = DateTime
                storage_nr       = 8
            }
        }
    }
    tests {
        test {
            args     = 'W topaseskr2 88475766 NOKEY'
            telegram = 3E44B42566574788F2077A6F0030052F2F_0C138150020004FD170000000002FD74AD150A5A1001426C3F3C4C130002000084046D3B375C328C041388380100
            json     = '{"_": "telegram","battery_y": 15.192646,"driver": "topaseskr2","flow_temperature_c": 11,"id": "88475766","media": "water","name": "W","status": "OK","target_datetime": "2026-02-28 23:59","target_m3": 13.888,"target_year_date": "2025-12-31","target_year_m3": 0.2,"timestamp": "1111-11-11T11:11:11Z","total_m3": 25.081}'
            fields   = 'W;88475766;OK;25.081;1111-11-11 11:11.11'
        }
    }
}