[ { "id": "osys_case_tab", "type": "tab", "label": "Case: motion → light", "disabled": false, "info": "Реальный сценарий: движение → включить свет, нет движения → выключить.\n\nПеред Deploy:\n1) Server → Base URL + API key.\n2) Замените Object.property на свои (Refresh в нодах):\n - MotionSensor.occupancy — датчик присутствия/движения (bool)\n - HallLamp.state — лампа (bool)\n3) Deploy и проверьте: измените occupancy в osys или с устройства." }, { "id": "osys_case_cfg", "type": "osys-config", "name": "osysHome", "baseUrl": "http://host.docker.internal:5000" }, { "id": "osys_case_c1", "type": "comment", "z": "osys_case_tab", "name": "1. Слушаем датчик (events)", "info": "Подписка на MotionSensor.occupancy.\nIgnore own = on — не реагируем на свои же записи из Node-RED.\nЗамените на свой объект (например Zigbee motion / PIR).", "x": 200, "y": 40, "wires": [] }, { "id": "osys_case_events", "type": "osys-events", "z": "osys_case_tab", "name": "MotionSensor.occupancy", "server": "osys_case_cfg", "properties": "MotionSensor.occupancy", "ignoreOwn": true, "x": 200, "y": 100, "wires": [["osys_case_switch"]] }, { "id": "osys_case_switch", "type": "switch", "z": "osys_case_tab", "name": "есть движение?", "property": "payload", "propertyType": "msg", "rules": [ { "t": "true" }, { "t": "false" }, { "t": "eq", "v": "1", "vt": "str" }, { "t": "eq", "v": "0", "vt": "str" } ], "checkall": "false", "repair": false, "outputs": 4, "x": 430, "y": 100, "wires": [ ["osys_case_on"], ["osys_case_off"], ["osys_case_on"], ["osys_case_off"] ] }, { "id": "osys_case_c2", "type": "comment", "z": "osys_case_tab", "name": "2. Включаем / выключаем лампу", "info": "HallLamp.state = true/false. Подставьте свой свет (или реле).", "x": 200, "y": 180, "wires": [] }, { "id": "osys_case_on", "type": "change", "z": "osys_case_tab", "name": "payload = true", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "true", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 200, "y": 240, "wires": [["osys_case_set"]] }, { "id": "osys_case_off", "type": "change", "z": "osys_case_tab", "name": "payload = false", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "false", "tot": "bool" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 200, "y": 300, "wires": [["osys_case_set"]] }, { "id": "osys_case_set", "type": "osys-set-property", "z": "osys_case_tab", "name": "HallLamp.state", "server": "osys_case_cfg", "object": "HallLamp", "propertyName": "state", "property": "HallLamp.state", "x": 420, "y": 270, "wires": [["osys_case_dbg_set"]] }, { "id": "osys_case_dbg_set", "type": "debug", "z": "osys_case_tab", "name": "light command", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 640, "y": 270, "wires": [] }, { "id": "osys_case_c3", "type": "comment", "z": "osys_case_tab", "name": "3. Мониторинг лампы на ноде (Live)", "info": "Под блоком видно текущее HallLamp.state в realtime — удобно отлаживать автоматику.", "x": 230, "y": 380, "wires": [] }, { "id": "osys_case_monitor", "type": "osys-get-property", "z": "osys_case_tab", "name": "мониторинг HallLamp.state", "server": "osys_case_cfg", "object": "HallLamp", "propertyName": "state", "property": "HallLamp.state", "liveStatus": true, "x": 230, "y": 440, "wires": [[]] }, { "id": "osys_case_c4", "type": "comment", "z": "osys_case_tab", "name": "4. Ручной тест без датчика", "info": "Эмуляция occupancy, если датчика ещё нет в системе.", "x": 200, "y": 520, "wires": [] }, { "id": "osys_case_inj_occ_on", "type": "inject", "z": "osys_case_tab", "name": "эмуляция: движение ON", "props": [{ "p": "payload" }], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 190, "y": 580, "wires": [["osys_case_set_occ"]] }, { "id": "osys_case_inj_occ_off", "type": "inject", "z": "osys_case_tab", "name": "эмуляция: движение OFF", "props": [{ "p": "payload" }], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "false", "payloadType": "bool", "x": 190, "y": 620, "wires": [["osys_case_set_occ"]] }, { "id": "osys_case_set_occ", "type": "osys-set-property", "z": "osys_case_tab", "name": "MotionSensor.occupancy", "server": "osys_case_cfg", "object": "MotionSensor", "propertyName": "occupancy", "property": "MotionSensor.occupancy", "x": 450, "y": 600, "wires": [["osys_case_dbg_occ"]] }, { "id": "osys_case_dbg_occ", "type": "debug", "z": "osys_case_tab", "name": "occupancy set", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "payload", "targetType": "msg", "statusVal": "", "statusType": "auto", "x": 680, "y": 600, "wires": [] } ]