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)
Example #3
0
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
Example #4
0
 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 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
Example #6
0
    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
Example #8
0
    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()