// Copyright (C) 2021-2024 Fredrik Öhrström (gpl-3.0-or-later)
driver {
    name           = lse_07_17
    meter_type     = WaterMeter
    default_fields = name,id,total_m3,due_m3,due_date,error_code,error_date,device_datetime,timestamp
    detect {
        mvt = LSE,18,06
        mvt = LSE,18,07
        mvt = LSE,16,07
        mvt = LSE,17,07
        mvt = LSE,d8,07
    }
    library {
        use = model_version
    }
    fields {
        field {
            name     = total
            quantity = Volume
            info     = 'The total water consumption recorded by this meter.'
            match {
                measurement_type = Instantaneous
                vif_range        = Volume
            }
        }
        field {
            name     = due
            quantity = Volume
            info     = 'The water consumption at the due date.'
            match {
                measurement_type = Instantaneous
                vif_range        = Volume
                storage_nr       = 1
            }
        }
        field {
            name         = due
            quantity     = PointInTime
            info         = 'The due date configured on the meter.'
            display_unit = date
            match {
                measurement_type = Instantaneous
                vif_range        = Date
                storage_nr       = 1
            }
        }
        field {
            name     = consumption_at_set_date_8
            quantity = Volume
            info     = 'The water consumption at billing period date 8.'
            match {
                measurement_type = Instantaneous
                vif_range        = Volume
                storage_nr       = 8
            }
        }
        field {
            name     = set_date_8
            quantity = Text
            info     = 'Billing period date 8.'
            match {
                measurement_type = Instantaneous
                vif_range        = Date
                storage_nr       = 8
            }
        }
        field {
            name     = error_code
            quantity = Text
            info     = 'Error code of the Meter, 0 means no error.'
            match {
                difvifkey = 02BB56
            }
            lookup {
                name            = ERROR_FLAGS
                map_type        = BitToString
                mask_bits       = 0xffff
                default_message = OK
            }
        }
        field {
            name         = error
            quantity     = PointInTime
            info         = 'The date the error occurred at. If no error, reads 2127-15-31 (FFFF).'
            display_unit = date
            match {
                measurement_type = AtError
                vif_range        = Date
            }
        }
        field {
            name         = device
            quantity     = PointInTime
            info         = 'Date when measurement was recorded.'
            display_unit = datetime
            match {
                measurement_type = Instantaneous
                vif_range        = DateTime
            }
        }
    }
    tests {
        test {
            args     = 'Water lse_07_17 13963399 NOKEY'
            telegram = 244465329933961318067AE1000000_8C04130070000082046CBE2B01FD0C11046D010CA22C
            json     = '{"_":"telegram","media":"warm water","meter":"lse_07_17","name":"Water","id":"13963399","consumption_at_set_date_8_m3":7,"set_date_8":"2021-11-30","device_datetime":"2021-12-02 12:01","model_version":"11","timestamp":"1111-11-11T11:11:11Z"}'
            fields   = 'Water;13963399;null;null;null;null;null;2021-12-02 12:01;1111-11-11 11:11.11'
        }
        test {
            args     = 'Water lse_07_17 13963399 NOKEY'
            telegram = 2A4465329933961318067AD8800000_8C04130070000082046CBE2B01FD0C11046D1800A12C02FDAC7E9B2E
            json     = '{"_":"telegram","media":"warm water","meter":"lse_07_17","name":"Water","id":"13963399","consumption_at_set_date_8_m3":7,"set_date_8":"2021-11-30","device_datetime":"2021-12-01 00:24","model_version":"11","timestamp":"1111-11-11T11:11:11Z"}'
            fields   = 'Water;13963399;null;null;null;null;null;2021-12-01 00:24;1111-11-11 11:11.11'
        }
        test {
            args     = 'Water lse_07_17 13963399 NOKEY'
            telegram = 2D4465329933961318067ADA000000_0C13567100004C1300000000426CFFFF02BB560000326CFFFF046D2307A12C
            json     = '{"_":"telegram","media":"warm water","meter":"lse_07_17","name":"Water","id":"13963399","total_m3":7.156,"due_m3":0,"due_date":"2128-03-31","error_code":"OK","error_date":"2128-03-31","device_datetime":"2021-12-01 07:35","timestamp":"1111-11-11T11:11:11Z"}'
            fields   = 'Water;13963399;7.156;0;2128-03-31;OK;2128-03-31;2021-12-01 07:35;1111-11-11 11:11.11'
        }
        test {
            args     = 'Water2 lse_07_17 09993623 NOKEY'
            telegram = 2d44653223369909d8077a80000000046d130aed2B0c13233332004c1351762700426cdf2c326cffff02BB560000
            json     = '{"_":"telegram","device_datetime":"2023-11-13 10:19","due_date":"2022-12-31","due_m3":277.651,"error_code":"OK","error_date":"2128-03-31","id":"09993623","media":"water","meter":"lse_07_17","name":"Water2","timestamp":"1111-11-11T11:11:11Z","total_m3":323.323}'
            fields   = 'Water2;09993623;323.323;277.651;2022-12-31;OK;2128-03-31;2023-11-13 10:19;1111-11-11 11:11.11'
        }
    }
}