Newer
Older
smart-home-server / server / ControlScripts / TestScriptsScope.php
<?php

namespace ControlScripts;

use \SHServ\Entities\Device;

class TestScriptsScope extends \SHServ\Middleware\ControlScripts implements \SHServ\Implements\ControlScriptsInterface {
	public function register_events_handlers(): void {
		$this -> stand_btn_pressed_to_stand_relay();
	}

	public function register_actions_scripts(): void {
		$this -> add_action_script([
			"alias" => "script_alias",
			"name" => "script name",
			"description" => "script description",
			"author" => "Eugene Sukhodolskiy"
		], function($params) {
			return ["test", $params];
		});
	}

	public function register_regular_scripts(): void {
		$this -> add_regular_script([
			"alias" => "regular_script_alias2",
			"name" => "regular script name 2",
			"description" => "regular script description 2",
			"author" => "Eugene Sukhodolskiy"
		], function() {
			try {
				$button = $this -> devices() -> by_alias("backdoor_buttons");
				$btn_api = $button -> device_api();
				
				if($btn_api instanceof \SHServ\Tools\DeviceAPI\Button) {
					if(($btn_api -> get_status())["channels"][2]["indicator"] != "error") {
						$btn_api -> set_channel_state("error", 2);
					} else {
						$btn_api -> set_channel_state("mute", 2);
					}
				}
			} catch(\Exception $e) {
				echo $e -> getMessage();
			}
		});
	}

	// EVENTS HANDLERS
	
	protected function stand_btn_pressed_to_stand_relay() {
		$this -> add_event_handler("button@backdoor_buttons(1).press", function(Device $device, Array $data) {
			$relay = $this -> devices() -> by_alias("stand_relay");
			$relay -> device_api() -> toggle_channel(0);
			$relay_channels = ($relay -> device_api() -> get_status())["channels"];

			$device_api = $device -> device_api();
			if($device_api instanceof \SHServ\Tools\DeviceAPI\Button) {
				$device_api -> set_channel_state(
					$relay_channels[0]["state"] == "on" ? "enabled" : "disabled", 
					$data["channel"]
				);
			}
		});
	}
}