最近我获得了Elgato Key Light。它是一个WiFi可控的LED照明面板。
该面板使用160个LED,提供高达2800流明的亮度和2900-7000K的色彩范围。虽然你可以从移动设备上控制它,但直接从外壳上进行控制使整个体验更加方便。
Key Light官方不支持Linux,但它使用ESP32,而且它确实运行一个不受保护的HTTP服务器,接受JSON命令。你不仅可以打开和关闭它,还可以通过简单的JSON请求来调整光温和亮度。
下面是我用来控制我的灯的代码,是用Ruby编写的。
#!/usr/bin/env ruby
require 'uri'
require 'net/http'
require 'json'
require 'yaml'
# Set your lights IPs
LIGHTS = %w[
192.168.0.199
]
COMMAND = ARGV[0]
DETAIL1 = ARGV[1].to_i
DETAIL2 = ARGV[2].to_i
# Sends a json request to a given elgato light
def dispatch(ip, payload, endpoint, method)
uri = URI("http://#{ip}:9123/elgato/#{endpoint}")
req = method.new(uri)
req.body = payload.to_json
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
puts res.body
end
def on(light_ip)
dispatch(
light_ip,
{ 'numberOfLights': 1, 'lights': [{ 'on': 1 }] },
'lights',
Net::HTTP::Put
)
end
def off(light_ip)
dispatch(
light_ip,
{ 'numberOfLights': 1, 'lights': [{ 'on': 0 }] },
'lights',
Net::HTTP::Put
)
end
def temperature(light_ip, value)
raise "Needs to be between 143 and 344, was: #{value}" if value < 143 || value > 344
dispatch(
light_ip,
{ 'numberOfLights': 1, 'lights': [{ 'on': 1, 'temperature': value }] },
'lights',
Net::HTTP::Put
)
end
def brightness(light_ip, value)
raise "Needs to be between 3 and 100, was: #{value}" if value < 3 || value > 100
dispatch(
light_ip,
{ 'numberOfLights': 1, 'lights': [{ 'on': 1, 'brightness': value }] },
'lights',
Net::HTTP::Put
)
end
def info(light_ip)
dispatch(
light_ip,
{},
'accessory-info',
Net::HTTP::Get
)
end
def command(command, light_ip)
case command
when 'on'
on(light_ip)
when 'off'
off(light_ip)
when 'temperature'
temperature(light_ip, DETAIL1)
when 'brightness'
brightness(light_ip, DETAIL1)
when 'theme'
temperature(light_ip, DETAIL1)
brightness(light_ip, DETAIL2)
when 'info'
info(light_ip)
else
raise "Unknown COMMAND #{COMMAND}"
end
end
LIGHTS.each { |light_ip| puts command(COMMAND, light_ip) }
你可以把这段代码放在/usr/local/bin ,在elgato 名下,有可执行的权限,然后你就可以。
elgato on # turn your lights on
elgato off # turn your lights off
elgato info # get info on your lights
elgato brightness 50 # set brightness to 50%
elgato temperature 280 # make light temperature quite warm