diff --git a/Example Custom Broadcaster.indigoPlugin/Contents/Info.plist b/Example Custom Broadcaster.indigoPlugin/Contents/Info.plist index dd54d67..238f64c 100644 --- a/Example Custom Broadcaster.indigoPlugin/Contents/Info.plist +++ b/Example Custom Broadcaster.indigoPlugin/Contents/Info.plist @@ -3,9 +3,9 @@ PluginVersion - 2021.1.0 + 2022.1.0 ServerApiVersion - 2.5 + 3.0 IwsApiVersion 1.0.0 CFBundleDisplayName @@ -18,7 +18,7 @@ CFBundleURLName - http://wiki.indigodomo.com/doku.php?id=plugins:example_custom_broadcaster_1 + https://wiki.indigodomo.com/doku.php?id=plugins:example_custom_broadcaster_1 diff --git a/Example Custom Broadcaster.indigoPlugin/Contents/Server Plugin/plugin.py b/Example Custom Broadcaster.indigoPlugin/Contents/Server Plugin/plugin.py index 392a9c9..d2b8b71 100644 --- a/Example Custom Broadcaster.indigoPlugin/Contents/Server Plugin/plugin.py +++ b/Example Custom Broadcaster.indigoPlugin/Contents/Server Plugin/plugin.py @@ -1,13 +1,11 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- #################### -# Copyright (c) 2016, Perceptive Automation, LLC. All rights reserved. +# Copyright (c) 2022, Perceptive Automation, LLC. All rights reserved. # http://www.indigodomo.com import indigo -import os -import sys import random # Note the "indigo" module is automatically imported and made available inside @@ -22,14 +20,14 @@ def __init__(self, pluginId, pluginDisplayName, pluginVersion, pluginPrefs): ######################################## def startup(self): - self.debugLog(u"startup called -- broadcasting startup to all subscribers") + self.logger.debug("startup called -- broadcasting startup to all subscribers") # Broadcast to all listeners that we have started using the "broadcasterStarted" # broadcast key. Note the key is arbitrary and will just be used by the # subscribers in their subscribeToBroadcast() call. - indigo.server.broadcastToSubscribers(u"broadcasterStarted") + indigo.server.broadcastToSubscribers("broadcasterStarted") def shutdown(self): - self.debugLog(u"shutdown called -- broadcasting shutdown to all subscribers") + self.logger.debug("shutdown called -- broadcasting shutdown to all subscribers") # Broadcast to all listeners that we have shutdown using the "broadcasterShutdown" # broadcast key. indigo.server.broadcastToSubscribers(u"broadcasterShutdown") @@ -46,7 +44,7 @@ def runConcurrentThread(self): # boolean, dict, or list. For server performance please keep the data size # sent small (a few kilobytes at most), and try not to broadcast more frequently # than once per second. Bursts of higher data rates should be fine. - indigo.server.broadcastToSubscribers(u"colorChanged", color) + indigo.server.broadcastToSubscribers("colorChanged", color) self.sleep(3) except self.StopThread: - pass # Optionally catch the StopThread exception and do any needed cleanup. + pass # Optionally catch the StopThread exception and do any needed cleanup. diff --git a/Example Custom Subscriber.indigoPlugin/Contents/Info.plist b/Example Custom Subscriber.indigoPlugin/Contents/Info.plist index 86ecc45..bffbc3a 100644 --- a/Example Custom Subscriber.indigoPlugin/Contents/Info.plist +++ b/Example Custom Subscriber.indigoPlugin/Contents/Info.plist @@ -3,9 +3,9 @@ PluginVersion - 2021.1.0 + 2022.1.0 ServerApiVersion - 2.5 + 3.0 IwsApiVersion 1.0.0 CFBundleDisplayName @@ -18,7 +18,7 @@ CFBundleURLName - http://wiki.indigodomo.com/doku.php?id=plugins:example_custom_subscriber_1 + https://wiki.indigodomo.com/doku.php?id=plugins:example_custom_subscriber_1 diff --git a/Example Custom Subscriber.indigoPlugin/Contents/Server Plugin/plugin.py b/Example Custom Subscriber.indigoPlugin/Contents/Server Plugin/plugin.py index d3193e7..a689afd 100644 --- a/Example Custom Subscriber.indigoPlugin/Contents/Server Plugin/plugin.py +++ b/Example Custom Subscriber.indigoPlugin/Contents/Server Plugin/plugin.py @@ -1,15 +1,11 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- #################### -# Copyright (c) 2016, Perceptive Automation, LLC. All rights reserved. +# Copyright (c) 2022, Perceptive Automation, LLC. All rights reserved. # http://www.indigodomo.com import indigo -import os -import sys -import random - # Note the "indigo" module is automatically imported and made available inside # our global name space by the host process. @@ -25,25 +21,25 @@ def __init__(self, pluginId, pluginDisplayName, pluginVersion, pluginPrefs): ######################################## def startup(self): - self.debugLog(u"startup called -- subscribing to messages from Example Custom Broadcaster plugin") + self.debugLog("startup called -- subscribing to messages from Example Custom Broadcaster plugin") # The Example Custom Broadcaster plugin defines three broadcast keys: broadcasterStarted, # broadcasterShutdown, and colorChanged. We subscribe to notifications of all three. The # second argument is the broadcast key used by the broadcasting plugin, the third argument # is the name of our callback method. In this case they are the same, but they don't have # to be. - indigo.server.subscribeToBroadcast(kBroadcasterPluginId, u"broadcasterStarted", u"broadcasterStarted") - indigo.server.subscribeToBroadcast(kBroadcasterPluginId, u"broadcasterShutdown", u"broadcasterShutdown") - indigo.server.subscribeToBroadcast(kBroadcasterPluginId, u"colorChanged", u"colorChanged") + indigo.server.subscribeToBroadcast(kBroadcasterPluginId, "broadcasterStarted", "broadcasterStarted") + indigo.server.subscribeToBroadcast(kBroadcasterPluginId, "broadcasterShutdown", "broadcasterShutdown") + indigo.server.subscribeToBroadcast(kBroadcasterPluginId, "colorChanged", "colorChanged") def shutdown(self): - self.debugLog(u"shutdown called") + self.logger.debug("shutdown called") ######################################## def broadcasterStarted(self): - self.logger.info(u"received broadcasterStarted message") + self.logger.info("received broadcasterStarted message") def broadcasterShutdown(self): - self.logger.info(u"received broadcasterShutdown message") + self.logger.info("received broadcasterShutdown message") def colorChanged(self, arg): - self.logger.info(u"received colorChanged message: %s" % (arg)) + self.logger.info(f"received colorChanged message: {arg}") diff --git a/Example Database Traverse.indigoPlugin/Contents/Info.plist b/Example Database Traverse.indigoPlugin/Contents/Info.plist index 62ab1ca..d1f72e1 100644 --- a/Example Database Traverse.indigoPlugin/Contents/Info.plist +++ b/Example Database Traverse.indigoPlugin/Contents/Info.plist @@ -3,9 +3,9 @@ PluginVersion - 2021.1.0 + 2022.1.0 ServerApiVersion - 2.5 + 3.0 IwsApiVersion 1.0.0 CFBundleDisplayName @@ -18,7 +18,7 @@ CFBundleURLName - http://wiki.indigodomo.com/doku.php?id=plugins:example_db_traverse_1 + https://wiki.indigodomo.com/doku.php?id=plugins:example_db_traverse_1 diff --git a/Example Database Traverse.indigoPlugin/Contents/Server Plugin/plugin.py b/Example Database Traverse.indigoPlugin/Contents/Server Plugin/plugin.py index 072c7cf..e30fba1 100644 --- a/Example Database Traverse.indigoPlugin/Contents/Server Plugin/plugin.py +++ b/Example Database Traverse.indigoPlugin/Contents/Server Plugin/plugin.py @@ -6,9 +6,6 @@ import indigo -import os -import sys - # Note the "indigo" module is automatically imported and made available inside # our global name space by the host process. @@ -22,35 +19,35 @@ def __init__(self, pluginId, pluginDisplayName, pluginVersion, pluginPrefs): # IOM logging methods #################### def logListDivider(self, sectionName): - indigo.server.log(u"===================================================") - indigo.server.log(sectionName) + self.logger.info("===================================================") + self.logger.info(sectionName) self.logElemDivider() def logElemDivider(self): - indigo.server.log(u"---------------------------------------------------") + self.logger.info("---------------------------------------------------") def logBaseElem(self, elem, folders): - indigo.server.log(u" INSTANCE: " + elem.__class__.__name__) + self.logger.info(f" INSTANCE: {elem.__class__.__name__}") if len(elem.description) > 0: - indigo.server.log(u" DESCRIPTION: " + elem.description) + self.logger.info(f" DESCRIPTION: {elem.description}") if folders and elem.folderId != 0: - indigo.server.log(u" IN FOLDER: " + folders.getName(elem.folderId)) - indigo.server.log(u" REMOTE DISPLAY: " + str(elem.remoteDisplay)) + self.logger.info(f" IN FOLDER: {folders.getName(elem.folderId)}") + self.logger.info(f" REMOTE DISPLAY: {elem.remoteDisplay}") def logBaseFolder(self, elem): if len(elem.description) > 0: - indigo.server.log(u" DESCRIPTION: " + elem.description) - indigo.server.log(u" REMOTE DISPLAY: " + str(elem.remoteDisplay)) + self.logger.info(f" DESCRIPTION: {elem.description}") + self.logger.info(f" REMOTE DISPLAY: {elem.remoteDisplay}") ######################################## def logDeviceBase(self, elem): self.logBaseElem(elem, indigo.devices.folders) - indigo.server.log(u" PROTOCOL: " + str(elem.protocol)) - indigo.server.log(u" MODEL NAME: " + str(elem.model)) - indigo.server.log(u" ADDRESS: " + str(elem.address)) + self.logger.info(f" PROTOCOL: {elem.protocol}") + self.logger.info(f" MODEL NAME: {elem.model}") + self.logger.info(f" ADDRESS: {elem.address}") if elem.protocol == indigo.kProtocol.Insteon and elem.buttonGroupCount > 0: - indigo.server.log(u" BUTTON COUNT: " + str(elem.buttonGroupCount)) - indigo.server.log(u" LAST CHANGED: " + str(elem.lastChanged)) + self.logger.info(f" BUTTON COUNT: {elem.buttonGroupCount}") + self.logger.info(f" LAST CHANGED: {elem.lastChanged}") supports = "" if elem.supportsAllLightsOnOff: @@ -61,60 +58,60 @@ def logDeviceBase(self, elem): supports += "StatusRequest " if len(supports) == 0: supports = "--" - indigo.server.log(u" SUPPORTS: " + supports) + self.logger.info(f" SUPPORTS: {supports}") #################### def logDeviceSensor(self, elem): self.logDeviceBase(elem) - indigo.server.log(u" IS ON: " + str(elem.onState)) + self.logger.info(f" IS ON: {elem.onState}") #################### def logDeviceRelay(self, elem): self.logDeviceBase(elem) - indigo.server.log(u" IS ON: " + str(elem.onState)) + self.logger.info(f" IS ON: {elem.onState}") #################### def logDeviceDimmer(self, elem): self.logDeviceRelay(elem) - indigo.server.log(u" BRIGHTNESS: " + str(elem.brightness)) + self.logger.info(f" BRIGHTNESS: {elem.brightness}") #################### def logDeviceMultiIO(self, elem): self.logDeviceBase(elem) if elem.analogInputCount > 0: - indigo.server.log(u" ANALOG INPUTS: " + str(elem.analogInputs)) + self.logger.info(f" ANALOG INPUTS: {elem.analogInputs}") if elem.binaryInputCount > 0: - indigo.server.log(u" BINARY INPUTS: " + str(elem.binaryInputs)) + self.logger.info(f" BINARY INPUTS: {elem.binaryInputs}") if elem.sensorInputCount > 0: - indigo.server.log(u" SENSOR INPUTS: " + str(elem.sensorInputs)) + self.logger.info(f" SENSOR INPUTS: {elem.sensorInputs}") if elem.binaryOutputCount > 0: - indigo.server.log(u" BINARY OUTPUTS: " + str(elem.binaryOutputs)) + self.logger.info(f" BINARY OUTPUTS: {elem.binaryOutputs}") #################### def logDeviceSprinkler(self, elem): self.logDeviceBase(elem) - indigo.server.log(u" ZONE COUNT: " + str(elem.zoneCount)) - indigo.server.log(u" ZONE NAMES: " + str(elem.zoneNames)) - indigo.server.log(u" MAX DURATIONS: " + str(elem.zoneMaxDurations)) + self.logger.info(f" ZONE COUNT: {elem.zoneCount}") + self.logger.info(f" ZONE NAMES: {elem.zoneNames}") + self.logger.info(f" MAX DURATIONS: {elem.zoneMaxDurations}") if len(elem.zoneScheduledDurations) > 0: - indigo.server.log(u" SCHEDULED DURA.: " + str(elem.zoneScheduledDurations)) - if elem.activeZone >= 0: - indigo.server.log(u" ACTIVE ZONE: " + elem.zoneNames[elem.activeZone]) + self.logger.info(f" SCHEDULED DURA.: {elem.zoneScheduledDurations}") + if elem.activeZone: + self.logger.info(f" ACTIVE ZONE: {elem.zoneNames[elem.activeZone]}") #################### def logDeviceThermostat(self, elem): self.logDeviceBase(elem) - indigo.server.log(u" HVAC MODE: " + str(elem.hvacMode)) - indigo.server.log(u" FAN MODE: " + str(elem.fanMode)) - indigo.server.log(u" COOL SETPOINT: " + str(elem.coolSetpoint)) - indigo.server.log(u" HEAT SETPOINT: " + str(elem.heatSetpoint)) - indigo.server.log(u" TEMP COUNT: " + str(elem.temperatureSensorCount)) - indigo.server.log(u" TEMPS: " + str(elem.temperatures)) - indigo.server.log(u" HUMIDITY COUNT: " + str(elem.humiditySensorCount)) - indigo.server.log(u" HUMIDITY: " + str(elem.humidities)) - indigo.server.log(u" COOL IS ON: " + str(elem.coolIsOn)) - indigo.server.log(u" HEAT IS ON: " + str(elem.heatIsOn)) - indigo.server.log(u" FAN IS ON: " + str(elem.fanIsOn)) + self.logger.info(f" HVAC MODE: {elem.hvacMode}") + self.logger.info(f" FAN MODE: {elem.fanMode}") + self.logger.info(f" COOL SETPOINT: {elem.coolSetpoint}") + self.logger.info(f" HEAT SETPOINT: {elem.heatSetpoint}") + self.logger.info(f" TEMP COUNT: {elem.temperatureSensorCount}") + self.logger.info(f" TEMPS: {elem.temperatures}") + self.logger.info(f" HUMIDITY COUNT: {elem.humiditySensorCount}") + self.logger.info(f" HUMIDITY: {elem.humidities}") + self.logger.info(f" COOL IS ON: {elem.coolIsOn}") + self.logger.info(f" HEAT IS ON: {elem.heatIsOn}") + self.logger.info(f" FAN IS ON: {elem.fanIsOn}") #################### def logDevice(self, elem): @@ -136,88 +133,91 @@ def logDevice(self, elem): ######################################## def logEventBase(self, elem, folders): self.logBaseElem(elem, folders) - indigo.server.log(u" ENABLED: " + str(elem.enabled)) - indigo.server.log(u" UPLOAD: " + str(elem.upload)) + self.logger.info(f" ENABLED: {elem.enabled}") + self.logger.info(f" UPLOAD: {elem.upload}") if elem.suppressLogging: - indigo.server.log(u"SUPPRESS LOGGING: True") - # ToDo: Need to add conditional tree and action list traversal here. + self.logger.info("SUPPRESS LOGGING: True") + # TODO: Need to add conditional tree and action list traversal here. #################### def logTrigger(self, elem): self.logEventBase(elem, indigo.triggers.folders) if isinstance(elem, indigo.DeviceStateChangeTrigger): - indigo.server.log(u" DEVICE: " + str(indigo.devices.getName(elem.deviceId))) - indigo.server.log(u" CHANGE TYPE: " + str(elem.stateChangeType)) - indigo.server.log(u" SELECTOR KEY: " + str(elem.stateSelector)) + self.logger.info(f" DEVICE: {indigo.devices.getName(elem.deviceId)}") + self.logger.info(f" CHANGE TYPE: {elem.stateChangeType}") + self.logger.info(f" SELECTOR KEY: {elem.stateSelector}") if elem.stateSelectorIndex > 0: - indigo.server.log(u" SELECTOR INDEX: " + str(elem.stateSelectorIndex)) + self.logger.info(f" SELECTOR INDEX: {elem.stateSelectorIndex}") if len(elem.stateValue) > 0: - indigo.server.log(u" STATE VALUE: " + str(elem.stateValue)) + self.logger.info(f" STATE VALUE: {elem.stateValue}") elif isinstance(elem, indigo.VariableValueChangeTrigger): - indigo.server.log(u" VARIABLE: " + str(indigo.variables.getName(elem.variableId))) - indigo.server.log(u" CHANGE TYPE: " + str(elem.variableChangeType)) + self.logger.info(f" VARIABLE: {indigo.variables.getName(elem.variableId)}") + self.logger.info(f" CHANGE TYPE: {elem.variableChangeType}") if len(elem.variableValue) > 0: - indigo.server.log(u" VARIABLE VALUE: " + str(elem.variableValue)) + self.logger.info(f" VARIABLE VALUE: {elem.variableValue}") elif isinstance(elem, indigo.InsteonCommandReceivedTrigger): - indigo.server.log(u" INSTEON COMMAND: " + str(elem.command)) - indigo.server.log(u" SOURCE TYPE: " + str(elem.commandSourceType)) + self.logger.info(f" INSTEON COMMAND: {elem.command}") + self.logger.info(f" SOURCE TYPE: {elem.commandSourceType}") if elem.commandSourceType == indigo.kDeviceSourceType.DeviceId: - indigo.server.log(u" DEVICE: " + str(indigo.devices.getName(elem.deviceId))) - indigo.server.log(u" GROUP NUM: " + str(elem.buttonOrGroup)) + self.logger.info(f" DEVICE: {indigo.devices.getName(elem.deviceId)}") + self.logger.info(f" GROUP NUM: {elem.buttonOrGroup}") elif isinstance(elem, indigo.X10CommandReceivedTrigger): - indigo.server.log(u" X10 COMMAND: " + str(elem.command)) - indigo.server.log(u" SOURCE TYPE: " + str(elem.commandSourceType)) + self.logger.info(f" X10 COMMAND: {elem.command}") + self.logger.info(f" SOURCE TYPE: {elem.commandSourceType}") if elem.commandSourceType == indigo.kDeviceSourceType.DeviceId: - indigo.server.log(u" DEVICE: " + str(indigo.devices.getName(elem.deviceId))) + self.logger.info(f" DEVICE: {indigo.devices.getName(elem.deviceId)}") elif elem.commandSourceType == indigo.kDeviceSourceType.RawAddress: - indigo.server.log(u" ADDRESS: " + str(elem.address)) + self.logger.info(f" ADDRESS: {elem.address}") elif elem.command == indigo.kX10Cmd.AvButtonPressed: - indigo.server.log(u" A/V BUTTON: " + str(elem.avButton)) + self.logger.info(f" A/V BUTTON: {elem.avButton}") elif isinstance(elem, indigo.EmailReceivedTrigger): - indigo.server.log(u" EMAIL FILTER: " + str(elem.emailFilter)) + self.logger.info(f" EMAIL FILTER: {elem.emailFilter}") if elem.emailFilter == indigo.kEmailFilter.MatchEmailFields: - indigo.server.log(u" FROM FILTER: " + str(elem.emailFrom)) - indigo.server.log(u" SUBJECT FILTER: " + str(elem.emailSubject)) + self.logger.info(f" FROM FILTER: {elem.emailFrom}") + self.logger.info(f" SUBJECT FILTER: {elem.emailSubject}") #################### def logSchedule(self, elem): self.logEventBase(elem, indigo.schedules.folders) - indigo.server.log(u" DATE TYPE: " + str(elem.dateType)) - indigo.server.log(u" TIME TYPE: " + str(elem.timeType)) + self.logger.info(f" DATE TYPE: {elem.dateType}") + self.logger.info(f" TIME TYPE: {elem.timeType}") if elem.dateType == indigo.kDateType.Absolute and elem.timeType == indigo.kTimeType.Absolute: - indigo.server.log(u" DATE AND TIME: " + str(elem.absoluteDateTime)) + self.logger.info(f" DATE AND TIME: {elem.absoluteDateTime}") elif elem.dateType == indigo.kDateType.Absolute: - indigo.server.log(u" ABSOLUTE DATE: " + str(elem.absoluteDate.date())) + self.logger.info(f" ABSOLUTE DATE: {elem.absoluteDate.date()}") elif elem.timeType == indigo.kTimeType.Absolute: - indigo.server.log(u" ABSOLUTE TIME: " + str(elem.absoluteTime.time())) + self.logger.info(f" ABSOLUTE TIME: {elem.absoluteTime.time()}") if elem.sunDelta > 0: - indigo.server.log(u" SUN DELTA: " + str(elem.sunDelta) + " seconds") + self.logger.info(f" SUN DELTA: {elem.sunDelta} seconds") if elem.randomizeBy > 0: - indigo.server.log(u" RANDOMIZE BY: " + str(elem.randomizeBy) + " seconds") - indigo.server.log(u" NEXT EXECUTION: " + str(elem.nextExecution)) - # ToDo: Need to log additional properties after they are implemented here. + self.logger.info(f" RANDOMIZE BY: {elem.randomizeBy} seconds") + try: + self.logger.info(f" NEXT EXECUTION: {elem.nextExecution}") + except: + self.logger.info(f" NEXT EXECUTION: - none scheduled -") + # TODO: Need to log additional properties after they are implemented here. #################### def logActionGroup(self, elem): self.logBaseElem(elem, indigo.actionGroups.folders) - # ToDo: Need to add action list traversal here. + # TODO: Need to add action list traversal here. #################### def logControlPage(self, elem): self.logBaseElem(elem, indigo.controlPages.folders) - indigo.server.log(u" HIDE TABBAR: " + str(elem.hideTabBar)) + self.logger.info(f" HIDE TABBAR: {elem.hideTabBar}") if len(elem.backgroundImage) > 0: - indigo.server.log(u"BACKGROUND IMAGE: " + str(elem.backgroundImage)) - # ToDo: Need to log additional properties after they are implemented here. - # ToDo: Need to add control list traversal here. + self.logger.info(f"BACKGROUND IMAGE: {elem.backgroundImage}") + # TODO: Need to log additional properties after they are implemented here. + # TODO: Need to add control list traversal here. #################### def logVariable(self, elem): self.logBaseElem(elem, indigo.variables.folders) - indigo.server.log(u" VALUE: " + str(elem.value)) + self.logger.info(f" VALUE: {elem.value}") if elem.readOnly: - indigo.server.log(u" READ ONLY: True") + self.logger.info(" READ ONLY: True") ######################################## # Actions defined in MenuItems.xml: @@ -225,61 +225,61 @@ def logVariable(self, elem): def traverseDevices(self): self.logListDivider("DEVICES") for folder in indigo.devices.folders: - indigo.server.log(u" FOLDER: " + folder.name) + self.logger.info(f" FOLDER: {folder.name}") self.logBaseFolder(folder) for elem in indigo.devices: self.logElemDivider() - indigo.server.log(u" DEVICE: " + elem.name) + self.logger.info(f" DEVICE: {elem.name}") self.logDevice(elem) def traverseTriggers(self): self.logListDivider("TRIGGERS") for folder in indigo.triggers.folders: - indigo.server.log(u" FOLDER: " + folder.name) + self.logger.info(f" FOLDER: {folder.name}") self.logBaseFolder(folder) for elem in indigo.triggers: self.logElemDivider() - indigo.server.log(u" TRIGGER: " + elem.name) + self.logger.info(f" TRIGGER: {elem.name}") self.logTrigger(elem) def traverseSchedules(self): self.logListDivider("SCHEDULES") for folder in indigo.schedules.folders: - indigo.server.log(u" FOLDER: " + folder.name) + self.logger.info(f" FOLDER: {folder.name}") self.logBaseFolder(folder) for elem in indigo.schedules: self.logElemDivider() - indigo.server.log(u" SCHEDULE: " + elem.name) + self.logger.info(f" SCHEDULE: {elem.name}") self.logSchedule(elem) def traverseActionGroups(self): self.logListDivider("ACTION GROUPS") for folder in indigo.actionGroups.folders: - indigo.server.log(u" FOLDER: " + folder.name) + self.logger.info(f" FOLDER: {folder.name}") self.logBaseFolder(folder) for elem in indigo.actionGroups: self.logElemDivider() - indigo.server.log(u" ACTION GROUP: " + elem.name) + self.logger.info(f" ACTION GROUP: {elem.name}") self.logActionGroup(elem) def traverseControlPages(self): self.logListDivider("CONTROL PAGES") for folder in indigo.controlPages.folders: - indigo.server.log(u" FOLDER: " + folder.name) + self.logger.info(f" FOLDER: {folder.name}") self.logBaseFolder(folder) for elem in indigo.controlPages: self.logElemDivider() - indigo.server.log(u" CONTROL PAGE: " + elem.name) + self.logger.info(f" CONTROL PAGE: {elem.name}") self.logControlPage(elem) def traverseVariables(self): self.logListDivider("VARIABLES") for folder in indigo.variables.folders: - indigo.server.log(u" FOLDER: " + folder.name) + self.logger.info(f" FOLDER: {folder.name}") self.logBaseFolder(folder) for elem in indigo.variables: self.logElemDivider() - indigo.server.log(u" VARIABLE: " + elem.name) + self.logger.info(f" VARIABLE: {elem.name}") self.logVariable(elem) #################### @@ -290,4 +290,3 @@ def traverseDatabase(self): self.traverseActionGroups() self.traverseControlPages() self.traverseVariables() - diff --git a/Example Device - Energy Meter.indigoPlugin/Contents/Info.plist b/Example Device - Energy Meter.indigoPlugin/Contents/Info.plist index 154ed10..3d601d3 100644 --- a/Example Device - Energy Meter.indigoPlugin/Contents/Info.plist +++ b/Example Device - Energy Meter.indigoPlugin/Contents/Info.plist @@ -3,9 +3,9 @@ PluginVersion - 2021.1.0 + 2022.1.0 ServerApiVersion - 2.5 + 3.0 IwsApiVersion 1.0.0 CFBundleDisplayName @@ -18,7 +18,7 @@ CFBundleURLName - http://wiki.indigodomo.com/doku.php?id=plugins:example_dev_energymeter_1 + https://wiki.indigodomo.com/doku.php?id=plugins:example_dev_energymeter_1 diff --git a/Example Device - Energy Meter.indigoPlugin/Contents/Server Plugin/Actions.xml b/Example Device - Energy Meter.indigoPlugin/Contents/Server Plugin/Actions.xml index ca0daff..0e044e2 100644 --- a/Example Device - Energy Meter.indigoPlugin/Contents/Server Plugin/Actions.xml +++ b/Example Device - Energy Meter.indigoPlugin/Contents/Server Plugin/Actions.xml @@ -12,7 +12,7 @@ Set Backlight Brightness - setBacklightBrightness + set_backlight_brightness