Siri + Zway + Homebridge = Запуск двигуна

Добрий день, шановне товариство!

Ідея покерувати автозапуском народилася досить спонтанно, все почалося з того, як пару років тому я придбав собі автомобіль і постало питання про встановлення системи автозапуску. Протягом минулих двох зим (а зими у нас холодні, тому я живу в умовах прирівняних до далекої півночі) я прокидався вранці, виходив, заводив машину, йшов додому, пив каву, і їхав на роботу. Цієї зими лінь взяла своє, і я придбав комплект автозапуску Starline sm32 з gsm і gps-модулем. Автозапуск встановлено, додаток завантажено, все працює відмінно! І тут я подумав: «Чому б не підключити автозапуск до своєї системи розумного будинку?».

Перше, що прийшло в голову це знайти API до сервісу, але пошуки не увінчалися успіхом. На офіційному форумі піднімалася ця тема, але відповідей від підтримки так і не було, через онлайн консультанта я залишив заявку в надії на те, що може бути, мені дадуть відповідь, і через тиждень вони відповіли:
Так API є. Ми надаємо його після того, як клієнт:

* надає інформацію про себе та свою компанію і мети використання нашого API

* підписує угоду про нерозголошення інформації ( NDA )
З цим я не став заморочуватися і почав шукати інші шляхи. Так, я забув сказати, що крім додатка є веб-сервіс, який і відкрив мені цю можливість.
Посниваф запити, я отримав всю необхідну інформацію, і написав невеликий скрипт на мові Python. Прошу сильно не лаяти за сам код і його оформлення, це можна сказати мій перший досвід у цій справі:
engine_on.py
import requests
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s: %(message)s')
logging.debug('This is a log message.')
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0',
'Accept': 'application/json, text/javascript */*; q=0.01',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest'}
with requests.Session() as session:
login = session.post('https://starline-online.ru/user/login', {
'LoginForm[login]': 'username',
'LoginForm[pass]': 'password',
'remember': 1,},headers=header)
print (r.status_code,r.reason)
r = session.post('https://starline-online.ru/device/ваш_id_device/executeCommand',{
'value':'1',
'action':'ign',
'password':"},headers=header)
logout = session.post('https://starline-online.ru/user/logout', {
":"},)
print (login.status_code,login.reason)
print (login.cookies)
print (logout.status_code,logout.reason)


Це скрипт для запуску двигуна, а щоб нам його зупинити, значення value міняємо на 0.
Але як же нам змусити Siri запускати наш скрипт? Довгим гуглением і ходінням по форумах я знайшов рішення: homebridge-script — цей плагін дозволяє запускати sh скрипти, як встановлювати homebridge я писати не буду в інтернет повно інструкцій, ставимо плагін:
sudo npm install -g file-exists
sudo npm install -g homebridge-script

Після установки копіюємо наші скрипти, їх я назвав engine_on.py і engine_off.py:
sudo cp engine_on.py engine_off.py /usr/local/lib/node_modules/homebridge-script/

Там же знаходиться два файлика on.sh і off.sh я не знайшов нічого кращого як додати до них:
sudo echo "python engine_on.py" > on.sh
sudo echo "python engine_off.py" > off.sh

Тепер залишилося додати в наш homebridge конфіг наступне:
"accessories": [
{
"accessory": "Script",
"name": "Прогріти машину",
"on": "sh ./on.sh",
"off": "sh ./off.sh",
"state": "sh ./state.sh",
"fileState": "home/pi/script.flag",
"on_value" : "true",
"exact_match": true
}
]
]

Перезапускаємо службу і все готово!

P. S: Я довго мучився з вибором фраз, якщо siri що не сподобається, вона тут же лізе в інтернет за пошуком.
Загалом, користуйтеся, сподіваюся, це комусь буде корисним!


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.