# 技术选型 ### 串口数据接收 1. 串口模拟器 1. socat 1. **Create Virtual Serial Port Pair** Use `socat` to create two linked virtual serial ports. This example creates two virtual serial ports: `/dev/ttyV0` and `/dev/ttyV1`. ```bash socat -d -d PTY,link=./dev/ttyV0,raw,echo=0 PTY,link=./dev/ttyV1,raw,echo=0 ``` **Explanation:** - `-d -d`: Enables debug output to see the details of the operations. - `PTY,link=/dev/ttyV0,raw,echo=0`: Creates a pseudo-terminal (PTY) with a symbolic link `/dev/ttyV0`, in raw mode with no echo. - `PTY,link=/dev/ttyV1,raw,echo=0`: Creates another PTY with a symbolic link `/dev/ttyV1`, in raw mode with no echo. - ```bash screen ./dev/ttyV0 9600 echo "hello" > ./dev/ttyV1 ``` ### 消息队列 nats-server # 架构设计 micrioprofile openliberty micronaut 1. 串口读取 2. 报文拆分 3. 动态解析 4. 计划解析 5. 总线消息生成 6. 动态信息转发 7. 计划转发 串口 => 消息流原始 => 已分离电报消息 => 待发送 => 消息总线 ### 系统总线适配 日计划处理 季度计划处理 航班主要信息同步 动态消息转发 ### 串口转消息队列 命令行工具 1. 串口参数 2. 消息队列参数 ### 电报存储 postgresql pocketbase nats nui pocketbase meilisearch compose.yml ```yaml services: nats: container_name: nats image: nats ports: - "4222:4222" - "6222:6222" - "8222:8222" restart: unless-stopped nui: container_name: nui image: ghcr.io/nats-nui/nui volumes: - ./db:/db - ./creds:/nats-creds:ro ports: - "31311:31311" restart: unless-stopped pocketbase: image: ghcr.io/muchobien/pocketbase:latest container_name: pocketbase restart: unless-stopped command: #- --encryptionEnv #optional #- ENCRYPTION #optional environment: ENCRYPTION: example #optional ports: - "8090:8090" volumes: - ./data:/pb_data - ./public:/pb_public #optional - ./hooks:/pb_hooks #optional healthcheck: #optional (recommended) since v0.10.0 test: wget --no-verbose --tries=1 --spider http://localhost:8090/api/health || exit 1 interval: 30s timeout: 5s retries: 5 meilisearch: container_name: meilisearch image: getmeili/meilisearch:v1.8 environment: - http_proxy - https_proxy - MEILI_MASTER_KEY=${MEILI_MASTER_KEY:-masterKey} - MEILI_NO_ANALYTICS=${MEILI_NO_ANALYTICS:-true} - MEILI_ENV=${MEILI_ENV:-development} ports: - ${MEILI_PORT:-7700}:7700 volumes: - ./meili_data:/meili_data restart: unless-stopped ``` nat with monitor: ```docker-compose.yml networks: monitor-net: driver: bridge services: nats: image: nats container_name: nats restart: always command: -c /etc/nats/nats.conf ports: - "4222:4222" # client port - "6222:6222" # cluster port - "8222:8222" # monitoring port volumes: - ./nats.conf:/etc/nats/nats.conf - $JETSTREAM_STORAGE:/data networks: - monitor-net exporter: image: natsio/prometheus-nats-exporter container_name: nats-exporter restart: always command: # see https://github.com/nats-io/prometheus-nats-exporter/blob/main/main.go#L87 # "-connz", # connection metrics - -connz_detailed # advanced connection metrics - -jsz - all # jetstream metrics - -routez # route metrics - -subz # subscription metrics - -varz # general metrics - -prefix=nats # prefix for all metrics - -use_internal_server_id # using serverID from /varz - http://nats:8222/ networks: - monitor-net labels: org.label-schema.group: "nats-monitoring" depends_on: - nats # ports: # - "7777:7777" surveyor: image: natsio/nats-surveyor container_name: nats-surveyor restart: always volumes: - ./observations:/observations - $JETSTREAM_STORAGE:/data command: | -s "${NATS_SURVEYOR_SERVERS}" --accounts --observe /observations --jetstream /data networks: - monitor-net labels: org.label-schema.group: "nats-monitoring" depends_on: - nats prometheus: image: prom/prometheus container_name: prometheus restart: always volumes: - ./prometheus/:/etc/prometheus/ - $PROMETHEUS_STORAGE:/usr/local/share/prometheus command: --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/usr/local/share/prometheus networks: - monitor-net labels: org.label-schema.group: "nats-monitoring" ports: - "9090:9090" depends_on: - surveyor - exporter grafana: image: grafana/grafana container_name: grafana restart: always ports: - "3000:3000" volumes: - ./grafana/dashboards:/var/lib/grafana/dashboards - ./grafana/provisioning:/etc/grafana/provisioning networks: - monitor-net labels: org.label-schema.group: "nats-monitoring" depends_on: - prometheus ``` ```dash ``` ### 电报解析,电报存储,电报转发 管理界面接口 ### 管理界面 电报界面 日计划界面 全文检索 typesense meli nextjs shadcn svelte shadcn melt-ui: https://melt-ui.com flowbite: [Flowbite Svelte](https://flowbite-svelte.com/) htmx: go: chi htmx tailwindcss echo htmx tailwindcss python: deno: fresh Telegram Message Body Expression: FPL: ```regex \((?P[A-Z]{3})-(?P[A-Z]+\d+)-(?P[A-Z]{2})\n-(?P[A-Z]+\d+\/?[A-Z]?)\n?-(?P.*)\n?-(?P[A-Z]{4})(?P\d{4})\n?-(?P[A-Z]+\d+)(?P[A-Z0-9]+)\s+(?P(.|\n)+)\n-(?P[A-Z]{4})(?P\d{4})\s+(?P[A-Z]{4})\n?-([A-Z]{3}\/(?:[A-Z]{4}\d{4}\s?)+)?(?P(?m)[A-Z]{3}\/(.|\n)*)\)$ ``` ARR: ```regex \\((?P[A-Z]{3})\\-(?P([A-Z]+\\d+))\\/?(?P[A-Z]+\\d+)\\-(?P[A-Z]{4})\\-(?P[A-Z]{4})(?P