如何解决带有 OctoPrint 的 Python Kasa试图用一个变量来改变和控制两个对象
发布我的 Tpautoshutdown 插件后,我被要求开发对智能条的支持,我正在尝试这样做,但为了保持我的代码简单,我想使用一个变量 self.conn
来保存我的对象打电话。但是我有两个类,一个导入为 wallPlug
,另一个为 wallStrip
。启动时,我使用 type
内的 .yaml
根据预先保存的设置建立连接。
if self._settings.get(["type"]) == "smartPlug":
try:
self.conn = wallPlug(self._settings.get(["url"]))
self.conn.update()
self._logger.info(self.conn.get_plug_information())
except:
self._logger.info("+++++++++++ Can't connect to plug +++++++++++++")
elif self._settings.get(["type"]) == "smartStrip":
try:
self.conn = wallStrip(self._settings.get(["url"]))
self.conn.update()
self._logger.info(self.conn.get_plug_information())
except:
self._logger.info("+++++++++++ Can't connect to strip +++++++++++++")
else:
self._logger("+++++++++++ Aborted on Startup connection +++++++++++")
这随后会初始设置变量 self.conn
。但是,稍后如果用户将设置更改为 smartStrip,我希望能够明显地调用 self.conn
成为 wallStrip()
。通常在这种情况下,我只会覆盖它可以调用 self.conn = wallStrip()
但是,这似乎不起作用,服务器需要重新启动。
def on_settings_save(self,data):
try:
self._logger.info(data)
if data["type"] == "smartPlug":
self.conn = wallPlug(data["url"])
self.conn.update_two()
elif data["type"] == "smartStrip":
self.conn = wallStrip(data["url"])
self.conn.update_two()
# if data["url"] != self._settings.get(["url"]):
# self.conn.__init__(data["url"])
# self.conn.update_two()
except:
self._logger.warning("Error updating connection with the smart sockets within on_settings_save")
octoprint.plugin.SettingsPlugin.on_settings_save(self,data)
这就是我想要做的,但它不起作用。
我使用 update_two()
而不是 update()
因为一个是 aync.run
而另一个是 async.create_task()
def update(self):
asyncio.run(self.device.update())
def update_two(self):
asyncio.create_task(self.device.update())
希望这能解释我的问题 如果方便查看我的项目,这是分支的链接
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。