3 # © Copyright 2021-2022, Scott Gasch
5 """Most basic definition of a smart device: it must have a name and a
6 MAC address and may have some optional keywords. All devices have
7 these whether they are lights, outlets, thermostats, etc...
12 from typing import List, Optional
18 """Most basic definition of a smart device: it must have a name and a
19 MAC address and may have some optional keywords. All devices have
20 these whether they are lights, outlets, thermostats, etc..."""
26 keywords: Optional[str] = "",
30 self.keywords = keywords
31 self.arper = arper.Arper()
32 if keywords is not None:
33 self.kws: List[str] = keywords.split(' ')
37 def get_name(self) -> str:
40 def get_mac(self) -> str:
43 def get_ip(self) -> Optional[str]:
44 return self.arper.get_ip_by_mac(self.mac)
46 def has_static_ip(self) -> bool:
48 m = re.search(r'static:([\d\.]+)', kw)
51 assert self.get_ip() == ip
55 # Add command -> URL logic here.
57 def get_keywords(self) -> Optional[List[str]]:
60 def has_keyword(self, keyword: str) -> bool:
66 def get_on_limit_seconds(self) -> Optional[int]:
68 m = re.search(r"timeout:(\d+)", kw)
70 return int(m.group(1)) * 60