Мониторинг Starline Zabbix?

Доброго времени суток, Вопрос про Мониторинг Zabbix автомобильной сигнализации Starline.
Написал PHP скрипт с получением данных от сигнализации Starline и записи в файл, потом парсим в Zabbix и сохраняем полученный данные. Но хотелось бы это полностью запускать в мониторинге.

Имеем в распоряжении:
1) Логин от личного кабинета
2) Пароль от личного кабинета
3) Appid
4) Secret

Что нужно для получения данных:
1) Получение кода приложения:
Производим запрос (Получение кода приложения-GET)
https://id.starline.ru/apiV3/application/getCode?appId=(Appid пользователя)&secret=(Secret пользователя в md5)
Пример - curl "https://id.starline.ru/apiV3/application/getCode?a..." -i
На выходе получаем - array(2) { ["state"]=> int(1) ["desc"]=> array(1) { ["code"]=> string(32) "507096aefc13692362f4180402eddd56" } }
Далее "code" мы будем использовать.

2) Получение токена приложения:
Производим запрос (Получение токена приложения-GET)
https://id.starline.ru/apiV3/application/getToken?...(Appid пользователя)&secret=(codeToken md5)
codeToken - получаем по средством конкатенации "Secret" пользователя и "code" полученный ранее и хеширеум md5.
Пример - curl "https://id.starline.ru/apiV3/application/getToken?..." -i
На выходе получаем - { ["state"]=> int(1) ["desc"]=> array(1) { ["token"]=> string(64) "f1e4f91f6fd4fb18cbc0a47547ddc008108d086ddab0999368958401ef2bc410" } }
Далее "token" мы будем использовать.

3) Авторизация пользователя:
Производим запрос (Авторизация пользователя-POST)
https://id.starline.ru/apiV3/user/login
Пример: curl "https://id.starline.ru/apiV3/user/login" -i -H 'token:6517f62f5241c310ff5012360cd09e26b71395c2c068...' -F login=yokozuna@yandex.ru -F pass=7c4a8d09ca3762af61e59520943dc26494f8941b -F smsCode=3454
Передаем для авторизации:
----'token' => Ранее полученный "token",
----'login' => $user_login(Логин от личного кабинета),
----'pass' => $user_pass(Пароль от личного кабинета, хешированием sha1),

На выходе получаем:
{
"state": 1,
"desc": {
"id": "200*****",
"login": "z*******",
"state": "ACTIVE",
"first_name": "Ю****",
"last_name": "Л****",
"middle_name": "А********",
"company_name": "Дом",
"sex": "M",
"lang": "ru",
"gmt": "+3",
"avatar": "default",
"date_register": "2019-12-16 08:08:16",
"contacts": [
{
"id": "6********",
"type": "push",
"value": "{\"device_name\":\"\",\"app_version\":\"\",\"language\":\"ru\",\"os_type\":\"android2\",\"os_version\":\"\",\"phone_model\":\"\",\"token\":\"******************************************\",\"ser_num\":\"3************************\"}",
"confirmed": null,
"token": "g***************************************"
},
{
"id": "6*****************",
"type": "email",
"value": "f**************mail.ru",
"confirmed": "1",
"token": "T******************************CF"
},
{
"id": "6*****************",
"type": "phone",
"value": "7928*************",
"confirmed": "1",
"token": "9********************************d"
},
{
"id": "8****************",
"type": "push",
"value": "{\"device_name\":\"\",\"app_version\":\"\",\"language\":\"ru\",\"os_type\":\"android2\",\"os_version\":\"\",\"phone_model\":\"\",\"token\":\"c***********************************************X\",\"ser_num\":\"9****************d\"}",
"confirmed": null,
"token": "R********************************1"
},
{
"id": "1******************",
"type": "push",
"value": "{\"device_name\":\"\",\"app_version\":\"\",\"language\":\"ru\",\"os_type\":\"android2\",\"os_version\":\"\",\"phone_model\":\"\",\"token\":\"c******************************************\",\"ser_num\":\"5*********************4\"}",
"confirmed": null,
"token": "u***************************************f"
}
],
"auth_contact_id": null,
"roles": [
"user",
"open-api-user"
],
"subscription": null,
"user_token": "6****************************************:200*****3",
"last_auth_date": "2021-12-23 19:19:59",
"last_auth_ip": "199.999.999.999"
}
}
(*Звездочками закрыты личные данные)
Далее "user_token" в конце полученных данных мы будем использовать.

4) Авторизация пользователя по токену StarLineID (POST)
https://developer.starline.ru/json/v2/auth.slid
Пример - curl "https://developer.starline.ru/json/v2/auth.slid" -v -d '{"slid_token":"f6e706e17d41ce781b5166f09e782fd0:1663"}'
Отправляем ранее полученный "user_token"
Ответ получаем в теле
{
"code": "200",
"codestring": "OK",
"nchan_id": "1**************************************D",
"realplexor_id": "1************************************54D",
"user_id": "1*****6"
}
И возвращает все заголовки из ответа сервера на HTTP-запрос
{ [0]=> string(15) "HTTP/1.1 200 OK"
[1]=> string(13) "Server: nginx"
[2]=> string(35) "Date: Thu, 23 Dec 2021 19:36:15 GMT"
[3]=> string(23) "Content-Type: text/json"
[4]=> string(19) "Content-Length: 170"
[5]=> string(17) "Connection: close"
[6]=> string(120) "Set-Cookie: slnet=7***************************************0; path=/; expires=Friday, 24-Dec-21 19:36:15 GMT; domain=.starline.ru;"
[7]=> string(50) "Content-Security-Policy: upgrade-insecure-requests"
[8]=> string(71) "Strict-Transport-Security: max-age=31536000; includeSubDomains; preload" }

Далее для получения данных мы подставлять COOKIE Set-Cookie: slnet=7***************************************0 и "user_id": "1*****6"

5) Получение данных от сигнализации (GET)
https://developer.starline.ru/json/v3/user/'"user_...
Пример: curl "https://developer.starline.ru/json/v3/device/35797..." --cookie 'slnet=15CFA19BFD3E8884C716FFA4E39AF866'
В адрес подставляем ранее полученный из тела запроса "user_id": "1*****6" и в куки отправляем slnet=7***************************************0.

В ответ получаем:
{
"code": 200,
"codestring": "OK",
"user_data": {
"shared_devices": [],
"devices": [
{
"event": {
"type": 1090,
"timestamp": 1640273201
},
"balance": [
{
"operator": "",
"state": 2,
"key": "active",
"ts": 1640285848,
"value": 664,
"currency": ""
}
],
"typename": "Telematic alarm system",
"common": {
"ctemp": 1,
"gsm_lvl": 22,
"mayak_temp": 0,
"etemp": 14,
"gps_lvl": 9,
"reg_date": 1577866156,
"ts": 1640288729,
"battery": 12.890999794006348
},
"telephone": "+79************",
"r_start": {
"wakeup_ts": 1,
"battery": {
"has": true
},
"period": {
"has": false
},
"cron": {
"has": false
},
"temp": {
"has": false
}
},
"ua_url": "",
"type": 3,
"device_id": 3***************,
"activity_ts": 1640288729,
"position": {
"dir": 5,
"r": 0,
"s": 22,
"sat_qty": 9,
"x": 43.****************,
"y": 44.***********************,
"ts": 1640288839,
"is_move": true
},
"firmware_version": "2.25.1",
"status": 1,
"alias": "StarLine****",
"obd": {
"fuel_litres": 48,
"ts": 1640273191,
"mileage": null,
"fuel_percent": null
},
"state": {
"webasto": false,
"arm_auth_wait": false,
"tilt_bpass": false,
"hijack": false,
"trunk": false,
"add_sens_bpass": false,
"shock_bpass": false,
"ign": false,
"neutral": false,
"hood": false,
"hbrake": false,
"r_start": false,
"hfree": false,
"r_start_timer": 0,
"webasto_timer": 0,
"arm_moving_pb": false,
"alarm": false,
"valet": false,
"arm": true,
"out": false,
"door": false,
"ts": 1640288729,
"pbrake": true,
"run": false
},
"alarm_state": {
"hood": false,
"hbrake": false,
"shock_l": false,
"hijack": false,
"trunk": false,
"add_l": false,
"tilt": false,
"add_h": false,
"shock_h": false,
"door": false,
"ts": 1640288729,
"pbrake": false,
"run": false
},
"sn": "S96 ****************",
"functions": [
"rstart_cfg",
"int_sensor",
"shock_cfg",
"scoring",
"gsm_control",
"eng_sensor",
"xml_cfg",
"gsm",
"info",
"position",
"state",
"adv_state",
"mon_cfg",
"tracking",
"push",
"events",
"controls",
"adv_controls",
"adv_guard",
"rstart_cfg",
"shock_cfg",
"obd_params",
"ble2"
]}
]}}
И из этих данных мы можем получать место расположение, заряд АКБ, бензин, баланс сим карты, кол-во спутников, состояние охр. системы, версия прошивки и т.д.
Если не будет решения, то в данный момент все и так работает. Может быть будет полезна данная статья.
Для более подробного изучения есть офф документация Starline - https://developer.starline.ru/
Есть ограничения по кол-ву запросов:
Для смертного пользователя есть возможность произвести 1000 запросов в течении 24 часов, и не стоит производить чаще 1 в 5мин (рискуете попасть на капчу)
  • Вопрос задан
  • 333 просмотра
Пригласить эксперта
Ответы на вопрос 2
vesper-bot
@vesper-bot
Любитель файрволлов
Вообще настолько многоходовые действия (у вас же ещё и временный токен в апи присутствует) лучше всего отдавать на выполнение в Zabbix external script, ему передаете логин-пароль, оттуда возвращаете JSON всех (вроде как devices - массив) подключенных устройств на аккаунте. А потом средствами заббикса через dependent item создаете элементы данных, в качестве мастер-элемента подсовываете элемент, хранящий полученный JSON, дальше его препроцессингом режете на числа, строки и идентификаторы. Ну и так как мастер-итем всего один, его ставите на обновление раз в 10 минут, чтобы не вылезти за предел апи-запросов, а парсинг уже полученных данных в апи не полезет.
Ответ написан
@Fraso Автор вопроса
Первый этап получения кода приложения я реализовал
61c4d7105f042492646217.jpeg
61c4d71916ec8958423206.jpeg
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы