def poll_page_thread(page): """Thread function to long-poll openHAB pages""" while True: try: page.get_page_blocked() except EmptyResponseError: # openHAB server return an empty reponse (typically 5 minutes after long-poll request started) # ==> try again if server connection is still alive debugPrint(5, 'poll_page_thread: empty response for page %s' % page.id_) except requests.exceptions.ReadTimeout as e: # HTTP request timed out # ==> try again if server connection is still alive debugPrint(5, 'poll_page_thread: %s for page %s' % (repr(e), page.id_)) except requests.exceptions.HTTPError as e: debugPrint(1, 'poll_page_thread: %s for page %s' % (repr(e), page.id_)) except requests.exceptions.ConnectTimeout as e: debugPrint(1, 'poll_page_thread: %s for page %s' % (repr(e), page.id_)) except requests.exceptions.ConnectionError as e: # openHAB server terminated the connection # ==> execute terminate callback and close window debugPrint(5, 'poll_page_thread: %s for page %s' % (repr(e), page.id_)) page.oh.terminate() if not page.oh.alive: # exit thread if openHAB server ist not alive any more""" return
def onAction(self, action): # test if action is either up/down/right to set focus correctly diff = FOCUS_CHANGED_CODES.get(action.getId()) if diff is not None: # skip separator lines which can't have the focus size = self.control.size() pos = self.control.getSelectedPosition() if pos >= 0: while self.items[pos].control.getProperty('type') == 'separator': pos += diff if pos < 0: pos = size - 1 elif pos >= size: pos = 0 self.control.selectItem(pos) else: # any other action pos = self.get_selected_position() if pos < 0: debugPrint(1, 'WidgetList [%d]::onAction [%d], but nothing selected' % (self.control.getId(), action.getId())) return elif pos >= len(self.items): debugPrint(1, 'WidgetList [%d]::onAction [%d], index out of range (pos=%d, len=%d)' % (self.control.getId(), action.getId(), pos, len(self.items))) return self.items[pos].onAction(action)
def fetch_abs_json_url(self, url, extra_headers=None): """Fetch url from openHAB server and convert data from json to Python data structures.""" headers = self.http_get_headers if extra_headers is not None: headers.update(extra_headers) debugPrint(5, 'fetching json url=%s, headers=%s' % (url, repr(headers))) resp = requests.get(url, headers=headers, proxies=self.http_proxies) debugPrint(5, 'response for url=%s, text=%s, headers=%s' % (url, resp.text, resp.headers)) if resp.status_code != requests.codes.ok: resp.raise_for_status() if resp.text == '': # openHAB returns an empty response after 5 minutes if long-polling is enabled raise EmptyResponseError return resp.json(), resp.headers
def create_widget_class(self, page, widgetData): """ create an openHAB widget instance from the given has properties """ if widgetData is None: return None elif widgetData[ 'widgetId'] in self.widgets: # test if widget already exists i = self.widgets[widgetData['widgetId']] i.init(widgetData) return i else: if widgetData['type'] == 'Colorpicker': i = ColorPickerWidget(page, widgetData) elif widgetData['type'] == 'Chart': i = ChartWidget(page, widgetData) elif widgetData['type'] == 'Frame': i = FrameWidget(page, widgetData) elif widgetData['type'] == 'Group': i = GroupWidget(page, widgetData) elif widgetData['type'] == 'Image': i = ImageWidget(page, widgetData) elif widgetData['type'] == 'Selection': i = SelectionWidget(page, widgetData) elif widgetData['type'] == 'Setpoint': i = SetPointWidget(page, widgetData) elif widgetData['type'] == 'Slider': i = SliderWidget(page, widgetData) elif widgetData['type'] == 'Switch': i = SwitchWidget(page, widgetData) elif widgetData['type'] == 'Text': i = TextWidget(page, widgetData) elif widgetData['type'] == 'Video': i = VideoWidget(page, widgetData) elif widgetData['type'] == 'Mapview': i = MapViewWidget(page, widgetData) elif widgetData['type'] == 'Webview': i = WebViewWidget(page, widgetData) else: debugPrint( 1, 'unknown widget type=%s, widgetId=%s' % (widgetData['type'], widgetData['widgetId'])) return None # add new instance to dict of all widgets self.widgets[i.widgetId] = i return i
def create_widget_class(self, page, widgetData): """ create an openHAB widget instance from the given has properties """ if widgetData is None: return None elif widgetData['widgetId'] in self.widgets: # test if widget already exists i = self.widgets[widgetData['widgetId']] i.init(widgetData) return i else: if widgetData['type'] == 'Colorpicker': i = ColorPickerWidget(page, widgetData) elif widgetData['type'] == 'Chart': i = ChartWidget(page, widgetData) elif widgetData['type'] == 'Frame': i = FrameWidget(page, widgetData) elif widgetData['type'] == 'Group': i = GroupWidget(page, widgetData) elif widgetData['type'] == 'Image': i = ImageWidget(page, widgetData) elif widgetData['type'] == 'Selection': i = SelectionWidget(page, widgetData) elif widgetData['type'] == 'Setpoint': i = SetPointWidget(page, widgetData) elif widgetData['type'] == 'Slider': i = SliderWidget(page, widgetData) elif widgetData['type'] == 'Switch': i = SwitchWidget(page, widgetData) elif widgetData['type'] == 'Text': i = TextWidget(page, widgetData) elif widgetData['type'] == 'Video': i = VideoWidget(page, widgetData) elif widgetData['type'] == 'Mapview': i = MapViewWidget(page, widgetData) elif widgetData['type'] == 'Webview': i = WebViewWidget(page, widgetData) else: debugPrint(1, 'unknown widget type=%s, widgetId=%s' % (widgetData['type'], widgetData['widgetId'])) return None # add new instance to dict of all widgets self.widgets[i.widgetId] = i return i
def create_item_class(self, itemData): """Create an openHAB item instance from the given hash properties.""" if itemData is None: return None elif itemData['name'] in self.items: # test if item already exists i = self.items[itemData['name']] i.init(itemData) return i else: if itemData['type'] == 'Call': i = CallItem(self, itemData) elif itemData['type'] == 'Color': i = ColorItem(self, itemData) elif itemData['type'] == 'Contact': i = ContactItem(self, itemData) elif itemData['type'] == 'DateTime': i = DateTimeItem(self, itemData) elif itemData['type'] == 'Dimmer': i = DimmerItem(self, itemData) elif itemData['type'] == 'Group': i = GroupItem(self, itemData) elif itemData['type'] == 'Location': i = LocationItem(self, itemData) elif itemData['type'] == 'Number': i = NumberItem(self, itemData) elif itemData['type'] == 'String': i = StringItem(self, itemData) elif itemData['type'] == 'Switch': i = SwitchItem(self, itemData) elif itemData['type'] == 'Rollershutter': i = RollerShutterItem(self, itemData) else: debugPrint( 1, 'unknown item type=%s, name=%s' % (itemData['type'], itemData['name'])) return None # add new instance to dict of all items self.items[i.name] = i return i
def create_item_class(self, itemData): """Create an openHAB item instance from the given hash properties.""" if itemData is None: return None elif itemData['name'] in self.items: # test if item already exists i = self.items[itemData['name']] i.init(itemData) return i else: if itemData['type'] == 'CallItem': i = CallItem(self, itemData) elif itemData['type'] == 'ColorItem': i = ColorItem(self, itemData) elif itemData['type'] == 'ContactItem': i = ContactItem(self, itemData) elif itemData['type'] == 'DateTimeItem': i = DateTimeItem(self, itemData) elif itemData['type'] == 'DimmerItem': i = DimmerItem(self, itemData) elif itemData['type'] == 'GroupItem': i = GroupItem(self, itemData) elif itemData['type'] == 'LocationItem': i = LocationItem(self, itemData) elif itemData['type'] == 'NumberItem': i = NumberItem(self, itemData) elif itemData['type'] == 'StringItem': i = StringItem(self, itemData) elif itemData['type'] == 'SwitchItem': i = SwitchItem(self, itemData) elif itemData['type'] == 'RollershutterItem': i = RollerShutterItem(self, itemData) else: debugPrint(1, 'unknown item type=%s, name=%s' % (itemData['type'], itemData['name'])) return None # add new instance to dict of all items self.items[i.name] = i return i
def onClick(self): pos = self.get_selected_position() if pos < 0: debugPrint(1, 'WidgetList [%d]::onClick, but nothing selected' % self.control.getId()) return self.items[pos].onClick()