Skip to content

Instantly share code, notes, and snippets.

@sng2c
Last active February 8, 2018 00:22
Show Gist options
  • Save sng2c/8714f52f3284a77c3332a508248516f9 to your computer and use it in GitHub Desktop.
Save sng2c/8714f52f3284a77c3332a508248516f9 to your computer and use it in GitHub Desktop.
SmartThings 모드 커스터마이징
#-*- coding: utf-8 -*-
import copy
# sensors = [('Day','Night'),('Home','Away'),('Somebody','Nobody')]
# https://www.planttext.com/plantuml/svg/ZPHD3e8m48NtSufUW0kuC9YuSCN60n0CH4s49bfZkBq537H-wwPf7lFWwvkXKBv2ympl_W4GTw5pnsQiJxxlwdDSBhuTWIckAFQkkbzlWUWxvuVbWMAQrCCdBjWoIOPZLYkVV6BUC-AVJ2s45hq8ioQ6bJGjnvoaMeXYZJ0XHSS77iX6AmIryNAJmZ19XeETaMURb02r45evMseGUuevfKxOsGhp2DAC6b55MRMeBPbdmdPbvfSL0RUfiH7cV5ieh_oJ_9CrdcGf8ADz6xSs_jeiswxCFBCYu3Rrro3C-Uk5yihTqR8kkw6D5_CN
sensors = [('Day','Night'),('Home','Away')]
# https://www.planttext.com/plantuml/svg/ut8eBaaiAYdDpU7Y0h9AKXLS4YlZFV9pKxbW30LTNJi5lypqZ188rqeXFm_2HrK2uZYM9rP2581Oo4Q2-N0b22CHEX16mfN0pGSh0BiAQYJ2FLn8JiFK0-IXAq2t5zcb23ak96MOldF1L80UGX3NEgJcfO025m00
modes_len = 2**len(sensors)
form = '{0:0%db}' % len(sensors)
modes_buf=''
routines_buf = ''
buf = '@startuml\n'
cnt = 0
for i in range(modes_len):
mat = [int(x) for x in list(form.format(i))]
mode_name = '_'.join([sensors[idx][val] for idx,val in enumerate(mat)])
modes_buf += "Mode#%d %s\n" % (i+1,mode_name)
buf += "\nstate %s\n" % mode_name
for j,opt in enumerate(sensors):
cnt+=1
cur = int(not bool(mat[j]))
mat2 = copy.deepcopy(mat)
mat2[j] = cur
target_mode_name = '_'.join([sensors[idx][val] for idx,val in enumerate(mat2)])
buf += "%s --> %s : on %s\n" % (mode_name, target_mode_name, opt[cur])
routines_buf += "Routine#%d\n- 이름 : \t%s > %s\n- 상태변경 : \t%s\n- 자동실행 : \t%s\n- 고급설정 :\t자동실행예외에서 %s빼고 전부 체크\n\n" % (cnt, mode_name, opt[cur], target_mode_name, opt[cur], mode_name)
buf += "\n@enduml\n"
print("아래 모드를 추가해주세요.")
print(modes_buf)
print("아래 루틴을 추가해주세요.")
print(routines_buf)
print("### 아래 내용은 https://www.planttext.com/ 에 붙여넣으면 그림으로 보입니다.\n")
print(buf)
아래 모드를 추가해주세요.
Mode#1 Day_Home
Mode#2 Day_Away
Mode#3 Night_Home
Mode#4 Night_Away
아래 루틴을 추가해주세요.
Routine#1
- 이름 : Day_Home > Night
- 상태변경 : Night_Home
- 자동실행 : Night
- 고급설정 : 자동실행예외에서 Day_Home빼고 전부 체크
Routine#2
- 이름 : Day_Home > Away
- 상태변경 : Day_Away
- 자동실행 : Away
- 고급설정 : 자동실행예외에서 Day_Home빼고 전부 체크
Routine#3
- 이름 : Day_Away > Night
- 상태변경 : Night_Away
- 자동실행 : Night
- 고급설정 : 자동실행예외에서 Day_Away빼고 전부 체크
Routine#4
- 이름 : Day_Away > Home
- 상태변경 : Day_Home
- 자동실행 : Home
- 고급설정 : 자동실행예외에서 Day_Away빼고 전부 체크
Routine#5
- 이름 : Night_Home > Day
- 상태변경 : Day_Home
- 자동실행 : Day
- 고급설정 : 자동실행예외에서 Night_Home빼고 전부 체크
Routine#6
- 이름 : Night_Home > Away
- 상태변경 : Night_Away
- 자동실행 : Away
- 고급설정 : 자동실행예외에서 Night_Home빼고 전부 체크
Routine#7
- 이름 : Night_Away > Day
- 상태변경 : Day_Away
- 자동실행 : Day
- 고급설정 : 자동실행예외에서 Night_Away빼고 전부 체크
Routine#8
- 이름 : Night_Away > Home
- 상태변경 : Night_Home
- 자동실행 : Home
- 고급설정 : 자동실행예외에서 Night_Away빼고 전부 체크
### 아래 내용은 https://www.planttext.com/ 에 붙여넣으면 그림으로 보입니다.
@startuml
state Day_Home
Day_Home --> Night_Home : on Night
Day_Home --> Day_Away : on Away
state Day_Away
Day_Away --> Night_Away : on Night
Day_Away --> Day_Home : on Home
state Night_Home
Night_Home --> Day_Home : on Day
Night_Home --> Night_Away : on Away
state Night_Away
Night_Away --> Day_Away : on Day
Night_Away --> Night_Home : on Home
@enduml
아래 모드를 추가해주세요.
Mode#1 Day_Home_Somebody
Mode#2 Day_Home_Nobody
Mode#3 Day_Away_Somebody
Mode#4 Day_Away_Nobody
Mode#5 Night_Home_Somebody
Mode#6 Night_Home_Nobody
Mode#7 Night_Away_Somebody
Mode#8 Night_Away_Nobody
아래 루틴을 추가해주세요.
Routine#1
- 이름 : Day_Home_Somebody > Night
- 상태변경 : Night_Home_Somebody
- 자동실행 : Night
- 고급설정 : 자동실행예외에서 Day_Home_Somebody빼고 전부 체크
Routine#2
- 이름 : Day_Home_Somebody > Away
- 상태변경 : Day_Away_Somebody
- 자동실행 : Away
- 고급설정 : 자동실행예외에서 Day_Home_Somebody빼고 전부 체크
Routine#3
- 이름 : Day_Home_Somebody > Nobody
- 상태변경 : Day_Home_Nobody
- 자동실행 : Nobody
- 고급설정 : 자동실행예외에서 Day_Home_Somebody빼고 전부 체크
Routine#4
- 이름 : Day_Home_Nobody > Night
- 상태변경 : Night_Home_Nobody
- 자동실행 : Night
- 고급설정 : 자동실행예외에서 Day_Home_Nobody빼고 전부 체크
Routine#5
- 이름 : Day_Home_Nobody > Away
- 상태변경 : Day_Away_Nobody
- 자동실행 : Away
- 고급설정 : 자동실행예외에서 Day_Home_Nobody빼고 전부 체크
Routine#6
- 이름 : Day_Home_Nobody > Somebody
- 상태변경 : Day_Home_Somebody
- 자동실행 : Somebody
- 고급설정 : 자동실행예외에서 Day_Home_Nobody빼고 전부 체크
Routine#7
- 이름 : Day_Away_Somebody > Night
- 상태변경 : Night_Away_Somebody
- 자동실행 : Night
- 고급설정 : 자동실행예외에서 Day_Away_Somebody빼고 전부 체크
Routine#8
- 이름 : Day_Away_Somebody > Home
- 상태변경 : Day_Home_Somebody
- 자동실행 : Home
- 고급설정 : 자동실행예외에서 Day_Away_Somebody빼고 전부 체크
Routine#9
- 이름 : Day_Away_Somebody > Nobody
- 상태변경 : Day_Away_Nobody
- 자동실행 : Nobody
- 고급설정 : 자동실행예외에서 Day_Away_Somebody빼고 전부 체크
Routine#10
- 이름 : Day_Away_Nobody > Night
- 상태변경 : Night_Away_Nobody
- 자동실행 : Night
- 고급설정 : 자동실행예외에서 Day_Away_Nobody빼고 전부 체크
Routine#11
- 이름 : Day_Away_Nobody > Home
- 상태변경 : Day_Home_Nobody
- 자동실행 : Home
- 고급설정 : 자동실행예외에서 Day_Away_Nobody빼고 전부 체크
Routine#12
- 이름 : Day_Away_Nobody > Somebody
- 상태변경 : Day_Away_Somebody
- 자동실행 : Somebody
- 고급설정 : 자동실행예외에서 Day_Away_Nobody빼고 전부 체크
Routine#13
- 이름 : Night_Home_Somebody > Day
- 상태변경 : Day_Home_Somebody
- 자동실행 : Day
- 고급설정 : 자동실행예외에서 Night_Home_Somebody빼고 전부 체크
Routine#14
- 이름 : Night_Home_Somebody > Away
- 상태변경 : Night_Away_Somebody
- 자동실행 : Away
- 고급설정 : 자동실행예외에서 Night_Home_Somebody빼고 전부 체크
Routine#15
- 이름 : Night_Home_Somebody > Nobody
- 상태변경 : Night_Home_Nobody
- 자동실행 : Nobody
- 고급설정 : 자동실행예외에서 Night_Home_Somebody빼고 전부 체크
Routine#16
- 이름 : Night_Home_Nobody > Day
- 상태변경 : Day_Home_Nobody
- 자동실행 : Day
- 고급설정 : 자동실행예외에서 Night_Home_Nobody빼고 전부 체크
Routine#17
- 이름 : Night_Home_Nobody > Away
- 상태변경 : Night_Away_Nobody
- 자동실행 : Away
- 고급설정 : 자동실행예외에서 Night_Home_Nobody빼고 전부 체크
Routine#18
- 이름 : Night_Home_Nobody > Somebody
- 상태변경 : Night_Home_Somebody
- 자동실행 : Somebody
- 고급설정 : 자동실행예외에서 Night_Home_Nobody빼고 전부 체크
Routine#19
- 이름 : Night_Away_Somebody > Day
- 상태변경 : Day_Away_Somebody
- 자동실행 : Day
- 고급설정 : 자동실행예외에서 Night_Away_Somebody빼고 전부 체크
Routine#20
- 이름 : Night_Away_Somebody > Home
- 상태변경 : Night_Home_Somebody
- 자동실행 : Home
- 고급설정 : 자동실행예외에서 Night_Away_Somebody빼고 전부 체크
Routine#21
- 이름 : Night_Away_Somebody > Nobody
- 상태변경 : Night_Away_Nobody
- 자동실행 : Nobody
- 고급설정 : 자동실행예외에서 Night_Away_Somebody빼고 전부 체크
Routine#22
- 이름 : Night_Away_Nobody > Day
- 상태변경 : Day_Away_Nobody
- 자동실행 : Day
- 고급설정 : 자동실행예외에서 Night_Away_Nobody빼고 전부 체크
Routine#23
- 이름 : Night_Away_Nobody > Home
- 상태변경 : Night_Home_Nobody
- 자동실행 : Home
- 고급설정 : 자동실행예외에서 Night_Away_Nobody빼고 전부 체크
Routine#24
- 이름 : Night_Away_Nobody > Somebody
- 상태변경 : Night_Away_Somebody
- 자동실행 : Somebody
- 고급설정 : 자동실행예외에서 Night_Away_Nobody빼고 전부 체크
### 아래 내용은 https://www.planttext.com/ 에 붙여넣으면 그림으로 보입니다.
@startuml
state Day_Home_Somebody
Day_Home_Somebody --> Night_Home_Somebody : on Night
Day_Home_Somebody --> Day_Away_Somebody : on Away
Day_Home_Somebody --> Day_Home_Nobody : on Nobody
state Day_Home_Nobody
Day_Home_Nobody --> Night_Home_Nobody : on Night
Day_Home_Nobody --> Day_Away_Nobody : on Away
Day_Home_Nobody --> Day_Home_Somebody : on Somebody
state Day_Away_Somebody
Day_Away_Somebody --> Night_Away_Somebody : on Night
Day_Away_Somebody --> Day_Home_Somebody : on Home
Day_Away_Somebody --> Day_Away_Nobody : on Nobody
state Day_Away_Nobody
Day_Away_Nobody --> Night_Away_Nobody : on Night
Day_Away_Nobody --> Day_Home_Nobody : on Home
Day_Away_Nobody --> Day_Away_Somebody : on Somebody
state Night_Home_Somebody
Night_Home_Somebody --> Day_Home_Somebody : on Day
Night_Home_Somebody --> Night_Away_Somebody : on Away
Night_Home_Somebody --> Night_Home_Nobody : on Nobody
state Night_Home_Nobody
Night_Home_Nobody --> Day_Home_Nobody : on Day
Night_Home_Nobody --> Night_Away_Nobody : on Away
Night_Home_Nobody --> Night_Home_Somebody : on Somebody
state Night_Away_Somebody
Night_Away_Somebody --> Day_Away_Somebody : on Day
Night_Away_Somebody --> Night_Home_Somebody : on Home
Night_Away_Somebody --> Night_Away_Nobody : on Nobody
state Night_Away_Nobody
Night_Away_Nobody --> Day_Away_Nobody : on Day
Night_Away_Nobody --> Night_Home_Nobody : on Home
Night_Away_Nobody --> Night_Away_Somebody : on Somebody
@enduml
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment