Python Tibber 模块只返回最新值,而不是循环

问题描述 投票:0回答:2

最终我想将一个值写入数据库。

我找到了一个脚本来输出所需的数据。 然而,它确实在循环中返回它 - 但每次触发脚本时我只需要一个值,而不是循环。

import tibber

account = tibber.Account("tokenstring")
home = account.homes[0]


@home.event("live_measurement")
async def process_data(
        data):
    print(data.power)


home.start_live_feed(user_agent="Homey/10.0.0")

print(home.event("live_measurement"))`

这将在循环中输出值 - 但每次代码运行时我只需要一个值。

救命!

python asynchronous
2个回答
1
投票

设法实现它并将其放入可调用函数中。

def get_tibber():
    account = tibber.Account(f"{TIBBER_API_KEY}")
    home = account.homes[0]

    @home.event("live_measurement")
    async def process_data(data):
        pass

    def my_exit_function(live_measurement_data):
        global cons
        cons = live_measurement_data.power
        return cons != 0

    # Now start retrieving live measurements
    home.start_live_feed(exit_condition=my_exit_function,
                         user_agent="UserAgent/0.0.1")
    return cons

0
投票

如果使用默认参数调用,

start_live_feed
函数将启动无限循环。换句话说,调用此函数后,Python 将不会运行任何代码。

该函数接受一个参数

exit_condition
。这是一个在每次接收到数据时运行after的函数。如果它返回一个真值,循环将结束,Python 将继续运行
home.start_live_feed(...)
行之后的内容。

因此,要运行一次,您只需传递一个始终返回 True 的函数即可。

import tibber

account = tibber.Account(TOKEN_STRING)
home = account.homes[0]


@home.event("live_measurement")
async def process_data(data):
    # Database storing logic here

home.start_live_feed(user_agent="Homey/10.0.0", exit_condition=lambda data: True)
© www.soinside.com 2019 - 2024. All rights reserved.