Skip to content

Commit

Permalink
Support Battery Storage device type and Solar Power device type
Browse files Browse the repository at this point in the history
Signed-off-by: s-gatti <s.gatti@samsung.com>
Co-authored-by: Hunsup Jung <hunsup.jung@samsung.com>
  • Loading branch information
HunsupJung committed Jan 27, 2025
1 parent 83f80b0 commit a3bda79
Show file tree
Hide file tree
Showing 35 changed files with 1,115 additions and 1,309 deletions.
11 changes: 11 additions & 0 deletions drivers/SmartThings/matter-evse/fingerprints.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,14 @@ matterGeneric:
- id: 0x0510
- id: 0x050C
deviceProfileName: evse
- id: "matter/solar-power"
deviceLabel: Matter Solar Power
deviceTypes:
- id: 0x0017 #Solar Power
deviceProfileName: solar-power
- id: "matter/battery-storage"
deviceLabel: Matter Battery Storage
deviceTypes:
- id: 0x0018 #Battery Storage
deviceProfileName: battery-storage

31 changes: 31 additions & 0 deletions drivers/SmartThings/matter-evse/profiles/battery-storage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: battery-storage
components:
- id: main
capabilities:
- id: battery
version: 1
- id: chargingState
version: 1
- id: powerMeter
version: 1
- id: firmwareUpdate
version: 1
- id: refresh
version: 1
categories:
- name: Battery
- id: importedEnergy
label: Imported Energy
capabilities:
- id: energyMeter
version: 1
- id: powerConsumptionReport
version: 1
- id: exportedEnergy
label: Exported Energy
capabilities:
- id: energyMeter
version: 1
- id: powerConsumptionReport
version: 1

18 changes: 18 additions & 0 deletions drivers/SmartThings/matter-evse/profiles/solar-power.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: solar-power
components:
- id: main
capabilities:
- id: energyMeter
version: 1
- id: powerMeter
version: 1
- id: firmwareUpdate
version: 1
- id: refresh
version: 1
categories:
- name: SolarPanel
- id: exportedEnergy
capabilities:
- id: powerConsumptionReport
version: 1
Original file line number Diff line number Diff line change
@@ -1,28 +1,25 @@
local cluster_base = require "st.matter.cluster_base"
local ElectricalEnergyMeasurementServerAttributes = require "ElectricalEnergyMeasurement.server.attributes"
local ElectricalEnergyMeasurementTypes = require "ElectricalEnergyMeasurement.types"

local ElectricalEnergyMeasurement = {}

ElectricalEnergyMeasurement.ID = 0x0091
ElectricalEnergyMeasurement.NAME = "ElectricalEnergyMeasurement"
ElectricalEnergyMeasurement.server = {}
ElectricalEnergyMeasurement.client = {}
ElectricalEnergyMeasurement.server.attributes = ElectricalEnergyMeasurementServerAttributes:set_parent_cluster(ElectricalEnergyMeasurement)
ElectricalEnergyMeasurement.types = ElectricalEnergyMeasurementTypes
ElectricalEnergyMeasurement.FeatureMap = ElectricalEnergyMeasurement.types.Feature

function ElectricalEnergyMeasurement.are_features_supported(feature, feature_map)
if (ElectricalEnergyMeasurement.FeatureMap.bits_are_valid(feature)) then
return (feature & feature_map) == feature
end
return false
end

function ElectricalEnergyMeasurement:get_attribute_by_id(attr_id)
local attr_id_map = {
[0x0000] = "Accuracy",
[0x0001] = "CumulativeEnergyImported",
[0x0002] = "CumulativeEnergyExported",
[0x0003] = "PeriodicEnergyImported",
[0x0004] = "PeriodicEnergyExported",
[0x0005] = "CumulativeEnergyReset",
[0xFFF9] = "AcceptedCommandList",
[0xFFFA] = "EventList",
[0xFFFB] = "AttributeList",
}
local attr_name = attr_id_map[attr_id]
Expand All @@ -32,18 +29,27 @@ function ElectricalEnergyMeasurement:get_attribute_by_id(attr_id)
return nil
end

-- Attribute Mapping
ElectricalEnergyMeasurement.attribute_direction_map = {
["Accuracy"] = "server",
["CumulativeEnergyImported"] = "server",
["CumulativeEnergyExported"] = "server",
["PeriodicEnergyImported"] = "server",
["PeriodicEnergyExported"] = "server",
["CumulativeEnergyReset"] = "server",
["AcceptedCommandList"] = "server",
["EventList"] = "server",
["AttributeList"] = "server",
}

-- Command Mapping
ElectricalEnergyMeasurement.command_direction_map = {}
ElectricalEnergyMeasurement.FeatureMap = ElectricalEnergyMeasurement.types.Feature

function ElectricalEnergyMeasurement.are_features_supported(feature, feature_map)
if (ElectricalEnergyMeasurement.FeatureMap.bits_are_valid(feature)) then
return (feature & feature_map) == feature
end
return false
end

-- Cluster Completion
local attribute_helper_mt = {}
attribute_helper_mt.__index = function(self, key)
local direction = ElectricalEnergyMeasurement.attribute_direction_map[key]
Expand All @@ -57,4 +63,5 @@ setmetatable(ElectricalEnergyMeasurement.attributes, attribute_helper_mt)

setmetatable(ElectricalEnergyMeasurement, {__index = cluster_base})

return ElectricalEnergyMeasurement
return ElectricalEnergyMeasurement

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,55 +2,44 @@ local cluster_base = require "st.matter.cluster_base"
local data_types = require "st.matter.data_types"
local TLVParser = require "st.matter.TLV.TLVParser"

local ApparentPower = {
ID = 0x000A,
NAME = "ApparentPower",
base_type = data_types.Int64,
local CumulativeEnergyExported = {
ID = 0x0002,
NAME = "CumulativeEnergyExported",
base_type = require "ElectricalEnergyMeasurement.types.EnergyMeasurementStruct",
}

ApparentPower.enum_fields = {}

function ApparentPower:augment_type(base_type_obj)
base_type_obj.field_name = self.NAME
base_type_obj.pretty_print = self.pretty_print
end

function ApparentPower.pretty_print(value_obj)
return string.format("%s.%s", value_obj.field_name or value_obj.NAME, ApparentPower.enum_fields[value_obj.value])
end

function ApparentPower:new_value(...)
function CumulativeEnergyExported:new_value(...)
local o = self.base_type(table.unpack({...}))
self:augment_type(o)
return o
end

function ApparentPower:read(device, endpoint_id)
function CumulativeEnergyExported:read(device, endpoint_id)
return cluster_base.read(
device,
endpoint_id,
self._cluster.ID,
self.ID,
nil --event_id
nil
)
end

function ApparentPower:subscribe(device, endpoint_id)
function CumulativeEnergyExported:subscribe(device, endpoint_id)
return cluster_base.subscribe(
device,
endpoint_id,
self._cluster.ID,
self.ID,
nil --event_id
nil
)
end

function ApparentPower:set_parent_cluster(cluster)
function CumulativeEnergyExported:set_parent_cluster(cluster)
self._cluster = cluster
return self
end

function ApparentPower:build_test_report_data(
function CumulativeEnergyExported:build_test_report_data(
device,
endpoint_id,
value,
Expand All @@ -68,11 +57,12 @@ function ApparentPower:build_test_report_data(
)
end

function ApparentPower:deserialize(tlv_buf)
function CumulativeEnergyExported:deserialize(tlv_buf)
local data = TLVParser.decode_tlv(tlv_buf)
self:augment_type(data)
return data
end

setmetatable(ApparentPower, {__call = ApparentPower.new_value})
return ApparentPower
setmetatable(CumulativeEnergyExported, {__call = CumulativeEnergyExported.new_value, __index = CumulativeEnergyExported.base_type})
return CumulativeEnergyExported

Loading

0 comments on commit a3bda79

Please sign in to comment.