Проблема с опросом по GSM/CSD после перехода на Linux/Postgres

Не совсем вас понял… Я запустил 2 отдельных контейнера lersamr/full и lersamr/pollservice, просто запускаю их одним docker-compose файлом (как например можно запустить БД и сервер ЛЭРС).

Подскажите подробнее, как сделать? И какие коннекты (LERS_POLLSERVICE_PollHost__Connection) при этом использовать.

root@dev:~# docker ps
CONTAINER ID   IMAGE                          COMMAND                  CREATED          STATUS                PORTS                                                                                  NAMES
89b5560158cd   lersamr/full:3.51.3            "/usr/LERS/start-ser…"   33 minutes ago   Up 33 minutes         0.0.0.0:10000->10000/tcp                                                               lers-lers-1
44a42ccbb2b5   lersamr/pollservice:3.51.3     "dotnet /usr/LERS/Po…"   33 minutes ago   Up 33 minutes         9999/tcp                                                                               lers-lerspool-1

Возможно неточно выразился. Имелось ввиду создать отдельный проект docker compose, в котором установлена только Служба опроса, согласно описанию.

Сделал двумя файлами, в коннекте использовал адрес сервера 10.224.5.15. Оба запущены на одном сервере.
Не помогло. Ошибка таже.

Файл сервера:

version: "3.9"
services:
  lers:
    image: lersamr/full:3.51.3
    restart: always
    ports:
      - 10000:10000 # Порт для подключения к серверу ЛЭРС УЧЁТ
    volumes:
      - /var/LERS:/var/LERS
      - /etc/LERS:/etc/LERS
    environment:
      LERS_SERVER_DATABASE__ConnectionString: "Host=HOST;Database=lers;Username=lers;Password=PASS"
      LERS_SERVER_DATABASE__Provider: "Postgres"

Файл службы опроса:

version: "3.9"
services:
  lerspool:
    image: lersamr/pollservice:3.51.3
    restart: always
    volumes:
      - /var/LERS:/var/LERS
      - /etc/LERS:/etc/LERS
    devices:
      - "/dev/ttyS0:/dev/ttyS0" # COM-порт, к которому подключен модем
    environment:
      LERS_POLLSERVICE_PollHost__Connection: "10.224.5.15:10000"

Настройка службы опроса:

Ранее мы обсуждали разницу во времени между docker и ОС. Уточните, когда опрос проходит в пустой БД, данная разница так же присутствует?

Удалил базу, запустил контейнер, который проинициализировал пустую базу, завел там порт опроса и точку учета.

Время в контейнере и основной ОС также отличается:

root@dev:~# date
Чт 22 июн 2023 15:54:13 +07
root@dev:~# docker exec -ti all-lers-1 bash
root@81a9bf9c5507:/# date
Thu Jun 22 08:54:16 UTC 2023
root@81a9bf9c5507:/# 

Лог:

2023-06-22 08:42:37.0650	----	Порт открыт
2023-06-22 08:42:37.0653	>>	ATZ

2023-06-22 08:42:37.1262	<<	
OK

2023-06-22 08:42:37.1262	>>	ATD89237545695

2023-06-22 08:43:06.4071	<<	
CONNECT 9600/R
2023-06-22 08:43:06.5693	>>	FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2023-06-22 08:43:07.5793	>>	10 00 3F 00 00 00 00 C0 16
2023-06-22 08:43:09.0755	<<	10 00 3F 92 29 02 03 16
2023-06-22 08:43:09.1238	>>	10 00 45 08 00 01 00 B1 16
2023-06-22 08:43:10.7188	<<	10 00 45 00 FF FF FF 30 20 20 20 20 20 20 20 00 00 00 00 00 FF FF FF 30 20 20 20 20 20 20 20 00 00 00 00 00 FF FF FF 30 38 2D 35 33 2D 30 30 00 35 08 00 00 FF FF FF 31 35 2D 31 32 2D 32 31 15 0C 0F 00 29 16
2023-06-22 08:43:10.7299	>>	10 00 45 09 00 01 00 B0 16
2023-06-22 08:43:12.3037	<<	10 00 45 00 FF FF FF 32 30 20 20 20 20 20 20 14 00 00 00 00 FF FF FF 32 33 20 20 20 20 20 20 17 00 00 00 00 FF FF FF 30 20 20 20 20 20 20 20 00 00 00 00 00 FF FF FF 30 20 20 20 20 20 20 20 00 00 00 00 34 16
2023-06-22 08:43:12.3292	>>	10 00 45 0D 00 01 00 AC 16
2023-06-22 08:43:13.9159	<<	10 00 45 00 FF FF FF 31 33 30 20 20 20 20 20 00 00 02 86 00 FF FF FF 35 2E 35 20 20 20 20 20 00 00 30 81 00 FF FF FF 37 30 20 20 20 20 20 20 00 00 0C 85 00 FF FF FF 33 2E 35 20 20 20 20 20 00 00 60 80 53 16
2023-06-22 08:43:13.9192	>>	10 00 45 0E 00 01 00 AB 16
2023-06-22 08:43:15.5157	<<	10 00 45 00 FF FF FF 37 30 20 20 20 20 20 20 00 00 0C 85 00 FF FF FF 32 20 20 20 20 20 20 20 00 00 00 80 00 FF FF FF 31 20 20 20 20 20 20 20 00 00 00 7F 00 FF FF FF 34 20 20 20 20 20 20 20 00 00 00 81 57 16
2023-06-22 08:43:15.5157	>>	10 00 45 11 00 01 00 A8 16
2023-06-22 08:43:17.1340	<<	10 00 45 00 FF FF FF 33 38 32 30 38 20 20 20 00 40 15 8E 00 FF FF FF 31 20 20 20 20 20 20 20 01 00 00 00 00 FF FF FF 30 30 2D 30 30 20 20 20 00 00 00 00 00 FF FF FF 30 30 2D 30 30 20 20 20 00 00 00 00 D2 16
2023-06-22 08:43:17.1437	>>	10 00 52 00 02 18 00 93 16
2023-06-22 08:43:18.6801	<<	10 00 52 00 00 00 00 AD 40 03 81 DB 92 67 80 00 00 00 00 5C 46 04 85 F0 EC 51 84 0C 16
2023-06-22 08:43:18.6918	>>	10 00 52 F3 00 06 00 B4 16
2023-06-22 08:43:20.1788	<<	10 00 52 17 06 16 0F 0F 28 34 16
2023-06-22 08:43:20.7172	----	Порт закрыт

Похоже я нашел проблему в базе данных.
При работе программы, переносящей данные из MS SQL в PG неверно экспортнулась таблица ModemCommand, а именно в ней нет символов “\t”.

Завтра протестирую более тщательно.

рабочая
7	2	ATD	2	0	90000	NO DIALTONE\tBUSY\tNO CARRIER\tERROR	CONNECT\tOK	
не рабочая
7	2	ATD	2	0	90000	NO DIALTONEBUSYNO CARRIERERROR	CONNECTOK	

Выгрузки таблиц из рабочей и нерабочей базы:
ModemCommand_work.log (7,0 КБ)
ModemCommand.log (6,9 КБ)

Можете проверить, в других таблицах нет такой ошибки?

Да, вы оказались правы. Проблема возникает именно по причине разницы в БД, а не в настройках docker. Управляющие AT-команды модемов и ответы на них хранятся в базе данных. Ответы разделены символом табуляции, который при миграции исключался из текста. В результате ответы смешались между собой и искаженными приходили от Сервера Службе опроса. Как следствие при проверке не совпадет ни один ответ, что приводит к возникновению ошибки истечения времени установки соединения по CSD.

В значениях других таблиц, с которыми инициализируется БД, символ табуляции не найден. Но, как вы понимаете, такой поиск достаточно проблематичен. Поэтому после переноса БД все же какое то время стоит быть бдительным.

Спасибо за обращение! Мы обновили утилиту переноса данных с SQL Server на PostgreSQL. Пожалуйста, повторите процедуру переноса и проверьте опрос после этого.