{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Блоги: заметки с тегом home assistant",
    "_rss_description": "Автоматически собираемая лента заметок, написанных в блогах на Эгее",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": false,
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/blogengine.me\/blogs\/tags\/home-assistant\/",
    "feed_url": "https:\/\/blogengine.me\/blogs\/tags\/home-assistant\/json\/",
    "icon": false,
    "authors": [
        {
            "name": "Илья Бирман",
            "url": "https:\/\/blogengine.me\/blogs\/",
            "avatar": false
        }
    ],
    "items": [
        {
            "id": "134734",
            "url": "https:\/\/kini24.ru\/all\/poluchaem-dannye-s-sayta-sgk-dlya-home-assistant\/",
            "title": "Получаем данные с сайта СГК для Home Assistant",
            "content_html": "<p>В Home Assistant у меня было отслеживание почти всех счетов по квартире: электроэнергия, коммунальные платежи, ТКО, капитальный ремонт и т. д. Проблема была только с сайтом компании СГК, которая занимается предоставлением горячей и холодной воды, отоплением и водоотведением. При помощи таких интеграций, как scrape и multiscrape загрузить данные с их сайта не получалось, поэтому пришлось пойти более сложным путем и написать свой скрипт. На деле он оказался совсем простым, требует доработки в плане проверок ответов сервера, но даже в таком виде он вполне работоспособен. Чтобы не перечислять все данные, возьму только отопление.<\/p>\n<code python>\nimport requests\nimport json\n\nlogin = data.get(\"username\", \"\")\npassword = data.get(\"password\", \"\")\nlogin_url = 'https:\/\/krk.sibgenco.services\/Account\/Auth'\ndata_url = 'https:\/\/krk.sibgenco.services\/fl\/accounts\/getAccounts'\n\nheaders = {\n    \"Content-Type\": \"application\/x-www-form-urlencoded; charset=UTF-8\",\n    \"User-Agent\": \"Mozilla\/5.0 (Windows NT 6.1; Win64; x64; rv:109.0) Gecko\/20100101 Firefox\/115.0\",\n}\n\n# Создаем новую сессию\nsession = requests.Session()\n# Авторизуемся на сервере\nresult = session.post(login_url, data = 'login=' + login + '&password=' + password, headers = headers)\n# print(result.text)\n\n# Получаем данные в JSON формате\nresult = session.get(data_url, headers = headers).json()\nsession.close()\n\n# Перекодируем текст в читаемый\nresult = result.encode().decode('unicode-escape', 'ignore')\nresult = json.dumps(result)\nresult = json.loads(result)\n\n# Убираем лишние кавычки в разделе \"Cards\" (откуда взялись?)\nresult = result.replace('\"Cards\":\"', '\"Cards\":').replace('}]\"}', '}]}')\n# print(type(result))\n# print(result)\n\nif len(result) > 0:\n    logger.info(\"Данные от СКГ получены\")\nelse:\n    logger.warning(\"Ошибка получения данных от СГК\")\n# print(result.encode().decode('unicode-escape', 'ignore'))\n\n# Преобразуем строку данных в JSON объект\njson_data = json.loads(result)[\"Accounts\"][0][\"CalcData\"][\"Products\"]#[0][\"ToPay\"]\n\n# print(json_data, '\\n')\n# print(json.dumps(json_data), '\\n')\n\n# for product in json_data[\"Accounts\"][0][\"CalcData\"][\"Products\"]:\n#     print(product[\"ItemName\"] + \": \" + str(product[\"ToPay\"]) + \" руб.\")\n\nif json_data[0][\"ToPay\"] > 0:\n    hass.states.set('sensor.sgk_heating', json_data[0][\"ToPay\"] * -1)\nelse:\n    hass.states.set('sensor.sgk_heating', json_data[0][\"ToPay\"])\n<\/code>\n<p>В ходе работы скрипта получаем несколько секций для каждой из услуг, которые выглядят вот так:<\/p>\n<code json>\n  - IsFine: false\n    Item: 13\n    ContractId: 307015\n    ItemName: Отопление\n    SaldoBegin: 4228.65\n    Paid: 4228.65\n    SaldoEnd: 0\n    FineEndCheck: true\n    FineEnd: 0\n    AccrualsCheck: false\n    Accruals: 0\n    Recalculation: 0\n    ToPayCheck: true\n    ToPay: 0\n    ChargeDetails: \"\"\n    PayDetails: 08.02.2025 4228.65;\n    FinePayDetails: \"\"\n    WebPayDetails: 08.02.2025=5338.65=20250208171312-99240-6764617.585349\n<\/code>\n<p>Далее просто создаем автоматизацию в Home Assistant, которая будет запускать этот скрипт. Для надежности перед первым запуском создаем несколько новых сенсоров в примерно таком формате:<\/p>\n<code python>\n    # Задолженность за отопление, итого\n    heating_debt_summary:\n      unique_id: <тут ваш ID сенсора>\n      attribute_templates:\n        Пеня: \"{{ states('sensor.sgk_heating_penya') }} ₽\"\n      device_class: monetary\n      friendly_name: Задолженность за отопление\n      unit_of_measurement: \"RUB\"\n      # value_template: \"{{ states('sensor.sgk_heating') | float(0) + states('sensor.sgk_heating_penya') | float(0) }}\"\n      value_template: \"{{ states('sensor.sgk_heating') | float(0) }}\"\n<\/code>\n<p>Как видно, в сенсоре будет также атрибут «пеня». Можно вывести суммарную задолженность — долг+пеня, можно вывести только основную — на выбор.<br \/>\nИ вот после сайта СГК меня слегка «понесло» и сделал схожие скрипты для получения информации с сайтов ФНС, капремонта, энергосбыта и регистратора доменов. С ФНС было интересно — там сначала нужно пройти basic-авторизацию, получить токен безопасности, авторизоваться еще раз и слать его при каждом запросе данных. А дальше было уже намного легче — у ФНС существует API, которое они активно используют. Официальной документации по нему нет, но, покопавшись на сайте, можно легко получить все запросы. Для чего нужны эти данные? Например, чтобы отслеживать задолженность по налогам (в том числе и самозанятого), недвижимость и банковские счета. Сейчас такое время, что на тебя могут открыть какой-то счет в банке, сделать тебя «начальником» какой-то конторы, а ты даже будешь не в курсе. Но стоит отметить, что в налоговой отображаются только обычные, дебетовые счета, информации по кредитам там нет.<\/p>\n",
            "date_published": "2025-02-20T08:22:01+05:00",
            "date_modified": "2025-03-27T09:18:56+05:00",
            "tags": [
                "home assistant",
                "python",
                "Вода",
                "данные",
                "налоговая",
                "отопление",
                "получение",
                "Сайт",
                "сгк",
                "скрипт"
            ],
            "author": {
                "name": "Копытов Иван",
                "url": "https:\/\/kini24.ru\/",
                "avatar": ""
            },
            "_date_published_rfc2822": "Thu, 20 Feb 2025 08:22:01 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "134734",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "125519",
            "url": "https:\/\/kini24.ru\/all\/dvizhenie-avtobusov-v-home-assistant\/",
            "title": "Движение автобусов в Home Assistant",
            "content_html": "<h3>Добавление движения общественного транспорта в Home Assistant<\/h3>\n<p>Наконец-то у меня получилось. Как обычно, делал всё сильно неспешно при наличии свободного времени и желания. «Воды» не будет, поэтому поехали.<br \/>\nСейчас не вспомню как, но как-то я вышел на адрес сайта, который отдает данные в формате JSON. Так как меня интересовал в первую очередь конкретный маршрут трамвая, то я получил вот такой вот адрес:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">https:\/\/mu-kgt.ru\/informing\/wap\/marsh\/?m=6%F2%F0&amp;action=getMarshData<\/code><\/pre><p>Что здесь интересного?<\/p>\n<ul>\n<li><i>m=6%F2%F0<\/i> — номер маршрута и обозначение типа транспорта. В данном случае часть «%F2%F0» — это всего лишь русские буквы «тр», то есть трамвай. Для троллейбуса это будет просто «т» или «%F2», для автобуса это либо «а», либо вообще без буквы — если честно, не пробовал, да и лень было.<\/li>\n<li><i>action=getMarshData<\/i> — вызывает одноименную функцию в скрипте.<br \/>\nПереходим в Home Assistant. Здесь я создал новый сенсор в configuration.yaml такого вида:<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"\">sensor:\r\n  - platform: rest\r\n    resource: https:\/\/mu-kgt.ru\/informing\/wap\/marsh\/?m=6%F2%F0&amp;action=getMarshData\r\n    name: Трамвай 6 прибытие\r\n    unique_id: tram6_arrival\r\n    value_template: &quot;{{ value_json.ts_line.A[-1].st_arrive }}&quot;\r\n    scan_interval: 120<\/code><\/pre><p>Самое важное здесь — value_template, в котором содержится путь до нужной остановки, по которой получаем информацию о времени прибытия. Буквой «А» закодировано направление движения транспорта, которое вы видите в левой части экрана, а буквой «В» — в правой части экрана.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/kini24.ru\/pictures\/Snimok-ekrana-ot-2024-01-17-23-04-37@2x.png\" width=\"656\" height=\"329\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Такие же буквы присутствуют на самом сайте и в приложении.<\/div>\n<\/div>\n<p>Я сделал два сенсора: прибытие и убытие, чтобы ориентироваться когда придет следующий трамвай на конечную остановку. Можно оформить и получше, но это — не главное.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/kini24.ru\/pictures\/Snimok-ekrana-ot-2024-01-17-21-16-28@2x.png\" width=\"243\" height=\"85\" alt=\"\" \/>\n<div class=\"e2-text-caption\">Вид сенсоров в Home Assistant<\/div>\n<\/div>\n<p>Ах да, чуть не забыл. Как посмотреть номер нужной остановки? Открываем страницу по <a href=\"https:\/\/mu-kgt.ru\/informing\/wap\/online\/\">ссылке<\/a>, выбираем тип транспорта, маршрут и направление движения. Затем щелкаем на нужной остановке, чтобы открыть прогноз движения транспорта. Среди прочей информации будет строка вида:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Остановка: Детский кинотеатр «Мечта» (код 336)<\/code><\/pre><p>В скобках мы и увидим код остановки. В данных, которые нам отдает скрипт по запросу, это код содержится в поле <i>st_regnum<\/i>.<\/p>\n<p>И еще небольшое дополнение. Значения «0» и «-1», конечно, хороши для выбора конечных остановок при условии, что мы не знаем количество остановок на маршруте, который может измениться, например, из-за ремонта дороги или аварии. Следующий шаблон выбирает остановку с заданным кодом:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">value_template: &gt;-\r\n  {% set stops = value_json.ts_line.A %}\r\n  {% for stop in stops %}\r\n    {% if stop.st_regnum == 1989 %} {{ stop.st_arrive }} {% endif %}\r\n  {% endfor %}<\/code><\/pre>",
            "date_published": "2024-01-17T21:26:21+05:00",
            "date_modified": "2024-01-30T10:17:10+05:00",
            "tags": [
                "home assistant",
                "online",
                "автобус",
                "Движение",
                "Красноярск",
                "красноярскгортранс",
                "портал",
                "Сайт",
                "трамвай",
                "транспорт",
                "троллейбус"
            ],
            "author": {
                "name": "Копытов Иван",
                "url": "https:\/\/kini24.ru\/",
                "avatar": ""
            },
            "_date_published_rfc2822": "Wed, 17 Jan 2024 21:26:21 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "125519",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        },
        {
            "id": "125446",
            "url": "https:\/\/kini24.ru\/all\/uhod-s-domoticz-na-home-assistant\/",
            "title": "Уход с Domoticz на Home Assistant",
            "content_html": "<p>Попробую сравнить эти две системы «умного дома».<br \/>\nНа Domoticz я «просидел» несколько лет. Эта система была хороша тем, что имела низкий порог вхождения, не требовала особых ресурсов и имела достаточно много возможностей. Что я понял спустя некоторое время:<\/p>\n<ol start=\"1\">\n<li>Интерфейс достаточно жестко закреплен. Вы не можете создавать свои вкладки (разделы), только заданные разработчиками.<\/li>\n<li>Нельзя сгруппировать датчики одного устройства в группу. Один датчик — одна карточка. Которые могут быть разнесены по разным разделам. Например, данные из домашней метеостанции будут присутствовать в трех разделах, между которыми нужно переключаться, чтобы получить всю информацию от нее.<\/li>\n<li>Есть темы оформления, но их мало и не все работают корректно. Некоторые предъявляют требования к именам устройств, чтобы была возможность объединить их в одну карточку.<\/li>\n<li>Чтобы получить данные с сайта, из операционной системы или что-то еще, выходящее за рамки протокола MQTT — придется использовать python или lua. Тут, кстати, небольшой «плюс» — скрипты хранятся в базе данных. После запуска Domoticz они выгружаются во внешние файлы. Зачем? Ладно, пусть.<\/li>\n<li>База данных имеет формат SQLite. Тут свои «плюсы» и «минусы».<\/li>\n<li>Группа Domoticz в Telegram, в которой я состоял, «топит» за использование «домика» в связке c Node-Red. Я не любитель установки множества программ на сервер, поэтому от последнего отказался. Что, с одной стороны, сильно меня ограничило в изменении интерфейса системы, с другой... Да ну его нафиг! Там свои ограничения.<\/li>\n<li>Несмотря за заявленную несколько лет назад возможность синхронизации данных между несколькими серверами Domoticz, она так и не была реализована. Судя по некоторым данным, разработчики просто «забили» на неё.<\/li>\n<li>Мне так и не удалось подключить часть устройств, типа пылесоса Xiaomi, телевизора Samsung, чайника Redmond. И, уверен, в ближайшее время, этого не будет в «домике».<\/li>\n<li>Система может просто не запуститься после обновления ОС или если вы допустили ошибку с своем скрипте. Может не понравиться версия glibc, python или его библиотеки. Проверка целостности отсутствует напрочь.<\/li>\n<li>«Умные» колонки вы не подключите.<\/li>\n<\/ol>\n<p>Скорее всего, было что-то еще, что меня не устраивало в этой системе, но я перечислил основное. К тому же на меня порой «находит» и я начинаю экспериментировать. Поэтому качаем образ Home Assistant для KVM и начинаем пробовать что он может.<\/p>\n<ol start=\"1\">\n<li>У меня много «простых» устройств, работающих по протоколу MQTT. Их пришлось прописать ручками. Копипаста с небольшими правками сильно помогла. Это был начальный этап, я еще ничего не знал. НА может обнаруживать такие устройства сама.<\/li>\n<li>Пылесос, телевизор, чайник «влетели» как родные, после установки нужных дополнений.<\/li>\n<li>Базу данных в формате MySQL пришлось подключать ручками. Основной формат опять же был SQLite, но для большой истории показаний он не годится. Перенес данные из Domoticz в Home Assistant (есть скрипт в интернете).<\/li>\n<li>Сделал нужные мне разделы (вкладки) в интерфейсе, занес в них нужные устройства с нужными параметрами. Разница с Domoticz просто огромная.<\/li>\n<li>Оповещения в Jabber, Telegram, на почту подключаются достаточно просто.<\/li>\n<li>Нашел несколько групп в Telegram по этой системе. Общение между участниками идет постоянно, поэтому пришлось отключить уведомления.<\/li>\n<li>Парсинг данных с сайтов вообще порадовал — достаточно указать URL, с которого будешь забирать данные и тэг, который нужно искать. Ну и номер тэга иногда.<\/li>\n<li>Есть проверка ошибок конфигурации перед перезапуском. Если найдет — выдаст предупреждение. Это вообще кайф :-)<\/li>\n<li>По ресурсам, конечно, более требовательна, но оно того стоит.<\/li>\n<li>Хотите подключить колонку яндекса или марусю — не вопрос!<\/li>\n<\/ol>\n<p>Наверное, на этом закончу. Продолжу тему в другой заметке — там уже много чего описать.<\/p>\n",
            "date_published": "2024-01-13T14:36:35+05:00",
            "date_modified": "2024-01-13T14:37:23+05:00",
            "tags": [
                "domoticz",
                "home assistant",
                "переход",
                "сервер",
                "сравнение",
                "умный дом"
            ],
            "author": {
                "name": "Копытов Иван",
                "url": "https:\/\/kini24.ru\/",
                "avatar": ""
            },
            "_date_published_rfc2822": "Sat, 13 Jan 2024 14:36:35 +0500",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "125446",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": null,
                "og_images": []
            }
        }
    ],
    "_e2_version": 4079,
    "_e2_ua_string": "Aegea 11.0 (v4079e)"
}