Znów nie opuściłeś deski i nie wyłączyłeś światła? Mam na to proste rozwiązanie ;)

Znów nie opuściłeś deski i nie wyłączyłeś światła? Mam na to proste rozwiązanie ;)

Tak sobie ostatnio rozmawiałem ze znajomym, że jego dziewczyna ciągle ochrzania go za nie spuszczanie deski i nie gaszenie światła - wiecie, że jest na to mega prosty sposób? Wystarczy czujnik otwarcia i czujnik ruchu, a problem odejdzie w zapomnienie!

Ja wiem, gówniany pomysł na artykuł - ale nawet nie wiecie ile osób do mnie w tej sprawie pisało już na grupie! Dużo osób ma tego typu rozwiązanie ale potem to ginie w postach na grupie ;) A to takie proste, co potrzebujemy?

Zestaw

I oczywiście gdzieś postawionego Home Assistanta - praktycznie da się zrobić uproszczoną wersję tego rozwiązania w Tuya jak i Aqara.

Pomysł

Cała idea polega na tym, żeby wykorzystać czujnik i ruchu aby sprawdzać czy ktoś jest w łazience i czy deska jest zamknięta ;) Cel dla drugiej połówki: ma to być prawie niewidoczne! 

Instalacja

Czujnik ruchu montujemy tak aby nas widział - pamiętajcie jak długo siedzimy nieruchomo to taki czujnik wykryje brak ruchu, trzeba będzie ruszyć nogą ;)

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_1

Jak już pojawią się czujniki obecności na Zigbee pewnie go nim zastąpię a obecnie mam tak, że używam ich podwójnie w grupie.

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_10

Montujemy czujnik otwarcia w zależności co chcemy sprawdzać: otwarcie względem toalety, czy otwarcie względem obu desek. 

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_2

Powiadomienia

No i teraz powiadomienie wysyłam na głośnik Google Home a jak chcemy bardziej dyskretnie aby druga połówka nie wiedziała, to możemy sobie wysłać je na telefon ;)  

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_1

Światło

Możemy wykorzystać żarówki smart aby w zależności od pory dnia światło świeciło nam mocniej lub słabiej.

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_8

Do tego włącznik ścienny (pilot), który tym będzie sterować. Żarówki muszą mieć cały czas napięcie aby odbierać sygnał z pilota.

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_9

Prysznic

No tylko jak jesteśmy pod prysznicem to czujnik ruchu nas przez szybę nie zobaczy, dlatego ja dodałem jeszcze czujnik otwarcia na prysznicu i warunek, że światło może zgasnąć tylko jak jest on otwarty! 

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_3

Dodatkowe

Wrzuciłem sobie jeszcze wiatraczek w łazience - że gdy temperatura i wilgotność jest powyżej standardu a drzwi od prysznica są zamknięte to ma się włączyć ;) 

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_7

U mnie jak widzicie jest to połączone przez Sonoff TH ale jaki sens flashować urządzenie (bo na oryginalnym długo stany odczytuje), skoro można wykorzystać wspomniany czujnik temperatury Xiaomi i przekaźnik Sonoff Zigbee

Flow z NodeRED

A tak się prezentuje flow.

Znów nie spuściłeś deski? Mam na to proste rozwiązanie ;)_2 

I oczywiście kod do importu.

[
    {
        "id": "63da5f39.04dd9",
        "type": "api-call-service",
        "z": "4db09caa.a302b4",
        "name": "Decor Light On",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_on",
        "entityId": "switch.2450332684f3eb1db540_2",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1040,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "d5f90c14.30a48",
        "type": "api-call-service",
        "z": "4db09caa.a302b4",
        "name": "Top Light On",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_on",
        "entityId": "switch.2450332684f3eb1db540_1",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1050,
        "y": 180,
        "wires": [
            [
                "3f957390.283ffc"
            ]
        ]
    },
    {
        "id": "4a5f76a5.6dd178",
        "type": "time-range-switch",
        "z": "4db09caa.a302b4",
        "name": "",
        "lat": "50.2443",
        "lon": "19.04186",
        "startTime": "6:40",
        "endTime": "7:15",
        "startOffset": 0,
        "endOffset": 0,
        "x": 750,
        "y": 160,
        "wires": [
            [
                "63da5f39.04dd9"
            ],
            [
                "d5f90c14.30a48"
            ]
        ]
    },
    {
        "id": "374629ab.e9b036",
        "type": "server-state-changed",
        "z": "4db09caa.a302b4",
        "name": "Motion Group Bathroom On",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "group.motion_bathroom",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "str",
        "haltifstate": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "outputs": 2,
        "output_only_on_state_change": true,
        "for": "",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "x": 220,
        "y": 260,
        "wires": [
            [
                "571936db.9f3758"
            ],
            [
                "7404c890.8c4a68"
            ]
        ]
    },
    {
        "id": "7404c890.8c4a68",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "Shower Door Open",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "binary_sensor.0x00158d0004840a27_contact",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 610,
        "y": 400,
        "wires": [
            [
                "dba9edd2.d24fd"
            ],
            []
        ]
    },
    {
        "id": "dba9edd2.d24fd",
        "type": "trigger",
        "z": "4db09caa.a302b4",
        "name": "",
        "op1": "",
        "op2": "",
        "op1type": "nul",
        "op2type": "payl",
        "duration": "30",
        "extend": true,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 830,
        "y": 400,
        "wires": [
            [
                "6e6c664f.8019a8"
            ]
        ]
    },
    {
        "id": "6e6c664f.8019a8",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "Group Motion",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "group.motion_bathroom",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 1040,
        "y": 400,
        "wires": [
            [],
            [
                "3f957390.283ffc",
                "14e62f1c.0bcf01"
            ]
        ]
    },
    {
        "id": "3f957390.283ffc",
        "type": "api-call-service",
        "z": "4db09caa.a302b4",
        "name": "Decor Light Off",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_off",
        "entityId": "switch.2450332684f3eb1db540_2",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1300,
        "y": 280,
        "wires": [
            []
        ]
    },
    {
        "id": "14e62f1c.0bcf01",
        "type": "api-call-service",
        "z": "4db09caa.a302b4",
        "name": "Top Light Off",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_off",
        "entityId": "switch.2450332684f3eb1db540_1",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1290,
        "y": 340,
        "wires": [
            []
        ]
    },
    {
        "id": "4c255ae4.f8e6c4",
        "type": "server-state-changed",
        "z": "4db09caa.a302b4",
        "name": "Shower Door Open",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "binary_sensor.0x00158d0004840a27_contact",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "str",
        "haltifstate": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "outputs": 2,
        "output_only_on_state_change": true,
        "for": "",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "x": 190,
        "y": 540,
        "wires": [
            [
                "807cbdb5.73542"
            ],
            [
                "9bfbd0b5.c9718"
            ]
        ]
    },
    {
        "id": "59b6c8d3.b967e8",
        "type": "api-call-service",
        "z": "4db09caa.a302b4",
        "name": "Fan On",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_on",
        "entityId": "switch.sonoff_b1",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1060,
        "y": 500,
        "wires": [
            []
        ]
    },
    {
        "id": "7640f5fd.d97a3c",
        "type": "api-call-service",
        "z": "4db09caa.a302b4",
        "name": "Fan Off",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_off",
        "entityId": "switch.sonoff_b1",
        "data": "",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "",
        "output_location_type": "none",
        "mustacheAltTags": false,
        "x": 1120,
        "y": 600,
        "wires": [
            []
        ]
    },
    {
        "id": "8e2f273e.1c7788",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "Temp > 23",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "23",
        "halt_if_type": "num",
        "halt_if_compare": "gte",
        "override_topic": false,
        "entity_id": "sensor.sonoff_fan_si7021_temperature",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 690,
        "y": 500,
        "wires": [
            [
                "b0b22f64.633d6"
            ],
            []
        ]
    },
    {
        "id": "b0b22f64.633d6",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "Humi > 70",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "70",
        "halt_if_type": "num",
        "halt_if_compare": "gte",
        "override_topic": false,
        "entity_id": "sensor.sonoff_fan_si7021_humidity",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 890,
        "y": 500,
        "wires": [
            [
                "59b6c8d3.b967e8"
            ],
            []
        ]
    },
    {
        "id": "9bfbd0b5.c9718",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "Shower Door Open",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "binary_sensor.0x00158d0004840a27_contact",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 450,
        "y": 500,
        "wires": [
            [
                "807cbdb5.73542"
            ],
            [
                "8e2f273e.1c7788"
            ]
        ]
    },
    {
        "id": "92bf0bf.afe17f8",
        "type": "server-state-changed",
        "z": "4db09caa.a302b4",
        "name": "Temp > 23",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "sensor.sonoff_fan_si7021_temperature",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "str",
        "haltifstate": "23",
        "halt_if_type": "num",
        "halt_if_compare": "gte",
        "outputs": 2,
        "output_only_on_state_change": true,
        "for": "",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "x": 180,
        "y": 460,
        "wires": [
            [
                "9bfbd0b5.c9718"
            ],
            [
                "807cbdb5.73542"
            ]
        ]
    },
    {
        "id": "385e1f3.6d55be",
        "type": "server-state-changed",
        "z": "4db09caa.a302b4",
        "name": "Humi > 70",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "sensor.sonoff_fan_si7021_humidity",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "str",
        "haltifstate": "70",
        "halt_if_type": "num",
        "halt_if_compare": "gte",
        "outputs": 2,
        "output_only_on_state_change": true,
        "for": "",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "x": 180,
        "y": 400,
        "wires": [
            [
                "9bfbd0b5.c9718"
            ],
            [
                "807cbdb5.73542"
            ]
        ]
    },
    {
        "id": "807cbdb5.73542",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "Fan On",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "switch.sonoff_b1",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 460,
        "y": 580,
        "wires": [
            [
                "9ee0bb6e.42a098"
            ],
            []
        ]
    },
    {
        "id": "3d566387.9d071c",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "below_horizon",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "sun.sun",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 780,
        "y": 260,
        "wires": [
            [
                "63da5f39.04dd9"
            ],
            [
                "d5f90c14.30a48"
            ]
        ]
    },
    {
        "id": "8d3098c.9495168",
        "type": "inject",
        "z": "4db09caa.a302b4",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 540,
        "y": 320,
        "wires": [
            [
                "3d566387.9d071c"
            ]
        ]
    },
    {
        "id": "571936db.9f3758",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "All Light On",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "group.all_lights",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 530,
        "y": 240,
        "wires": [
            [
                "4a5f76a5.6dd178"
            ],
            [
                "3d566387.9d071c"
            ]
        ]
    },
    {
        "id": "9ee0bb6e.42a098",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "Shower Door Open",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "binary_sensor.0x00158d0004840a27_contact",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 690,
        "y": 600,
        "wires": [
            [
                "d9f233b8.40083"
            ],
            []
        ]
    },
    {
        "id": "d9f233b8.40083",
        "type": "trigger",
        "z": "4db09caa.a302b4",
        "name": "",
        "op1": "",
        "op2": "",
        "op1type": "nul",
        "op2type": "payl",
        "duration": "3",
        "extend": false,
        "overrideDelay": false,
        "units": "min",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 910,
        "y": 600,
        "wires": [
            [
                "7640f5fd.d97a3c"
            ]
        ]
    },
    {
        "id": "59c3a4da.45a76c",
        "type": "server-state-changed",
        "z": "4db09caa.a302b4",
        "d": true,
        "name": "Toilet Open",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "binary_sensor.0x00158d0004840a27_contact",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "str",
        "haltifstate": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "outputs": 2,
        "output_only_on_state_change": true,
        "for": "",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "x": 190,
        "y": 720,
        "wires": [
            [
                "74165354.c3598c"
            ],
            []
        ]
    },
    {
        "id": "74165354.c3598c",
        "type": "api-current-state",
        "z": "4db09caa.a302b4",
        "name": "Group Motion",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "override_topic": false,
        "entity_id": "group.motion_bathroom",
        "state_type": "str",
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "blockInputOverrides": false,
        "x": 400,
        "y": 720,
        "wires": [
            [
                "47847e19.b5d97",
                "3a05a0a8.a92e5"
            ],
            []
        ]
    },
    {
        "id": "47847e19.b5d97",
        "type": "api-call-service",
        "z": "4db09caa.a302b4",
        "name": "Info tts",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "tts",
        "service": "google_translate_say",
        "entityId": "media_player.mini_office",
        "data": "{\"message\":\"Opuśc deskę złoczyńco!.\",\"language\":\"pl\"}",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "payload",
        "output_location_type": "msg",
        "mustacheAltTags": false,
        "x": 670,
        "y": 780,
        "wires": [
            []
        ]
    },
    {
        "id": "3a05a0a8.a92e5",
        "type": "api-call-service",
        "z": "4db09caa.a302b4",
        "name": "Info phone",
        "server": "b3e9b226.7fd0c",
        "version": 1,
        "debugenabled": false,
        "service_domain": "notify",
        "service": "mobile_app_note_8",
        "entityId": "",
        "data": "{ \"message\": \"Opuść deskę!\"}",
        "dataType": "json",
        "mergecontext": "",
        "output_location": "payload",
        "output_location_type": "msg",
        "mustacheAltTags": false,
        "x": 676,
        "y": 713,
        "wires": [
            []
        ]
    },
    {
        "id": "a2402cfc.96cf6",
        "type": "inject",
        "z": "4db09caa.a302b4",
        "name": "",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 420,
        "y": 660,
        "wires": [
            [
                "3a05a0a8.a92e5"
            ]
        ]
    }
]

 

Podsumowanie

Jak widzicie jest to mega proste w realizacji, wystarczy pomysł i trochę pokombinować jak dane czujniki ułożyć. Oczywiście gdy wykorzystamy małe magnesy, to już w ogóle dużo problemów nam odchodzi i wszystko może być jeszcze mniej widoczne i lepiej ustawione.

Najważniejsze tylko przemyśleć jak to ma działać u mnie sprawdza się to w 100%, można oczywiście dodać opóźnienie jeszcze z tym czujnikiem ruchu aby po 30 sekundach sprawdził jeszcze raz (jak się zasiedzimy na toalecie i nam jednak światło zgaśnie). Jest naprawdę dużo możliwości u mnie zastosowany mam akurat przełącznik smart i dwie strefy świecenia ale to już zależy od Was jak chcecie to zrobić. 

Chcesz wiedzieć więcej? Dołącz do grupy na FB. Będzie nam też miło jak polubisz Fanpage!

Oczyszczacz Xiaomi Viomi Smart Air Purifier Pro

Od: 597 zł 999 zł | Powiadom gdy cena spadnie

Jest to pierwszy oczyszczacz z firmy zależnej od Xiaomi. Jest to model konkurencyjny do Xiaomi wersji PRO i powiem Wam szczerze - dodanie UV do jego funkcjonalności było świetnym pomysłem! Jest to zupełna nowość na rynku!

Dziwi brak reklam? Przeczytaj dlaczego i wesprzyj bloga na  lub