智能家居照明控制中枢:Lighthamhead 本地化部署与自动化规则实战

1. 项目概述:从“光之锤”到智能照明控制中枢

最近在折腾智能家居,发现一个挺有意思的现象:很多朋友家里装了智能灯,但控制方式还是停留在手机App点一下,或者对着智能音箱喊一嗓子。这其实只发挥了智能照明一半的潜力。真正的智能,应该是让灯光主动适应你,而不是让你去适应灯光。这让我想起了几年前接触过的一个开源项目,名字挺酷,叫 Lighthamhead 。乍一看这名字,像是“Light”(光)和“Hammerhead”(锤头鲨)的结合体,我习惯叫它“光之锤”。它本质上不是一个具体的硬件产品,而是一个 高度集成、可编程的智能照明控制逻辑框架与中枢

简单来说,Lighthamhead 解决的核心痛点是:市面上的智能灯单品(无论是Wi-Fi、Zigbee还是蓝牙Mesh协议)虽然能联网、能变色,但它们彼此之间是孤立的。你想实现“晚上起夜,从卧室到卫生间的灯光自动缓缓点亮,离开后自动熄灭”这样的场景,就需要在多个App里设置复杂的自动化,或者依赖某个封闭的生态平台,灵活性极差,一旦平台服务出问题,所有自动化就失效了。Lighthamhead 的理念,就是把这个“大脑”从云端拉回本地,让你完全掌控灯光背后的逻辑。

它适合谁呢?首先是像我这样的智能家居爱好者、极客,不满足于开箱即用的简单功能,喜欢深度定制。其次是小型工作室、民宿、咖啡馆的经营者,需要打造独特灯光氛围但预算有限,希望有一个稳定、可批量复制的解决方案。最后,它也适合那些对隐私敏感,希望所有智能逻辑都在家庭局域网内运行,不依赖外部互联网服务的用户。通过 Lighthamhead,你可以将不同品牌、不同协议的灯具统一管理,编写基于时间、传感器、甚至本地事件(如电脑开关机、音乐播放)的复杂照明场景,真正让灯光“活”起来。

2. 核心架构与设计哲学:为什么是“中枢”而非“开关”

在深入细节之前,我们必须先理解 Lighthamhead 的设计哲学,这决定了我们后续的所有操作和选型。它的核心定位是“中枢”或“逻辑引擎”,而不是一个直接的“开关”。这个区别至关重要。

2.1 中心化逻辑与去中心化执行

传统的智能家居思路,要么是每个设备自带一点智能(如人体传感器触发关联的灯),要么是依赖一个中心化的云平台来编排逻辑。前者联动能力弱,后者有延迟和断网风险。Lighthamhead 采用了一种混合架构: 中心化决策,去中心化执行

  • 中心化决策 :所有传感器数据(人体移动、光照度、温湿度)、时间信息、外部事件(如日历事件、网络活动)都汇聚到运行 Lighthamhead 的主机上。由这里统一的、你编写的规则引擎进行计算和判断。
  • 去中心化执行 :决策结果(例如“点亮客厅主灯到50%亮度,色温4000K”)以指令形式发送给具体的灯具或网关。灯具本身只需要可靠地接收并执行指令,不需要处理复杂逻辑。

这样做的好处显而易见。首先,逻辑集中,便于管理和调试。你不需要在Aqara Home、米家、Home Assistant等多个平台间跳转设置联动,所有规则都在一个地方编写。其次,稳定性极高。只要主机和家庭局域网在运行,所有自动化即刻响应,不受外网波动影响。最后,它实现了真正的跨平台、跨协议整合。Lighthamhead 通过插件或适配器的方式,可以同时连接 Zigbee2MQTT(管理Zigbee设备)、ESPHome(管理基于ESP8266/32的自制设备)、Home Assistant的API,甚至直接通过Wi-Fi控制某些品牌的灯。

2.2 基于事件驱动的规则引擎

这是 Lighthamhead 的灵魂。它的工作流不是简单的“如果…就…”,而是一个基于事件流的、状态丰富的系统。我们来拆解一个典型场景:“工作日晚上7点,如果客厅有人且环境光较暗,则自动开启阅读模式灯光。”

  1. 事件源
    • time.cron : 触发事件 “每天19:00”
    • sensor.motion_living_room : 触发事件 “状态变为 occupancy”
    • sensor.light_living_room : 持续提供数据 “光照度 < 50 lux”
  2. 状态机 :Lighthamhead 会维护一个全局状态,例如 “场景” 可以是 “日间” “夜晚” “观影” “阅读” “房间占用” 可以是 “无人” “有人”
  3. 规则引擎 :你编写的规则会监听这些事件和状态。规则可能这样描述:“当接收到 time.cron[19:00] 事件时,检查当前全局 场景 是否为 夜晚 ,并且 客厅占用 状态为 有人 ,并且 客厅光照度 值持续5秒低于50 lux,则触发动作。”
  4. 动作执行 :触发动作后,引擎会调用 light.living_room_main.turn_on 服务,并附带参数 {“brightness”: 80, “color_temp”: 4000}

这种模式的强大之处在于,它处理的是“状态”和“事件”的组合,而非孤立的触发器。你可以轻松实现“仅在‘回家’模式下才执行夜间自动化”,或者“当电视开启时,忽略人体传感器触发的主灯开关”。

注意 :初次接触时,最容易犯的错误是用“开关思维”去写规则,比如写一堆“如果运动传感器触发就开灯”。正确的思路是先定义好你希望灯光呈现的“状态”(如“夜间有人”、“白天”、“专注工作”),然后思考哪些事件组合会导致状态切换,最后才是为每个状态定义具体的灯光参数。

3. 环境搭建与核心组件选型

纸上谈兵终觉浅,我们来实际搭建一个 Lighthamhead 环境。它本身通常以软件包或容器的形式存在,我们需要一个常开的主机来运行它。

3.1 硬件选择:从树莓派到迷你PC

运行 Lighthamhead 的主机是整套系统的心脏,需要7x24小时稳定运行。

  1. 入门首选:树莓派 4B/5 。功耗低(~5W),体积小,社区支持极好。对于控制50个以下设备、规则复杂度中等的家庭,性能完全足够。 务必使用高品质的SD卡(建议A2级别的MicroSD卡,或直接使用USB SSD启动),这是稳定性的关键 。我早期用廉价SD卡,三个月就因频繁读写而损坏,导致规则丢失。
  2. 进阶选择:x86架构迷你主机 。例如英特尔N100处理器的迷你电脑。价格与树莓派套件相近,但性能更强,采用SSD存储,可靠性远胜SD卡。如果需要同时运行Lighthamhead、媒体服务器、下载器等更多服务,这是更佳选择。功耗通常在10-20W。
  3. 避坑选项:旧笔记本或台式机 。不推荐。功耗过高(可能超过50W),不经济,且体积和噪音不适合长期放置。

我的选择是: Rock 5B(类似树莓派的ARM板)搭配NVMe SSD 。性能与树莓派5相当,但提供了M.2接口,直接上SSD,彻底杜绝了存储瓶颈,长期运行非常安心。

3.2 软件部署:Docker 化部署详解

我强烈推荐使用 Docker 部署。它将 Lighthamhead 及其所有依赖打包在一个隔离的容器中,避免污染主机系统,升级、迁移、备份都极其方便。

假设你已经在主机上安装好了 Docker 和 Docker Compose。接下来是核心的 docker-compose.yml 配置文件:

version: '3.8'
services:
  lighthamhead:
    image: your-lighthamhead-image:latest  # 替换为实际的镜像名
    container_name: lighthamhead
    restart: unless-stopped  # 关键:确保容器总是尝试重启
    volumes:
      - ./lighthamhead/config:/config  # 将配置目录挂载到主机,防止数据丢失
      - /etc/localtime:/etc/localtime:ro  # 同步主机时间
    environment:
      - TZ=Asia/Shanghai  # 设置时区
    network_mode: host  # 关键:使用主机网络模式,方便发现和控制局域网内的设备
    # devices:  # 如果需要直接操作USB设备(如Zigbee网关),取消注释
    #   - "/dev/ttyUSB0:/dev/ttyUSB0"
    #   - "/dev/ttyACM0:/dev/ttyACM0"

关键参数解析:

  • restart: unless-stopped :这是保障稳定性的生命线。除非你手动停止容器,否则任何意外退出(如主机短暂重启、程序崩溃)Docker都会自动重启它。
  • volumes ./lighthamhead/config:/config 是最重要的一行。它将容器内的配置目录映射到主机当前目录下的 lighthamhead/config 文件夹。 所有你编写的规则、设备配置、插件都保存在这里。 备份整个 lighthamhead 文件夹就等于备份了你的整个智能照明系统。
  • network_mode: host :让容器使用主机的网络堆栈。这样,Lighthamhead 就能像主机上的一个普通程序一样,直接通过广播发现局域网内的智能设备(如Yeelight灯、支持本地控制的Wi-Fi灯),无需复杂的端口映射。

部署命令很简单:

# 在 docker-compose.yml 所在目录执行
docker-compose up -d

执行后,使用 docker logs -f lighthamhead 可以查看实时日志,检查启动是否正常。

3.3 核心插件与集成配置

Lighthamhead 的强大在于集成。它需要通过插件(或称为集成)来与物理世界通信。以下是几个必装的核心集成:

  1. MQTT 集成 :这是智能家居的“中枢神经”。Lighthamhead 通过 MQTT 协议与 Zigbee2MQTT、ESPHome 等桥接器通信。你需要先部署一个 MQTT 代理(如 Mosquitto)。
    # 在 Lighthamhead 配置目录下的 configuration.yaml 中添加
    mqtt:
      broker: 192.168.1.10  # 你的 MQTT 服务器 IP
      port: 1883
      username: your_username  # 建议设置用户名密码
      password: your_password
    
  2. Zigbee2MQTT 集成 :如果你有 Zigbee 设备(如Aqara传感器、Ikea灯泡),这是最佳选择。Zigbee2MQTT 作为一个独立服务运行,将 Zigbee 协议转换为 MQTT 消息。在 Lighthamhead 中配置好 MQTT 后,Zigbee2MQTT 发现的设备会自动出现在 Lighthamhead 的设备列表中。
  3. Home Assistant API 集成 :如果你已经有一个庞大的 Home Assistant 系统,不想迁移设备,可以通过其 RESTful API 或 WebSocket API 进行集成。Lighthamhead 可以将 Home Assistant 中的设备作为自己的实体来调用。
    # 示例:通过 REST API 调用
    rest_command:
      turn_on_living_room_light:
        url: "http://192.168.1.20:8123/api/services/light/turn_on"
        method: POST
        headers:
          Authorization: "Bearer YOUR_LONG_LIVED_ACCESS_TOKEN"
          Content-Type: "application/json"
        payload: '{"entity_id": "light.living_room", "brightness_pct": 70}'
    
  4. 本地网络发现 :对于支持本地控制的 Wi-Fi 设备(如部分型号的Yeelight、TP-Link Kasa),可以启用 upnp ssdp 集成进行自动发现。

实操心得 :集成配置不要贪多求全。建议从你最核心的1-2个设备开始,例如一个 Zigbee 人体传感器和一个 Wi-Fi 灯泡。先让这条链路跑通,理解数据是如何从传感器 -> Zigbee2MQTT -> MQTT -> Lighthamhead -> 规则引擎 -> 灯泡的。这个调试过程能帮你建立起对整个系统数据流的清晰认知,后续增加设备会事半功倍。

4. 规则引擎实战:从入门到精通

环境搭好了,设备也接入了,现在来到最核心也最有乐趣的部分——编写规则。我们由浅入深,通过几个典型案例来掌握 Lighthamhead 的规则编写。

4.1 基础自动化:人体感应灯

我们先实现一个最基础的需求:当卫生间检测到有人时,自动开灯;无人后2分钟,自动关灯。

在 Lighthamhead 的配置目录下,通常有一个 automations 文件夹,我们创建 bathroom_light.yaml

id: 'auto_bathroom_light_on_motion'  # 自动化唯一ID
alias: '卫生间有人开灯'  # 易读的名称
trigger:
  - platform: state  # 状态触发
    entity_id: binary_sensor.bathroom_motion_sensor_occupancy  # Zigbee人体传感器实体
    from: 'off'
    to: 'on'
condition: []  # 条件为空,表示只要触发就执行
action:
  - service: light.turn_on
    target:
      entity_id: light.bathroom_ceiling_light
    data:
      brightness_pct: 100
      color_temp: 4000  # 中性白光
mode: single  # 模式:single表示即使再次触发,当前动作也会执行完

id: 'auto_bathroom_light_off_no_motion'
alias: '卫生间无人关灯'
trigger:
  - platform: state
    entity_id: binary_sensor.bathroom_motion_sensor_occupancy
    from: 'on'
    to: 'off'
    for:  # “for”是关键,表示状态持续一段时间后才触发
      minutes: 2
condition: []
action:
  - service: light.turn_off
    target:
      entity_id: light.bathroom_ceiling_light

代码解读

  • trigger :定义了自动化启动的“扳机”。这里监听人体传感器实体状态的变化。
  • from / to :指定状态从何变到何。 ‘off’ ‘on’ 代表检测到运动; ‘on’ ‘off’ 代表无人。
  • for :在关灯自动化中,这是精髓。它确保在传感器报告“无人”状态 持续2分钟 后才触发关灯,避免了人短暂静止(如洗手)导致的误关灯。
  • action :定义要执行的具体操作。这里调用的是 light.turn_on turn_off 服务,并可以传递亮度、色温等参数。

4.2 进阶场景:基于光照度与时间的自适应灯光

基础自动化解决了“有无”问题,现在增加智能维度:根据环境光和时间,自动调节灯光亮度和色温。

假设我们想在客厅实现:“夜晚,根据环境光照度自动补光;白天,即使有人也不自动开主灯”。

我们需要创建一个更复杂的规则,它需要处理多个条件。我们可以使用 numeric_state 触发器和 condition 条件块。

id: 'auto_living_room_adaptive_light'
alias: '客厅自适应补光'
trigger:
  # 触发条件1:有人移动
  - platform: state
    entity_id: binary_sensor.living_room_motion_occupancy
    to: 'on'
  # 触发条件2:环境光照度变化(每10%变化触发一次,用于动态调整)
  - platform: numeric_state
    entity_id: sensor.living_room_illuminance
    above: 0
condition:
  # 条件1:必须是“夜晚”或“夜间”场景(这是一个自定义的输入选择器,后面会讲)
  - condition: state
    entity_id: input_select.house_mode
    state: 'night'
  # 条件2:当前客厅主灯是关闭状态(避免重复打开)
  - condition: state
    entity_id: light.living_room_main
    state: 'off'
action:
  - variables:
      # 计算目标亮度:环境越暗,灯光越亮。这里用一个简单的线性映射。
      current_lux: "{{ states('sensor.living_room_illuminance') | int }}"
      # 将 0-500 lux 映射到 30%-100% 亮度
      target_brightness_pct: >
        {% set lux = current_lux %}
        {% if lux > 500 %}
          0  # 足够亮,不开灯
        {% elif lux < 10 %}
          100
        {% else %}
          {{ (100 - (lux / 500 * 70)) | round(0) }}
        {% endif %}
      # 根据时间计算色温:傍晚偏暖,深夜偏冷
      target_color_temp: >
        {% set now = now().hour %}
        {% if now >= 18 and now < 22 %}
          3500  # 傍晚,暖黄光
        {% elif now >= 22 or now < 6 %}
          3000  # 深夜,更暖的黄光,减少蓝光
        {% else %}
          4000  # 其他夜间时间,中性光
        {% endif %}
  # 判断:只有计算出的亮度大于30%才执行开灯
  - if: "{{ target_brightness_pct | int > 30 }}"
    then:
      - service: light.turn_on
        target:
          entity_id: light.living_room_main
        data:
          brightness_pct: "{{ target_brightness_pct }}"
          color_temp: "{{ target_color_temp }}"
          transition: 3  # 灯光在3秒内渐变到目标值,更柔和

这个自动化展示了 Lighthamhead 规则引擎的真正威力:

  1. 多触发器 :有人移动或光照度变化都可能触发重新计算。
  2. 复杂条件 :只有在“夜间模式”且灯是关着的时候才执行。
  3. 模板化变量 :使用 Jinja2 模板在动作中实时计算。 {{ states(‘sensor.living_room_illuminance’) | int }} 是获取传感器当前数值的语法。
  4. 逻辑判断 :在动作内部使用 if 条件,只有满足条件(亮度需补光)才执行开灯。

4.3 全局状态与模式管理

要实现更智能的联动,我们需要引入“模式”或“场景”的概念。例如,“观影模式”、“会客模式”、“睡眠模式”。这些模式会影响所有自动化的行为。

Lighthamhead 本身没有内置的“模式”实体,但我们可以用 input_select input_text 来模拟。在 configuration.yaml 中添加:

input_select:
  house_mode:
    name: 家庭模式
    options:
      - '居家'
      - '会客'
      - '观影'
      - '睡眠'
      - '离家'
    initial: '居家'
    icon: mdi:home-automation

然后,我们之前的自动化条件就可以引用这个全局状态了。我们还可以创建一个专门的“模式切换”自动化,例如,当电视打开时,自动切换到“观影模式”,并触发一系列灯光调整。

id: 'auto_set_movie_mode'
alias: '电视开启时设置观影模式'
trigger:
  - platform: state
    entity_id: media_player.living_room_tv
    to: 'playing'
condition: []
action:
  - service: input_select.select_option
    target:
      entity_id: input_select.house_mode
    data:
      option: '观影'
  # 同时执行观影模式的灯光场景
  - service: scene.turn_on
    target:
      entity_id: scene.living_room_movie_time

通过管理全局的 house_mode ,你可以让所有房间的自动化规则都基于此做出判断。例如,在“睡眠模式”下,所有人体感应自动化的亮度都降低到10%,避免刺眼;在“离家模式”下,所有自动化暂停,只保留安防相关的规则。

5. 高级技巧与性能优化

当你的系统接入几十个设备,拥有上百条自动化规则后,稳定性和性能就变得至关重要。以下是一些来自实战的高级技巧。

5.1 规则调试与日志排查

规则不工作?首先查看日志。Lighthamhead 的日志非常详细。

  1. 开启调试日志 :在 configuration.yaml 中,为特定集成或自动化开启更详细的日志。
    logger:
      default: info
      logs:
        custom_components.lighthamhead: debug  # 如果使用自定义组件
        homeassistant.components.automation: debug  # 调试所有自动化
    
  2. 理解日志信息 :当自动化触发时,日志会显示 Automation ‘卫生间有人开灯’ triggered by … 。如果自动化因为条件不满足而没有执行动作,会显示 Automation ‘卫生间有人开灯’ skipped because conditions were not met 。根据这些线索去检查触发器的实体状态和条件语句。
  3. 使用开发者工具 :Lighthamhead 通常提供网页版的开发者工具。在这里,你可以:
    • 检查状态 :查看任何实体的当前状态和属性。
    • 调用服务 :手动调用 light.turn_on 等服务,测试设备是否响应。
    • 模板测试 :在模板编辑器中测试你的 Jinja2 计算逻辑是否正确,这是调试复杂变量计算的神器。

5.2 优化规则性能与避免陷阱

  1. 避免高频触发器 :不要用 numeric_state 监听一个每秒变化多次的传感器(如功率计),而不设置 throttle (节流)或 for 。这会导致规则引擎被频繁触发,消耗大量CPU资源。应该监听其“变化超过某个阈值”或“平均值”。
  2. 使用 choose 动作替代多个独立自动化 :如果你需要根据一个触发器的不同情况执行不同动作,使用一个自动化内的 choose / default 结构,比创建多个监听同一触发器的自动化更高效、更易管理。
    action:
      - choose:
          - conditions: “{{ trigger.to_state.state == ‘on’ }}”
            sequence:
              - service: light.turn_on
                ...
          - conditions: “{{ trigger.to_state.state == ‘off’ }}”
            sequence:
              - service: light.turn_off
                ...
        default: []
    
  3. 实体化计算量大的值 :如果某个模板计算非常复杂且被多个自动化使用,可以考虑创建一个“传感器”实体来存储这个计算结果。例如,创建一个“客厅舒适亮度”传感器,其值由光照度、时间、模式共同计算得出。这样其他自动化只需读取这个传感器状态,无需重复计算。
  4. 谨慎使用 parallel 模式 :自动化默认是 single 模式,新触发会排队或终止旧实例。 parallel 模式允许多个实例同时运行,用于需要长时间运行且可并发的动作(如多个灯光渐变),但滥用可能导致资源冲突和不可预知的状态。

5.3 备份与灾备方案

你的智能照明规则是精心调校的成果,必须定期备份。

  1. 配置备份 :你的整个 config 目录就是需要备份的全部。可以使用简单的 rsync scp 命令定期同步到NAS或另一台电脑。
    # 示例:每天凌晨3点备份
    0 3 * * * rsync -avz /path/to/lighthamhead/config/ user@nas:/backup/lighthamhead/config-$(date +\%Y\%m\%d)/
    
  2. 容器镜像备份 :如果你使用了 Docker,记得备份 docker-compose.yml 文件。
  3. 灾备思路 :准备一个“安全模式”。创建一个最简单的自动化,只绑定到一两个关键灯,并存储在主机(而非容器内)的独立文件中。当主配置出错导致 Lighthamhead 无法启动时,可以快速切换到这份最小配置,至少保证基础照明功能可用。

6. 常见问题与排查实录

在长期使用和帮朋友部署的过程中,我积累了一些典型问题的排查经验,这里分享给大家。

6.1 设备“失联”或响应慢

这是最常见的问题,通常不是 Lighthamhead 的锅,而是网络或设备层的问题。

现象 可能原因 排查步骤
某个 Zigbee 灯时好时坏 信号弱,Zigbee 网络 mesh 路由不佳 1. 在 Zigbee2MQTT 管理界面查看该设备的“链路质量”(LQI)。低于50通常不稳定。
2. 在该设备和协调器之间增加一个 Zigbee 路由器(如一直通电的智能插座或灯泡)。
Wi-Fi 灯偶尔不响应 Wi-Fi 干扰或路由器带机量不足 1. 检查路由器日志,看是否有设备频繁断开连接。
2. 将智能家居设备分配到专用的 2.4GHz Wi-Fi SSID,并启用静态IP分配。
3. 考虑使用独立的智能家居专用无线AP。
所有设备同时无响应 MQTT 代理宕机或网络中断 1. 在 Lighthamhead 主机上 ping 你的 MQTT 服务器IP。
2. 检查 Mosquitto 容器或服务是否运行: docker ps | grep mosquitto systemctl status mosquitto
3. 重启 MQTT 服务。
自动化触发,但灯没反应 服务调用错误或实体ID错误 1. 去开发者工具 -> 服务,手动调用 light.turn_on ,选择正确的实体ID,看是否成功。
2. 检查自动化 action 中的 entity_id 拼写是否正确。

我的心得 :给所有智能家居设备分配固定的IP地址(DHCP保留),并在路由器上给它们起一个易识别的名字。当出现问题时,先 ping 一下设备IP,能快速定位是网络问题还是设备/应用层问题。

6.2 自动化规则不触发

规则写好了,日志里也没报错,但就是不触发。

  1. 检查触发器实体状态 :去开发者工具 -> 状态,查看你规则中监听的实体(如 binary_sensor.bathroom_motion )的当前状态。手动触发一下(比如在传感器前走动),看状态是否真的从 off 变成了 on 。有时候传感器的状态可能是 unavailable unknown
  2. 检查条件(Condition) :这是最容易出错的地方。尤其是使用 numeric_state 条件时,确保比较的值类型一致(字符串 vs 数字)。多用开发者工具中的模板测试功能来验证你的条件表达式。
  3. “For”的陷阱 for 条件是在触发器条件满足后, 状态持续保持一段时间 才触发。确保你理解这个“持续”的含义。例如,一个每分钟波动一次的传感器数值,很难“持续”5分钟高于某个阈值。
  4. 自动化被禁用 :检查自动化列表,确认该自动化是启用状态。有时在调试时会手动关闭,之后就忘了打开。

6.3 系统资源占用过高

运行一段时间后,主机CPU或内存占用率飙升。

  1. 检查日志循环 :某些集成或自定义组件可能有bug,导致日志疯狂输出,塞满磁盘并占用CPU。使用 docker stats htop 查看哪个容器或进程异常,然后去对应日志文件查看。
  2. 数据库膨胀 :Lighthamhead 默认会记录所有实体状态的历史。如果设备多、更新频繁,数据库文件(通常是 home-assistant_v2.db )会快速增长。需要定期清理或调整历史记录策略。
    • configuration.yaml 中配置:
    recorder:
      purge_keep_days: 7  # 只保留7天历史
      commit_interval: 30  # 每30秒提交一次,减少IO
    
  3. 优化集成 :禁用你不需要的集成。例如,如果你没有苹果设备,可以禁用 apple_tv 集成;如果不使用云服务,禁用对应的云集成。

折腾 Lighthamhead 这类系统,最大的收获不是实现了多么炫酷的灯光秀,而是获得了一种对自家环境的“精确控制感”。灯光不再是简单的明暗开关,而是成了环境的一部分,无声地配合着你的作息和活动。从最初的几个简单自动化,到后来形成一整套基于时间、光照、人员存在的自适应照明网络,这个过程本身就像在编写一段让家变得更有生命力的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值