Files
openclaw-backups/skills/mijia/scripts/lamp_cli.py

152 lines
4.0 KiB
Python

#!/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()