// Copyright (C) 2026 Magnus Friskytt (gpl-3.0-or-later)
driver {
    name            = ebeco500
    meter_type      = ElectricityMeter
    meter_type_text = 'Underfloor Heating Thermostat'
    default_fields  = name,id,status,total_kwh,external_temperature_c,on_time_h,timestamp
    manufacturer    = Ebeco
    detect {
        mvt = EBE,01,02
    }
    library {
        use = external_temperature_c
        use = total_kwh
        use = on_time_h
        use = meter_datetime
    }
    fields {
        field {
            name       = status
            quantity   = Text
            info       = 'Thermostat error and status flags.'
            attributes = STATUS,INCLUDE_TPL_STATUS
            match {
                difvifkey = 02FB17
            }
            lookup {
                name            = ERROR_FLAGS
                map_type        = BitToString
                mask_bits       = 0xffff
                default_message = OK
                map {
                    bit  = 0
                    name = TEMPORARY
                    test = Set
                }
                map {
                    bit  = 1
                    name = MIN_LIMIT
                    test = Set
                }
                map {
                    bit  = 2
                    name = MAX_LIMIT
                    test = Set
                }
                map {
                    bit  = 3
                    name = OPEN_WINDOW
                    test = Set
                }
                map {
                    bit  = 4
                    name = ROOM_OC
                    test = Set
                }
                map {
                    bit  = 5
                    name = ROOM_SC
                    test = Set
                }
                map {
                    bit  = 6
                    name = FLOOR_OC
                    test = Set
                }
                map {
                    bit  = 7
                    name = FLOOR_SC
                    test = Set
                }
                map {
                    bit  = 8
                    name = RELAY_OC
                    test = Set
                }
                map {
                    bit  = 9
                    name = RELAY_SC
                    test = Set
                }
                map {
                    bit  = 10
                    name = RELAY_OT
                    test = Set
                }
                map {
                    bit  = 11
                    name = SYSTEM
                    test = Set
                }
                map {
                    bit  = 12
                    name = STARTUP
                    test = Set
                }
                map {
                    bit  = 13
                    name = POWER_CTRL
                    test = Set
                }
                map {
                    bit  = 14
                    name = POWER_OFF
                    test = Set
                }
                map {
                    bit  = 15
                    name = RELAY_TEST
                    test = Set
                }
            }
        }
    }
    tests {
        test {
            args     = 'Golvvarme ebeco500 000001e3 FCC9B808216D9D1F5FF6E1A3CF7D3084'
            telegram = 31444514e301000001028c20807a2e002025e25dea4f2bc8ec94920260443a95c2bf3856e3e380e889cc8233ca5d9771f289
            json     = '{"_":"telegram","media":"electricity","driver":"ebeco500","name":"Golvvarme","id":"000001e3","on_time_h":105.633333,"external_temperature_c":22.8,"total_kwh":68.6,"meter_datetime":"2000-02-01 13:54:50","status":"OK","timestamp":"1111-11-11T11:11:11Z"}'
            fields   = 'Golvvarme;000001e3;OK;68.6;22.8;105.633333;1111-11-11 11:11.11'
        }
    }
}