script.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:homeassistant 作者: NAStools 项目源码 文件源码
def async_run(self, variables: Optional[Sequence]=None) -> None:
        """Run script.

        This method is a coroutine.
        """
        if self._cur == -1:
            self._log('Running script')
            self._cur = 0

        # Unregister callback if we were in a delay but turn on is called
        # again. In that case we just continue execution.
        self._async_remove_listener()

        for cur, action in islice(enumerate(self.sequence), self._cur,
                                  None):

            if CONF_DELAY in action:
                # Call ourselves in the future to continue work
                @asyncio.coroutine
                def script_delay(now):
                    """Called after delay is done."""
                    self._async_unsub_delay_listener = None
                    self.hass.async_add_job(self.async_run(variables))

                delay = action[CONF_DELAY]

                if isinstance(delay, template.Template):
                    delay = vol.All(
                        cv.time_period,
                        cv.positive_timedelta)(
                            delay.async_render(variables))

                self._async_unsub_delay_listener = \
                    async_track_point_in_utc_time(
                        self.hass, script_delay,
                        date_util.utcnow() + delay)
                self._cur = cur + 1
                if self._change_listener:
                    self.hass.async_add_job(self._change_listener)
                return

            elif CONF_CONDITION in action:
                if not self._async_check_condition(action, variables):
                    break

            elif CONF_EVENT in action:
                self._async_fire_event(action)

            else:
                yield from self._async_call_service(action, variables)

        self._cur = -1
        self.last_action = None
        if self._change_listener:
            self.hass.async_add_job(self._change_listener)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号