AI Newsletter Digest improvements: fixed QP soft line break decoding, URL extraction, and content cleaning
This commit is contained in:
151
skills/mijia/scripts/lamp_cli.py
Normal file
151
skills/mijia/scripts/lamp_cli.py
Normal file
@@ -0,0 +1,151 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Desk lamp control CLI for Mijia devices."""
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
from mijiaAPI import mijiaAPI, mijiaDevice
|
||||
|
||||
# Get device ID from environment variable
|
||||
LAMP_DID = os.environ.get("MIJIA_LAMP_DID")
|
||||
|
||||
if not LAMP_DID:
|
||||
print("Error: MIJIA_LAMP_DID environment variable not set")
|
||||
print("Please set it with: export MIJIA_LAMP_DID='your_device_id'")
|
||||
sys.exit(1)
|
||||
|
||||
def get_lamp(api: mijiaAPI) -> mijiaDevice:
|
||||
"""Get the lamp device."""
|
||||
return mijiaDevice(api, did=LAMP_DID)
|
||||
|
||||
def cmd_on(args, api):
|
||||
"""Turn on the lamp."""
|
||||
lamp = get_lamp(api)
|
||||
lamp.on = True
|
||||
print("Lamp turned on")
|
||||
|
||||
def cmd_off(args, api):
|
||||
"""Turn off the lamp."""
|
||||
lamp = get_lamp(api)
|
||||
lamp.on = False
|
||||
print("Lamp turned off")
|
||||
|
||||
def cmd_toggle(args, api):
|
||||
"""Toggle lamp power."""
|
||||
lamp = get_lamp(api)
|
||||
lamp.run_action('toggle')
|
||||
print("Lamp toggled")
|
||||
|
||||
def cmd_status(args, api):
|
||||
"""Show lamp status."""
|
||||
lamp = get_lamp(api)
|
||||
on_status = lamp.get('on')
|
||||
brightness = lamp.get('brightness')
|
||||
color_temp = lamp.get('color-temperature')
|
||||
|
||||
status = "On" if on_status else "Off"
|
||||
print(f"Status: {status}")
|
||||
print(f"Brightness: {brightness}%")
|
||||
print(f"Color Temperature: {color_temp}K")
|
||||
|
||||
def cmd_brightness(args, api):
|
||||
"""Set brightness."""
|
||||
lamp = get_lamp(api)
|
||||
lamp.brightness = args.value
|
||||
print(f"Brightness set to {args.value}%")
|
||||
|
||||
def cmd_temp(args, api):
|
||||
"""Set color temperature."""
|
||||
lamp = get_lamp(api)
|
||||
lamp.color_temperature = args.value
|
||||
print(f"Color temperature set to {args.value}K")
|
||||
|
||||
def cmd_mode(args, api):
|
||||
"""Set lighting mode."""
|
||||
modes = {
|
||||
'reading': 0,
|
||||
'computer': 1,
|
||||
'night': 2,
|
||||
'antiblue': 3,
|
||||
'work': 4,
|
||||
'candle': 5,
|
||||
'twinkle': 6
|
||||
}
|
||||
mode_names = {
|
||||
0: 'Reading',
|
||||
1: 'Computer',
|
||||
2: 'Night Reading',
|
||||
3: 'Anti-blue Light',
|
||||
4: 'Work',
|
||||
5: 'Candle',
|
||||
6: 'Twinkle'
|
||||
}
|
||||
|
||||
if args.value in modes:
|
||||
mode_val = modes[args.value]
|
||||
else:
|
||||
try:
|
||||
mode_val = int(args.value)
|
||||
if mode_val not in mode_names:
|
||||
raise ValueError()
|
||||
except ValueError:
|
||||
print(f"Invalid mode: {args.value}")
|
||||
print("Available modes: reading, computer, night, antiblue, work, candle, twinkle (0-6)")
|
||||
sys.exit(1)
|
||||
|
||||
lamp = get_lamp(api)
|
||||
lamp.set('mode', mode_val)
|
||||
print(f"Mode set to {mode_names[mode_val]}")
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Desk Lamp Control CLI')
|
||||
subparsers = parser.add_subparsers(dest='command', help='Commands')
|
||||
|
||||
# on
|
||||
subparsers.add_parser('on', help='Turn on the lamp')
|
||||
|
||||
# off
|
||||
subparsers.add_parser('off', help='Turn off the lamp')
|
||||
|
||||
# toggle
|
||||
subparsers.add_parser('toggle', help='Toggle lamp power')
|
||||
|
||||
# status
|
||||
subparsers.add_parser('status', help='Show lamp status')
|
||||
|
||||
# brightness
|
||||
p_brightness = subparsers.add_parser('brightness', help='Set brightness (1-100)')
|
||||
p_brightness.add_argument('value', type=int, choices=range(1, 101), metavar='1-100', help='Brightness value')
|
||||
|
||||
# temp
|
||||
p_temp = subparsers.add_parser('temp', help='Set color temperature (2700-6500K)')
|
||||
p_temp.add_argument('value', type=int, help='Color temperature (2700-6500)')
|
||||
|
||||
# mode
|
||||
p_mode = subparsers.add_parser('mode', help='Set lighting mode')
|
||||
p_mode.add_argument('value', help='Mode: reading/computer/night/antiblue/work/candle/twinkle or 0-6')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.command:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
# Initialize API
|
||||
api = mijiaAPI()
|
||||
api.login()
|
||||
|
||||
# Execute command
|
||||
cmd_map = {
|
||||
'on': cmd_on,
|
||||
'off': cmd_off,
|
||||
'toggle': cmd_toggle,
|
||||
'status': cmd_status,
|
||||
'brightness': cmd_brightness,
|
||||
'temp': cmd_temp,
|
||||
'mode': cmd_mode
|
||||
}
|
||||
|
||||
cmd_map[args.command](args, api)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user