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 propise_action() { global $_, $conf; switch ($_['action']) { case 'propise_save_sensor': Action::write(function ($_, &$response) { require_once 'Sensor.class.php'; $sensor = new Sensor(); if (empty($_['labelSensor'])) { throw new Exception("Le nom est obligatoire"); } if (empty($_['uidSensor'])) { throw new Exception("L'UID est obligatoire"); } $sensor = !empty($_['id']) ? $sensor->getById($_['id']) : new Sensor(); $sensor->label = $_['labelSensor']; $sensor->location = $_['locationSensor']; $sensor->uid = $_['uidSensor']; $sensor->save(); //Reference device for other plugins $device = new Device(); $device->label = $sensor->label; $device->plugin = 'propise'; $device->type = Device::CAPTOR; $device->location = $sensor->location; $device->icon = 'fa-heartbeat'; $device->setValue('humidity', 0); $device->setValue('temperature', 0); $device->setValue('light', 0); $device->setValue('mouvment', 0); $device->setValue('sound', 0); $device->state = 1; $device->uid = $sensor->id; $device->save(); $response['message'] = 'Sonde enregistrée avec succès'; }, array('propise' => 'c')); break; case 'propise_delete_sensor': Action::write(function ($_, $response) { require_once 'Sensor.class.php'; $sensor = new Sensor(); $sensor->delete(array('id' => $_['id'])); }, array('propise' => 'd')); break; case 'propise_add_data': /*for($i=0;$i<60;$i++){ $_ = array( 'uid'=>'sensor-2', 'humidity'=>rand(0,100), 'temperature'=>rand(0,100), 'light'=>rand(0,100), 'mouvment'=>rand(0,1), 'sound'=>rand(0,1) );*/ require_once 'Sensor.class.php'; require_once 'Data.class.php'; $sensor = new Sensor(); $data = new Data(); $sensor = $sensor->load(array('uid' => $_['uid'])); if ($sensor == null || $sensor->id == 0) { return; } $data->time = time(); //$data->time = strtotime(date('Ymd H:').$i.':00'); $data->humidity = $_['humidity']; $data->temperature = $_['temperature']; $data->light = $_['light']; $data->mouvment = $_['mouvment']; $data->sound = $_['sound']; $data->sensor = $sensor->id; $data->save(); //} break; case 'propise_load_widget': require_once dirname(__FILE__) . '/../dashboard/Widget.class.php'; Action::write(function ($_, &$response) { $widget = new Widget(); $widget = $widget->getById($_['id']); $parameters = $widget->data(); if (empty($parameters['sensor'])) { $content = 'Choisissez une localisation en cliquant sur l \'icone <i class="fa fa-wrench"></i> de la barre du widget'; } else { global $conf; require_once 'Data.class.php'; require_once 'Sensor.class.php'; $sensor = new Sensor(); $data = new Data(); $sensor = $sensor->getById($parameters['sensor']); $datas = $data->loadAll(array('sensor' => $sensor->id), 'time DESC', 1); $response['title'] = 'Sonde ' . $sensor->label . ' (' . $sensor->uid . ')'; $content = ' <!-- CSS --> <style> .propise_view{ background:#36B3E1; color:#ffffff; margin:0px; padding:10px; width:100%; list-style-type:none; transition:all 0.2s ease-in-out; box-sizing: border-box; } .propise_menu{ margin:0; } .propise_menu li{ cursor: pointer; display: inline-block; font-size: 20px; height: 25px; margin-top: 3px; padding: 5px; text-align: center; transition: all 0.2s ease-in-out 0s; width: 30px; border-top:4px solid #cecece; } color: #cecece; .propise_menu li:hover{ background:#222222; color:#ffffff; } .propise_view li{ display:none; font-family: "Open Sans Light",sans-serif; text-align:center; padding:15px 0; font-weight:300; font-size:60px; } .propise_view li.propise_temperature{ display:block; } .propise_menu li.propise_temperature{ border-color:#36B3E1; } .propise_menu li.propise_humidity{ border-color:#50597B; } .propise_menu li.propise_light{ border-color:#EF4D66; } .propise_menu li.propise_mouvment{ border-color:#FFBF4C; } .propise_menu li.propise_sound{ border-color:#84C400; } .propise_menu li.propise_stats{ border-color:#C1004F; } </style> <!-- HTML --> '; $content .= '<div class="propise_widget"><ul class="propise_view">'; $content .= '<li class="propise_temperature"><i class="fa fa-fire"></i> ' . round($datas[0]->temperature, 1) . '°</li>'; $content .= '<li class="propise_humidity"><i class="fa fa-tint"></i> ' . round($datas[0]->humidity, 1) . '%</li>'; $content .= '<li class="propise_light"><i class="fa fa-sun-o"></i> ' . round($datas[0]->light, 1) . '%</li>'; $content .= '<li class="propise_mouvment"><i class="fa fa-eye' . ($datas[0]->mouvment == 1 ? '' : '-slash') . '"></i></li>'; $content .= '<li class="propise_sound"><i class="fa fa-bell' . ($datas[0]->sound == 1 ? '' : '-slash') . '"></i></li>'; $content .= '</ul><ul class="propise_menu">'; $content .= '<li class="propise_temperature" onclick="propise_menu(this)" data-view="temperature"><i class="fa fa-fire"></i></li>'; $content .= '<li class="propise_humidity" onclick="propise_menu(this)" data-view="humidity"><i class="fa fa-tint"></i></li>'; $content .= '<li class="propise_light" onclick="propise_menu(this)" data-view="light"><i class="fa fa-sun-o"></i></li>'; $content .= '<li class="propise_mouvment" onclick="propise_menu(this)" data-view="mouvment"><i class="fa fa-eye"></i></li>'; $content .= '<li class="propise_sound" onclick="propise_menu(this)" data-view="sound"><i class="fa fa-bell"></i></li>'; $content .= '<li class="propise_stats" onclick="window.open(\'index.php?module=propise\')"><i class="fa fa-line-chart"></i></li>'; $content .= '</ul>'; $content .= '</div>'; $content .= ' <!-- JS --> <script type="text/javascript"> function propise_menu(element){ var container = $(element).closest(".propise_widget"); $(".propise_view li",container).hide(); $(".propise_view").css("background-color",$(element).css("border-top-color")); $(".propise_view li.propise_"+$(element).data("view"),container).fadeIn(); }; </script> '; } $response['content'] = $content; }); break; case 'propise_edit_widget': require_once dirname(__FILE__) . '/../dashboard/Widget.class.php'; require_once dirname(__FILE__) . '/Sensor.class.php'; $widget = new Widget(); $widget = $widget->getById($_['id']); $data = $widget->data(); $sensor = new Sensor(); $sensors = $sensor->populate(); $content = '<h3>Choix de la sonde</h3>'; if (count($sensors) == 0) { $content = 'Aucune sonde enregistrée,<a href="setting.php?section=propise">enregistrer une sonde<a>'; } else { $content .= '<select id="sensor">'; foreach ($sensors as $sensor) { $content .= '<option ' . ($sensor->id == $data['sensor'] ? 'selected="selected"' : '') . ' value="' . $sensor->id . '">' . $sensor->label . ' (' . $sensor->uid . ')</option>'; } $content .= '</select>'; } echo $content; break; case 'propise_save_widget': require_once dirname(__FILE__) . '/../dashboard/Widget.class.php'; $widget = new Widget(); $widget = $widget->getById($_['id']); $data = $widget->data(); $data['sensor'] = $_['sensor']; $widget->data($data); $widget->save(); echo $content; break; } }