forked from OpenZWave/python-openzwave
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgroup.py
More file actions
executable file
·176 lines (136 loc) · 5.25 KB
/
Copy pathgroup.py
File metadata and controls
executable file
·176 lines (136 loc) · 5.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# -*- coding: utf-8 -*-
"""
.. module:: openzwave.group
This file is part of **python-openzwave** project https://github.com/OpenZWave/python-openzwave.
:platform: Unix, Windows, MacOS X
:sinopsis: openzwave API
.. moduleauthor: bibi21000 aka Sébastien GALLET <[email protected]>
License : GPL(v3)
**python-openzwave** is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
**python-openzwave** is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with python-openzwave. If not, see http://www.gnu.org/licenses.
"""
try:
from gevent import monkey
monkey.patch_all()
except ImportError:
pass
from openzwave.object import ZWaveObject
# Set default logging handler to avoid "No handler found" warnings.
import logging
try: # Python 2.7+
from logging import NullHandler
except ImportError:
class NullHandler(logging.Handler):
"""NullHandler logger for python 2.6"""
def emit(self, record):
pass
logger = logging.getLogger('openzwave')
logger.addHandler(NullHandler())
class ZWaveGroup(ZWaveObject):
"""
The driver object.
Hold options of the manager
Also used to retrieve information about the library, ...
"""
def __init__(self, group_index, network=None, node_id=None):
"""
Initialize driver object
:param group_index: index of the group
:type group_index: int
:param network: The network object to access the manager
:type network: ZWaveNetwork
:param node_id: ID of node
:type node_id: int
"""
ZWaveObject.__init__(self, group_index, network)
self._node_id = node_id
self._index = group_index
#self._label = None
#self.cache_property("self.label")
#self._max_associations = set()
#self.cache_property("self.max_associations")
#self._members = set()
#self.cache_property("self.members")
#self._associations = set()
#self.cache_property("self.associations")
def __str__(self):
"""
The string representation of the group.
:rtype: str
"""
return 'index: [%s] label: [%s]' % (self.index, self.label)
@property
def index(self):
"""
The index of the group.
:rtype: int
"""
return self._index
@property
def label(self):
"""
The label of the group.
:rtype: int
"""
return self._network.manager.getGroupLabel(self.home_id, self._node_id, self.index)
@property
def max_associations(self):
"""
The number of associations.
:rtype: int
"""
return self._network.manager.getMaxAssociations(self.home_id, self._node_id, self.index)
@property
def associations(self):
"""
The members of associations.
:rtype: set()
"""
return self._network.manager.getAssociations(self.home_id, self._node_id, self.index)
def add_association(self, target_node_id):
"""
Adds a node to an association group.
Due to the possibility of a device being asleep, the command is assumed to
complete with success, and the association data held in this class is updated directly. This
will be reverted by a future Association message from the device if the Z-Wave
message actually failed to get through. Notification callbacks will be sent in
both cases.
:param target_node_id: Identifier for the node that will be added to the association group.
:type target_node_id: int
"""
self._network.manager.addAssociation(self.home_id, self._node_id, self.index, target_node_id)
def remove_association(self, target_node_id):
"""
Removes a node from an association group.
Due to the possibility of a device being asleep, the command is assumed to
succeed, and the association data held in this class is updated directly. This
will be reverted by a future Association message from the device if the Z-Wave
message actually failed to get through. Notification callbacks will be sent
in both cases.
:param target_node_id: Identifier for the node that will be removed from the association group.
:type target_node_id: int
"""
self._network.manager.removeAssociation(self._network.home_id, self._node_id, self.index, target_node_id)
def to_dict(self, extras=['all']):
"""
Return a dict representation of the group.
:param extras: The extra inforamtions to add
:type extras: []
:returns: A dict
:rtype: dict()
"""
if 'all' in extras:
extras = ['associations']
ret = {}
ret['label'] = self.label
if 'associations' in extras:
ret['associations'] = dict.fromkeys(self.associations, 0)
return ret