<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>IT science: заметки с тегом traccar</title>
<link>https://itscience.pro/tags/traccar/</link>
<description>IT science — статьи и инструкции из мира IT</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>IT science — статьи и инструкции из мира IT</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>поднимаем свой сервер traccar и настраиваем GPS трекер для работы с ним</title>
<guid isPermaLink="false">22</guid>
<link>https://itscience.pro/all/svoy-server-traccar-i-nastraivaem-gps-treker/</link>
<pubDate>Wed, 25 Sep 2019 14:47:11 +0300</pubDate>
<author></author>
<comments>https://itscience.pro/all/svoy-server-traccar-i-nastraivaem-gps-treker/</comments>
<description>
&lt;p&gt;Был куплен у китайцев такой трекер:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://itscience.pro/pictures/GSM-gps-ST-901-(1).jpg" width="500" height="500" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Не хотелось хранить информацию на чужом сервере, возникла идея создать свой, благо модель трекера позволяла настроить его на работу с любым сервером.&lt;/p&gt;
&lt;p&gt;Сразу оговорюсь, содержать свой сервер для одного устройства получится дороже (в моем случае $5 и безграничное количество устройств), чем платить за чужой (от 80 руб. за устройство).&lt;/p&gt;
&lt;p&gt;Поискав готовые решения, я наткнулся на проект &lt;a href="https://www.traccar.org,"&gt;https://www.traccar.org,&lt;/a&gt; проект открытый, есть исходники на github &lt;a href="https://github.com/traccar/traccar"&gt;https://github.com/traccar/traccar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;для начала я проверил работоспособность прибора, для этого написал короткий скрипт на php, по сути, это сокет сервер, который слушает порт 999 и выводит в консоль всю информацию, которая приходит&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?php
set_time_limit (0);
$address = &amp;#039;127.0.0.1&amp;#039;;
$port = 999;
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
socket_bind($sock, 0, $port) or die(&amp;#039;Could not bind to address&amp;#039;);
socket_listen($sock);
while (true) {
    $client =  socket_accept($sock);
    $input =  socket_read($client, 1024000);
    echo &amp;quot;$input\n&amp;quot;;
    socket_close($client);
}
socket_close($sock);
?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;через NAT на роутере открыл порт наружу&lt;/p&gt;
&lt;p&gt;дальше приступаем к настройкам трекера (брал с этого сайта &lt;a href="http://miradmin.ru/gps-tracker-sinotrack-st-901/),"&gt;http://miradmin.ru/gps-tracker-sinotrack-st-901/),&lt;/a&gt; далее транслирую то что использовал сам (команды отправляются смс сообщениями)&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Регистрируем номер телефона, с которого будем управлять устройством&lt;br /&gt;
&lt;b&gt;899977777770000 1&lt;/b&gt;&lt;br /&gt;
89997777777 — номер телефона&lt;br /&gt;
0000 — пароль (по умолчанию четыре ноля)&lt;br /&gt;
1 — номер ячейки (можно зарегистрировать до 3 телефонов)&lt;/li&gt;
&lt;li&gt;Меняем пароль, конечно же&lt;br /&gt;
&lt;b&gt;77712340000&lt;/b&gt;&lt;br /&gt;
777 — команда&lt;br /&gt;
1234 — новый пароль&lt;br /&gt;
0000 — старый пароль&lt;/li&gt;
&lt;li&gt;Меняем часовой пояс&lt;br /&gt;
&lt;b&gt;8960000E03&lt;/b&gt;  &lt;br /&gt;
896 — команда  &lt;br /&gt;
0000  — пароль  &lt;br /&gt;
E03 — часовой пояс Москвы&lt;/li&gt;
&lt;li&gt;Выбираем режим передачи данных (SMS или GPRS)  &lt;br /&gt;
&lt;b&gt;7100000&lt;/b&gt;  &lt;br /&gt;
710 — команда для GPRS  &lt;br /&gt;
0000  — пароль&lt;/li&gt;
&lt;li&gt;Настройка точки доступа для GPRS&lt;br /&gt;
Мегафон: &lt;b&gt;8030000 internet gdata gdata&lt;/b&gt;&lt;br /&gt;
МТС: &lt;b&gt;8030000 internet.mts.ru mts mts&lt;/b&gt;&lt;br /&gt;
Билайн: &lt;b&gt;8030000 internet.beeline.ru beeline beeline&lt;/b&gt;&lt;br /&gt;
ТЕЛЕ2: &lt;b&gt;8030000 internet.tele2.ru&lt;/b&gt;  &lt;br /&gt;
0000  — пароль&lt;/li&gt;
&lt;li&gt;Задаем интервалы отправки сообщений на сервер при включенном зажигании и в режиме оффлайн&lt;br /&gt;
&lt;b&gt;800000 5&lt;/b&gt;&lt;br /&gt;
каждые пять секунд при включенном зажигании&lt;br /&gt;
&lt;b&gt;8090000 300&lt;/b&gt;&lt;br /&gt;
каждые пять минут при выключенном&lt;br /&gt;
0000  — пароль&lt;/li&gt;
&lt;li&gt;Настройка спящего режима&lt;br /&gt;
&lt;b&gt;SLEEP0000 5&lt;/b&gt;&lt;br /&gt;
после выключения зажигания через пять минут устройство «заснет», перестанет присылать сообщения на сервер, но будет реагировать на смс и звонки&lt;br /&gt;
0000  — пароль&lt;/li&gt;
&lt;li&gt;Настройка сервера данных&lt;br /&gt;
&lt;b&gt;8040000 123.123.123.123 999&lt;/b&gt;&lt;br /&gt;
123.123.123.123 — ip адрес сервера&lt;br /&gt;
999 — порт сервера&lt;br /&gt;
0000  — пароль&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;после указанных настроек я стал получать сообщения с трекера:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;*HQ,9170631826,V1,105509,A,5576.7575,N,03761.0545,E,000.13,000,210919,FBFF9FFF,250,99,27914,55187#
*HQ,9170631826,V1,105509,A,5576.7578,N,03761.0548,E,000.13,000,210919,FBFF9FFF,250,99,27914,55187#
*HQ,9170631826,V1,105554,A,5576.7577,N,03761.0548,E,000.23,000,210919,FBFFBBFF,250,99,27914,55187#
*HQ,9170631826,V1,105624,A,5576.7575,N,03761.0549,E,001.05,000,210919,FBF7BBFF,250,99,27914,31740#&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;отлично! осталось создать сервер и транслировать данные туда&lt;/p&gt;
&lt;p&gt;для начала я выбрал площадку для размещения виртуального сервера, делал на DigitalOcean&lt;br /&gt;
если хотите помочь нам и получить $25 на счет, воспользуйтесь реферальной ссылкой &lt;a href="https://m.do.co/c/74f25c68fa79"&gt;https://m.do.co/c/74f25c68fa79&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;используйте самый дешевый Droplet за $5 в месяц с ubuntu на борту&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://itscience.pro/pictures/---2019-09-25-13-23-50.png" width="198" height="189" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;дальше в сжатой форме будут только команды для установки недостающих компонент и настройки конфигураций&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ apt-get update&lt;br /&gt;
$ apt-get upgrade&lt;br /&gt;
$ apt-get install mc&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ставим java&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ apt-get install default-jdk&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ставим mysql&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ apt-get install mysql-server mysql-client&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;далее запускаем mysql, настраиваем пароль пользователя root и создаем базу с пользователем для работы traccar&lt;/p&gt;
&lt;p&gt;не забудьте указать свои&lt;br /&gt;
root_password — пароль root&lt;br /&gt;
user_password — пароль пользователя traccar_user&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ mysql -u root -p&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;USE mysql;&lt;br /&gt;
UPDATE USER SET authentication_string=PASSWORD(«root_password») WHERE USER=’root’;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;CREATE DATABASE traccar DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;&lt;br /&gt;
CREATE USER ’traccar_user’@’localhost’ IDENTIFIED BY ’user_password’;&lt;br /&gt;
GRANT ALL ON traccar.* TO ’traccar_user’@’localhost’;&lt;br /&gt;
FLUSH PRIVILEGES;&lt;br /&gt;
EXIT;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;качаем и устанавливаем сервер&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ cd /tmp&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;на момент написания статьи была актуальная версия &lt;b&gt;4.6&lt;/b&gt;, посмотреть версию можно тут &lt;a href="https://github.com/traccar/traccar/releases/"&gt;https://github.com/traccar/traccar/releases/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ wget &lt;a href="https://github.com/traccar/traccar/releases/download/v4.6/traccar-linux-64-4.6.zip"&gt;https://github.com/traccar/traccar/releases/download/v4.6/traccar-linux-64-4.6.zip&lt;/a&gt;&lt;br /&gt;
$ unzip traccar-linux-64-4.6.zip&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;$ ./traccar.run&lt;br /&gt;
$ cd /opt/traccar/conf&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;настраиваем конфиг, приводим к виду ниже, не забудьте заменить &lt;b&gt;user_password&lt;/b&gt; на тот, который указывали выше&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ mcedit traccar.xml&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?xml version=&amp;#039;1.0&amp;#039; encoding=&amp;#039;UTF-8&amp;#039;?&amp;gt;
&amp;lt;!DOCTYPE properties SYSTEM &amp;#039;http://java.sun.com/dtd/properties.dtd&amp;#039;&amp;gt;
&amp;lt;properties&amp;gt;
    &amp;lt;entry key=&amp;#039;config.default&amp;#039;&amp;gt;./conf/default.xml&amp;lt;/entry&amp;gt;
    &amp;lt;entry key=&amp;#039;database.driver&amp;#039;&amp;gt;com.mysql.jdbc.Driver&amp;lt;/entry&amp;gt;
    &amp;lt;entry key=&amp;#039;database.url&amp;#039;&amp;gt;jdbc:mysql://localhost:3306/traccar?useSSL=false&amp;amp;amp;allowMultiQueries=true&amp;amp;amp;autoReconnect=true&amp;amp;amp;useUnicode=yes&amp;amp;amp;characterEncoding=UTF-8&amp;amp;amp;sessionVariables=sql_mode=&amp;#039;&amp;#039;&amp;lt;/entry&amp;gt;
    &amp;lt;entry key=&amp;#039;database.user&amp;#039;&amp;gt;traccar_user&amp;lt;/entry&amp;gt;
    &amp;lt;entry key=&amp;#039;database.password&amp;#039;&amp;gt;user_password&amp;lt;/entry&amp;gt;
&amp;lt;/properties&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;запускаем службу&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ service traccar start&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;смотрим запустился ли сервис&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ service traccar status&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;если все хорошо, получаем следующий вывод&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;● traccar.service - traccar
   Loaded: loaded (/etc/systemd/system/traccar.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-09-24 07:44:48 UTC; 1 day 3h ago
 Main PID: 8519 (java)
    Tasks: 30 (limit: 1152)
   CGroup: /system.slice/traccar.service
           └─8519 /opt/traccar/jre/bin/java -jar tracker-server.jar conf/traccar.xml&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;теперь можно подключиться непосредственно к web интерфейсу&lt;br /&gt;
&lt;a href="http://ip_адрес_droplet:8082"&gt;http://ip_адрес_droplet:8082&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;по-умолчанию вводим:&lt;br /&gt;
Email: admin&lt;br /&gt;
Пароль: admin&lt;/p&gt;
&lt;p&gt;не забудьте настроить наше устройство для передачи данных на сервер, для этого отправьте СМС&lt;br /&gt;
&lt;b&gt;8040000 123.123.123.123 5013&lt;/b&gt;&lt;br /&gt;
123.123.123.123 — ip адрес нашего Droplet&lt;br /&gt;
5013 — порт сервера&lt;br /&gt;
0000  — пароль трекера&lt;/p&gt;
&lt;p&gt;Важно! Трекер Sinotrack ST-901 использует протокол H02? соответственно указываем порт 5013!!!&lt;/p&gt;
&lt;p&gt;В web интерфейсе добавляем устройство (левый верхний угол)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://itscience.pro/pictures/---2019-09-25-14-06-25.png" width="331" height="316" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Имя: имя нашей машинки&lt;br /&gt;
Идентификатор: номер трекера (ID под штрих кодом)&lt;/p&gt;
&lt;p&gt;через некоторое время машина появится на карте&lt;/p&gt;
&lt;p&gt;Все! Для работы этого более чем достаточно!&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://itscience.pro/pictures/---2019-09-25-14-44-23.png" width="539" height="519" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Дальше пойдет дополнительная информация (необязательные опции)&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Для начала создал нового пользователя, чтобы не подключаться все время как admin&lt;/li&gt;
&lt;li&gt;Изменил единицы измерения скорости (в узлах скорость не очень)&lt;br /&gt;
зашел Аккаунт — Атрибуты — добавить&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Имя: Единица скорости&lt;/li&gt;
&lt;li&gt;Значение: км/ч&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Сервер — Слой карты указал «Яндекс Карты», работают быстрее и стабильнее&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Важная для меня опция — это ssl подключение к web интерфейсу, не хочется чтобы мой трафик мог видеть или менять оператор связи. Для этого вам понадобится доменное имя, и доступ к настройкам DNS, подтверждённый ssl сертификат не получится выпустить на ip адрес.&lt;/p&gt;
&lt;p&gt;Для начала, создаем в DNS запись A, где для нашего домена (например, car.domain.ru) ассоциируем ip адрес нашего Droplet.&lt;/p&gt;
&lt;p&gt;настраиваем nginx в режиме reverse proxy и подключаем Let’s Encrypt&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ apt-get install nginx&lt;br /&gt;
$ cd /etc/nginx&lt;br /&gt;
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;приводим конфиг к следующему виду, не забудьте заменить в четырех местах &lt;b&gt;car.domain.ru&lt;/b&gt; на ваш домен&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ mcedit /etc/nginx/sites-enabled/default&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;server {
    listen 80;
    server_name car.domain.ru;
    return 301 https://$host$request_uri;
}

server {
    listen 443;
    server_name car.domain.ru;
    ssl_certificate           /etc/nginx/cert.crt;
    ssl_certificate_key       /etc/nginx/cert.key;
    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;
    access_log            /var/log/nginx/car.domain.ru.access.log;
    client_max_body_size 10M;
    client_body_buffer_size 128k;

    location / {
      proxy_set_header        Host $host;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection &amp;quot;upgrade&amp;quot;;

      proxy_pass          http://localhost:8082;
      proxy_read_timeout  90;

      proxy_redirect      http://localhost:8082 https://car.domain.ru;
      proxy_redirect ws://localhost:8082/api/socket /api/socket;
      proxy_send_timeout 86400s;
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Важно сделать именно так, в web интерфейсе используется WebSocket, который тоже надо правильно транслировать через прокси.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ service nginx restart&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Теперь вы можете открывать в браузере вашу карту по имени &lt;a href="https://car.domain.ru"&gt;https://car.domain.ru&lt;/a&gt; и весь трафик к серверу и обратно будет шифроваться.&lt;/p&gt;
&lt;p&gt;И самая малость, сделаем красиво, добавим подтвержденный сертификат. Нам поможет certbot (&lt;a href="https://certbot.eff.org)."&gt;https://certbot.eff.org).&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ apt-get install software-properties-common&lt;br /&gt;
$ add-apt-repository universe&lt;br /&gt;
$ add-apt-repository ppa:certbot/certbot&lt;br /&gt;
$ apt-get update&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;$ apt-get install certbot python-certbot-nginx&lt;br /&gt;
$ certbot —nginx&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;далее будет предложено указать e-mail, выбрать найденные домены из конфигурации и сделать редирект http на https автоматически.&lt;/p&gt;
&lt;p&gt;проверим автоматический выпуск сертификата:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ certbot renew —dry-run&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;не забудьте добавить задание в crontab для автоматического перевыпуска сертификатов.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;$ crontab -e&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Например, каждого первого числа месяца, в 3 часа 12 минут будет попытка перевыпустить сертификат.&lt;br /&gt;
Добавьте строчку в конце (не забудьте, что в crontab нужно оставлять последнюю пустую строку).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1231**/usr/bin/certbot renew&lt;/p&gt;
&lt;/blockquote&gt;
</description>
</item>


</channel>
</rss>