Исходник схемы
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_teltonika_startup" targetNamespace="urn:sharix:knowledge:handlers">
<bpmn:process id="udp_Process_udp" name="open_teltonika_gps_tracker: XMPP bootstrap и UDP loop" isExecutable="false">
<bpmn:documentation>{"notes": ["BPMN isExecutable=false; typed operation teltonika_udp_receiver из Blockly, Python сверён канонически.", "Штатный binding requires_xmpp=True: UDP запускается после XMPP connection preflight.", "GPX и отдельные AVL файлы по умолчанию выключены в этом binding; интерактивный catcher main не вызывается.", "ACK из raw byte slices не доказывает успешное сохранение всех точек."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_teltonika_gps_tracker.py", "repository": "sharix-open-handlers-examples", "sha256": "176dc8e04c8370481da568124f7e5a27a5418592a3947f718986b042b4a5e083"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_teltonika_gps_tracker.json", "repository": "sharix-open-handlers-examples", "sha256": "a44f034cf10fe311ba6775c8c3579bd14448dc95c9c8ef08fa699c5c2b13ef2d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "first_party_operations/open_teltonika_gps_tracker.py", "repository": "sharix-open-handlers-examples", "sha256": "d8c766ceecb6eabdd24bccc0d0f6e9ddcab1fc3b8dab7432b1cf6a0dbda27e86"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "config.py", "repository": "sharix-open-handlers-examples", "sha256": "7b23db9ed283d3bbc3cf2cfbd5d41c629f6be507c3ca38c611572d08a75743a4"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "first_party_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "7f4dc6607ad62f3150c58de6341b758ebe97f81bd936c9ec033b7d86fed44640"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/first_party_handler_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "fb5ee98561b029de9291e73c2a08205cc9fc2b7b239abffe4a4bb24f56093bdb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "main.py", "repository": "sharix-open-handlers-backend", "sha256": "66b7df94fedbec931ed4cb2d4e1afd9cf0386e14ed0932e22b15eb301cd792d7"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "runtime_provider.py", "repository": "sharix-open-handlers-backend", "sha256": "c311d3b0721d18d8eccc9cd7fba155108bf285df3002507ee915ee73b797a2f4"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/JabberBot.py", "repository": "sharix-open-handlers-backend", "sha256": "7fbd4d1f41bc867109b73dbb632efcfae920269a1aaf6da0e577cc70838820f1"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "teltonika_config.py", "repository": "sharix-open-handlers-examples", "sha256": "37b1abca5f520f89812e0c0f02c0386511a69553ace5e9cf29243d0ad3d7fb0d"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_teltonika_gps_tracker_dir/catcher.py", "repository": "sharix-open-handlers-examples", "sha256": "f99e418651e38d15bf198e5cd8fb547d97fc084a7bd330e88f9bb9a8e0cdf6dd"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_teltonika_gps_tracker_dir/decoder.py", "repository": "sharix-open-handlers-examples", "sha256": "e5420416a997acfabf29ae0942d8fa95b52890cec71d036f39d9164c210942d3"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_teltonika_gps_tracker_dir/gpx_recorder.py", "repository": "sharix-open-handlers-examples", "sha256": "fa7cbabbfe354fade58e2d9b16195df911755dc49489c405fad389a38abb1b38"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_teltonika_gps_tracker_dir/config_importer.py", "repository": "sharix-open-handlers-examples", "sha256": "3b2ca95e371bdf92dad65a7a9bd4befd0682f0c8ea03212c94b1c2678376c5df"}]}</bpmn:documentation>
<bpmn:laneSet id="udp_Lanes_udp">
<bpmn:lane id="udp_Lane_worker" name="Выбранный Python binding, не отдельный запуск catcher.main">
<bpmn:flowNodeRef>udp_start</bpmn:flowNodeRef>
<bpmn:flowNodeRef>udp_xmpp</bpmn:flowNodeRef>
<bpmn:flowNodeRef>udp_socket</bpmn:flowNodeRef>
<bpmn:flowNodeRef>udp_stop</bpmn:flowNodeRef>
<bpmn:flowNodeRef>udp_close</bpmn:flowNodeRef>
<bpmn:flowNodeRef>udp_receive</bpmn:flowNodeRef>
<bpmn:flowNodeRef>udp_result</bpmn:flowNodeRef>
<bpmn:flowNodeRef>udp_repeat</bpmn:flowNodeRef>
<bpmn:flowNodeRef>udp_error</bpmn:flowNodeRef>
</bpmn:lane>
</bpmn:laneSet>
<bpmn:startEvent id="udp_start" name="Штатный launcher, typed binding">
<bpmn:outgoing>udp_Flow_0</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:serviceTask id="udp_xmpp" name="XMPP connect preflight; callback и supervisor">
<bpmn:incoming>udp_Flow_0</bpmn:incoming>
<bpmn:outgoing>udp_Flow_1</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:serviceTask id="udp_socket" name="AF_INET/SOCK_DGRAM, reuseaddr, timeout=1s, bind env host/port">
<bpmn:incoming>udp_Flow_1</bpmn:incoming>
<bpmn:outgoing>udp_Flow_2</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:exclusiveGateway id="udp_stop" name="exit_event установлен?">
<bpmn:incoming>udp_Flow_2</bpmn:incoming>
<bpmn:outgoing>udp_Flow_3</bpmn:outgoing>
<bpmn:outgoing>udp_Flow_4</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:endEvent id="udp_close" name="Да: finally закрывает socket, затем XMPP">
<bpmn:incoming>udp_Flow_3</bpmn:incoming>
</bpmn:endEvent>
<bpmn:serviceTask id="udp_receive" name="receive_and_print: recvfrom(1024), parse, optional write, ACK">
<bpmn:incoming>udp_Flow_4</bpmn:incoming>
<bpmn:outgoing>udp_Flow_5</bpmn:outgoing>
</bpmn:serviceTask>
<bpmn:exclusiveGateway id="udp_result" name="Чем закончился вызов?">
<bpmn:incoming>udp_Flow_5</bpmn:incoming>
<bpmn:outgoing>udp_Flow_6</bpmn:outgoing>
<bpmn:outgoing>udp_Flow_7</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:endEvent id="udp_repeat" name="Успех/обычный timeout: следующий проход loop">
<bpmn:incoming>udp_Flow_6</bpmn:incoming>
</bpmn:endEvent>
<bpmn:endEvent id="udp_error" name="Иное исключение: socket finally close; общий restart policy">
<bpmn:incoming>udp_Flow_7</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="udp_Flow_0" sourceRef="udp_start" targetRef="udp_xmpp" name="" />
<bpmn:sequenceFlow id="udp_Flow_1" sourceRef="udp_xmpp" targetRef="udp_socket" name="" />
<bpmn:sequenceFlow id="udp_Flow_2" sourceRef="udp_socket" targetRef="udp_stop" name="" />
<bpmn:sequenceFlow id="udp_Flow_3" sourceRef="udp_stop" targetRef="udp_close" name="Да" />
<bpmn:sequenceFlow id="udp_Flow_4" sourceRef="udp_stop" targetRef="udp_receive" name="Нет" />
<bpmn:sequenceFlow id="udp_Flow_5" sourceRef="udp_receive" targetRef="udp_result" name="" />
<bpmn:sequenceFlow id="udp_Flow_6" sourceRef="udp_result" targetRef="udp_repeat" name="Возврат / timeout" />
<bpmn:sequenceFlow id="udp_Flow_7" sourceRef="udp_result" targetRef="udp_error" name="Иное исключение" />
</bpmn:process>
<bpmn:collaboration id="Collaboration_teltonika_startup">
<bpmn:participant id="udp_Pool_udp" name="open_teltonika_gps_tracker: XMPP bootstrap и UDP loop" processRef="udp_Process_udp" />
<bpmn:participant id="device_Participant" name="GPS-устройство: UDP датаграммы к настроенному endpoint" />
<bpmn:messageFlow id="Message_teltonika_startup_0" sourceRef="device_Participant" targetRef="udp_receive" name="UDP трафик отделён от XMPP; готовность XMPP не доказывает приход UDP" />
</bpmn:collaboration>
<bpmndi:BPMNDiagram id="Diagram_teltonika_startup">
<bpmndi:BPMNPlane id="Plane_teltonika_startup" bpmnElement="Collaboration_teltonika_startup">
<bpmndi:BPMNShape id="udp_DI_Pool_udp" bpmnElement="udp_Pool_udp" isHorizontal="true">
<dc:Bounds x="0.0" y="0.0" width="2150" height="440" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_Lane_worker" bpmnElement="udp_Lane_worker" isHorizontal="true">
<dc:Bounds x="30.0" y="0.0" width="2120" height="440" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_start" bpmnElement="udp_start">
<dc:Bounds x="132.0" y="82.0" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_xmpp" bpmnElement="udp_xmpp">
<dc:Bounds x="365.0" y="65.0" width="150" height="70" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_socket" bpmnElement="udp_socket">
<dc:Bounds x="675.0" y="65.0" width="150" height="70" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_stop" bpmnElement="udp_stop">
<dc:Bounds x="1035.0" y="75.0" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_close" bpmnElement="udp_close">
<dc:Bounds x="1042.0" y="322.0" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_receive" bpmnElement="udp_receive">
<dc:Bounds x="1295.0" y="65.0" width="150" height="70" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_result" bpmnElement="udp_result">
<dc:Bounds x="1655.0" y="75.0" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_repeat" bpmnElement="udp_repeat">
<dc:Bounds x="1972.0" y="82.0" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="udp_DI_error" bpmnElement="udp_error">
<dc:Bounds x="1662.0" y="322.0" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="udp_DI_Flow_0" bpmnElement="udp_Flow_0">
<di:waypoint x="168.0" y="100.0" />
<di:waypoint x="365.0" y="100.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="udp_DI_Flow_1" bpmnElement="udp_Flow_1">
<di:waypoint x="515.0" y="100.0" />
<di:waypoint x="675.0" y="100.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="udp_DI_Flow_2" bpmnElement="udp_Flow_2">
<di:waypoint x="825.0" y="100.0" />
<di:waypoint x="1035.0" y="100.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="udp_DI_Flow_3" bpmnElement="udp_Flow_3">
<di:waypoint x="1060.0" y="125.0" />
<di:waypoint x="1060.0" y="322.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="udp_DI_Flow_4" bpmnElement="udp_Flow_4">
<di:waypoint x="1085.0" y="100.0" />
<di:waypoint x="1295.0" y="100.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="udp_DI_Flow_5" bpmnElement="udp_Flow_5">
<di:waypoint x="1445.0" y="100.0" />
<di:waypoint x="1655.0" y="100.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="udp_DI_Flow_6" bpmnElement="udp_Flow_6">
<di:waypoint x="1705.0" y="100.0" />
<di:waypoint x="1972.0" y="100.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="udp_DI_Flow_7" bpmnElement="udp_Flow_7">
<di:waypoint x="1680.0" y="125.0" />
<di:waypoint x="1680.0" y="322.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="DI_device_Participant" bpmnElement="device_Participant" isHorizontal="true">
<dc:Bounds x="0" y="650" width="2150" height="130" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="DI_Message_teltonika_startup_0" bpmnElement="Message_teltonika_startup_0">
<di:waypoint x="1800" y="650" />
<di:waypoint x="2080" y="650" />
<di:waypoint x="2080" y="30" />
<di:waypoint x="1370" y="30" />
<di:waypoint x="1370" y="65" />
<bpmndi:BPMNLabel>
<dc:Bounds x="1550" y="530" width="260" height="42" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>