Demostand: различия между версиями

12 348 байт добавлено ,  5 лет назад
Строка 445: Строка 445:
                 virtual_mrm2_mini_switch = !virtual_mrm2_mini_switch;
                 virtual_mrm2_mini_switch = !virtual_mrm2_mini_switch;
      
      
            }
        }
    });
</code>
</div></div>
====Ручное управление розетками====
<div class="mw-collapsible mw-collapsed">
Код правила
<div class="mw-collapsible-content">
<code>
defineAlias("rozetka1_control", "wb-mr6c_1/K1");
defineAlias("rozetka2_control", "wb-mr6c_1/K2");
defineAlias("rozetka1_virtual_control", "rozetkas_controls/Включить розетку 1");
defineAlias("rozetka2_virtual_control", "rozetkas_controls/Включить розетку 2");
defineRule("rozetka1_manual_turn_on", {
    whenChanged: "wb-gpio/EXT5_DR5",
    then: function(newValue, devName, cellName) {
        if (newValue == true) {
            rozetka1_virtual_control = !rozetka1_virtual_control;
        }
    }
});
defineRule("rozetka2_manual_turn_on", {
    whenChanged: "wb-gpio/EXT5_DR4",
    then: function(newValue, devName, cellName) {
        if (newValue == true) {
            rozetka2_virtual_control = !rozetka2_virtual_control;
        }
    }
});
</code>
</div></div>
====Поддержание заданной температуры====
<div class="mw-collapsible mw-collapsed">
Код правила
<div class="mw-collapsible-content">
<code>
    defineAlias("temperature_sensor_value", "wb-mir-simple_10/External Temperature Sensor");
    defineAlias("small_fan_switcher", "wb-mrm2_11/Relay 2");
    defineAlias("lamp3_switcher", "wb-mr3_3/K1");
    defineAlias("fan_virtual_switcher", "lamp3_manual/Включить вентилятор вручную");
    defineAlias("lamp3_virtual_switcher", "lamp3_manual/Включить вручную");
   
    var MANUAL_FAN_FLAG;
    var MANUAL_LAMP3_FLAG;
   
   
    defineVirtualDevice("lamp3_manual", {
        title: "Управление нагревателем",
        cells: {
            "Включить вручную": {
                type: "switch",
                value: false
            },
            "Включить вентилятор вручную": {
                type: "switch",
                value: false
            },
            "Верхний порог температуры": {
                type: "range",
                value: 26,
                max: 40
            },
            "Нижний порог температуры": {
                type: "range",
                value: 23,
                max: 40
            }
        }
    });
   
   
    defineRule("manual_lamp3_control", {
        whenChanged: "lamp3_manual/Включить вручную",
        then: function(newValue, devName, cellName) {
            if (MANUAL_SWITCHER_3_FLAG == false) {
                if (newValue == true) {
                    lamp3_switcher = 1;
                    //dev["lamp3_manual/Включить вентилятор вручную"] = false;
                    //MANUAL_LAMP3_FLAG = true;
                } else {
                    //MANUAL_LAMP3_FLAG = false;
                    lamp3_switcher = 0;
                }
            }
        }
    });
   
   
    defineRule("manual_fan_control", {
        whenChanged: "lamp3_manual/Включить вентилятор вручную",
        then: function(newValue, devName, cellName) {
            if (newValue == true) {
                small_fan_switcher = 1;
                //dev["lamp3_manual/Включить вручную"] = false;
                //MANUAL_FAN_FLAG = true;
            } else {
                small_fan_switcher = 0;
                //MANUAL_FAN_FLAG = false;
            }
        }
    });
   
   
   
   
    defineRule("heater_hysteresis", {
        whenChanged: "wb-mir-simple_10/External Temperature Sensor",
        then: function(newValue, devName, cellName) {
            if (MANUAL_SWITCHER_3_FLAG == false) {
                    if (newValue > dev["lamp3_manual"]["Верхний порог температуры"]) {
                        fan_virtual_switcher = 1;
                        lamp3_virtual_switcher = 0;
                    } else {
                        if (newValue < dev["lamp3_manual"]["Нижний порог температуры"]) {
                            fan_virtual_switcher = 0;
                            lamp3_virtual_switcher = 1;
                        }
                }
            }
        }
    });
</code>
</div></div>
====Имитация затопления====
<div class="mw-collapsible mw-collapsed">
Код правила
<div class="mw-collapsible-content">
<code>
    defineAlias("light_under_rozetka_1", "wb-gpio/EXT3_HS2");
    defineAlias("light_under_rozetka_2", "wb-gpio/EXT3_HS1");
   
    defineAlias("light_upper_rozetka_1", "wb-mr6c_1/K1");
    defineAlias("light_upper_rozetka_2", "wb-mr6c_1/K2");
   
    defineAlias("rozetka1_control", "wb-mr6c_1/K1");
    defineAlias("rozetka2_control", "wb-mr6c_1/K2");
   
    defineAlias("rozetka1_virtual_control", "rozetkas_controls/Включить розетку 1");
    defineAlias("rozetka2_virtual_control", "rozetkas_controls/Включить розетку 2");
   
    defineAlias("rozetka1_input", "wb-mr6c_1/Input 1");
    defineAlias("rozetka2_input", "wb-mr6c_1/Input 2");
   
    defineAlias("leak_sensor_input", "wb-gpio/MOD2_IN1");
    defineAlias("alarm_button", "wb-gpio/EXT5_DR6");
    defineAlias("light_under_alarm_button", "wb-gpio/EXT3_HS3");
    defineAlias("light_upper_leak_sensor", "wb-gpio/EXT1_R3A1");
   
    var ROZETKA1_FORCE_FLAG = false;
    var ROZETKA2_FORCE_FLAG = false;
   
    var ROZETKA1_BLINKING_FLAG = false;
    var ROZETKA2_BLINKING_FLAG = false;
   
    var ZATOPLENIE_FLAG = false;
   
    defineVirtualDevice("rozetkas_controls", {
        title: "Управление розетками",
        cells: {
            "Включить розетку 1": {
                type: "switch",
                value: false
            },
            "Включить розетку 2": {
                type: "switch",
                value: false
            },
            "Иммитация протечки": {
                type: "switch",
                value: false
            },
            "Частота индикации при аварии": {
                type: "range",
                value: 700,
                min: 600,
                max: 2500
            }
   
        }
    });
   
   
    defineRule("rozetka1_turn_on", {
        whenChanged: "rozetkas_controls/Включить розетку 1",
        then: function(newValue, devName, cellName) {
            if (dev["rozetkas_controls/Иммитация протечки"] == false) {
                if (ROZETKA1_FORCE_FLAG == false) {
                    log("Force flag is false on rozetka 1");
                    rozetka1_control = newValue;
                }
                if (ROZETKA1_FORCE_FLAG == true) {
                    log("Not working");
                }
            }
        }
    });
   
   
   
    defineRule("rozetka1_turnonlight", {
        whenChanged: "wb-mr6c_1/K1",
        then: function(newValue, devName, cellName) {
   
            light_under_rozetka_1 = newValue;
   
   
        }
    });
   
   
   
   
    defineRule("Input1_handler", {
        whenChanged: "wb-mr6c_1/Input 1",
        then: function(newValue, devName, cellName) {
            if (newValue == false) {
                ROZETKA1_FORCE_FLAG = true;
                rozetka1_initial_state = rozetka1_virtual_control;
                rozetka1_control = false;
                log(rozetka1_control);
                rozetka1_virtual_control = false;
                ROZETKA1_BLINKING_FLAG = true;
                startTicker("button_blinking_timer", dev["rozetkas_controls/Частота индикации при аварии"])
                log("Rozetka 1 was ", rozetka1_initial_state, "before poweroff")
            }
            if (newValue == true) {
                log("Power on rozetka 1 is turned on!");
                ROZETKA1_BLINKING_FLAG = false;
                ROZETKA1_FORCE_FLAG = false;
   
                rozetka1_virtual_control = rozetka1_initial_state;
            }
        }
    });
   
   
    defineRule("rozetka2_turn_on", {
        whenChanged: "rozetkas_controls/Включить розетку 2",
        then: function(newValue, devName, cellName) {
            if (dev["rozetkas_controls/Иммитация протечки"] == false) {
                if (ROZETKA2_FORCE_FLAG == false) {
                    log("Force flag is false on rozetka 2");
                    rozetka2_control = newValue;
                }
                if (ROZETKA2_FORCE_FLAG == true) {
                    log("Not working");
                }
            }
        }
    });
   
   
   
    defineRule("rozetka2_turnonlight", {
        whenChanged: "wb-mr6c_1/K2",
        then: function(newValue, devName, cellName) {
   
            light_under_rozetka_2 = newValue;
   
        }
    });
   
   
   
   
    defineRule("Input2_handler", {
        whenChanged: "wb-mr6c_1/Input 2",
        then: function(newValue, devName, cellName) {
            if (newValue == false) {
                ROZETKA2_FORCE_FLAG = true;
                rozetka2_initial_state = rozetka2_virtual_control;
                rozetka2_control = false;
                log(rozetka2_control);
                rozetka2_virtual_control = false;
                log("Rozetka 2 was ", rozetka2_initial_state, "before poweroff")
                ROZETKA2_BLINKING_FLAG = true;
                startTicker("button_blinking_timer", dev["rozetkas_controls/Частота индикации при аварии"])
            }
            if (newValue == true) {
                log("Power on rozetka 2 is turned on!");
                ROZETKA2_FORCE_FLAG = false;
                ROZETKA2_BLINKING_FLAG = false;
   
                rozetka2_virtual_control = rozetka2_initial_state;
            }
        }
    });
   
   
   
    defineRule("leak_sensor_wrapper", {
        whenChanged: "wb-gpio/MOD2_IN1",
        then: function(newValue, devName, cellName) {
   
            if (newValue == true) {
                dev["rozetkas_controls/Иммитация протечки"] = 1;
                light_upper_leak_sensor = 1;
            } else {
                light_upper_leak_sensor = 0;
            }
   
        }
    });
   
   
   
    defineRule("set_alarm_off", {
        whenChanged: "wb-gpio/EXT5_DR6",
        then: function(newValue, devName, cellName) {
   
            if (newValue == true) {
                dev["rozetkas_controls/Иммитация протечки"] = 0;
            }
   
        }
    });
   
   
   
    defineRule("protechka_handler", {
        whenChanged: "rozetkas_controls/Иммитация протечки",
        then: function(newValue, devName, cellName) {
            if (newValue == true) {
                light_under_alarm_button = 1;
   
                ZATOPLENIE_FLAG = true;
                dev["wb-mrgb_4/RGB"] = "255;0;0";
                log(dev["wb-mrgb_4/RGB"]);
                dev["wb-gpio/EXT2_K2"] = true;
                startTicker("button_blinking_timer", dev["rozetkas_controls/Частота индикации при аварии"])
            } else {
   
                light_under_alarm_button = 0;
                dev["wb-gpio/EXT2_K2"] = false;
                ZATOPLENIE_FLAG = false;
                dev["wb-mrgb_4/RGB"] = "0;255;0";
            }
        }
    });
   
    defineRule("blink_buttons", {
        when: function() {
            return timers.button_blinking_timer.firing;
        },
        then: function() {
            if (ZATOPLENIE_FLAG == true) {
                log("Firing!");
                light_under_rozetka_1 = !light_under_rozetka_1;
                light_under_rozetka_2 = !light_under_rozetka_2;
            }
   
            if (ROZETKA2_BLINKING_FLAG == true) {
                light_under_rozetka_2 = !light_under_rozetka_2;
            }
   
            if (ROZETKA1_BLINKING_FLAG == true) {
                light_under_rozetka_1 = !light_under_rozetka_1;
            }
   
            if (ZATOPLENIE_FLAG == false && ROZETKA1_BLINKING_FLAG == false && ROZETKA2_BLINKING_FLAG == false) {
                timers.button_blinking_timer.stop();
             }
             }
         }
         }
wb_editors
556

правок