[ { "id": "osys_case2_tab", "type": "tab", "label": "Case: night light + delay off", "disabled": false, "info": "Сценарий: движение ночью → свет; пропало движение → выключить через 60 с (таймер сбрасывается новым движением).\n\nПодставьте свои объекты:\n- MotionSensor.occupancy (bool)\n- HallLamp.state (bool)\n- опционально: Illuminance.lux или TimeOfDay.night — сейчас ночь задаётся inject-флагом flow.nightMode для простоты демо.\n\nДля боя: вместо flow.nightMode читайте свойство «ночь» из osys (get/events)." }, { "id": "osys_case2_cfg", "type": "osys-config", "name": "osysHome", "baseUrl": "http://host.docker.internal:5000" }, { "id": "osys_case2_c0", "type": "comment", "z": "osys_case2_tab", "name": "Режим «ночь» (демо-флаг)", "info": "В бою замените на get/events свойства типа DayNight.night или Scheduler.", "x": 180, "y": 40, "wires": [] }, { "id": "osys_case2_night_on", "type": "inject", "z": "osys_case2_tab", "name": "nightMode = true", "props": [{ "p": "payload" }], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "true", "payloadType": "bool", "x": 160, "y": 100, "wires": [["osys_case2_set_night"]] }, { "id": "osys_case2_night_off", "type": "inject", "z": "osys_case2_tab", "name": "nightMode = false", "props": [{ "p": "payload" }], "repeat": "", "crontab": "", "once": false, "onceDelay": 0.1, "topic": "", "payload": "false", "payloadType": "bool", "x": 160, "y": 140, "wires": [["osys_case2_set_night"]] }, { "id": "osys_case2_set_night", "type": "change", "z": "osys_case2_tab", "name": "flow.nightMode", "rules": [ { "t": "set", "p": "nightMode", "pt": "flow", "to": "payload", "tot": "msg" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 400, "y": 120, "wires": [["osys_case2_dbg_night"]] }, { "id": "osys_case2_dbg_night", "type": "debug", "z": "osys_case2_tab", "name": "nightMode", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 600, "y": 120, "wires": [] }, { "id": "osys_case2_c1", "type": "comment", "z": "osys_case2_tab", "name": "Движение → свет (только ночью) → таймер выключения", "info": "", "x": 280, "y": 200, "wires": [] }, { "id": "osys_case2_ev", "type": "osys-events", "z": "osys_case2_tab", "name": "MotionSensor.occupancy", "server": "osys_case2_cfg", "properties": "MotionSensor.occupancy", "ignoreOwn": true, "x": 200, "y": 260, "wires": [["osys_case2_fn"]] }, { "id": "osys_case2_fn", "type": "function", "z": "osys_case2_tab", "name": "логика ночь + occupancy", "func": "const occ = msg.payload === true || msg.payload === 1 || msg.payload === '1' || msg.payload === 'true';\nconst night = flow.get('nightMode') === true;\n\nif (occ && night) {\n // свет ON + сброс таймера выключения\n node.status({ fill: 'green', shape: 'dot', text: 'motion night' });\n return [{ payload: true }, { reset: true }];\n}\nif (!occ) {\n // старт отсчёта 60с до OFF\n node.status({ fill: 'yellow', shape: 'ring', text: 'delay off' });\n return [null, { payload: 'no-motion' }];\n}\nnode.status({ fill: 'grey', shape: 'ring', text: 'ignore (day)' });\nreturn [null, null];", "outputs": 2, "timeout": 0, "noerr": 0, "initialize": "", "finalize": "", "libs": [], "x": 450, "y": 260, "wires": [["osys_case2_set_on"], ["osys_case2_delay"]] }, { "id": "osys_case2_set_on", "type": "osys-set-property", "z": "osys_case2_tab", "name": "HallLamp ON", "server": "osys_case2_cfg", "object": "HallLamp", "propertyName": "state", "property": "HallLamp.state", "x": 700, "y": 220, "wires": [["osys_case2_dbg"]] }, { "id": "osys_case2_delay", "type": "trigger", "z": "osys_case2_tab", "name": "off через 60с", "op1": "", "op2": "false", "op1type": "nul", "op2type": "bool", "duration": "60", "extend": false, "overrideDelay": false, "units": "s", "reset": "", "bytopic": "all", "topic": "topic", "outputs": 1, "x": 700, "y": 300, "wires": [["osys_case2_set_off"]] }, { "id": "osys_case2_set_off", "type": "osys-set-property", "z": "osys_case2_tab", "name": "HallLamp OFF", "server": "osys_case2_cfg", "object": "HallLamp", "propertyName": "state", "property": "HallLamp.state", "x": 920, "y": 300, "wires": [["osys_case2_dbg"]] }, { "id": "osys_case2_dbg", "type": "debug", "z": "osys_case2_tab", "name": "lamp cmd", "active": true, "tosidebar": true, "console": false, "tostatus": true, "complete": "payload", "targetType": "msg", "statusVal": "payload", "statusType": "auto", "x": 1110, "y": 260, "wires": [] }, { "id": "osys_case2_mon", "type": "osys-get-property", "z": "osys_case2_tab", "name": "мониторинг HallLamp.state", "server": "osys_case2_cfg", "object": "HallLamp", "propertyName": "state", "property": "HallLamp.state", "liveStatus": true, "x": 230, "y": 380, "wires": [[]] } ]