1
1
"""Wake word detection"""
2
2
from dataclasses import dataclass
3
- from typing import Optional
3
+ from typing import List , Optional
4
4
5
5
from .event import Event , Eventable
6
6
7
7
DOMAIN = "wake"
8
8
_DETECTION_TYPE = "detection"
9
+ _DETECT_TYPE = "detect"
9
10
_NOT_DETECTED_TYPE = "not-detected"
10
11
11
12
@@ -30,10 +31,31 @@ def event(self) -> Event:
30
31
31
32
@staticmethod
32
33
def from_event (event : Event ) -> "Detection" :
33
- assert event .data is not None
34
- return Detection (
35
- name = event .data .get ("name" ), timestamp = event .data .get ("timestamp" )
36
- )
34
+ data = event .data or {}
35
+ return Detection (name = data .get ("name" ), timestamp = data .get ("timestamp" ))
36
+
37
+
38
+ @dataclass
39
+ class Detect (Eventable ):
40
+ """Wake word detection request.
41
+
42
+ Followed by AudioStart, AudioChunk+, AudioStop
43
+ """
44
+
45
+ names : Optional [List [str ]] = None
46
+ """Names of models to detect (None = any)."""
47
+
48
+ @staticmethod
49
+ def is_type (event_type : str ) -> bool :
50
+ return event_type == _DETECT_TYPE
51
+
52
+ def event (self ) -> Event :
53
+ return Event (type = _DETECT_TYPE , data = {"names" : self .names })
54
+
55
+ @staticmethod
56
+ def from_event (event : Event ) -> "Detect" :
57
+ data = event .data or {}
58
+ return Detect (names = data .get ("names" ))
37
59
38
60
39
61
@dataclass
0 commit comments