Ugh, a bunch of things. @overrides. --lmodule. Chromecasts. etc...
[python_utils.git] / smart_home / device.py
1 #!/usr/bin/env python3
2
3 import re
4 from typing import List, Optional
5
6 import arper
7
8
9 class Device(object):
10     def __init__(
11             self,
12             name: str,
13             mac: str,
14             keywords: Optional[List[str]],
15     ):
16         self.name = name
17         self.mac = mac
18         self.keywords = keywords
19         self.arper = arper.Arper()
20         if keywords is not None:
21             self.kws = keywords.split()
22         else:
23             self.kws = []
24
25     def get_name(self) -> str:
26         return self.name
27
28     def get_mac(self) -> str:
29         return self.mac
30
31     def get_ip(self) -> Optional[str]:
32         return self.arper.get_ip_by_mac(self.mac)
33
34     def has_static_ip(self) -> bool:
35         for kw in self.kws:
36             m = re.search(r'static:([\d\.]+)', kw)
37             if m is not None:
38                 ip = m.group(1)
39                 assert self.get_ip() == ip
40                 return True
41         return False
42
43     # Add command -> URL logic here.
44
45     def get_keywords(self) -> Optional[List[str]]:
46         return self.kws
47
48     def has_keyword(self, keyword: str) -> bool:
49         for kw in self.kws:
50             if kw == keyword:
51                 return True
52         return False
53
54     def get_on_limit_seconds(self) -> Optional[int]:
55         for kw in self.kws:
56             m = re.search(r"timeout:(\d+)", kw)
57             if m is not None:
58                 return int(m.group(1)) * 60
59         return None