golang Philips Hue智能灯光控制客户端插件库huego的使用

golang Philips Hue智能灯光控制客户端插件库huego的使用

Huego是一个用于Golang的Philips Hue客户端库,强调简洁性。它设计为干净、不臃肿且可扩展。使用Huego,您可以与任何Philips Hue桥接器及其资源交互,包括灯光(Lights)、组(Groups)、场景(Scenes)、传感器(Sensors)、规则(Rules)、计划(Schedules)、资源链接(Resourcelinks)、功能(Capabilities)和配置(Configuration)。

Huego Logo

安装

获取包并在代码中导入:

go get github.com/amimof/huego

使用示例

已知IP和用户名的基本用法

如果您已经创建了用户并知道桥接器的IP地址,可以使用New()

package main

import (
  "github.com/amimof/huego"
  "fmt"
)

func main() {
  // 初始化桥接器连接
  bridge := huego.New("192.168.1.59", "username")
  
  // 获取所有灯光
  l, err := bridge.GetLights()
  if err != nil {
    panic(err)
  }
  
  // 输出找到的灯光数量
  fmt.Printf("Found %d lights", len(l))
}

发现桥接器并创建新用户

您可以使用Discover()在网络上发现桥接器,并使用CreateUser()创建新用户。要成功创建用户,必须在调用CreateUser()之前按下桥接器上的链接按钮以授权请求。

func main() {
  // 发现本地网络中的桥接器
  bridge, _ := huego.Discover()
  
  // 创建新用户(需要先按下桥接器上的链接按钮)
  user, _ := bridge.CreateUser("my awesome hue app")
  
  // 使用新用户登录
  bridge = bridge.Login(user)
  
  // 获取ID为3的灯光
  light, _ := bridge.GetLight(3)
  
  // 关闭该灯光
  light.Off()
}

完整示例

下面是一个更完整的示例,展示如何发现桥接器、创建用户、控制灯光:

package main

import (
	"fmt"
	"github.com/amimof/huego"
	"log"
	"time"
)

func main() {
	// 1. 发现桥接器
	bridge, err := huego.Discover()
	if err != nil {
		log.Fatalf("Error discovering bridge: %v", err)
	}
	fmt.Printf("Found bridge at: %s\n", bridge.Host)

	// 2. 创建新用户(需要先按下桥接器上的链接按钮)
	fmt.Println("Please press the link button on your Hue bridge then press Enter...")
	fmt.Scanln() // 等待用户按下回车

	user, err := bridge.CreateUser("huego-example-app") // 创建用户
	if err != nil {
		log.Fatalf("Error creating user: %v", err)
	}
	fmt.Printf("Created new user: %s\n", user)

	// 3. 使用新用户登录
	bridge = bridge.Login(user)

	// 4. 获取所有灯光
	lights, err := bridge.GetLights()
	if err != nil {
		log.Fatalf("Error getting lights: %v", err)
	}

	// 5. 打印灯光信息并控制第一个灯光
	if len(lights) > 0 {
		light := lights[0]
		fmt.Printf("Found light: %s (ID: %d)\n", light.Name, light.ID)

		// 开灯
		fmt.Println("Turning light on...")
		light.On()

		// 设置颜色为红色
		fmt.Println("Setting color to red...")
		light.Bri(254).Hue(65535).Sat(254).Set()

		time.Sleep(2 * time.Second)

		// 设置颜色为蓝色
		fmt.Println("Setting color to blue...")
		light.Bri(254).Hue(46920).Sat(254).Set()

		time.Sleep(2 * time.Second)

		// 关灯
		fmt.Println("Turning light off...")
		light.Off()
	} else {
		fmt.Println("No lights found")
	}
}

文档

完整的包文档可以在godoc.org上找到。

贡献

任何形式的帮助都非常感谢,欢迎您参与共同开发Huego。要贡献代码,请提交Pull Request。如果您想提供反馈,可以打开Github Issue或直接联系作者。


更多关于golang Philips Hue智能灯光控制客户端插件库huego的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang Philips Hue智能灯光控制客户端插件库huego的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用huego控制Philips Hue智能灯光

huego是一个用于控制Philips Hue智能灯光的Go语言库,它提供了简单易用的API来与Hue桥接器交互。下面我将详细介绍如何使用这个库。

安装huego

首先安装huego库:

go get github.com/amimof/huego

基本使用

1. 发现Hue桥接器

package main

import (
	"fmt"
	"github.com/amimof/huego"
)

func main() {
	// 自动发现本地网络中的Hue桥接器
	bridge, err := huego.Discover()
	if err != nil {
		fmt.Printf("发现桥接器失败: %v\n", err)
		return
	}
	fmt.Printf("发现桥接器: %s (IP: %s)\n", bridge.Name, bridge.Host)
}

2. 用户认证

首次使用时需要创建用户:

func createUser(bridge *huego.Bridge) (string, error) {
	// 按下Hue桥接器上的按钮后调用此函数
	user, err := bridge.CreateUser("my_hue_app#go_client")
	if err != nil {
		return "", fmt.Errorf("创建用户失败: %v", err)
	}
	return user, nil
}

3. 连接桥接器

func connectToBridge(host, username string) *huego.Bridge {
	bridge := huego.New(host, username)
	return bridge
}

灯光控制示例

获取所有灯光

func listLights(bridge *huego.Bridge) {
	lights, err := bridge.GetLights()
	if err != nil {
		fmt.Printf("获取灯光列表失败: %v\n", err)
		return
	}
	
	for _, light := range lights {
		fmt.Printf("ID: %d, 名称: %s, 状态: %t\n", 
			light.ID, light.Name, light.State.On)
	}
}

控制单个灯光

func controlLight(bridge *huego.Bridge, lightID int) {
	light := bridge.GetLight(lightID)
	
	// 开灯
	err := light.On()
	if err != nil {
		fmt.Printf("开灯失败: %v\n", err)
	}
	
	// 设置亮度(0-254)
	err = light.Bri(150)
	if err != nil {
		fmt.Printf("设置亮度失败: %v\n", err)
	}
	
	// 设置色温(153-500, 值越小越暖)
	err = light.Ct(300)
	if err != nil {
		fmt.Printf("设置色温失败: %v\n", err)
	}
	
	// 设置颜色(HSV模型)
	err = light.HueSat(20000, 200) // 色调(0-65535), 饱和度(0-254)
	if err != nil {
		fmt.Printf("设置颜色失败: %v\n", err)
	}
	
	// 关灯
	err = light.Off()
	if err != nil {
		fmt.Printf("关灯失败: %v\n", err)
	}
}

分组控制

func controlGroup(bridge *huego.Bridge, groupID int) {
	group := bridge.GetGroup(groupID)
	
	// 开灯并设置场景
	err := group.On().Scene("abcd1234") // 替换为实际场景ID
	if err != nil {
		fmt.Printf("控制分组失败: %v\n", err)
	}
}

高级功能

过渡效果

func lightTransition(bridge *huego.Bridge, lightID int) {
	light := bridge.GetLight(lightID)
	
	// 在5秒内从当前状态过渡到新状态
	err := light.State(huego.State{
		On:  true,
		Bri: 254,
		Hue: 45000,
		Sat: 254,
		TransitionTime: 50, // 单位是100ms, 50=5秒
	})
	if err != nil {
		fmt.Printf("设置过渡效果失败: %v\n", err)
	}
}

闪烁警报

func lightAlert(bridge *huego.Bridge, lightID int) {
	light := bridge.GetLight(lightID)
	
	// 设置闪烁一次
	err := light.Alert("select")
	if err != nil {
		fmt.Printf("设置警报失败: %v\n", err)
	}
	
	// 设置闪烁15秒(或直到停止)
	err = light.Alert("lselect")
	if err != nil {
		fmt.Printf("设置警报失败: %v\n", err)
	}
}

完整示例

package main

import (
	"fmt"
	"time"
	"github.com/amimof/huego"
)

func main() {
	// 1. 发现桥接器
	bridge, err := huego.Discover()
	if err != nil {
		fmt.Printf("发现桥接器失败: %v\n", err)
		return
	}
	
	// 2. 用户认证(首次使用时)
	username := "your_username_here" // 替换为实际用户名或从配置读取
	if username == "" {
		fmt.Println("请按下Hue桥接器上的按钮然后运行程序")
		username, err = bridge.CreateUser("my_hue_app#go_client")
		if err != nil {
			fmt.Printf("创建用户失败: %v\n", err)
			return
		}
		fmt.Printf("新用户创建成功: %s\n", username)
	}
	
	// 3. 连接桥接器
	bridge = huego.New(bridge.Host, username)
	
	// 4. 获取灯光列表
	lights, err := bridge.GetLights()
	if err != nil {
		fmt.Printf("获取灯光列表失败: %v\n", err)
		return
	}
	
	// 5. 控制第一个灯光
	if len(lights) > 0 {
		lightID := lights[0].ID
		light := bridge.GetLight(lightID)
		
		fmt.Printf("控制灯光: %s (ID: %d)\n", light.Name, light.ID)
		
		// 开灯
		err = light.On()
		if err != nil {
			fmt.Printf("开灯失败: %v\n", err)
		}
		
		// 设置颜色
		err = light.HueSat(30000, 254)
		if err != nil {
			fmt.Printf("设置颜色失败: %v\n", err)
		}
		
		// 保持5秒
		time.Sleep(5 * time.Second)
		
		// 关灯
		err = light.Off()
		if err != nil {
			fmt.Printf("关灯失败: %v\n", err)
		}
	}
}

注意事项

  1. 首次使用时需要按下Hue桥接器上的按钮进行用户认证
  2. 灯光ID不是连续的,需要通过GetLights()获取
  3. 所有API调用都是异步的,Hue桥接器会排队处理请求
  4. 频繁调用API可能导致桥接器拒绝请求

huego库提供了完整的Hue API功能,包括灯光、组、场景、传感器等的控制。更多高级功能可以参考库的文档和Hue官方API文档。

回到顶部