Skip to content

Commit

Permalink
feat: add trigger count to state
Browse files Browse the repository at this point in the history
  • Loading branch information
Daniel Mason committed Feb 8, 2025
1 parent 2abe906 commit dd6b2bc
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 26 deletions.
47 changes: 33 additions & 14 deletions custom_components/processor/mqtt_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def __init__(self, hass, args):
self._attributes = {}
self._available = True
# Entity Fields END
self.log = logging.getLogger("{}.device.{}".format(__name__, self._unique_id))
self.log = logging.getLogger("{}.{}".format(__name__, self._unique_id))
self.log.info(f"Setting up device {self._unique_id}")
self._type = args.get('type', 'panel')

Expand Down Expand Up @@ -225,18 +225,21 @@ def __init__(self, hass, name, config, device):
super(MqttButton, self).__init__(name, config, device)
# Entity Fields START
self.hass = hass
self._unique_id = f"{self.device._unique_id}_{self.name.lower().replace(' ', '_').replace('-', '_')}"
self._name = name

self._unique_id = f"{self.device._unique_id}_{self._name.lower().replace(' ', '_').replace('-', '_')}"
self.entity_id = f"mqtt_code_mapping.{self._unique_id}"
self.friendly_name = self._name
self.friendly_name = f"{self.device.friendly_name} - {name}"
self.may_update = True
self._state = 'setting up'
self._state = 0
self._available = True
self._attributes = {}
# Entity Fields END

self.last_payload = None
self.last_triggered = 'never'
self.last_action = 'none'
self.trigger_count = 0
self.field = None
self.payloads_on = []
self.payloads_off = []
Expand All @@ -255,10 +258,11 @@ def __init__(self, hass, name, config, device):
# title_template,
# data,
# )
self._name = name
self.log = logging.getLogger(__name__ + '.' + self.name)
self.log.debug(f"Init Config for Mapping {name}: " +str(config))
self.log.debug("Payloads: " +str(self.payloads_on))
self.log.info(f"Setting up mapping {self._unique_id}, {self.friendly_name}, {self.name}")

# self.log.debug(f"Init Config for Mapping {name}: " +str(config))
# self.log.debug("Payloads: " +str(self.payloads_on))
if 'field' in config:
self.field = config.get('field', None)
if 'payload' in config:
Expand Down Expand Up @@ -331,15 +335,15 @@ def process(self, payload):

def message_received(self, message):
"""Handle new MQTT messages."""
print("Processing message:", message.payload)

# self.log.debug("Message received: " + str(message))

self.process(message.payload)



def update_state(self, payload, action):
self.log.debug(f"name={self.name}, payload={payload},action={action} ")
# self.log.debug(f"name={self.name}, payload={payload},action={action}")

self.last_action = action
self.last_triggered = dt.now()
Expand Down Expand Up @@ -378,9 +382,11 @@ def handleRFCode(self, action):
# self.log.debug("globalEvent: " + str(self.globalEvent))
self.last_action = action
self.last_triggered = dt.now()
self.log_execution()

schedules = self.device.get_active_schedules()
self.run_actions(schedules)

if self.event or self.globalEvent:
self.log.debug("Sending event.")
self.device.hass.bus.fire(self.name, {
Expand All @@ -400,6 +406,18 @@ def handleRFCode(self, action):
def should_poll(self):
return False

@property
def device_class(self) -> str:
"""Define the device class for a numeric entity."""
return "measurement"

@property
def unit_of_measurement(self) -> str:
"""Return the unit for the counter."""
return "count"
def log_execution(self):
self.trigger_count += 1

def update_attributes(self):

new_attr = {
Expand All @@ -424,6 +442,7 @@ def update_attributes(self):
new_attr['globalEvent'] = True

self._attributes = new_attr
self._state = self.trigger_count

@property
def extra_state_attributes(self):
Expand All @@ -439,8 +458,9 @@ def unique_id(self):
return self._unique_id

@property
def state(self):
return self._state
def state(self) -> str:
return str(self._state)


@property
def available(self):
Expand All @@ -451,7 +471,6 @@ def available(self):
async def async_update(self):
"""Simulate an update."""
self.log.debug(f"Updating entity: {self._name}")
self._state = "online"
self.update_attributes()
self.async_write_ha_state()

Expand All @@ -460,5 +479,5 @@ async def async_added_to_hass(self):
self.log.debug(f"async_added_to_hass for {self._name}")

self.may_update = True
self._state = "ready"
self._state = 0
self.schedule_update_ha_state()
17 changes: 5 additions & 12 deletions custom_components/processor/yaml_scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,20 +80,20 @@ def __init__(self, mapping, name: str, args):
# self.script = Script(hass, args, name, self.async_update_ha_state)

def execute(self, schedule): ## passed in call-back function
self.log.debug(f"execute self,eschle {self.schedule_name} input scheudule={schedule}")
# self.log.debug(f"Execute schedule {self.schedule_name} input scheudule={schedule}")

if self.schedule_name == schedule:
self.log.debug("Executing actions in Action {}".format(self.schedule_name))
try:
# self.log.debug(str(dir(script)))
# self.log.debug(str(dir(script.service)))
self.log.debug(f"Script Config: {self._script_config}")
self.log.debug(f"self.mapping: {self.mapping}")
self.log.debug(f"self.mapping.device: {self.mapping.device}")
self.log.debug(f"self.mapping.device.hass: {self.mapping.device.hass}")
# self.log.debug(f"self.mapping: {self.mapping}")
# self.log.debug(f"self.mapping.device: {self.mapping.device}")
# self.log.debug(f"self.mapping.device.hass: {self.mapping.device.hass}")
s = script.Script(self.mapping.device.hass, self._script_config, self.schedule_name, DOMAIN)
parent_id = "device.%s" % (self.mapping.device.name)
self.log.debug(f"Context Parent ID: {parent_id}, Context ID: actions.{self.schedule_name}")
# self.log.debug(f"Context Parent ID: {parent_id}, Context ID: actions.{self.schedule_name}")
context = Context(parent_id=parent_id, id=f"actions.{self.schedule_name}")
s.run(context=context)
except Exception as e:
Expand Down Expand Up @@ -178,27 +178,20 @@ def __init__(self, name, config, device):
self.log = logging.getLogger("{}.mappings.{}".format(device.log.name, name))
self.log.info("Mapping init method called")
self._schedule_actions = {}
self.log.debug(f"config.get('actions'): {config.get('actions')}")
try:
for key, item in config.get('actions').items():
self.log.debug(f"Setting up scheulde action for {key}")
action = Action(self, key, item)
self._schedule_actions[key] = action
self.log.debug(f"Schedule actions on Mapping: {self._schedule_actions}")
except AttributeError as a:
self.log.debug(f"No schedule actions defined. {a}")

def run_actions(self, schedule_names):
self.log.debug(f"Executing Action: {schedule_names}")
self.log.debug(self._schedule_actions)
for s in schedule_names:
self.log.debug(f"Looking at scheduleName: {s}")

if s in self._schedule_actions.keys():
self.log.debug(f"if s in self._schedule_actions.keys()=True")
for name, action in self._schedule_actions.items():
self.log.debug(f"Looking at each self._schedule_actions item. This item: {action}")
self.log.debug(f"action.execute: {name} {action}")
action.execute(s) # method will only run actions if schedule names match
else:
self.log.debug(f"if s in self._schedule_actions.keys()=False")
Expand Down

0 comments on commit dd6b2bc

Please sign in to comment.