Легко контролируйте потребление электроэнергии в доме. Docker и Homeassistant помогут вам сэкономить электроэнергию и деньги.
Легко контролируйте потребление электроэнергии в доме. Docker и Homeassistant помогут вам сэкономить электроэнергию и деньги.

⚡️Приобретение электроэнергии в государственной сети

Это приложение может помочь вам подключить данные о счетах за электроэнергию и энергопотреблении государственной сети к HomeAssistant для отслеживания энергопотребления в доме в режиме реального времени. Оно также может сохранять ежедневное энергопотребление в базе данных, чтобы можно было отслеживать историю. В частности, предоставляются два типа данных:

Отображается как объект в HomeAssistant:

Идентификатор сущности

иллюстрировать

last_electricity_usage

Потребление электроэнергии за последние сутки, в КВтч, киловатт час. Атрибут содержит Present_date (запрос даты, представленной батареей)

electricity_charge_balance

Предоплата отображает остаток счета за электроэнергию, в противном случае отображается счет за электроэнергию, подлежащий оплате в прошлом месяце, в юанях.

yearly_electricity_usage

Общий расход электроэнергии в этом году, ед. к Втч, киловатт-час.

yearly_electricity_charge

Общая стоимость электроэнергии в этом году, юань

Необязательные данные о ежедневном энергопотреблении за последние тридцать дней (база данных mongodb), например:

1. Область применения

  1. Применимо к пользователям, за исключением провинций, входящих в состав южной энергосистемы Китая. То есть, кроме Гуандуна、Гуанси、Юньнань、Гуйчжоу、Пользователи на Хайнане и других провинциях могут использовать это приложение для получения электроэнергии.、Счет за электроэнергиюданные。
  2. Независимо от того, какой домашний помощник установлен, если он поддерживает Python, имеет около 1 ГБ места на жестком диске и 500 МБ оперативной памяти, его можно развернуть на этом складе.

Это изображение поддерживает архитектуру:

  • linux/amd64:Применимо к архитектура x86-64 (amd64) Linux систему, например компьютер с ОС Windows.
  • linux/arm64:Применимо к ARMv8 архитектурный Linux Такие системы, как Raspberry Pi, коробка N1.
  • linux/arm/v7:Применимо к ARMv7 архитектурный Linux Системы, такие как Wanke Cloud.
  • Другие архитектуры можно собрать в репозитории github самостоятельно.

2. Процесс реализации

Получите данные National Grid через пакет selenium Python и используйте REST API, предоставленный homeassistant, для обновления статуса объекта до homeassistant с помощью запросов POST.

3. Установка

1) Способ 1 (рекомендуется): быстрое развертывание образа докера.

Установите докер и homeassistant, минималистичный метод установки Homeassistant.

Создать папку проекта

Язык кода:javascript
копировать
mkdir sgcc_electricity
cd sgcc_electricity 

Создать файл переменных среды

Язык кода:javascript
копировать
vim .env

Обратитесь к следующим файлам, чтобы записать файл .env.

Язык кода:javascript
копировать
# Следующие элементы необходимо изменить
# Государственная сеть Авторизоваться информация
PHONE_NUMBER="xxx" # Измените его на свой. Авторизоваться.
PASSWORD="xxxx" # Сменить пароль на свой Авторизоваться

# база данных Конфигурация
ENABLE_DATABASE_STORAGE=True # or False Отключить базу data хранит данные о ежедневном потреблении электроэнергии.
# база данные могут заполнить существующую монгодббазу данных
MONGO_URL="mongodb://USERNAME:PASSWORD@localhost:27017/" # база данныхадрес Изменить ИМЯ ПОЛЬЗОВАТЕЛЯ ПАРОЛЬ и локальный хост
DB_NAME="homeassistant" # база имя данных, по умолчанию — homeassistant
# COLLECTION_NAME по умолчанию имеет значениеelectric_daily_usage_{идентификатор пользователя State Grid} и не поддерживает изменение.

# homeassistantКонфигурация
HASS_URL="http://localhost:8123/" # Измените свой локальный хост на адрес вашего домашнего помощника.

HASS_TOKEN="eyxxxxx" # долгосрочный токен домашнего помощника

# Параметры работы Selenium
JOB_START_TIME="07:00" # Время запуска задачи в 24-часовом формате, например «07:00», означает, что она будет выполняться в 7 утра каждый день. Если программа запускается в первый раз позже 7 утра, она будет выполняться немедленно.

## Другие параметры по умолчанию
DRIVER_IMPLICITY_WAIT_TIME=60 # Время ожидания браузера по умолчанию, секунды.
RETRY_TIMES_LIMIT=5 # Авторизоваться Количество повторов
LOGIN_EXPECTED_TIME=60 # Таймаут авторизации, секунды
RETRY_WAIT_TIME_OFFSET_UNIT=10 
FIRST_SLEEP_TIME=10 # Время ожидания первого запуска, секунды

# Уровень журнала
LOG_LEVEL="INFO" # Например, «DUBUG» может проверить ситуацию с ошибкой.

Напишите файл docker-compose.yml.

Язык кода:javascript
копировать
vim docker-compose.yml

Заполните следующее содержимое

Язык кода:javascript
копировать
version: "3"

services:
  app:
    env_file:
      - .env
    image: renhai/sgcc_electricity:latest # renhai/sgcc_electricity:armv7-latest
    container_name: sgcc_electricity
    network_mode: bridge
    environment:
      - SET_CONTAINER_TIMEZONE=true
      - CONTAINER_TIMEZONE=Asia/Shanghai
    restart: unless-stopped
    command: python3 main.py

# По умолчанию данные записываются в монгобазу почти 30 дней. данные, легко запросить
  mongo:
    image: mongo:4.4.18
    restart: always
    container_name: mongo-for-sgcc
    network_mode: bridge
    environment:
      MONGO_INITDB_ROOT_USERNAME: USERNAME # Измените свое имя пользователя
      MONGO_INITDB_ROOT_PASSWORD: PASSWORD # Измените свой пароль
      MONGODB_DATABASE: "homeassistant" # Измените его на свою собственную базу данныхимя,и.envвбаза данныхимя一致      CONTAINER_TIMEZONE: Asia/Shanghai
    volumes:
      - ./db:/data/db
    ports:
      - "27017:27017"

4. Настройка и использование

1) Для первого запуска необходимо создать и заполнить файл .env и заполнить его согласно инструкции к файлу.

2) (Необязательно) Измените объект

Заполните файл конфигурации homeassistant.

Поскольку датчик создается с использованием метода REST API, регистрация объекта не требуется, и его нельзя редактировать в веб-интерфейсе. При необходимости вы можете добавить следующую конфигурацию в файл Configuration.yaml и перезапустить HA, чтобы иметь возможность редактировать соответствующие объекты в веб-интерфейсе, чтобы можно было изменять объекты с суффиксом _entity.

  • Если у вас есть домашний номер, пожалуйста, обратитесь к следующему:
Язык кода:javascript
копировать
# Example configuration.yaml entry
# В файле может быть только один шаблон
template:
  # Справочная документация: https://www.home-assistant.io/integrations/template.
  - trigger:
      - platform: event
        event_type: "state_changed"
        event_data:
          entity_id: sensor.electricity_charge_balance
    sensor:
      - name: electricity_charge_balance_entity
        unique_id: electricity_charge_balance_entity
        state: "{{ states('sensor.electricity_charge_balance') }}"
        state_class: measurement
        unit_of_measurement: "CNY"
        device_class: monetary
        
  - trigger:
      - platform: event
        event_type: "state_changed"
        event_data:
          entity_id: sensor.last_electricity_usage
    sensor:
      - name: Потребление электроэнергии за последние сутки
        unique_id: last_electricity_usage_entity
        state: "{{ states('sensor.last_electricity_usage') }}"
        attributes:
          present_date: "{{ state_attr('sensor.last_electricity_usage', 'present_date') }}"
          last_updated: "{{ state_attr('sensor.last_electricity_usage', 'last_updated') }}"
        state_class: total
        unit_of_measurement: "kWh"
        device_class: energy
        
  - trigger:
      - platform: event
        event_type: "state_changed"
        event_data:
          entity_id: sensor.yearly_electricity_usage
    sensor:
      - name: yearly_electricity_usage_entity
        unique_id: yearly_electricity_usage_entity
        state: "{{ states('sensor.yearly_electricity_usage') }}"
        state_class: total_increasing
        unit_of_measurement: "kWh"
        device_class: energy

  - trigger:
      - platform: event
        event_type: "state_changed"
        event_data:
          entity_id: sensor.yearly_electricity_charge
    sensor:
      - name: yearly_electricity_charge_entity
        unique_id: yearly_electricity_charge_entity
        state: "{{ states('sensor.yearly_electricity_charge') }}"
        state_class: total_increasing
        unit_of_measurement: "CNY"
        device_class: monetary
  • Если у вас несколько номеров учетной записи, обратитесь к файлу Configuration.yaml Конфигурация для каждого номера учетной записи. Примечание. Если у вас есть один номер учетной записи, это будет указанное выше имя объекта в HA; ****Если у вас несколько номеров учетной записи, к имени объекта также будет добавлен суффикс «_номер учетной записи», например: датчик. Last_electricity_usage_1234567890

❗️После настройки используйте сущности с сущностями. Например, используйте Sensor.last_electricity_usage_entity_1234567890 вместо Sensor.last_electricity_usage_1234567890.

3) (Опционально) Отображение данных в пределах га

Объедините mini-graph-card](https://github.com/kalkih/mini-graph-card) и гриб, чтобы добиться эффекта:

Язык кода:javascript
копировать
type: custom:mini-graph-card
entities:
  - entity: sensor.last_electricity_usage_entity
    name: Ежедневное потребление электроэнергии Госсетью
    aggregate_func: first
    show_state: true
    show_points: true
group_by: date
hour24: true
hours_to_show: 240

4) (Необязательно) Сотрудничайте с лестницей потребления электроэнергии, чтобы получать цены на электроэнергию в режиме реального времени.

image-20230729172257731

Конкретная операция:

Измените файл homeassistant.yml, а затем перезапустите или перезагрузите файл конфигурации. Обратите внимание, что Sensor.yearly_electricity_usage_entity в текущей лестнице должен быть изменен в соответствии с вашей реальной ситуацией:

Язык кода:javascript
копировать
# В файле может быть только один датчик
sensor:
  # Цена на электроэнергию в реальном времени
  - platform: template #Название платформы
    sensors: #список датчиков
      real_time_electricity_price: #Имя объекта: только строчные буквы, подчеркивание
        unique_id: "real_time_electricity_price" #UID (обязательно)
        friendly_name:  'Цена на электроэнергию в реальном времени' #Псевдоним датчика, отображаемый на веб-интерфейсе (необязательно)
        unit_of_measurement: "CNY/kWh" #Единица измерения датчика (необязательно)
        icon_template: mdi:currency-jpy #Значок по умолчанию
        value_template: > #Определите шаблон для получения статуса датчика (обязательно). Цифры 6 и 22 ниже относятся к 6 часам, а 22 часа относятся к лестнице 123. 6 цен. пиковые и минимальные цены трех лестниц соответственно.
          {% if now().strftime("%H")| int >= 6 and now().strftime("%H")|int < 22 and states("sensor.current_ladder")=="1" %}
            0.617
          {%elif now().strftime("%H")| int >= 6 and now().strftime("%H")|int < 22 and states("sensor.current_ladder")=="2" %}
            0.677
          {%elif now().strftime("%H")| int >= 6 and now().strftime("%H")|int < 22 and states("sensor.current_ladder")=="3" %}
            0.977
          {% elif states("sensor.current_ladder")=="1" %}
            0.307
          {% elif states("sensor.current_ladder")=="2" %}
            0.337
          {% elif states("sensor.current_ladder")=="3" %}
            0.487
          {% endif %}

# текущая лестница
  - platform: template
    sensors:
      current_ladder:
        unique_id: "current_ladder"
        friendly_name:  'текущая лестница'
        unit_of_measurement: "сорт"
        icon_template: mdi:elevation-rise
        value_template: > #Вот три значения ладдера в Шанхае: второй ладдер — 3120, третий — 4800
          {% if states("sensor.yearly_electricity_usage_entity") | float <= 3120 %}
          1
          {% elif states("sensor.yearly_electricity_usage_entity") | float >3120 and states("sensor.yearly_electricity_usage_entity") | float <= 4800 %}
          2
          {% else %}
          3
          {% endif %}

Его можно настроить на энергетической панели для пошагового расчета энергопотребления для устройств, умеющих считать мощность.

tip:Открытьha>Панель управления>энергия>Добавить электричестводанные>Цена на электроэнергию в реальном временисущность-выбиратьreal_time_electricity_price。

5) Уведомление о батарее

Вы можете использовать встроенные уведомления homeassistant или другие службы уведомлений, такие как pushdeer.

напиши в конце

Первоначальный автор: https://github.com/louisslee/sgcc_electricity, оригинальный README_origin.md. Кто-то синхронизировал:https://github.com/liantianji/sgcc_electricity

Мои нестандартные детали включают в себя:

Добавлены части:

  • Увеличьте ежедневную емкость батареи за последние 30 дней и напишите базу данные (mongodb по умолчанию), другая база данных Пожалуйста, сделай это сам Конфигурация。
  • Установите прерывистое выполнение на выполнение по расписанию: JOB_START_TIME, 24-часовой формат, например «07:00» означает выполнение в 7 утра каждый день. Если программа запускается первый раз позже 7 утра, она будет выполняться немедленно.
  • Добавьте Present_date к Last_daily_usage, чтобы определить, в какой день будет обновлено питание. Обычно дата запроса наступает на один-два дня позже.
  • Измените часть пользовательской сущности в файле Configuration.yaml.

TO-DO

  • [ ] Добавить несколько методов выполнения
  • [ ] Добавить службу push-уведомлений по умолчанию
  • [ ] Добавить больше базы данныхподдерживать
  • [ ] 。。。
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose