/
h0tnanny
/
IotPlatform
Обзор
Документация
Войти
/
h0tnanny
/
IotPlatform
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
database/seed_positional_demo.sql
108 строк
7 KB
h0tnanny
Парсинг данных как строчки
20 фев 2026, 19:31
20 фев 2026, 19:31
fbb7684
Код
Авторство
О чём код?
-- Демо: позиционный формат данных (значения через пробел) -- Оборудование получает строку вида "25.3 60 true 101", парсер записывает в переменные по порядку. -- -- Создаётся при старте приложения автоматически (см. app.ts runPositionalDemoSeed). -- Ручной запуск: node -e "require('pg').Pool(...).query(require('fs').readFileSync('database/seed_positional_demo.sql','utf8'))" -- -- Что создаётся: -- - Оборудование eq-positional-demo (passive, csv, пробел, маппинг temperature, humidity, active, pressure) -- - Эмулятор в client mode с payload_simulation_format=positional (шлёт "25.3 60 true 101") -- - Workflow wf-positional-demo (проверка температуры и давления, логи в консоль) -- Оборудование: пассивный режим, формат csv, разделитель пробел, маппинг позиций INSERT INTO equipment ( id, name, protocol, data_mode, endpoint, poll_interval, payload_format, payload_options ) VALUES ( 'eq-positional-demo', 'Демо: позиционный формат (значения через пробел)', 'http', 'passive', '/datasource/eq-positional-demo', 0, 'csv', '{"delimiter": " ", "fieldNames": ["temperature", "humidity", "active", "pressure"]}'::jsonb ) ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, protocol = EXCLUDED.protocol, data_mode = EXCLUDED.data_mode, endpoint = EXCLUDED.endpoint, poll_interval = EXCLUDED.poll_interval, payload_format = EXCLUDED.payload_format, payload_options = EXCLUDED.payload_options, updated_at = NOW(); DELETE FROM equipment_variables WHERE equipment_id = 'eq-positional-demo'; INSERT INTO equipment_variables (equipment_id, name, description, type, value) VALUES ('eq-positional-demo', 'temperature', 'Температура (°C)', 'Double', '20'), ('eq-positional-demo', 'humidity', 'Влажность (%)', 'Double', '50'), ('eq-positional-demo', 'active', 'Датчик активен', 'Boolean', 'true'), ('eq-positional-demo', 'pressure', 'Давление (кПа)', 'Number', '101'); -- Эмулятор: client mode, шлёт данные в формате "25.3 60 true 101" (positional) -- Фиксированный UUID для повторного запуска seed без дубликатов INSERT INTO emulated_devices ( id, name, description, mode, is_running, server_path, udp_port, target_equipment_id, push_interval, payload_simulation_format ) VALUES ( 'a1b2c3d4-e5f6-4a5b-8c9d-000000000001'::uuid, 'Эмулятор позиционного формата', 'Client: отправляет значения через пробел на eq-positional-demo (temperature humidity active pressure)', 'client', true, NULL, NULL, 'eq-positional-demo', 3000, 'positional' ) ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, description = EXCLUDED.description, target_equipment_id = EXCLUDED.target_equipment_id, payload_simulation_format = EXCLUDED.payload_simulation_format, is_running = EXCLUDED.is_running, updated_at = NOW(); DELETE FROM emulated_device_variables WHERE device_id = 'a1b2c3d4-e5f6-4a5b-8c9d-000000000001'::uuid; INSERT INTO emulated_device_variables (device_id, name, description, type, gen_config) VALUES ('a1b2c3d4-e5f6-4a5b-8c9d-000000000001'::uuid, 'temperature', 'Температура', 'Double', '{"min": 18, "max": 32, "precision": 1}'), ('a1b2c3d4-e5f6-4a5b-8c9d-000000000001'::uuid, 'humidity', 'Влажность', 'Double', '{"min": 30, "max": 75, "precision": 1}'), ('a1b2c3d4-e5f6-4a5b-8c9d-000000000001'::uuid, 'active', 'Активен', 'Boolean', '{"probability": 0.95}'), ('a1b2c3d4-e5f6-4a5b-8c9d-000000000001'::uuid, 'pressure', 'Давление', 'Number', '{"min": 98, "max": 105, "step": 1}'); -- Workflow: реагирует на данные с оборудования (temperature, humidity, active, pressure) INSERT INTO workflows (id, name, description, update_interval, is_activated, start_node_id) VALUES ( 'wf-positional-demo', 'Демо: реакция на позиционные данные', 'Проверяет температуру и давление с оборудования eq-positional-demo, логирует предупреждения', 2000, true, 'pos-check-temp' ) ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, description = EXCLUDED.description, is_activated = EXCLUDED.is_activated; DELETE FROM workflow_variables WHERE workflow_id = 'wf-positional-demo'; INSERT INTO workflow_variables (workflow_id, name, description, type, value) VALUES ('wf-positional-demo', 'temperature', 'Температура с датчика', 'Double', '20'), ('wf-positional-demo', 'humidity', 'Влажность', 'Double', '50'), ('wf-positional-demo', 'active', 'Датчик активен', 'Boolean', 'true'), ('wf-positional-demo', 'pressure', 'Давление', 'Number', '101'), ('wf-positional-demo', 'tempThreshold', 'Порог температуры', 'Number', '28'), ('wf-positional-demo', 'pressureThreshold', 'Порог давления (мин)', 'Number', '99'), ('wf-positional-demo', 'message', 'Сообщение', 'String', '""'); DELETE FROM workflow_nodes WHERE workflow_id = 'wf-positional-demo'; INSERT INTO workflow_nodes (id, workflow_id, name, type, config) VALUES ('pos-check-temp', 'wf-positional-demo', 'Проверка температуры', 'ConditionNode', '{"fieldName": "temperature", "operator": ">", "compareValue": "tempThreshold", "trueNextId": "pos-high-temp", "falseNextId": "pos-check-pressure"}'::jsonb), ('pos-high-temp', 'wf-positional-demo', 'Высокая температура', 'ActionNode', '{"code": "variables.message = \"⚠️ Температура \" + variables.temperature + \"°C превышает порог!\"; console.log(variables.message);", "nextNodeId": null}'::jsonb), ('pos-check-pressure', 'wf-positional-demo', 'Проверка давления', 'ConditionNode', '{"fieldName": "pressure", "operator": "<", "compareValue": "pressureThreshold", "trueNextId": "pos-low-pressure", "falseNextId": "pos-ok"}'::jsonb), ('pos-low-pressure', 'wf-positional-demo', 'Низкое давление', 'ActionNode', '{"code": "variables.message = \"⚠️ Давление \" + variables.pressure + \" кПа ниже нормы\"; console.log(variables.message);", "nextNodeId": null}'::jsonb), ('pos-ok', 'wf-positional-demo', 'Всё в норме', 'ActionNode', '{"code": "variables.message = \"✓ T=\" + variables.temperature + \"°C P=\" + variables.pressure + \" кПа\"; console.log(variables.message);", "nextNodeId": null}'::jsonb);