Вывоз ТБО: API взаимодействия с планшетом

API использует сообщения в JSON формате, передаваемые по HTTP по принципу запрос-ответ. Инициатором обмена всегда выступает планшет.

Необходимым условием является наличие в сообщениях следующих HTTP заголовков:

  • X-Signature: reserved
  • Content-Type: text/x-json

HTTP адрес всех веб-сервисов (URL), используемых в данном компоненте, формируется из базовой части http://<server_name>/components/communa/ и имени конкретного сервиса.

Все параметры, содержащие время, используют часовой пояс оператора-владельца используемых в запросе объектов (спецавтомобилей, контейнеров и т.д.), т.е. местное время.

Типичный сценарий работы планшета выглядит следующим образом:

  • Планшет запрашивает список сотрудников для простой аутентификации водителя/экспедитора на стороне планшета (get_personnel). В качестве пин-код выступает табельный номер сотрудника
  • Планшет запрашивает список маршрутов и предлагает на выбор водителю (get_routes)
  • По завершению выбора маршрута планшет отправляет на сервер событие "На маршруте" с указанием маршрута, водителя и грузчика (экспедитора) (register_event ROUTE_START)
  • Водитель приступает к циклу уборки - планшет отправляет событие "На смене". (register_event ON_SHIFT) Цикл уборки состоит из:
    • получение траектории до следующей платформы (get_directions)
    • по приезду и уборке платформы планшет запрашивает у сервера количество сработал датчика поднятий стрелы (get_lifts_count)
    • отправляет на сервер событие "Погрузка площадки" с указанием количества подгруженных контейнеров и причины непогрузки оставшихся (если имеются) (register_event PLATFORM_LOADED)
  • При заполнении бункера спецавтомобиля он едет выгружаться на полигон - планшет отправляет событие "Еду на полигон" (register_event ...), что дает ему возможность сойти с маршрута. Аналогично работает событие "На техобслуживании"
  • По завершению маршрута планшет отправляет событие "Еду в гараж"

Запрос списка водителей/экспедиторов для аутентификации

Endpoint: http://<server_name>/components/communa/get_personnel

Запрос:

{
    "device_id":"a40d38a959f1ca65"
}

Ответ,

{
   "personnel":[
      {
         "personnel_number":444,
         "first_name":"Иван",
         "last_name":"mts",
         "middle_name":"",
         "id":1012651
      },
      {
         "personnel_number":777,
         "first_name":"Василий",
         "last_name":"mts1",
         "middle_name":"",
         "id":1012652
      }
   ],
   "success":true
}

Запрос списка маршрутов полный (с подробной информацией о платформах)

Endpoint: http://<server_name>/components/communa/get_routes

Запрос:

{
    "device_id":"49aa570dc04344a6"
}

Ответ:

{
   "routes":[
      {
         "platforms":[
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"АТБ-Містечко",
               "lat":50.2107736547029,
               "lng":30.3174322843552,
               "id":1022549,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"пр.Лесі Українки, 15 ",
               "lat":50.1974241245373,
               "lng":30.2944350242615,
               "id":1022542,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"Столичка",
               "lat":50.216073975587,
               "lng":30.3178024291992,
               "id":1022543,
               "quantity":3
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"Солнечная",
               "lat":50.1883300230983,
               "lng":30.2941560745239,
               "id":1022544,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"вул.Володимирська,13",
               "lat":50.1747131083508,
               "lng":30.3193259239197,
               "id":1022545,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"вул.Володимирька, 28 (Корунд)",
               "lat":50.1733834992561,
               "lng":30.3227108716965,
               "id":1022546,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"Фуршет",
               "lat":50.1795055782639,
               "lng":30.3133499622345,
               "id":1022547,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"вул.Набережна",
               "lat":50.1800174337311,
               "lng":30.3084254264832,
               "id":1022548,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"Військове .Містечко",
               "lat":50.2120369970609,
               "lng":30.3167670965195,
               "id":1022550,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"вул.Грушевського,25",
               "lat":50.180299123662,
               "lng":30.3108340501785,
               "id":1022551,
               "quantity":1
            },
            {
               "estimated_fill":1.0,
               "volume":1.100,
               "address":"Іванковичі",
               "lat":50.2786446089967,
               "lng":30.4251337051392,
               "id":1022552,
               "quantity":2
            }
         ],
         "num":"01.05 - Смаколики",
         "id":1022554,
         "itinerary":""
      }
   ],
   "success":true
}

Запрос списка маршрутов без подробной информации о маршруте

Endpoint: http://<server_name>/components/communa/get_routes_v2

Запрос:

{
    "device_id":"49aa570dc04344a6"
}

Ответ:

{
  "routes": [
    {
      "platforms": 41,
      "num": "20211019T0330-AA7044OO",
      "id": 1033710,
      "itinerary": null,
      "wastebins": 84
    },
    {
      "platforms": 167,
      "num": "20211019T0400-AA7041OO",
      "id": 1033722,
      "itinerary": null,
      "wastebins": 248
    },
    {
      "platforms": 55,
      "num": "20211019T0400-AA9180XE",
      "id": 1033723,
      "itinerary": null,
      "wastebins": 111
    },
    {
      "platforms": 5,
      "num": "20211019T0400-AA9183XE",
      "id": 1033721,
      "itinerary": null,
      "wastebins": 10
    },
    {
      "platforms": 86,
      "num": "20211019T0405-AA5897BP",
      "id": 1033711,
      "itinerary": null,
      "wastebins": 136
    },
    {
      "platforms": 77,
      "num": "20211020T0400-AA7041OO",
      "id": 1033727,
      "itinerary": null,
      "wastebins": 131
    },
    {
      "platforms": 1,
      "num": "20211020T0400-AA9183XE",
      "id": 1033729,
      "itinerary": null,
      "wastebins": 2
    },
    {
      "platforms": 108,
      "num": "20211020T0600-AA5895BP",
      "id": 1033720,
      "itinerary": null,
      "wastebins": 222
    },
    {
      "platforms": 38,
      "num": "20211020T0800-AA7044OO",
      "id": 1033724,
      "itinerary": null,
      "wastebins": 78
    },
    {
      "platforms": 46,
      "num": "20211021T0500-AA7044OO",
      "id": 1033728,
      "itinerary": null,
      "wastebins": 85
    },
    {
      "platforms": 77,
      "num": "20211021T0800-AA5895BP",
      "id": 1033730,
      "itinerary": null,
      "wastebins": 125
    }
  ],
  "success": true
}

Регистрация событий

Endpoint: http://<server_name>/components/communa/register_event

Событие "Выход на маршрут"

Запрос:

{
  "event": "ROUTE_START",
  "driver_id": 1012651,
  "loader_id": 1012652,
  "route_id": 1033710,
  "date": 1634810020725,
  "device_id": "1789fa18ad90ba55"
}

Ответ:

{
  "skipped": [],
  "trip_id": 1033731,
  "success": true
}

Событие "Приступил к уборке"

Запрос:

{
  "event": "ON_SHIFT",
  "route_id": 1033710,
  "device_id": "1789fa18ad90ba55"
}

Ответ:

{"success": true}

Событие "Еду в гараж"

Запрос:

{
  "event": "GO_TO_GARAGE",
  "route_id": 1033710,
  "device_id": "1789fa18ad90ba55"
}

Ответ:

{"success": true}

Событие "Еду на полигон"

Запрос:

{
  "event": "GO_TO_COLLECTION_SITE",
  "route_id": 1033722,
  "device_id": "1789fa18ad90ba55"
}

Ответ:

{"success": true}

Событие "Техобслуживание"

Запрос:

{
  "event": "GO_TO_SERVICE",
  "route_id": 1033722,
  "device_id": "1789fa18ad90ba55"
}

Ответ:

{"success": true}

Событие "Погрузка площадки"

Запрос:

{
  "event": "PLATFORM_LOADED",
  "platform_id": 1025030,
  "route_id": 1032188,
  "count": 2,
  "device_id": "29e199b8401de077",
  "reason": "Нет подъезда к площадке",
}

Ответ:

{"success": true}

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

Endpoint: http://<server_name>/components/communa/get_directions Endpoint: http://<server_name>/components/communa/get_directions_v2

Запрос:

{
  "lat": 49.82279963,
  "lng": 30.06916007,
  "device_id": "29e199b8401de077"
}

Ответ:

{
  "success": true,
  "route": [
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "Вул. Сквирське шосе, 216 а  3є щоденно,Вул. Сквирське шосе, 216 2є щоденно",
      "lat": 49.817365,
      "lng": 30.075344,
      "type": "PLATFORM",
      "id": 1025208,
      "quantity": 2
    },
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "«АТБ-маркет», Вул. Турчанінова, 4",
      "lat": 49.819928,
      "lng": 30.069391,
      "type": "PLATFORM",
      "id": 1025159,
      "quantity": 1
    },
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "Вул. Турчанінова, 25",
      "lat": 49.821286,
      "lng": 30.067053,
      "type": "PLATFORM",
      "id": 1025157,
      "quantity": 5
    },
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "Вул. Сквирське шосе, 250",
      "lat": 49.818504,
      "lng": 30.065084,
      "type": "PLATFORM",
      "id": 1025163,
      "quantity": 4
    },
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "Вул. Сквирське шосе, 264",
      "lat": 49.818593,
      "lng": 30.065134,
      "type": "PLATFORM",
      "id": 1025188,
      "quantity": 3
    },
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "Вул. Сквирське шосе, 256",
      "lat": 49.819249,
      "lng": 30.06513,
      "type": "PLATFORM",
      "id": 1025164,
      "quantity": 4
    },
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "Вул. Сквирське шосе, 238 1є щоденно ",
      "lat": 49.820531,
      "lng": 30.064775,
      "type": "PLATFORM",
      "id": 1025189,
      "quantity": 1
    },
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "Вул. Фурсівська, 29 п/с",
      "lat": 49.821383,
      "lng": 30.061602,
      "type": "PLATFORM",
      "id": 1025167,
      "quantity": 1
    },
    {
      "estimated_fill": 1,
      "volume": 1.1,
      "name": "Вул. Фурсівська, 21 п/с",
      "lat": 49.820526,
      "lng": 30.061734,
      "type": "PLATFORM",
      "id": 1025166,
      "quantity": 1
    }
  ],
  "destination": {
    "estimated_fill": 1,
    "volume": 1.1,
    "name": "Вул. Сквирське шосе, 216 а  3є щоденно,Вул. Сквирське шосе, 216 2є щоденно",
    "lat": 49.817365,
    "lng": 30.075344,
    "type": "PLATFORM",
    "id": 1025208,
    "quantity": 2
  },
  "steps": [
    {
      "maneuver": "depart",
      "distance_before": 0,
      "itinerary_before": "",
      "location": [
        49.8227932,
        30.0691627
      ],
      "duration_before": 0
    },
    {
      "maneuver": "turn-right",
      "distance_before": 109,
      "itinerary_before": "m_boHg{ovDe@uEOoA",
      "location": [
        49.8230599,
        30.0706273
      ],
      "duration_before": 16
    },
    {
      "maneuver": "turn-right",
      "distance_before": 728,
      "itinerary_before": "caboHmdpvDtFwIT_@`FaIb@q@DIDEvA}BnAsBhBsCb@o@pBeD",
      "location": [
        49.818226,
        30.0774666
      ],
      "duration_before": 69
    },
    {
      "maneuver": "arrive",
      "distance_before": 191,
      "itinerary_before": "}baoHeoqvD~@lAB@D@DDJN^j@BDBFBL@HRdBJlAFx@",
      "location": [
        49.817345,
        30.0753506
      ],
      "duration_before": 75
    }
  ],
  "itinerary": "m_boHg{ovDe@uEOoA??tFwIT_@`FaIb@q@DIDEvA}BnAsBhBsCb@o@pBeD??~@lAB@D@DDJN^j@BDBFBL@HRdBJlAFx@",
  "destination2": {
    "estimated_fill": 1,
    "volume": 1.1,
    "name": "«АТБ-маркет», Вул. Турчанінова, 4",
    "lat": 49.819928,
    "lng": 30.069391,
    "type": "PLATFORM",
    "id": 1025159,
    "quantity": 1
  }
}

Запрос количества поднятых контейнеров

Endpoint: http://<server_name>/components/communa/get_lifts_count

Запрос:

{
  "platform_id": 1025157,
  "device_id": "29e199b8401de077"
}

Ответ,

{
  "count": 7,
  "time_to": 1630938442,
  "time_from": 1630937859,
  "success": true
}

Имитация (mock) запроса количества поднятых контейнеров

Endpoint: http://<server_name>/components/communa/get_lifts_count_mock

Запрос:

{
  "platform_id": 1025157,
  "device_id": "29e199b8401de077",
  "count": 10
}

Ответ:

{
  "count": 10,
  "stop_to": 1630938442,
  "stop_from": 1630937859,
  "this_is_mock": true,
  "success": true
}

Залогировать дебажное сообщение на сервере

Endpoint: http://<server_name>/components/communa/debug

Запрос:

{
  "device_id": "957e4432c1357f1f",
  "msg": "Hi there!"
}

Ответ,

{"success": true}