Skip to content

Commit dd6b2bc

Browse files
author
Daniel Mason
committed
feat: add trigger count to state
1 parent 2abe906 commit dd6b2bc

File tree

2 files changed

+38
-26
lines changed

2 files changed

+38
-26
lines changed

custom_components/processor/mqtt_code.py

+33-14
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def __init__(self, hass, args):
6060
self._attributes = {}
6161
self._available = True
6262
# Entity Fields END
63-
self.log = logging.getLogger("{}.device.{}".format(__name__, self._unique_id))
63+
self.log = logging.getLogger("{}.{}".format(__name__, self._unique_id))
6464
self.log.info(f"Setting up device {self._unique_id}")
6565
self._type = args.get('type', 'panel')
6666

@@ -225,18 +225,21 @@ def __init__(self, hass, name, config, device):
225225
super(MqttButton, self).__init__(name, config, device)
226226
# Entity Fields START
227227
self.hass = hass
228-
self._unique_id = f"{self.device._unique_id}_{self.name.lower().replace(' ', '_').replace('-', '_')}"
228+
self._name = name
229+
230+
self._unique_id = f"{self.device._unique_id}_{self._name.lower().replace(' ', '_').replace('-', '_')}"
229231
self.entity_id = f"mqtt_code_mapping.{self._unique_id}"
230-
self.friendly_name = self._name
232+
self.friendly_name = f"{self.device.friendly_name} - {name}"
231233
self.may_update = True
232-
self._state = 'setting up'
234+
self._state = 0
233235
self._available = True
234236
self._attributes = {}
235237
# Entity Fields END
236238

237239
self.last_payload = None
238240
self.last_triggered = 'never'
239241
self.last_action = 'none'
242+
self.trigger_count = 0
240243
self.field = None
241244
self.payloads_on = []
242245
self.payloads_off = []
@@ -255,10 +258,11 @@ def __init__(self, hass, name, config, device):
255258
# title_template,
256259
# data,
257260
# )
258-
self._name = name
259261
self.log = logging.getLogger(__name__ + '.' + self.name)
260-
self.log.debug(f"Init Config for Mapping {name}: " +str(config))
261-
self.log.debug("Payloads: " +str(self.payloads_on))
262+
self.log.info(f"Setting up mapping {self._unique_id}, {self.friendly_name}, {self.name}")
263+
264+
# self.log.debug(f"Init Config for Mapping {name}: " +str(config))
265+
# self.log.debug("Payloads: " +str(self.payloads_on))
262266
if 'field' in config:
263267
self.field = config.get('field', None)
264268
if 'payload' in config:
@@ -331,15 +335,15 @@ def process(self, payload):
331335

332336
def message_received(self, message):
333337
"""Handle new MQTT messages."""
334-
print("Processing message:", message.payload)
338+
335339
# self.log.debug("Message received: " + str(message))
336340

337341
self.process(message.payload)
338342

339343

340344

341345
def update_state(self, payload, action):
342-
self.log.debug(f"name={self.name}, payload={payload},action={action} ")
346+
# self.log.debug(f"name={self.name}, payload={payload},action={action}")
343347

344348
self.last_action = action
345349
self.last_triggered = dt.now()
@@ -378,9 +382,11 @@ def handleRFCode(self, action):
378382
# self.log.debug("globalEvent: " + str(self.globalEvent))
379383
self.last_action = action
380384
self.last_triggered = dt.now()
385+
self.log_execution()
386+
381387
schedules = self.device.get_active_schedules()
382388
self.run_actions(schedules)
383-
389+
384390
if self.event or self.globalEvent:
385391
self.log.debug("Sending event.")
386392
self.device.hass.bus.fire(self.name, {
@@ -400,6 +406,18 @@ def handleRFCode(self, action):
400406
def should_poll(self):
401407
return False
402408

409+
@property
410+
def device_class(self) -> str:
411+
"""Define the device class for a numeric entity."""
412+
return "measurement"
413+
414+
@property
415+
def unit_of_measurement(self) -> str:
416+
"""Return the unit for the counter."""
417+
return "count"
418+
def log_execution(self):
419+
self.trigger_count += 1
420+
403421
def update_attributes(self):
404422

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

426444
self._attributes = new_attr
445+
self._state = self.trigger_count
427446

428447
@property
429448
def extra_state_attributes(self):
@@ -439,8 +458,9 @@ def unique_id(self):
439458
return self._unique_id
440459

441460
@property
442-
def state(self):
443-
return self._state
461+
def state(self) -> str:
462+
return str(self._state)
463+
444464

445465
@property
446466
def available(self):
@@ -451,7 +471,6 @@ def available(self):
451471
async def async_update(self):
452472
"""Simulate an update."""
453473
self.log.debug(f"Updating entity: {self._name}")
454-
self._state = "online"
455474
self.update_attributes()
456475
self.async_write_ha_state()
457476

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

462481
self.may_update = True
463-
self._state = "ready"
482+
self._state = 0
464483
self.schedule_update_ha_state()

custom_components/processor/yaml_scheduler.py

+5-12
Original file line numberDiff line numberDiff line change
@@ -80,20 +80,20 @@ def __init__(self, mapping, name: str, args):
8080
# self.script = Script(hass, args, name, self.async_update_ha_state)
8181

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

8585
if self.schedule_name == schedule:
8686
self.log.debug("Executing actions in Action {}".format(self.schedule_name))
8787
try:
8888
# self.log.debug(str(dir(script)))
8989
# self.log.debug(str(dir(script.service)))
9090
self.log.debug(f"Script Config: {self._script_config}")
91-
self.log.debug(f"self.mapping: {self.mapping}")
92-
self.log.debug(f"self.mapping.device: {self.mapping.device}")
93-
self.log.debug(f"self.mapping.device.hass: {self.mapping.device.hass}")
91+
# self.log.debug(f"self.mapping: {self.mapping}")
92+
# self.log.debug(f"self.mapping.device: {self.mapping.device}")
93+
# self.log.debug(f"self.mapping.device.hass: {self.mapping.device.hass}")
9494
s = script.Script(self.mapping.device.hass, self._script_config, self.schedule_name, DOMAIN)
9595
parent_id = "device.%s" % (self.mapping.device.name)
96-
self.log.debug(f"Context Parent ID: {parent_id}, Context ID: actions.{self.schedule_name}")
96+
# self.log.debug(f"Context Parent ID: {parent_id}, Context ID: actions.{self.schedule_name}")
9797
context = Context(parent_id=parent_id, id=f"actions.{self.schedule_name}")
9898
s.run(context=context)
9999
except Exception as e:
@@ -178,27 +178,20 @@ def __init__(self, name, config, device):
178178
self.log = logging.getLogger("{}.mappings.{}".format(device.log.name, name))
179179
self.log.info("Mapping init method called")
180180
self._schedule_actions = {}
181-
self.log.debug(f"config.get('actions'): {config.get('actions')}")
182181
try:
183182
for key, item in config.get('actions').items():
184-
self.log.debug(f"Setting up scheulde action for {key}")
185183
action = Action(self, key, item)
186184
self._schedule_actions[key] = action
187-
self.log.debug(f"Schedule actions on Mapping: {self._schedule_actions}")
188185
except AttributeError as a:
189186
self.log.debug(f"No schedule actions defined. {a}")
190187

191188
def run_actions(self, schedule_names):
192189
self.log.debug(f"Executing Action: {schedule_names}")
193190
self.log.debug(self._schedule_actions)
194191
for s in schedule_names:
195-
self.log.debug(f"Looking at scheduleName: {s}")
196192

197193
if s in self._schedule_actions.keys():
198-
self.log.debug(f"if s in self._schedule_actions.keys()=True")
199194
for name, action in self._schedule_actions.items():
200-
self.log.debug(f"Looking at each self._schedule_actions item. This item: {action}")
201-
self.log.debug(f"action.execute: {name} {action}")
202195
action.execute(s) # method will only run actions if schedule names match
203196
else:
204197
self.log.debug(f"if s in self._schedule_actions.keys()=False")

0 commit comments

Comments
 (0)