#!/usr/bin/env python3
+# © Copyright 2021-2022, Scott Gasch
+
+"""Most basic definition of a smart device: it must have a name and a
+MAC address and may have some optional keywords. All devices have
+these whether they are lights, outlets, thermostats, etc...
+
+"""
+
import re
from typing import List, Optional
class Device(object):
+ """Most basic definition of a smart device: it must have a name and a
+ MAC address and may have some optional keywords. All devices have
+ these whether they are lights, outlets, thermostats, etc..."""
+
def __init__(
- self,
- name: str,
- mac: str,
- keywords: Optional[List[str]],
+ self,
+ name: str,
+ mac: str,
+ keywords: Optional[str] = "",
):
self.name = name
self.mac = mac
self.keywords = keywords
self.arper = arper.Arper()
if keywords is not None:
- self.kws = keywords.split()
+ self.kws: List[str] = keywords.split(' ')
else:
self.kws = []
def get_mac(self) -> str:
return self.mac
- def get_ip(self) -> str:
+ def get_ip(self) -> Optional[str]:
return self.arper.get_ip_by_mac(self.mac)
+ def has_static_ip(self) -> bool:
+ for kw in self.kws:
+ m = re.search(r'static:([\d\.]+)', kw)
+ if m is not None:
+ ip = m.group(1)
+ assert self.get_ip() == ip
+ return True
+ return False
+
+ # Add command -> URL logic here.
+
def get_keywords(self) -> Optional[List[str]]:
return self.kws