function wirerelay_plugin_action() { global $_, $conf, $myUser; //Action de réponse à la commande vocale "Yana, commande de test" switch ($_['action']) { case 'wireRelay_save_wireRelay': Action::write(function ($_, &$response) { $wireRelayManager = new WireRelay(); if (empty($_['nameWireRelay'])) { throw new Exception("Le nom est obligatoire"); } if (!is_numeric($_['pinWireRelay'])) { throw new Exception("Le PIN GPIO est obligatoire et doit être numerique"); } $wireRelay = !empty($_['id']) ? $wireRelayManager->getById($_['id']) : new WireRelay(); $wireRelay->name = $_['nameWireRelay']; $wireRelay->description = $_['descriptionWireRelay']; $wireRelay->pin = $_['pinWireRelay']; $wireRelay->room = $_['roomWireRelay']; $wireRelay->pulse = $_['pulseWireRelay']; $wireRelay->oncommand = $_['onWireRelay']; $wireRelay->offcommand = $_['offWireRelay']; $wireRelay->icon = $_['iconWireRelay']; $wireRelay->save(); //Reference device for other plugins $device = new Device(); $device->label = $wireRelay->name; $device->plugin = 'wireRelay'; $device->type = Device::ACTUATOR; $device->location = $wireRelay->room; $device->icon = $wireRelay->icon; $device->setValue('value', 0); $device->state = 1; $device->uid = $wireRelay->id; $device->save(); $response['message'] = 'Relais enregistré avec succès'; }, array('plugin_wirerelay' => 'c')); break; case 'wireRelay_delete_wireRelay': Action::write(function ($_, $response) { $wireRelayManager = new WireRelay(); $wireRelayManager->delete(array('id' => $_['id'])); }, array('plugin_wirerelay' => 'd')); break; case 'wireRelay_plugin_setting': Action::write(function ($_, $response) { $conf->put('plugin_wireRelay_emitter_pin', $_['emiterPin']); $conf->put('plugin_wireRelay_emitter_code', $_['emiterCode']); }, array('plugin_wirerelay' => 'c')); break; case 'wireRelay_manual_change_state': Action::write(function ($_, &$response) { wirerelay_plugin_change_state($_['engine'], $_['state']); }, array('plugin_wirerelay' => 'c')); break; case 'wireRelay_vocal_change_state': global $_, $myUser; try { $response['responses'][0]['type'] = 'talk'; if (!$myUser->can('plugin_wirerelay', 'u')) { throw new Exception('Je ne vous connais pas, ou alors vous n\'avez pas le droit, je refuse de faire ça!'); } wirerelay_plugin_change_state($_['engine'], $_['state']); $response['responses'][0]['sentence'] = Personality::response('ORDER_CONFIRMATION'); } catch (Exception $e) { $response['responses'][0]['sentence'] = Personality::response('WORRY_EMOTION') . '! ' . $e->getMessage(); } $json = json_encode($response); echo $json == '[]' ? '{}' : $json; break; case 'wireRelay_load_widget': require_once dirname(__FILE__) . '/../dashboard/Widget.class.php'; Action::write(function ($_, &$response) { $widget = new Widget(); $widget = $widget->getById($_['id']); $data = $widget->data(); if (empty($data['relay'])) { $content = 'Choisissez un relais en cliquant sur l \'icone <i class="fa fa-wrench"></i> de la barre du widget'; } else { $relay = new WireRelay(); $relay = $relay->getById($data['relay']); $response['title'] = $relay->name; $content = ' <!-- CSS --> <style> .relay_pane { background: none repeat scroll 0 0 #50597b; list-style-type: none; margin: 0; cursor:default; width: 100%; } .relay_pane li { background: none repeat scroll 0 0 #50597b; display: inline-block; margin: 0 1px 0 0; padding: 10px; cursor:default; vertical-align: top; } .relay_pane li h2 { color: #ffffff; font-size: 16px; margin: 0 0 5px; padding: 0; cursor:default; } .relay_pane li h1 { color: #B6BED9; font-size: 14px; margin: 0 0 10px; padding: 0; cursor:default; } .relay_pane li.wirerelay-case{ background-color: #373f59; cursor:pointer; width: 55px; } .wirerelay-case i{ color:#8b95b8; font-size:50px; transition: all 0.2s ease-in-out; } .wirerelay-case.active i{ color:#ffffff; text-shadow: 0 0 10px #ffffff; } .wirerelay-case.active i.fa-lightbulb-o{ color:#FFED00; text-shadow: 0 0 10px #ffdc00; } .wirerelay-case.active i.fa-power-off{ color:#BDFF00; text-shadow: 0 0 10px #4fff00; } .wirerelay-case.active i.fa-flash{ color:#FFFFFF; text-shadow: 0 0 10px #00FFD9; } .wirerelay-case.active i.fa-gears{ color:#FFFFFF; text-shadow: 0 0 10px #FF00E4; } </style> <!-- CSS --> <ul class="relay_pane"> <li class="wirerelay-case ' . (Gpio::read($relay->pin, true) ? 'active' : '') . '" onclick="plugin_wirerelay_change(this);" style="text-align:center;"> <i title="On/Off" class="' . $relay->icon . '"></i> </li> <li> <h2>' . $relay->description . '</h2> <h1>PIN ' . $relay->pin . ($relay->pulse != 0 ? ' - Pulse ' . $relay->pulse . 'µs' : '') . '</h1> </li> </ul> <!-- JS --> <script type="text/javascript"> function plugin_wirerelay_change(element){ var state = $(element).hasClass(\'active\') ? 0 : 1 ; $.action( { action : \'wireRelay_manual_change_state\', engine: ' . $relay->id . ', state: state }, function(response){ $(element).toggleClass("active"); } ); } </script> '; } $response['content'] = $content; }); break; case 'wireRelay_edit_widget': require_once dirname(__FILE__) . '/../dashboard/Widget.class.php'; $widget = new Widget(); $widget = $widget->getById($_['id']); $data = $widget->data(); $relayManager = new WireRelay(); $relays = $relayManager->populate(); $content = '<h3>Relais ciblé</h3>'; if (count($relays) == 0) { $content = 'Aucun relais existant dans yana, <a href="setting.php?section=wireRelay">Créer un relais ?</a>'; } else { $content .= '<select id="relay">'; $content .= '<option value="">-</option>'; foreach ($relays as $relay) { $content .= '<option value="' . $relay->id . '">' . $relay->name . '</option>'; } $content .= '</select>'; } echo $content; break; case 'wireRelay_save_widget': require_once dirname(__FILE__) . '/../dashboard/Widget.class.php'; $widget = new Widget(); $widget = $widget->getById($_['id']); $data = $widget->data(); $data['relay'] = $_['relay']; $widget->data($data); $widget->save(); echo $content; break; } }
function wireRelay_action_wireRelay() { global $_, $conf, $myUser; switch ($_['action']) { case 'wireRelay_delete_wireRelay': if ($myUser->can('relais filaire', 'd')) { $wireRelayManager = new WireRelay(); $wireRelayManager->delete(array('id' => $_['id'])); } header('location:setting.php?section=wireRelay'); break; case 'wireRelay_plugin_setting': $conf->put('plugin_wireRelay_emitter_pin', $_['emiterPin']); $conf->put('plugin_wireRelay_emitter_code', $_['emiterCode']); header('location: setting.php?section=preference&block=wireRelay'); break; case 'wireRelay_add_wireRelay': if ($myUser->can('relais filaire', $_['id'] != '' ? 'u' : 'c')) { $wireRelayManager = new WireRelay(); $wireRelay = $_['id'] != '' ? $wireRelayManager->getById($_['id']) : new WireRelay(); $wireRelay->setName($_['nameWireRelay']); $wireRelay->setDescription($_['descriptionWireRelay']); $wireRelay->setPin($_['pinWireRelay']); $wireRelay->setRoom($_['roomWireRelay']); $wireRelay->setPulse($_['pulseWireRelay']); $wireRelay->save(); } header('location:setting.php?section=wireRelay'); break; case 'wireRelay_change_state': global $_, $myUser; if ($myUser->can('relais filaire', 'u')) { $wireRelay = new WireRelay(); $wireRelay = $wireRelay->getById($_['engine']); //TODO - remplacer par Gpio::mode($wireRelay->getPin(),'out'); $cmd = '/usr/local/bin/gpio mode ' . $wireRelay->getPin() . ' out'; Functions::log('Launch system command : ' . $cmd); system($cmd, $out); if ($wireRelay->getPulse() == 0) { //TODO - remplacer par Gpio::write($wireRelay->getPin(),$_['state']); $cmd = '/usr/local/bin/gpio write ' . $wireRelay->getPin() . ' ' . $_['state']; Functions::log('Launch system command : ' . $cmd); system($cmd, $out); } else { //TODO - remplacer par Gpio::write($wireRelay->getPin(),1); $cmd = '/usr/local/bin/gpio write ' . $wireRelay->getPin() . ' 1'; system($cmd, $out); usleep($wireRelay->getPulse()); //TODO - remplacer par Gpio::write($wireRelay->getPin(),0); $cmd = '/usr/local/bin/gpio write ' . $wireRelay->getPin() . ' 0'; Functions::log('Launch system command : ' . $cmd); system($cmd, $out); } //TODO change bdd state if (!isset($_['webservice'])) { header('location:index.php?module=room&id=' . $wireRelay->getRoom()); } else { $affirmations = array('A vos ordres!', 'Bien!', 'Oui commandant!', 'Avec plaisir!', 'J\'aime vous obéir!', 'Avec plaisir!', 'Certainement!', 'Je fais ça sans tarder!', 'Avec plaisir!', 'Oui chef!'); $affirmation = $affirmations[rand(0, count($affirmations) - 1)]; $response = array('responses' => array(array('type' => 'talk', 'sentence' => $affirmation))); $json = json_encode($response); echo $json == '[]' ? '{}' : $json; } } else { $response = array('responses' => array(array('type' => 'talk', 'sentence' => 'Je ne vous connais pas, je refuse de faire ça!'))); echo json_encode($response); } break; } }