From 3a757d8d3cafdaff85f7aa57c76bea6555f981c3 Mon Sep 17 00:00:00 2001 From: Marius Korte Date: Wed, 15 Jul 2020 21:22:35 +0200 Subject: [PATCH 1/3] Add support for shutters. Include en-us and de-de. Signed-off-by: Marius Korte (github: @Owlbertz) --- __init__.py | 39 ++++++++++++++++++++++++-- dialog/de-de/OpenClose.dialog | 1 + dialog/en-us/OpenClose.dialog | 1 + regex/de-de/openclose_command.rx | 1 + regex/en-us/openclose_command.rx | 1 + vocab/de-de/Close.voc | 1 + vocab/de-de/Open.voc | 1 + vocab/de-de/OpenCloseStatusKeyword.voc | 2 ++ vocab/en-us/Close.voc | 1 + vocab/en-us/Open.voc | 1 + vocab/en-us/OpenCloseStatusKeyword.voc | 2 ++ 11 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 dialog/de-de/OpenClose.dialog create mode 100644 dialog/en-us/OpenClose.dialog create mode 100644 regex/de-de/openclose_command.rx create mode 100644 regex/en-us/openclose_command.rx create mode 100644 vocab/de-de/Close.voc create mode 100644 vocab/de-de/Open.voc create mode 100644 vocab/de-de/OpenCloseStatusKeyword.voc create mode 100644 vocab/en-us/Close.voc create mode 100644 vocab/en-us/Open.voc create mode 100644 vocab/en-us/OpenCloseStatusKeyword.voc diff --git a/__init__.py b/__init__.py index 6981895..146f623 100644 --- a/__init__.py +++ b/__init__.py @@ -61,6 +61,7 @@ def __init__(self): #self.currentThermostatItemsDic = dict() self.targetTemperatureItemsDic = dict() #self.homekitHeatingCoolingModeDic = dict() + self.shutterItemsDic = dict() def initialize(self): @@ -98,6 +99,9 @@ def initialize(self): list_items_intent = IntentBuilder("ListItemsIntent").require("ListItemsKeyword").build() self.register_intent(list_items_intent, self.handle_list_items_intent) + openclose_status_intent = IntentBuilder("OpenClose_StatusIntent").require("Command").require("Item").build() + self.register_intent(openclose_status_intent, self.handle_openclose_status_intent) + self.settings_change_callback = self.handle_websettings_update def get_config(self, key): @@ -121,6 +125,7 @@ def getTaggedItems(self): self.currentThermostatItemsDic = {} self.targetTemperatureItemsDic = {} self.homekitHeatingCoolingModeDic = {} + self.shutterItemsDic = {} if self.url == None: LOGGER.error("Configuration needed!") @@ -147,6 +152,8 @@ def getTaggedItems(self): self.targetTemperatureItemsDic.update({json_response[x]['name']: json_response[x]['label']}) elif ("homekit:HeatingCoolingMode" in json_response[x]['tags']): self.homekitHeatingCoolingModeDic.update({json_response[x]['name']: json_response[x]['label']}) + elif ("Shutter" in json_response[x]['tags']): + self.shutterItemsDic.update({json_response[x]['name']: json_response[x]['label']}) else: pass else: @@ -190,15 +197,15 @@ def handle_list_items_intent(self, message): msg = msg.strip() + ' ' + self.getItemsFromDict("Current Humidity", self.currentHumItemsDic) + "\n" msg = msg.strip() + ' ' + self.getItemsFromDict("Thermostat", self.currentThermostatItemsDic) + "\n" msg = msg.strip() + ' ' + self.getItemsFromDict("Target Temperature", self.targetTemperatureItemsDic) + "\n" - msg = msg.strip() + ' ' + self.getItemsFromDict("Homekit Heating and Cooling", self.homekitHeatingCoolingModeDic) + msg = msg.strip() + ' ' + self.getItemsFromDict("Homekit Heating and Cooling", self.homekitHeatingCoolingModeDic) + "\n" + msg = msg.strip() + ' ' + self.getItemsFromDict("Shutters", self.shutterItemsDic) self.speak_dialog('FoundItems', {'items': msg.strip()}) def handle_refresh_tagged_items_intent(self, message): #to refresh the openHAB items labeled list we use an intent, we can ask Mycroft to make the refresh self.getTaggedItems() - dictLenght = str(len(self.lightingItemsDic) + len(self.switchableItemsDic) + len(self.currentTempItemsDic) + len(self.currentHumItemsDic) + len(self.currentThermostatItemsDic) + len(self.targetTemperatureItemsDic) + len(self.homekitHeatingCoolingModeDic)) - self.speak_dialog('RefreshTaggedItems', {'number_item': dictLenght}) + dictLenght = str(len(self.lightingItemsDic) + len(self.switchableItemsDic) + len(self.currentTempItemsDic) + len(self.currentHumItemsDic) + len(self.currentThermostatItemsDic) + len(self.targetTemperatureItemsDic) + len(self.homekitHeatingCoolingModeDic) + len(self.shutterItemsDic)) self.speak_dialog('RefreshTaggedItems', {'number_item': dictLenght}) def handle_onoff_status_intent(self, message): command = message.data.get('Command') @@ -228,6 +235,32 @@ def handle_onoff_status_intent(self, message): LOGGER.error("Item not found!") self.speak_dialog('ItemNotFoundError') + def handle_openclose_status_intent(self, message): + command = message.data.get('Command') + messageItem = message.data.get('Item') + + ohCommand = command + if self.voc_match(command, 'Close'): + ohCommand = "down" + elif self.voc_match(command, 'Open'): + ohCommand = "up" + + ohItem = self.findItemName(self.shutterItemsDic, messageItem) + + if ohItem != None: + statusCode = self.sendCommandToItem(ohItem, ohCommand.upper()) + if statusCode == 200: + self.speak_dialog('OpenClose', {'command': command, 'item': messageItem}) + elif statusCode == 404: + LOGGER.error("Some issues with the command execution!. Item not found") + self.speak_dialog('ItemNotFoundError') + else: + LOGGER.error("Some issues with the command execution!") + self.speak_dialog('CommunicationError') + else: + LOGGER.error("Item not found!") + self.speak_dialog('ItemNotFoundError') + def handle_dimmer_status_intent(self, message): command = message.data.get('DimmerStatusKeyword') messageItem = message.data.get('Item') diff --git a/dialog/de-de/OpenClose.dialog b/dialog/de-de/OpenClose.dialog new file mode 100644 index 0000000..950f824 --- /dev/null +++ b/dialog/de-de/OpenClose.dialog @@ -0,0 +1 @@ +{{command}} {{item}} \ No newline at end of file diff --git a/dialog/en-us/OpenClose.dialog b/dialog/en-us/OpenClose.dialog new file mode 100644 index 0000000..950f824 --- /dev/null +++ b/dialog/en-us/OpenClose.dialog @@ -0,0 +1 @@ +{{command}} {{item}} \ No newline at end of file diff --git a/regex/de-de/openclose_command.rx b/regex/de-de/openclose_command.rx new file mode 100644 index 0000000..cf8ca3c --- /dev/null +++ b/regex/de-de/openclose_command.rx @@ -0,0 +1 @@ +(?Pöffne|schließe) (?P.*) \ No newline at end of file diff --git a/regex/en-us/openclose_command.rx b/regex/en-us/openclose_command.rx new file mode 100644 index 0000000..0c73089 --- /dev/null +++ b/regex/en-us/openclose_command.rx @@ -0,0 +1 @@ +(?Popen|close) (?P.*) \ No newline at end of file diff --git a/vocab/de-de/Close.voc b/vocab/de-de/Close.voc new file mode 100644 index 0000000..91ae417 --- /dev/null +++ b/vocab/de-de/Close.voc @@ -0,0 +1 @@ +schließe \ No newline at end of file diff --git a/vocab/de-de/Open.voc b/vocab/de-de/Open.voc new file mode 100644 index 0000000..233adf4 --- /dev/null +++ b/vocab/de-de/Open.voc @@ -0,0 +1 @@ +öffne \ No newline at end of file diff --git a/vocab/de-de/OpenCloseStatusKeyword.voc b/vocab/de-de/OpenCloseStatusKeyword.voc new file mode 100644 index 0000000..eff387f --- /dev/null +++ b/vocab/de-de/OpenCloseStatusKeyword.voc @@ -0,0 +1,2 @@ +öffne +schließe \ No newline at end of file diff --git a/vocab/en-us/Close.voc b/vocab/en-us/Close.voc new file mode 100644 index 0000000..d4c336f --- /dev/null +++ b/vocab/en-us/Close.voc @@ -0,0 +1 @@ +close \ No newline at end of file diff --git a/vocab/en-us/Open.voc b/vocab/en-us/Open.voc new file mode 100644 index 0000000..ce4a72b --- /dev/null +++ b/vocab/en-us/Open.voc @@ -0,0 +1 @@ +open \ No newline at end of file diff --git a/vocab/en-us/OpenCloseStatusKeyword.voc b/vocab/en-us/OpenCloseStatusKeyword.voc new file mode 100644 index 0000000..3a49f36 --- /dev/null +++ b/vocab/en-us/OpenCloseStatusKeyword.voc @@ -0,0 +1,2 @@ +open +close \ No newline at end of file From a8a85bcef410fa115243bb371ec153bfe2a93295 Mon Sep 17 00:00:00 2001 From: Marius Korte Date: Wed, 15 Jul 2020 21:22:35 +0200 Subject: [PATCH 2/3] Add shutter support to README. Signed-off-by: Marius Korte (github: @Owlbertz) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 1be45c1..1ad3d03 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,9 @@ Group gThermostat "Main Thermostat" [ "gMainThermostat" ] Number MainThermostatCurrentTemp "Main Thermostat Current Temperature" (gMainThermostat) [ "CurrentTemperature" ] Number MainThermostatTargetTemperature "Main Thermostat Target Temperature" (gMainThermostat) [ "TargetTemperature" ] String MainThermostatHeatingCoolingMode "Main Thermostat Heating/Cooling Mode" (gMainThermostat) [ "homekit:HeatingCoolingMode" ] + +Rollershutter BedroomShutter "Bedroom Shutter" [ "Shutter" ] {mqtt="<[mosquitto:mysensors/SI/1/1/1/0/0:state:default]"} + ``` If items are modified in openHAB, a refresh in Mycroft is needed by the command: @@ -85,6 +88,7 @@ pip install -r requirements.txt * "Hey Mycroft, increase Main Thermostat by 1 degrees" * "Hey Mycroft, what is Main Thermostat is regulated to?" * "Hey Mycroft, how the Main Thermostat tuned to?" +* "Hey Mycroft, close bedroom shutter" ## Credits @mortommy From d12fb256c961233ddd5893925b1dcee0f0127f60 Mon Sep 17 00:00:00 2001 From: Marius Korte Date: Wed, 15 Jul 2020 21:22:35 +0200 Subject: [PATCH 3/3] Add shutter support to USAGE. Signed-off-by: Marius Korte (github: @Owlbertz) --- USAGE.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/USAGE.md b/USAGE.md index c7bd1f1..1e912a8 100644 --- a/USAGE.md +++ b/USAGE.md @@ -77,6 +77,8 @@ See the [Hue Emulation](https://www.openhab.org/addons/integrations/hueemulation Number MainThermostatCurrentTemp "Main Thermostat Current Temperature" (gMainThermostat) ["CurrentTemperature"] Number MainThermostatTargetTemperature "Main Thermostat Target Temperature" (gMainThermostat) ["TargetTemperature"] String MainThermostatHeatingCoolingMode "Main Thermostat Heating/Cooling Mode" (gMainThermostat) ["homekit:HeatingCoolingMode"] + + Rollershutter BedroomShutter "Bedroom Shutter" [ "Shutter" ] {mqtt="<[mosquitto:mysensors/SI/1/1/1/0/0:state:default]"} ``` If items are modified in openHAB, a refresh in Mycroft is needed by the voice command: @@ -133,6 +135,8 @@ Each item tag supports different command, here is the summary: | `CurrentHumidity` | what's | humidity | | | | | | `CurrentTemperature` | what's | temperature | +| `Shutter` | open | | +| | close | | With references to the above item definitions, here are an examples of working commands: @@ -155,6 +159,7 @@ With references to the above item definitions, here are an examples of working c - * "Hey Mycroft, increase Main Thermostat by 1 degrees" - * "Hey Mycroft, what is Main Thermostat is regulated to?" - * "Hey Mycroft, how the Main Thermostat tuned to?" +- * "Hey Mycroft, close bedroom shutter" ### Additional Comments