Metadata-Version: 2.4
Name: pykongke
Version: 3.0.0
Summary: Python library for interfacing with konke smart appliances
Home-page: https://github.com/HXHuangXiang/pykongke
Author: HXHuangXiang
Author-email: 
License: GPLv3
Keywords: konke,iot
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pycryptodome>=3.6.0
Provides-Extra: test
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-asyncio; extra == "test"
Dynamic: author
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# PyKongke

This is a maintained fork of KonkeIO for controlling Konke LAN smart devices.
Original project: `jedmeng/python-konkeio`. This fork keeps the GPLv3 license and continues maintenance under the `pykongke` package name.
This library (and its accompanying cli tool) is used to interface with
Konke remote-control devices.

## Supported Devices
Since some of Konke's device does not have a clear model, I used internal code to identify it.

### Socket
- Smart Plug K `k1`
- K2 / K2 Pro `k2`
- Mini K / Mini Pro `minik`

### Power Strip
- The normal one `micmul`
- The Standing one with USB support `mul`

### Light
- KLight (LED with RGB color) `klight`
- KBulb `kbulb`

## Install

```bash
pip install pykongke
```

Python 3.7+ is required.

For development and tests:

```bash
python -m pip install -e ".[test]"
python -m pytest -q -s
```

## API Reference

### classes and methods
- K1(ip)
    - is_online
    - status
    - update()
    - turn_on()
    - turn_off()
- K2(ip)
    - is_online
    - status
    - update()
    - turn_on()
    - turn_off()
    - turn_on_usb()
    - turn_off_usb()
    - turn_on_light()
    - turn_off_light()
    - get_power()
    - is_support_ir()
    - ir_learn()
    - ir_quit()
    - ir_emit()
    - ir_remove()
    - ir_remove_group()
    - is_support_rf()
    - rf_learn()
    - rf_quit()
    - rf_emit()
    - rf_remove()
    - rf_remove_group()
- MiniK(ip)
    - is_online
    - status
    - update()
    - turn_on()
    - turn_off()
    - is_support_ir()
    - ir_learn()
    - ir_quit()
    - ir_emit()
    - ir_remove()
    - ir_remove_group()
- Mul(ip)
    - is_online
    - status[]
    - usb_status[]
    - update()
    - turn_on(index)
    - turn_off(index)
    - turn_on_all()
    - turn_off_all()
    - turn_on_usb(index)
    - turn_off_usb(index)
- MicMul(ip)
    - is_online
    - status[]
    - update()
    - turn_on(index)
    - turn_off(index)
    - turn_on_all()
    - turn_off_all()
- KLight(ip)
    - is_online
    - status
    - color
    - brightness
    - update()
    - turn_on()
    - turn_off()
    - set_color()
    - set_brightness()
- KBulb
    - is_online
    - status
    - ct
    - brightness
    - update()
    - turn_on()
    - turn_off()
    - set_ct()
    - set_brightness()

Demo:

```python
import asyncio
from pykongke import K2


async def main():
    k2 = K2("192.168.0.222")
    await k2.update()

    if not k2.is_online:
        print("switch is off line")
        return

    if k2.status == 'open':
        await k2.turn_off()
    elif k2.status == 'close':
        await k2.turn_on()


asyncio.run(main())
```

## CLI Command

```bash
usage: pykongke [action] [device] [address] [value] [--verbose]

Supported devices and actions supported by each device:
global: search help
k2:     get_status turn_[on/off] get_usb_status turn_[on/off]_usb get_light_status turn_[on/off]_light get_power
minik:  get_status turn_[on/off] learn_ir emit_ir remove_ir
micmul: get_count get_status_all get_status[1/2/3/4] turn_[on/off]_all turn_[on/off]_socket[1/2/3/4]
mul:    get_count get_status_all get_status[1/2/3] get_usb_count get_usb_status_all get_usb_status[1/2]
        turn_[on/off]_all turn_[on/off]_socket[1/2/3] turn_[on/off]_usb[1/2]
klight: get_status get_brightness get_color turn_[on/off] set_brightness set_color
kbulb:  get_status get_brightness get_ct turn_[on/off] set_brightness set_ct

* each action starts with 'set_' must provide a value parameter
value format:
color:      r,g,b
ct:         2700-6500
brightness: 0-100

example:
pykongke search
pykongke turn_on minik 192.168.0.64
pykongke get_status minik 192.168.0.64
pykongke get_power k2 192.168.0.64
pykongke turn_on_usb k2 192.168.0.64
pykongke turn_off_light k2 192.168.0.64
pykongke get_count micmul 192.168.0.64
pykongke turn_on_socket3 micmul 192.168.0.64
pykongke get_status2 mul 192.168.0.64
pykongke turn_off_all mul 192.168.0.64
pykongke get_brightness klight 192.168.0.64
pykongke set_color klight 192.168.0.64 255,255,0
pykongke set_ct kbulb 192.168.0.64 3400
pykongke turn_off kbulb 192.168.0.64
```

The CLI talks to devices over local UDP. Make sure the host running the command is on the same LAN as the device and can send/receive UDP packets on port 27431.
