259 lines
7.5 KiB
Python
259 lines
7.5 KiB
Python
import os
|
|
import shutil
|
|
import csv
|
|
import re
|
|
import datetime
|
|
import locale
|
|
class chore:
|
|
def __init__(self,who,chore,icon,points):
|
|
self.who = who
|
|
self.chore = chore
|
|
self.icon = icon
|
|
self.points = points
|
|
def genchoreyaml(self):
|
|
boolname = self.chore.lower()
|
|
boolname=boolname.replace(" ","_")
|
|
boolname=boolname.replace("-","")
|
|
boolname=boolname.replace("__","_")
|
|
if self.icon == '':
|
|
iconstring = 'mdi:account-hard-hat'
|
|
else:
|
|
iconstring = self.icon
|
|
if self.who == 'b':
|
|
return f"""
|
|
chore_charley_{boolname}:
|
|
name: {self.chore}
|
|
icon: {iconstring}
|
|
chore_charley_{boolname}_completed_today:
|
|
name: {self.chore} Completed Today
|
|
chore_henry_{boolname}:
|
|
name: {self.chore}
|
|
icon: {iconstring}
|
|
chore_henry_{boolname}_completed_today:
|
|
name: {self.chore} Completed Today
|
|
"""
|
|
if self.who == 'c':
|
|
return f"""
|
|
chore_charley_{boolname}:
|
|
name: {self.chore}
|
|
icon: {iconstring}
|
|
chore_charley_{boolname}_completed_today:
|
|
name: {self.chore} Completed Today
|
|
"""
|
|
if self.who == 'h':
|
|
return f"""
|
|
chore_henry_{boolname}:
|
|
name: {self.chore}
|
|
icon: {iconstring}
|
|
chore_henry_{boolname}_completed_today:
|
|
name: {self.chore} Completed Today
|
|
"""
|
|
#return boolname
|
|
def genautomationyaml(self):
|
|
boolname = self.chore.lower()
|
|
boolname=boolname.replace(" ","_")
|
|
boolname=boolname.replace("-","")
|
|
boolname=boolname.replace("__","_")
|
|
if self.who == 'b':
|
|
return f"""
|
|
|
|
- alias: chore_charley_{boolname}
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- input_boolean.chore_charley_{boolname}
|
|
to: "on"
|
|
condition:
|
|
- condition: state
|
|
entity_id:
|
|
- input_boolean.chore_charley_{boolname}_completed_today
|
|
state: "off"
|
|
action:
|
|
- action: script.chore_charley_{boolname}
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id:
|
|
- input_boolean.chore_charley_{boolname}_completed_today
|
|
mode: single
|
|
|
|
- alias: chore_henry_{boolname}
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- input_boolean.chore_henry_{boolname}
|
|
to: "on"
|
|
condition:
|
|
- condition: state
|
|
entity_id:
|
|
- input_boolean.chore_henry_{boolname}_completed_today
|
|
state: "off"
|
|
action:
|
|
- action: script.chore_henry_{boolname}
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id:
|
|
- input_boolean.chore_henry_{boolname}_completed_today
|
|
mode: single
|
|
|
|
"""
|
|
if self.who == 'c':
|
|
return f"""
|
|
|
|
|
|
- alias: chore_charley_{boolname}
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- input_boolean.chore_charley_{boolname}
|
|
to: "on"
|
|
condition:
|
|
- condition: state
|
|
entity_id:
|
|
- input_boolean.chore_charley_{boolname}_completed_today
|
|
state: "off"
|
|
action:
|
|
- action: script.chore_charley_{boolname}
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id:
|
|
- input_boolean.chore_charley_{boolname}_completed_today
|
|
mode: single
|
|
|
|
"""
|
|
if self.who == 'h':
|
|
return f"""
|
|
|
|
- alias: chore_henry_{boolname}
|
|
trigger:
|
|
- platform: state
|
|
entity_id: input_boolean.chore_henry_{boolname}
|
|
to: "on"
|
|
condition:
|
|
- condition: state
|
|
entity_id: input_boolean.chore_henry_{boolname}_completed_today
|
|
state: "off"
|
|
action:
|
|
- action: script.chore_henry_{boolname}
|
|
- action: input_boolean.turn_on
|
|
target:
|
|
entity_id:
|
|
- input_boolean.chore_henry_{boolname}_completed_today
|
|
mode: single
|
|
|
|
"""
|
|
def genscriptyaml(self):
|
|
boolname = self.chore.lower()
|
|
boolname=boolname.replace(" ","_")
|
|
boolname=boolname.replace("-","")
|
|
boolname=boolname.replace("__","_")
|
|
if self.who == 'b':
|
|
return f"""
|
|
chore_henry_{boolname}:
|
|
alias: chore_henry_{boolname}
|
|
sequence:
|
|
- repeat:
|
|
count: {self.points}
|
|
sequence:
|
|
- action: counter.increment
|
|
target:
|
|
entity_id: counter.henrys_chore_points
|
|
|
|
chore_charley_{boolname}:
|
|
alias: chore_charley_{boolname}
|
|
sequence:
|
|
- repeat:
|
|
count: {self.points}
|
|
sequence:
|
|
- action: counter.increment
|
|
target:
|
|
entity_id: counter.charleys_chore_points
|
|
"""
|
|
if self.who == 'c':
|
|
return f"""
|
|
chore_charley_{boolname}:
|
|
alias: chore_charley_{boolname}
|
|
sequence:
|
|
- repeat:
|
|
count: {self.points}
|
|
sequence:
|
|
- action: counter.increment
|
|
target:
|
|
entity_id: counter.charleys_chore_points
|
|
|
|
"""
|
|
if self.who == 'h':
|
|
return f"""
|
|
chore_henry_{boolname}:
|
|
alias: chore_henry_{boolname}
|
|
sequence:
|
|
- repeat:
|
|
count: {self.points}
|
|
sequence:
|
|
- action: counter.increment
|
|
target:
|
|
entity_id: counter.henrys_chore_points
|
|
|
|
"""
|
|
def resetentities(self):
|
|
boolname = self.chore.lower()
|
|
boolname=boolname.replace(" ","_")
|
|
boolname=boolname.replace("-","")
|
|
boolname=boolname.replace("__","_")
|
|
if self.who == 'b':
|
|
return [
|
|
f"input_boolean.chore_charley_{boolname}",
|
|
f"input_boolean.chore_charley_{boolname}_completed_today",
|
|
f"input_boolean.chore_henry_{boolname}",
|
|
f"input_boolean.chore_henry_{boolname}_completed_today",
|
|
]
|
|
if self.who == 'c':
|
|
return [
|
|
f"input_boolean.chore_charley_{boolname}",
|
|
f"input_boolean.chore_charley_{boolname}_completed_today",
|
|
]
|
|
if self.who == 'h':
|
|
return [
|
|
f"input_boolean.chore_henry_{boolname}",
|
|
f"input_boolean.chore_henry_{boolname}_completed_today",
|
|
]
|
|
if os.path.exists(f"./homeassistant/chores.yaml"):
|
|
os.remove(f"./homeassistant/chores.yaml")
|
|
if os.path.exists(f"./homeassistant/automation.yaml"):
|
|
os.remove(f"./homeassistant/automation.yaml")
|
|
if os.path.exists(f"./homeassistant/scripts.yaml"):
|
|
os.remove(f"./homeassistant/scripts.yaml")
|
|
|
|
chorefile = "./homeassistant/chorelist.txt"
|
|
chorelist=[]
|
|
with open(chorefile) as csvcontents:
|
|
chores = csv.DictReader(csvcontents,delimiter=',',quotechar='"')
|
|
for mychore in chores:
|
|
chorelist.append(chore(mychore['For'],mychore["Chore"],mychore['icon'],mychore['points']))
|
|
#print(chore(mychore['For'],mychore["Chore"],mychore['icon'],mychore['points']).genchoreyaml())
|
|
#print(chore(mychore['For'],mychore["Chore"],mychore['icon'],mychore['points']).genautomationyaml())
|
|
#print(chore(mychore['For'],mychore["Chore"],mychore['icon'],mychore['points']).genscriptyaml())
|
|
resetentities = []
|
|
for mychore in chorelist:
|
|
with open("./homeassistant/chores.yaml","a+") as outchores:
|
|
outchores.write(mychore.genchoreyaml())
|
|
with open("./homeassistant/automation.yaml","a+") as outchores:
|
|
outchores.write(mychore.genautomationyaml())
|
|
with open("./homeassistant/scripts.yaml","a+") as outchores:
|
|
outchores.write(mychore.genscriptyaml())
|
|
myentities = mychore.resetentities()
|
|
for myentity in myentities:
|
|
resetentities.append(myentity)
|
|
resetscript = """
|
|
chore_reset_daily_limiters:
|
|
alias: Chore - Reset Entities
|
|
sequence:
|
|
- action: input_boolean.turn_off
|
|
target:
|
|
entity_id:
|
|
"""
|
|
for entity in resetentities:
|
|
resetscript += f" - {entity}\n"
|
|
|
|
with open("./homeassistant/scripts.yaml","a+") as outchores:
|
|
outchores.write(resetscript)
|
|
#print(resetscript) |