91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
import appdaemon.plugins.hass.hassapi as hass
|
|
|
|
#
|
|
# App to show dishwasher state
|
|
#
|
|
# Args:
|
|
#
|
|
# door_sensor = dishwasher door sensor
|
|
#
|
|
# None
|
|
#
|
|
# Release Notes
|
|
#
|
|
# Version 1.0:
|
|
# Initial Version
|
|
|
|
class Dishwasher(hass.Hass):
|
|
listen_event_handle_list = []
|
|
|
|
def initialize(self):
|
|
if 'run_state' not in self.args or 'door_sensor' not in self.args or 'counter' not in self.args or 'state_extended' not in self.args:
|
|
self.log("Please define all args")
|
|
return
|
|
|
|
self.listen_event_handle_list.append(self.listen_state(self.door_state_change, self.args['door_sensor']))
|
|
self.listen_event_handle_list.append(self.listen_state(self.run_state_change, self.args['run_state']))
|
|
|
|
|
|
def get_extended_state(self):
|
|
return self.get_state(self.args['state_extended'])
|
|
|
|
def set_extended_state(self, state):
|
|
self.call_service("input_select/select_option", entity_id = self.args['state_extended'], option = state)
|
|
|
|
def door_state_change(self, entity, attribute, old, new, kwargs):
|
|
if new != "on":
|
|
return
|
|
|
|
self.call_service("counter/increment", entity_id = self.args['counter'])
|
|
extended_state = self.get_extended_state()
|
|
open_count = int(self.get_state(self.args['counter']))
|
|
|
|
if extended_state == "Washed":
|
|
self.set_extended_state("Empty")
|
|
elif extended_state == "Empty":
|
|
if open_count < 10:
|
|
self.set_extended_state("Collecting Dishes")
|
|
elif open_count > 10:
|
|
self.set_extended_state("Ready to wash")
|
|
elif extended_state == "Collecting Dishes" and open_count > 10:
|
|
self.set_extended_state("Ready to wash")
|
|
|
|
self.set_light_state_by_counter()
|
|
|
|
def run_state_change(self, entity, attribute, old, new, kwargs):
|
|
self.log("event: {}: {}->{}".format(attribute, old, new))
|
|
if new == "Run":
|
|
self.log('resetting counter')
|
|
self.call_service("counter/reset", entity_id = self.args['counter'])
|
|
self.set_extended_state("Washing")
|
|
elif new == "Finished":
|
|
self.log('resetting counter')
|
|
self.call_service("counter/reset", entity_id = self.args['counter'])
|
|
self.set_extended_state("Washed")
|
|
|
|
self.log('Current state is: {}'.format(self.get_extended_state()))
|
|
self.set_light_state_by_counter()
|
|
|
|
def set_light_state_by_counter(self):
|
|
open_count = self.get_state(self.args['counter'])
|
|
extended_state = self.get_extended_state()
|
|
self.log('counter state={}, machine state = {}'.format(open_count, extended_state))
|
|
|
|
if extended_state == "Washed":
|
|
self.log('Time to take dishes out.')
|
|
if 'lamp' in self.args:
|
|
self.call_service("light/turn_on", entity_id = self.args['lamp'], rgb_color=[255, 0, 0])
|
|
|
|
elif extended_state == "Washing":
|
|
self.log('washing in progress')
|
|
if 'lamp' in self.args:
|
|
self.call_service("light/turn_off", entity_id = self.args['lamp'])
|
|
|
|
elif extended_state == "Ready to wash":
|
|
self.log('Time to run dishwasher.')
|
|
if 'lamp' in self.args:
|
|
self.call_service("light/turn_on", entity_id = self.args['lamp'], rgb_color=[245, 236, 0])
|
|
|
|
elif 'lamp' in self.args:
|
|
self.call_service("light/turn_off", entity_id = self.args['lamp'])
|