// Copyright (C) 2026 Fredrik Öhrström (gpl-3.0-or-later)
driver {
    name           = dme173
    meter_type     = WaterMeter
    default_fields = name,id,status,total_m3,timestamp
    detect {
        mvt = DME,63,07
    }
    library {
        use = total_m3
        use = flow_temperature_c
        use = total_backward_m3
    }
    fields {
        field {
            name       = status
            quantity   = Text
            info       = 'Status and error flags.'
            attributes = INCLUDE_TPL_STATUS
            match {
                measurement_type = Instantaneous
                vif_range        = ErrorFlags
            }
            lookup {
                name            = ERROR_FLAGS
                map_type        = BitToString
                mask_bits       = 0xffffffff
                default_message = OK
            }
        }
        field {
            name     = target
            quantity = Volume
            info     = 'The total water consumption at the end of last billing period.'
            match {
                measurement_type = Instantaneous
                vif_range        = Volume
                storage_nr       = 8
            }
        }
        field {
            name     = target
            quantity = PointInTime
            info     = 'The end of last billing period.'
            match {
                measurement_type = Instantaneous
                vif_range        = DateTime
                storage_nr       = 8
            }
        }
        field {
            name     = total_at_set_date
            quantity = Volume
            info     = 'The total water consumption even earlier?'
            match {
                measurement_type = Instantaneous
                vif_range        = Volume
                storage_nr       = 1
            }
        }
        field {
            name         = set
            quantity     = PointInTime
            info         = 'The even earlier date?'
            display_unit = date
            match {
                measurement_type = Instantaneous
                vif_range        = Date
                storage_nr       = 1
            }
        }
    }
    tests {
        test {
            args     = 'dwater dme173 22332233 NOKEY'
            telegram = 5344A5113322332263078C0085900F002C256C1601004BB24778D6AC091E7ADF003107102F2F_0C138386000004FD17000000000A5A550002FD74EE114C1300020000426C3F3C84046D3B375F318C041374460000
            json     = '{"_": "telegram","flow_temperature_c": 5.5,"id": "22332233","media": "water","meter": "dme173","name": "dwater","set_date": "2025-12-31","status": "OK","target_datetime": "2026-01-31 23:59","target_m3": 4.674,"timestamp": "1111-11-11T11:11:11Z","total_at_set_date_m3": 0.2,"total_m3": 8.683}'
            fields   = 'dwater;22332233;OK;8.683;1111-11-11 11:11.11'
        }
        test {
            args     = 'dwater2 dme173 44334433 NOKEY'
            telegram = 5344A5113344334463078C002A900F002C25B7640000BAD0D4FB907B9BE17AFA003107102F2F_0C131717000004FD17000000000C933C000000004C1300020000426C3F3C84046D3B375F318C0413000200002F2F
            json     = '{"_": "telegram","id": "44334433","media": "water","meter": "dme173","name": "dwater2","set_date": "2025-12-31","status": "OK","target_datetime": "2026-01-31 23:59","target_m3": 0.2,"timestamp": "1111-11-11T11:11:11Z","total_at_set_date_m3": 0.2,"total_backward_m3": 0,"total_m3": 1.717}'
            fields   = 'dwater2;44334433;OK;1.717;1111-11-11 11:11.11'
        }
    }
}