diff --git a/server/ControlScripts/SpotlightsScope.php b/server/ControlScripts/SpotlightsScope.php index f439091..b4f1123 100644 --- a/server/ControlScripts/SpotlightsScope.php +++ b/server/ControlScripts/SpotlightsScope.php @@ -57,6 +57,7 @@ ]; $results = []; + $btns_block_api = $this -> devices() -> by_alias("buttons_backdoor") -> device_api(); foreach($aliases as $alias) { $relay_api = $this -> devices() -> by_alias($alias) -> device_api(); @@ -67,6 +68,7 @@ if(isset($status["channels"][0]["state"]) and $status["channels"][0]["state"] != ($state ? "on" : "off")) { $result = $relay_api -> set_state($state); + $this -> sync_relay_channel_btn_channel($relay_api, $btns_block_api, 0, 0); } } @@ -80,21 +82,33 @@ // EVENTS HANDLERS + /** + * Helper. + * Нужен для синхронизации состояния реле и канала блока кнопок. + * TODO: Это нужно оформить как официальный хелпер + * @param Relay $relay + * @param Button $btn + * @param int|integer $relay_channel + * @param int|integer $btn_channel + * @return void + */ + public function sync_relay_channel_btn_channel(\SHServ\Tools\DeviceAPI\Relay $relay_api, \SHServ\Tools\DeviceAPI\Button $btn_block_api, int $relay_channel = 0, int $btn_channel = 0): void { + $relay_channels = ($relay_api -> get_status())["channels"]; + + $btn_block_api -> set_channel_state( + $relay_channels[$relay_channel]["state"] == "on" ? "enabled" : "disabled", + $btn_channel + ); + } + protected function backdoor_btns_handlers() { $this -> add_event_handler("button@buttons_backdoor(0).press", function(Device $btns_block, Array $data) { + $btns_block_api = $btns_block -> device_api(); $relay_api = $this -> devices() -> by_alias("spotlight_main_front_1") -> device_api(); - if($relay_api instanceof \SHServ\Tools\DeviceAPI\Relay) { + if($relay_api instanceof \SHServ\Tools\DeviceAPI\Relay and $btns_block_api instanceof \SHServ\Tools\DeviceAPI\Button) { $relay_api -> toggle_channel(0); - $relay_channels = ($relay_api -> get_status())["channels"]; - - $btns_block_api = $btns_block -> device_api(); - if($btns_block_api instanceof \SHServ\Tools\DeviceAPI\Button) { - $btns_block_api -> set_channel_state( - $relay_channels[0]["state"] == "on" ? "enabled" : "disabled", - $data["channel"] - ); - } + $this -> sync_relay_channel_btn_channel($relay_api, $btns_block_api, 0, 0); } }); }