<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>𝐀𝐥𝐞𝐤𝐬𝐚𝐧𝐝𝐫 𝐌</title><generator>teletype.in</generator><description><![CDATA[𝐀𝐥𝐞𝐤𝐬𝐚𝐧𝐝𝐫 𝐌]]></description><image><url>https://img3.teletype.in/files/28/a5/28a57c52-d369-4c33-b8b4-2d22f7385e61.png</url><title>𝐀𝐥𝐞𝐤𝐬𝐚𝐧𝐝𝐫 𝐌</title><link>https://teletype.in/@blacksli</link></image><link>https://teletype.in/@blacksli?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=blacksli</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/blacksli?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/blacksli?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 29 Apr 2026 16:15:42 GMT</pubDate><lastBuildDate>Wed, 29 Apr 2026 16:15:42 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@blacksli/domofon_ufanet_home_assistant</guid><link>https://teletype.in/@blacksli/domofon_ufanet_home_assistant?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=blacksli</link><comments>https://teletype.in/@blacksli/domofon_ufanet_home_assistant?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=blacksli#comments</comments><dc:creator>blacksli</dc:creator><title>Открытие домофона Уфанет из home assistant</title><pubDate>Fri, 21 Nov 2025 15:13:51 GMT</pubDate><description><![CDATA[Спасибо @Hxhxkgsk за изучение механизмов уфанета и написание скрипта!!!]]></description><content:encoded><![CDATA[
  <p id="yAYA">Спасибо @Hxhxkgsk за изучение механизмов уфанета и написание скрипта!!!</p>
  <p id="ewpY">1. Ставим интеграцию PythonScriptsPro<br />https://github.com/AlexxIT/PythonScriptsPro</p>
  <p id="0hIj">2. Создаем в папке config место хранения скрипта<br />Например, я сделал /config/pythonScriptPro/</p>
  <p id="FAQ0">3. Создаем в каталоге файлик, например ufanet_domofon.py<br />и в него вносим сам скрипт. Таким образом у меня путь до скрипт получился <br />/config/pythonScriptPro/ufanet_domofon.py</p>
  <p id="J7Aa">Скрипт:</p>
  <pre id="sl0W" data-lang="python">import requests

def get_session_id(login, password):
    login_url = &#x27;https://dom.ufanet.ru/login/&#x27;
    data = {
        &#x27;contract&#x27;: login,
        &#x27;password&#x27;: password
    }
    session = requests.Session()
    response = session.post(login_url, data=data)
    if response.status_code == 200:
        cookies = session.cookies
        sessionid = cookies.get(&#x27;sessionid&#x27;)
        if sessionid:
            return sessionid

def open_door(login, password,domf_id):
    sessionid = get_session_id(login, password)
    url = f&#x27;https://dom.ufanet.ru/api/v0/skud/shared/{domf_id}/open/&#x27;
    coc = {&#x27;sessionid&#x27;:f&#x27;{sessionid}&#x27;}
    response = requests.Session().get(url=url,cookies=coc)
    
open_door(data[&#x27;login&#x27;], data[&#x27;password&#x27;],data[&#x27;domf_id&#x27;])
</pre>
  <p id="tUqF"></p>
  <p id="f15a">4. Идем на сайт <a href="https://dom.ufanet.ru/" target="_blank">https://dom.ufanet.ru/</a>  логинимся под логином, где есть домофон (логин пароль от договора и сайта my.ufanet.ru). На вкладке СКУД должны быть ваши доступные домофоны.<br />Открываем в Chrome панель разработчика (F12) <br />На вкладке элементы находим по Ctrl-F &quot;data-skud&quot; и должно найти элемент потипу:</p>
  <blockquote id="sp4I">&lt;a href=&quot;#&quot; role=&quot;button&quot; class=&quot;btn btn-primary open-skud&quot; data-skud=&quot;1234&quot; data-shared=&quot;1&quot;&gt;Открыть&lt;/a&gt;</blockquote>
  <p id="HqPa">Где 1234 и есть id домофона в системе уфанета который нам понадобится</p>
  <p id="rLlE"></p>
  <p id="Ue3F">5. Остается вызывать скрипт.<br />Для проверки в панели разработчика ХА вкладка действия прописываем скрипт действие</p>
  <pre id="EoEE" data-lang="yaml">action: python_script.exec
data:
  cache: false
  file: /config/pythonScriptPro/ufanet_domofon.py
  login: &quot;1111111111&quot;
  password: &quot;2222222222&quot;
  domf_id: &quot;1234&quot;</pre>
  <p id="ZLaW">Где <strong>login </strong>и <strong>password </strong>это логин и пароль от ufanet.ru<br /><strong>domf_id </strong>- айди домофона который мы узнали чуть выше</p>
  <p id="Ab6k">Проверяем, если сделали все верно то домофон должен открыться. <br /></p>
  <p id="3Es5">6. Дальше с этим скриптом можно сделать что угодно, например, я сделал шаблонную кнопку, чтобы прокинуть на часы.<br />Настройки - устройства - вспомогательное - создать - Template (или Шаблонный, у меня ХА пока прежний релиз, возможно перевод уже нормальный)<br />- Шаблон кнопки</p>
  <p id="xhin">Название как нам нужно<br />Добавить действие - другие действия - выполнить действия. </p>
  <p id="kUkd"><br />И Приводим действие к виду по примеру выше. Сохраняемся.<br />Кнопка появилась, её нажатие открывает домофон. </p>
  <p id="gpF1">Также прокинул кнопки в Умный дом яндекс. </p>
  <p id="ZD5S"><strong><u>Еще раз спасибо @Hxhxkgsk!</u></strong></p>
  <p id="u5yW"><strong><u>При перепечатке на другие ресурсы ссылка на оригинальный пост обязательна!</u></strong></p>
  <p id="VRj3"></p>
  <p id="mn1l">Так же можно завести камеры уфанет в Home Assistant</p>
  <p id="2MsS"><a href="https://teletype.in/@blacksli/cam_ufanet_in_home_assistant" target="_blank">https://teletype.in/@blacksli/cam_ufanet_in_home_assistant</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@blacksli/cam_ufanet_in_home_assistant</guid><link>https://teletype.in/@blacksli/cam_ufanet_in_home_assistant?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=blacksli</link><comments>https://teletype.in/@blacksli/cam_ufanet_in_home_assistant?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=blacksli#comments</comments><dc:creator>blacksli</dc:creator><title>Камера Уфанет в Home Assistant</title><pubDate>Fri, 21 Nov 2025 14:58:39 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/44/0a/440a89a5-3c9f-43b4-8293-79d68ccc1b1b.png"></media:content><description><![CDATA[Благодарность Anton @simple1elf за метод!]]></description><content:encoded><![CDATA[
  <p id="o42X"><strong>UPDATE  </strong>@AlexxIT  добавил поддержку в go2rtс  🥳<br /><a href="https://t.me/homassistant/971504" target="_blank">https://t.me/homassistant/971504<br /></a>как добавлять камеры описано тут, листаем до секции уфанет: <a href="https://github.com/AlexxIT/go2rtc/blob/master/internal/expr/README.md" target="_blank">https://github.com/AlexxIT/go2rtc/blob/master/internal/expr/README.md</a><br /><br /><strong>устаревший вариант (более не нужен, т.к. появилась поддержка камер уфанет в go2rtc)</strong></p>
  <p id="kxVp">Благодарность Anton @simple1elf за метод!</p>
  <p id="mzMN">Описание настроек go2rtc относятся к go2rtc установленному как <strong>аддон!</strong></p>
  <p id="He3H"><u>Если у вас другой тип установки go2rtc - расположение файлов будет другое, главное чтобы у go2rtc был доступ до файлов, ориентируйтесь на свой сервер.</u></p>
  <p id="kgyD">Понадобится:<br />1. логин пароль от Уфанет с доступом к https://ucams.ufanet.ru/  (можно будет подтянуть камеры которые там отображаются)<br />2. <a href="https://github.com/AlexxIT/go2rtc" target="_blank">go2rtc </a>(например, аддоном)</p>
  <p id="C08X">Порядок</p>
  <p id="t3aP">1. Ищем нужные нам данные по камере. <br />Заходим <a href="https://ucams.ufanet.ru/" target="_blank">https://ucams.ufanet.ru/</a> в браузере, напримере Chromе <br />Видим наши камеры, нажимаем на просмотр, чтобы шел поток от камеры<br />Жмякаем F12 чтобы попасть в консоль разработчика<br />На вкладке сеть будет виден hls поток, копируем его URL </p>
  <p id="tt7p"></p>
  <figure id="qsye" class="m_original">
    <img src="https://img1.teletype.in/files/c4/35/c435095f-3972-46ad-96ac-5a6e53d6acf0.png" width="609" />
  </figure>
  <p id="I9j3">Получаем ссылку подобную этой:</p>
  <p id="kD80"><a href="https://manul-9.cams.ufanet.ru/16161614917OJQ678/0/1643614917OJQ678-1763735924675-2615945.ts?token=eyJ0eXAiOiJKV1QiL" target="_blank">https://manul-9.cams.ufanet.ru/16161614917OJQ678/0/16434534534517OJQ678-17632342344675-2615945.ts?token=eyJ0eXAiOiJKV1QiL</a>(и далее длинный токен)</p>
  <p id="2m64">Нам понадобится номер сервера<br /><a href="https://manul-9.cams.ufanet.ru/16161614917OJQ678/0/1643614917OJQ678-1763735924675-2615945.ts?token=eyJ0eXAiOiJKV1QiL" target="_blank">manul<strong>-9</strong>.cams.ufanet.ru</a></p>
  <p id="UjNY">И номер камеры</p>
  <p id="nJET"><a href="https://manul-9.cams.ufanet.ru/16161614917OJQ678/0/1643614917OJQ678-1763735924675-2615945.ts?token=eyJ0eXAiOiJKV1QiL" target="_blank">manul-9.cams.ufanet.ru/<strong>16161614917OJQ678</strong>/0/</a></p>
  <p id="peOL"></p>
  <p id="A8yZ">В home assistant  любым удобным способом попадаем в папку конфигурации и создаем папку <strong>ufanet_video<br /></strong><br />/config/<strong>ufanet_video<br /><br /></strong>Внутри папки создаем файл<strong> ufanet_video.py <br /></strong>(полный путь будет <strong><em>/config/ufanet_video/ufanet_video.py</em></strong>)</p>
  <pre id="xR19" data-lang="python">import requests
import json
import os
import argparse
from datetime import datetime, timedelta

# Парсинг аргументов командной строки
parser = argparse.ArgumentParser(description=&quot;Получение RTSP-ссылки с токеном для камеры Уфанет&quot;)
parser.add_argument(&quot;--camera-id&quot;, required=True, help=&quot;Идентификатор камеры&quot;)
parser.add_argument(&quot;--username&quot;, required=True, help=&quot;Имя пользователя (логин)&quot;)
parser.add_argument(&quot;--password&quot;, required=True, help=&quot;Пароль&quot;)
parser.add_argument(&quot;--manul-id&quot;, default=&quot;21&quot;, help=&quot;Идентификатор manul-сервера (по умолчанию: 21)&quot;)
parser.add_argument(&quot;--token-dir&quot;, default=&quot;/config/ufanet_video&quot;, help=&quot;Директория для хранения token.json (по умолчанию: /config/ufanet_video)&quot;)

args = parser.parse_args()

camera_id = args.camera_id
credentials = {
    &quot;username&quot;: args.username,
    &quot;password&quot;: args.password
}
manul_id = args.manul_id
token_dir = args.token_dir

# Уникальное имя файла токена для каждой камеры + пользователя (защита от конфликтов)
safe_name = f&quot;{args.username}_{camera_id}&quot;.replace(&quot;/&quot;, &quot;_&quot;).replace(&quot;\\&quot;, &quot;_&quot;)
token_file = os.path.join(token_dir, f&quot;token_{safe_name}.json&quot;)

ttl_minutes = 30  # время жизни токена

def load_token_if_valid():
    if not os.path.exists(token_file):
        return None
    try:
        with open(token_file, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f:
            data = json.load(f)
        token = data.get(&quot;token&quot;)
        obtained_at_str = data.get(&quot;obtained_at&quot;)
        if not token or not obtained_at_str:
            return None
        obtained_at = datetime.fromisoformat(obtained_at_str)
        if datetime.now() - obtained_at &lt; timedelta(minutes=ttl_minutes):
            return token
        else:
            return None
    except (json.JSONDecodeError, ValueError, KeyError):
        return None

def save_token(token):
    token_info = {
        &quot;token&quot;: token,
        &quot;obtained_at&quot;: datetime.now().isoformat()
    }
    os.makedirs(token_dir, exist_ok=True)
    with open(token_file, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
        json.dump(token_info, f, ensure_ascii=False, indent=4)

def get_new_token():
    session = requests.Session()
    response = session.post(&quot;https://ucams.ufanet.ru/api/internal/login/&quot;, data=credentials)
    if response.status_code != 200:
        raise Exception(f&quot;Auth API error: {response.status_code} {response.text}&quot;)

    sessionid = session.cookies.get(&quot;sessionid&quot;)
    cookies = {&quot;sessionid&quot;: sessionid}

    camera_payload = {
        &quot;fields&quot;: [&quot;token_l&quot;, &quot;token_r&quot;],
        &quot;token_l_ttl&quot;: 3600,
        &quot;token_r_ttl&quot;: 3600,
        &quot;numbers&quot;: [camera_id]
    }

    cam_response = requests.post(
        &quot;https://ucams.ufanet.ru/api/v0/cameras/this/?lang=ru&quot;,
        json=camera_payload,
        cookies=cookies
    )
    if cam_response.status_code != 200:
        raise Exception(f&quot;Camera API error: {cam_response.status_code} {cam_response.text}&quot;)

    result = cam_response.json()[&quot;results&quot;][0]
    return result[&quot;token_l&quot;]

# Основной поток
token = load_token_if_valid()
if token is None:
    token = get_new_token()
    save_token(token)

rtsp_url = f&quot;rtsp://manul-{manul_id}.cams.ufanet.ru/{camera_id}?token={token}#audio=pcmu#video=h265&quot;
print(rtsp_url)</pre>
  <p id="hiPc"><br />И сохраняем.</p>
  <p id="Tkma">Сначала надо доустановить пакеты python, для этого добавляем в go2rtc stream</p>
  <pre id="1vY4" data-lang="yaml"> streams:
  domofon3: | 
   echo: pip install requests -t /config/ufanet_video</pre>
  <p id="2RYj">Сохраняем и открываем полученный поток на просмотр. Скачаются пакеты.</p>
  <p id="uMoG"></p>
  <figure id="0JSx" class="m_original">
    <img src="https://img2.teletype.in/files/1e/13/1e13b9ff-c4d4-40f1-bd85-36facf00c86d.png" width="811" />
  </figure>
  <p id="vhMU">Поток можно убрать, больше не понадобится.</p>
  <p id="wsIL"></p>
  <p id="WC00">Добавляем в go2rtc источники, столько сколько надо камер  получить в ХА</p>
  <pre id="CGrr" data-lang="yaml">streams:
  domofon1: |
   echo: python3 /config/ufanet_video/ufanet_video.py --camera-id &quot;111111111&quot; --username &quot;123123123&quot; --password &quot;321321&quot; --manul-id &quot;666&quot;
  domofon2: |
   echo: python3 /config/ufanet_video/ufanet_video.py --camera-id &quot;222222222&quot; --username &quot;123123123&quot; --password &quot;321321&quot; --manul-id &quot;777&quot;</pre>
  <p id="BBbP">Где:<br /> --camera-id &quot;111111111&quot;  <br />1111111 = номер камеры, полученный выше</p>
  <p id="vXis">--username &quot;123123123&quot; --password &quot;321321&quot;  <br />логин пароль от сайта ucams.ufanet.ru </p>
  <p id="A051">--manul-id &quot;777&quot;<br />777  = номер сервера, полученный выше</p>
  <p id="pWD9"></p>
  <p id="mkZa">Сохраняем, рестартим go2rtc</p>
  <figure id="sl35" class="m_original">
    <img src="https://img3.teletype.in/files/2a/e3/2ae3f6c4-4f1e-4caf-adfd-a096e8c7f0d4.png" width="205" />
  </figure>
  <p id="SlOq"><br />И получаем потоки с камер уфанет</p>
  <figure id="fQXv" class="m_original">
    <img src="https://img4.teletype.in/files/f2/23/f22360b6-96cb-4e3c-8407-fcb136e8e93d.png" width="258" />
  </figure>
  <p id="MaAm">Например, rtsp://192.168.1.100:8554/domofon1<br />Не забудьте сменить ip на свой</p>
  <p id="fAFe">Поток можно проверить в видеоплеере VLC </p>
  <p id="yAYU"></p>
  <p id="mKf2">И всё это можно связать с открытием домофона из Home Assistant</p>
  <p id="HHGA"><a href="https://teletype.in/@blacksli/domofon_ufanet_home_assistant" target="_blank">https://teletype.in/@blacksli/domofon_ufanet_home_assistant</a></p>

]]></content:encoded></item></channel></rss>