10000 Unable to constantly query bulb in loop · Issue #225 · python-kasa/python-kasa · GitHub
[go: up one dir, main page]

Skip to content
Unable to constantly query bulb in loop #225
@jasonlboggs

Description

@jasonlboggs

Hello there! Thank you for this library; it has been immensely useful in automating my smart home full of mostly TPLink devices.

I am having an issue simply querying and printing several of a bulb's properties using the current version of python-kasa. I checked the documentation and my code seems to be in line with the examples.

I'm running this code in a clean VM with only python-kasa installed using sudo pip3 install python-kasa
Ubuntu 20.04.3 LTS
Python 3.8.10
kasa, version 0.4.0

Code:

#!/usr/bin/env python3

import os
import time
import asyncio
from kasa import SmartBulb

bulb = SmartBulb('10.10.10.123')

count = 0
while True:
  count = count + 1
  asyncio.run(bulb.update())

  os.system('clear')

  print ('\n\n')
  print (f'\tCount: {count}\n')
  print (f'\tPower: {"On" if bulb.is_on else "Off"}')
  print (f'\tHue:   {bulb.hsv[0]}')
  print (f'\tSat:   {bulb.hsv[1]}')
  print (f'\tVol:   {bulb.hsv[2]}')
  print (f'\tTemp:  {bulb.color_temp}')

  time.sleep(1)

Error message:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/kasa/protocol.py", line 138, in _query
    return await asyncio.wait_for(
  File "/usr/lib/python3.8/asyncio/tasks.py", line 494, in wait_for
    return fut.result()
  File "/usr/local/lib/python3.8/dist-packages/kasa/protocol.py", line 99, in _execute_query
    packed_block_size = await self.reader.readexactly(self.BLOCK_SIZE)
  File "/usr/lib/python3.8/asyncio/streams.py", line 723, in readexactly
    await self._wait_for_data('readexactly')
  File "/usr/lib/python3.8/asyncio/streams.py", line 517, in _wait_for_data
    await self._waiter
RuntimeError: Task <Task pending name='Task-11' coro=<TPLinkSmartHomeProtocol._execute_query() running at /usr/local/lib/python3.8/dist-packages/kasa/protocol.py:99> cb=[_release_waiter(<Future pendi...0bdabfc10>()]>)() at /usr/lib/python3.8/asyncio/tasks.py:429]> got Future <Future pending> attached to a different loop

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./bulb.py", line 13, in <module>
    asyncio.run(bulb.update())
  File "/usr/lib/python3.8/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.8/dist-packages/kasa/smartdevice.py", line 302, in update
    self._last_update = await self.protocol.query(req)
  File "/usr/local/lib/python3.8/dist-packages/kasa/protocol.py", line 71, in query
    return await self._query(request, retry_count, timeout)
  File "/usr/local/lib/python3.8/dist-packages/kasa/protocol.py", line 142, in _query
    await self.close()
  File "/usr/local/lib/python3.8/dist-packages/kasa/protocol.py", line 115, in close
    writer.close()
  File "/usr/lib/python3.8/asyncio/streams.py", line 353, in close
    return self._transport.close()
  File "/usr/lib/python3.8/asyncio/selector_events.py", line 692, in close
    self._loop.call_soon(self._call_connection_lost, None)
  File "/usr/lib/python3.8/asyncio/base_events.py", line 719, in call_soon
    self._check_closed()
  File "/usr/lib/python3.8/asyncio/base_events.py", line 508, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed

At time of error, my counter (count) prints 2

Output of kasa --host 10.10.10.123 --bulb

== Desk Lamp - KL130(US) ==
	Host: 10.10.10.123
	Device state: ON

	== Generic information ==
	Time:         2021-10-01 07:55:57
	Hardware:     2.0
	Software:     1.0.12 Build 210329 Rel.141126
	MAC (rssi):   (sanitized) (-65)
	Location:     {'latitude': xx.xxxx, 'longitude': xx.xxxx}

	== Device specific information ==
	Brightness: 100
	Is dimmable: True
	Color temperature: 0
	Valid temperature range: ColorTempRange(min=2500, max=9000)
	HSV: HSV(hue=110, saturation=4, value=100)


	== Current State ==
	<EmeterStatus power=10.8 voltage=None current=None total=0.573>

On a side note, when I install(ed) python-kasa, there is an error with requests and idna:
sudo pip3 install python-kasa --force-reinstall
ERROR: requests 2.25.1 has requirement idna<3,>=2.5, but you'll have idna 3.2 which is incompatible.

Also, on my "prod" machine, I use the code from PR-117 installed and this code functions without issue, although a lot of newer HW versioned switches don't show up (out of scope).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0