Гид по технологиям

Автоматический умный выключатель света на Raspberry Pi

9 min read Raspberry Pi Обновлено 26 Dec 2025
Умный выключатель света на Raspberry Pi
Умный выключатель света на Raspberry Pi

Важно: работа с сетевым электричеством (230 В) опасна. Если вы не уверенны в навыках, привлечите квалифицированного электрика для подключения нагрузки к реле.

Зачем это полезно

  • Экономия электроэнергии: лампы включаются только когда действительно темно или по расписанию.
  • Удобство: удалённое управление и интеграция с голосовыми ассистентами через простой веб‑сервер.
  • Обучающий проект: знакомство с GPIO, I2C, cron и базовой автоматизацией на Raspberry Pi.

Короткая дорожная карта

  1. Подключите реле к GPIO целевого Raspberry Pi.
  2. Подключите датчик освещённости TSL2561 по I2C.
  3. Включите I2C, установите зависимости и библиотеки.
  4. Скачайте и проверьте скрипты onzone.py, offzone.py и lightserver.py.
  5. Настройте cron для расписаний и автозапуск override‑сервера.
  6. Протестируйте реле и только затем подключайте нагрузку.

Что вам потребуется

  • Любая модель Raspberry Pi с Raspbian (Raspberry Pi OS).
  • Плата реле (relay board) с нормально разомкнутыми контактами (NO).
  • Датчик освещённости Adafruit TSL2561.
  • Джампер‑провода (male–female/мама–папа в зависимости от плат).
  • Лампы/осветительная нагрузка для автоматизации.
  • Доступ в локальную сеть (для веб‑оверайда).

Краткий факт-бокс

  • Диапазон TSL2561: примерно 0.1 — 40 000 люкс (сколько выдаёт сенсор).
  • Уровень lowlux по умолчанию в скрипте: 50 люкс (настраивается под ваше место).
  • Напряжение питания Pi: 3.3 В на линиях SDA/SCL; питание реле отдельным 5 В на JD‑VCC.
  • Сеть питания (в РФ): типично 230 В переменного тока — соблюдайте правила.

Как работает система (упрощённая модель)

Система принимает три основных входа, чтобы решать, включать свет или выключать:

  1. Программное расписание (cron).
  2. Датчик освещённости (TSL2561) — текущий уровень в люксах.
  3. Удалённый оверрайд через веб‑сервер (override).

Логика: если сейчас «on‑зона» по расписанию и уровень люкс ниже порога lowlux — включаем; если «off‑зона» — выключаем; оверрайд временно переопределяет поведение.

Шаг 1: Подключение Raspberry Pi к плате реле

Если вы не знакомы с GPIO, сначала прочитайте вводный материал по контактам Raspberry Pi GPIO. Перед подключением убедитесь, что питание Pi отключено.

Проверьте плату реле: часто на модулях есть джампер, соединяющий VCC и JD‑VCC. Если он установлен, снимите его — это позволит раздельно питать управляющую электронику реле (VCC 3.3 В/5 В) и саму часть реле (JD‑VCC 5 В). Это снижает риск повреждения Pi.

Плата реле с джампером JD-VCC и VCC

Подключение (с выключенным питанием):

  • Pi Pin 2 (5V) -> JD‑VCC на плате реле
  • Pi Pin 6 (GND) -> GND на плате реле
  • Pi Pin 15 (GPIO22) -> IN1 на плате реле
  • Pi Pin 17 (3.3V) -> VCC на плате реле

Raspberry Pi Zero W, подключённый к плате реле

Заметка: схемы других плат реле могут отличаться по нумерации контактов: сверяйтесь с маркировкой на плате.

Шаг 2: Подключение датчика освещённости (TSL2561)

TSL2561 — цифровой светочувствительный датчик, который измеряет инфракрасный, видимый и суммарный свет. Он общается с Raspberry Pi по протоколу I2C и выдаёт числовое значение в люксах.

Соедините четыре контакта:

  • Pi Pin 1 (3.3V) -> Vin (или VCC) на датчике TSL2561
  • Pi Pin 3 (SDA) -> SDA на датчике
  • Pi Pin 5 (SCL) -> SCL на датчике
  • Pi Pin 9 (GND) -> GND на датчике

Raspberry Pi Zero W, подключённый к датчику TSL2561

Совет: размещайте датчик так, чтобы он измерял окружающий уровень света, а не попадал под прямые солнечные лучи — это может «зафиксировать насыщение» показаний.

Шаг 3: Включение I2C и установка зависимостей

По умолчанию I2C отключён. Включите его через raspi‑config:

sudo raspi-config

Выберите Interfacing Options → I2C → Yes. Затем Finish и выполните перезагрузку:

sudo reboot

Установите зависимости и утилиты i2c:

sudo apt-get update
sudo apt-get install -y python-smbus
sudo apt-get install -y i2c-tools

Проверьте видимость устройства на шине I2C:

sudo i2cdetect -y 1

Вы увидите сетку адресов. Если датчик подключён корректно, он появится как адрес, например 0x39.

Утилита i2cdetect обнаруживает устройство по адресу 0x39

Далее создайте рабочую папку проекта:

mkdir ~/lighting
cd ~/lighting

Скачайте lightweight web‑framework Bottle:

wget https://bottlepy.org/bottle.py

Установите git, если он отсутствует, и клонируйте библиотеки Adafruit, используемые скриптами:

sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_GPIO.git
git clone https://github.com/adafruit/Adafruit_Python_PureIO.git

Создайте тестовый скрипт для проверки датчика:

nano test.py

Вставьте в файл (пример от Adafruit):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
from tsl2561 import TSL2561
if __name__ == "__main__":
    tsl = TSL2561(debug=True)
    print(tsl.lux())

Сохраните (Ctrl+X) и запустите:

python test.py

Вы должны получить число — текущий люкс. Попробуйте заслонить датчик рукой и снова запустить скрипт: число должно упасть.

Шаг 4: Создание и понимание автоматизационных скриптов

Система использует три основных скрипта:

  • onzone.py — запускается каждую минуту в «on‑зонах», включает свет при низком уровне люкс.
  • offzone.py — запускается каждую минуту в «off‑зонах», выключает свет независимо от уровня люкс.
  • lightserver.py — простой веб‑сервер (на Bottle), дающий команды переопределения (override) и статус.

Скачайте готовые скрипты (оригинальные авторские gist):

wget https://gist.githubusercontent.com/hamishdownell/ea151d2ff7c888ac09f8a850afaab4ee/raw/10b0e9d8ec42f8577750941da46a93d16b597c05/onzone.py
wget https://gist.githubusercontent.com/hamishdownell/fb8970909145bbfefbbef8dba5f5a00f/raw/eae5a6057a51ca4727907c7d061f0a48b07da944/offzone.py
wget https://gist.githubusercontent.com/hamishdownell/2303bfd9fb30d42e79923bdb7e69ed4e/raw/7dcb456b81b8ae58ae48efa225adb41ba7d7f69c/lightserver.py

Ключевые настройки и понятия:

  • lowlux — порог люкс (по умолчанию 50). Если измерение ниже — считается «темно».
  • Файлы состояния (контрольные файлы), которые используют скрипты для учёта текущего статуса и оверрайда.
  • Cron‑расписание решает, в какие часы работает onzone.py, а в какие — offzone.py.

Создайте начальные контрольные файлы, запустив offzone.py один раз: это создаст необходимые файлы состояния.

python offzone.py

Шаг 5: Планирование задач cron и автозапуск сервера

Откройте crontab для root, чтобы скрипты выполнялись с нужным окружением:

sudo crontab -e

Вставьте две строки (пример — часы, где разрешено включение света через onzone.py):

* 7,8,9,17,18,19,20,21,22,23 * * * python /home/pi/lighting/onzone.py > /dev/null 2>&1
* 0,1,2,3,4,5,6,10,11,12,13,14,15,16 * * * python /home/pi/lighting/offzone.py > /dev/null 2>&1

Примечание: если пользователь не “pi”, поправьте пути в командах.

Чтобы автозапускать lightserver.py при старте системы, можно добавить запуск в /etc/rc.local или предпочтительнее — создать systemd unit. Пример с rc.local:

sudo nano /etc/rc.local

Добавьте перед строкой exit 0:

nohup python /home/pi/lighting/lightserver.py &

Перезагрузите систему:

sudo reboot

Совет: systemd юнит даёт больше контроля (логи, автоперезапуск). Рассмотрите создание простого сервиса для lightserver.py.

Шаг 6: Тестирование реле через веб‑интерфейс override

Пока нагрузка не подключена, протестируйте реле через браузер в локальной сети (замените IP и порт на свои):

  • Включить реле на 3 минуты:
http://11.22.33.44:1234/overrideon/3

Вы должны услышать щелчок реле.
Проверить оставшееся время оверрайда:

http://11.22.33.44:1234/getoverrideremaining

Проверить статус света:

http://11.22.33.44:1234/lightstatus

Выключить с помощью оверрайда:

http://11.22.33.44:1234/overrideoff

Если ответы приходят корректно и реле щёлкает — можно подключать нагрузку.

Шаг 7: Подключение нагрузки к реле

Отключите питание Raspberry Pi и саму нагрузку от сети. Подключите лампу через нормально разомкнутые контакты (NO) реле, как будто это обычный выключатель: разорвите одну фазную линию (Live), соедините с COM реле, и от NO к нагрузке.

Вставка реле в цепь освещения

Важно: не подключайте ноль через реле; коммутируйте фазу. Всегда используйте предохранители и соблюдайте ПУЭ/локальные правила безопасности.

Дополнительные улучшения и интеграции

  • Голосовое управление: используйте IFTTT + Alexa или Webhooks для прокидывания команд в lightserver.py.
  • Siri Shortcuts: можно отправлять HTTP‑запросы для управления оверрайдом.
  • HTTPS и аутентификация: по умолчанию lightserver прост и незащищён. Для удалённого доступа обязательно настройте VPN, SSL/TLS и токены/пароли.

IFTTT Applet для интеграции умного света с Alexa

Отладка и распространённые проблемы

  • i2cdetect не видит устройство: проверьте проводку SDA/SCL, питание и включён ли I2C в raspi-config.
  • Скрипты не выполняются в cron: убедитесь, что пути абсолютные, окружение (PYTHONPATH) корректно, перенаправляйте вывод в лог для диагностики.
  • Реле не щёлкает: проверьте питание JD‑VCC (5 V) и земля. Иногда модули требуют отдельного 5 В для питания катушек реле.

Критерии приёмки

  • Скрипт test.py возвращает корректное число люкс и оно изменяется при заслонении датчика.
  • При запросе /overrideon/3 реле срабатывает и отрабатывает 3 минуты.
  • Cron‑задачи onzone.py и offzone.py запускаются каждую минуту в настроенные часы.
  • После подключения нагрузки лампа физически включается/выключается при срабатывании реле.

Режимы зрелости проекта

  • Уровень 1 — Proof of concept: всё работает локально, без защиты, тесты вручную.
  • Уровень 2 — Базовая надёжность: системd‑сервис для lightserver, логирование, бэкапы скриптов.
  • Уровень 3 — Производство: защита HTTPS/VPN, ограничения доступа, мониторинг, резервный шлюз.

Когда такой подход не подходит (контрпример)

  • Для критических приложений (аварийное освещение, безопасность) DIY‑реле на базе потребительского модуля не подходит — используйте сертифицированные контроллеры и схемы с избыточностью.
  • Если в помещении прямые солнечные лучи часто попадают на датчик — показания будут нерелевантны, используйте дуал‑сенсорную логику или размещайте датчик в теневой зоне.

Быстрый SOP — пошаговая инструкция для установки (короткая версия)

  1. Отключить питание Pi и лампы.
  2. Подключить реле к GPIO (см. раздел Шаг 1).
  3. Подключить TSL2561 к I2C (см. Шаг 2).
  4. Включить Pi, активировать I2C и установить зависимости (Шаг 3).
  5. Скачайте скрипты и запустите python offzone.py 1 раз.
  6. Настройте cron и автозапуск сервера.
  7. Протестируйте override без нагрузки; затем подключите нагрузку и повторите тесты.

План тестирования и критерии приёмки (короткие тесты)

  • Тест 1: test.py — показание люкс > 0.
  • Тест 2: /overrideon/1 — реле щёлкает, свет включается на ~1 минуту.
  • Тест 3: Запуск onzone.py при lowlux ниже порога — свет включается.
  • Тест 4: offzone.py — принудительное выключение в off‑час.

Мероприятия при инциденте (runbook)

  1. Если реле заело (свет не выключается): немедленно отключите питание нагрузки и Pi.
  2. Проверьте, не застрял ли контакт механически — замените реле.
  3. Проанализируйте логи lightserver и cron; проверьте файлы состояния проекта.
  4. Если подозрение на сетевую атаку (неавторизованные команды), отключите доступ извне и смените конфигурацию сети.

Безопасность и конфиденциальность

  • Не выставляйте lightserver.py в Интернет без VPN/HTTPS и авторизации.
  • Отдалённый контроль через IFTTT/Alexa — удобен, но добавляет третьих сторон: внимательно читайте политику платформ по безопасности.
  • Датчик освещённости не хранит персональных данных — риски приватности минимальны, но сервер управления может логировать IP и команды.

Советы по локализации и российским реалиям

  • В РФ стандарт сети — 230 В, 50 Гц. При подключении нагрузки учитывайте соответствие предохранителей и автоматов.
  • Магазины: платы реле, датчики и джамперы доступны на локальных и международных маркетплейсах; обращайте внимание на продавца и отзывы.

Альтернативные подходы

  • Использовать готовый Zigbee/Z‑Wave реле и шлюз (более защищённо, но дороже).
  • Home Assistant: перевести логику в HA — удобный UI, интеграции и автоматизации.
  • Использовать ESP32/ESP8266 вместо Raspberry Pi для экономии энергии и меньшей стоимости, но с ограниченным набором библиотек и возможностями.

Дерево решений (Mermaid)

flowchart TD
  A[Запланировано по расписанию?] -->|Да| B[Проверить lux]
  A -->|Нет| C[Off‑зона → Выключить]
  B -->|lux < lowlux| D[Включить свет]
  B -->|lux >= lowlux| E[Выключить свет]
  D --> F{Есть оверрайд?}
  F -->|Да| D
  F -->|Нет| D
  C --> G[Конец]
  E --> G

Короткий глоссарий (1‑строчно)

  • I2C: последовательный шинный интерфейс для обмена данными между платами.
  • Lux: единица освещённости.
  • JD‑VCC/VCC: раздельные питания на модуле реле.
  • Override: временное ручное переопределение автоматической логики.

Роль‑ориентированные чек‑листы

  • Хоббист: собрать и протестировать систему в безопасном макете, не подключая сеть.
  • Домашний установщик: проверить крепления датчика, маршруты кабелей, защиту от влаги/пыли.
  • Электрик: выполнить подключение нагрузки к сети, установить автомат и проконтролировать заземление.

Краткое резюме

  • Проект даёт гибкую, дешёвую автоматизацию освещения с тремя входами управления: расписание, уровень света и удалённый оверрайд.
  • Обязательно соблюдайте технику безопасности при работе с сетевым питанием и защищайте веб‑сервер от доступа извне.
  • Возможны расширения: голосовые ассистенты, Home Assistant, systemd‑unit и шифрование.

Если хотите, могу подготовить systemd unit‑файл для lightserver.py, пример конфигурации Nginx прокси с SSL или адаптировать cron‑расписание под ваш часовой пояс и потребности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как перезагрузить iPhone — все способы и решение проблем
Инструкции

Как перезагрузить iPhone — все способы и решение проблем

Меню Power User (Win+X) в Windows — как открыть и использовать
Windows

Меню Power User (Win+X) в Windows — как открыть и использовать

Выйти из Mail на Mac — отключить или удалить
macOS Почта

Выйти из Mail на Mac — отключить или удалить

Продлить срок службы жёсткого диска
Аппаратное обеспечение

Продлить срок службы жёсткого диска

11 команд для управления файлами в терминале Linux
Linux

11 команд для управления файлами в терминале Linux

Netstat в Windows: как использовать
Сеть

Netstat в Windows: как использовать