From 0ee11e8366408f20970573b004af7001ae87ed12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5vard=20Moen?= Date: Tue, 15 Oct 2019 08:34:41 +0200 Subject: [PATCH] Handle unconfigured state (#73) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Set default value for host in settingsmeta and remove deprecated option Check for None in config values Move getTaggedItems to initialize so that say_dialog works and handle request error Signed-off-by: Håvard Moen * add settings.json to .gitignore Signed-off-by: Håvard Moen * handle change of settings from web Signed-off-by: Håvard Moen --- .gitignore | 1 + __init__.py | 22 +++++++++++++++++++--- settingsmeta.yaml | 2 +- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 0d20b64..31841f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.pyc +settings.json diff --git a/__init__.py b/__init__.py index c37619e..fd979ef 100644 --- a/__init__.py +++ b/__init__.py @@ -48,7 +48,10 @@ class openHABSkill(MycroftSkill): def __init__(self): super(openHABSkill, self).__init__(name="openHABSkill") - self.url = "http://%s:%s/rest" % (self.settings.get('host'), self.settings.get('port')) + if self.settings.get('host') is not None and self.settings.get('port') is not None: + self.url = "http://%s:%s/rest" % (self.settings.get('host'), self.settings.get('port')) + else: + self.url = None self.command_headers = {"Content-type": "text/plain"} @@ -62,8 +65,6 @@ class openHABSkill(MycroftSkill): self.targetTemperatureItemsDic = dict() #self.homekitHeatingCoolingModeDic = dict() - self.getTaggedItems() - def initialize(self): supported_languages = ["en-US", "it-IT", "de-DE", "es-ES"] @@ -72,6 +73,11 @@ class openHABSkill(MycroftSkill): self.log.warning("Unsupported language for " + self.name + ", shutting down skill.") self.shutdown() + if self.url is not None: + self.getTaggedItems() + else: + self.speak_dialog('GetItemsListError') + refresh_tagged_items_intent = IntentBuilder("RefreshTaggedItemsIntent").require("RefreshTaggedItemsKeyword").build() self.register_intent(refresh_tagged_items_intent, self.handle_refresh_tagged_items_intent) @@ -90,6 +96,8 @@ class openHABSkill(MycroftSkill): list_items_intent = IntentBuilder("ListItemsIntent").require("ListItemsKeyword").build() self.register_intent(list_items_intent, self.handle_list_items_intent) + self.settings_change_callback = self.handle_websettings_update + def getTaggedItems(self): #find all the items tagged Lighting and Switchable from openHAB #the labeled items are stored in dictionaries @@ -131,6 +139,9 @@ class openHABSkill(MycroftSkill): except KeyError: pass + except Exception: + LOGGER.error("Some issues with the command execution!") + self.speak_dialog('GetItemsListError') def findItemName(self, itemDictionary, messageItem): @@ -355,6 +366,11 @@ class openHABSkill(MycroftSkill): LOGGER.error("Item not found!") self.speak_dialog('ItemNotFoundError') + def handle_websettings_update(self): + if self.settings.get('host') is not None and self.settings.get('port') is not None: + self.url = "http://%s:%s/rest" % (self.settings.get('host'), self.settings.get('port')) + self.getTaggedItems() + def sendStatusToItem(self, ohItem, command): requestUrl = self.url+"/items/%s/state" % (ohItem) req = requests.put(requestUrl, data=command, headers=self.command_headers) diff --git a/settingsmeta.yaml b/settingsmeta.yaml index 9f8f9b1..1b9bd5b 100644 --- a/settingsmeta.yaml +++ b/settingsmeta.yaml @@ -1,4 +1,3 @@ -name: openHAB skillMetadata: sections: - name: Connection @@ -6,6 +5,7 @@ skillMetadata: - name: host label: openHAB server IP type: text + value: 127.0.0.1 - name: port label: openHAB server port type: number