diff --git a/server/ControlScripts/OfficeRoomScope.php b/server/ControlScripts/OfficeRoomScope.php index d100770..e42bafa 100644 --- a/server/ControlScripts/OfficeRoomScope.php +++ b/server/ControlScripts/OfficeRoomScope.php @@ -9,22 +9,24 @@ "connections" => [ [ ["type" => "relay", "alias" => "light_hub_1", "channel" => 0], - ["type" => "button", "alias" => "buttons_office_room", "channel" => 0], + ["type" => "button", "alias" => "buttons_office_room", "channel" => 3], ], [ ["type" => "relay", "alias" => "craft_table_lamp", "channel" => 0], - ["type" => "button", "alias" => "buttons_office_room", "channel" => 1], + ["type" => "button", "alias" => "buttons_office_room", "channel" => 0], ], [ ["type" => "relay", "alias" => "computer_table_lamp", "channel" => 0], - ["type" => "button", "alias" => "buttons_office_room", "channel" => 2], + ["type" => "button", "alias" => "buttons_office_room", "channel" => 1], ], ] ]; public function register_events_handlers(): void { + $this -> btns_online("buttons_office_room"); + $this -> btns_handlers("buttons_office_room"); } public function register_actions_scripts(): void { @@ -78,4 +80,36 @@ "result" => $result ]; } + + protected function btns_online(String $button_alias): void { + $this -> add_event_handler("button@{$button_alias}.online", function(Device $btns_block, Array $data) { + $btns_block_api = $btns_block -> device_api(); + if($btns_block_api instanceof \SHServ\Tools\DeviceAPI\Button) { + $btns_block_api -> set_channel_state("mute", 2); + } + + $this -> helper() -> sync_btn_channels($this -> sync_map, $btns_block -> alias); + }); + } + + protected function btns_handlers(String $button_alias): void { + $buttons_channels = $this -> helper() -> prepare_sync_map_by_alias($this -> sync_map, $button_alias); + foreach($buttons_channels as $btn_channel => $entry) { + if($entry[0]["type"] != "relay") { + continue; + } + + $relay_alias = $entry[0]["alias"]; + + $this -> add_event_handler("button@{$button_alias}({$btn_channel}).press", function(Device $btns_block, Array $data) use ($btn_channel, $relay_alias) { + $btns_block_api = $btns_block -> device_api(); + $relay_api = $this -> devices() -> by_alias($relay_alias) -> device_api(); + + if($relay_api instanceof \SHServ\Tools\DeviceAPI\Relay and $btns_block_api instanceof \SHServ\Tools\DeviceAPI\Button) { + $relay_api -> toggle_channel(0); + $this -> helper() -> sync_relay_to_btn_channel($relay_api, $btns_block_api, 0, $btn_channel); + } + }); + } + } } \ No newline at end of file