<?php
require_once dirname(__FILE__) . "/../../../../core/php/core.inc.php";
header('Content-type: application/json');
$datas = json_decode(file_get_contents('php://input'), true);
if (isset($datas['ha_direct_call'])) {
$func = $datas['ha_direct_call'];
if ($func=='get_userId') {
$data = ['userId' => config::byKey('userId', 'ajaxSystem'), 'test'=>'ok'];
echo json_encode($data);
http_response_code(200);
die();
} elseif ($func=='AjaxApi') {
$ajax_path = $datas['a_path'];
$ajax_data = $datas['a_data'];
$ajax_type = $datas['a_type'];
try {
$rr = ajaxSystem::request($ajax_path, $ajax_data, $ajax_type);
$r = ['result' => $rr];
}
catch(Exception $e) {
$r = ['exception' => $e->getMessage()];
}
echo json_encode($r);
http_response_code(200);
die();
}
http_response_code(500);
die();
}
mqtt2::publish('jeedom/raw/event', json_encode($datas));
if (init('apikey') != '') {
$apikey = init('apikey');
if (!jeedom::apiAccess($apikey, 'ajaxSystem')) {
echo __('Vous n\'etes pas autorisé à effectuer cette action. Clef API invalide.', __FILE__);
die();
} else {
echo __('Configuration OK', __FILE__);
die();
}
}
if (!isset($datas['apikey']) || !jeedom::apiAccess($datas['apikey'], 'ajaxSystem')) {
die();
}
log::add('ajaxSystem', 'debug', 'Received : ' . json_encode($datas));
foreach ($datas['data'] as $data) {
if (isset($data['updates'])) {
if (!isset($data['id'])) {
continue;
}
$ajaxSystem = ajaxSystem::byLogicalId($data['id'], 'ajaxSystem');
if (!is_object($ajaxSystem)) {
continue;
}
foreach ($data['updates'] as $key => &$value) {
if ($key == 'batteryCharge') {
$ajaxSystem->batteryStatus($value);
$batteryCmd = $ajaxSystem->getCmd('info', 'battery::chargeLevelPercentage');
if(is_object($batteryCmd)){
$ajaxSystem->checkAndUpdateCmd('battery::chargeLevelPercentage', $value);
}
}
if (in_array($data['type'], array('HUB', 'GROUP')) && $key == 'state') {
if ($value == 0) {
$value = 'DISARMED';
} elseif ($value == 1) {
$value = 'ARMED';
} elseif ($value == 2) {
$value = 'NIGHT_MODE';
}
}
$convert_key = $key;
if ($convert_key == 'hubPowered') {
$convert_key = 'externallyPowered';
}
if ($convert_key == 'realState') {
$value = ($value == 0) ? 1 : 0;
}
$ajaxSystem->checkAndUpdateCmd($convert_key, $value);
if ($ajaxSystem->getConfiguration('device') == 'Socket') {
$current = $ajaxSystem->getCmd('info', 'currentMA');
$voltage = $ajaxSystem->getCmd('info', 'voltage');
if (is_object($current) && is_object($voltage)) {
$ajaxSystem->checkAndUpdateCmd('power', $current->execCmd() * $voltage->execCmd());
}
}
}
} else if (isset($data['event'])) {
if (!isset($data['event']['sourceObjectId'])) {
continue;
}
$ajaxSystem = ajaxSystem::byLogicalId($data['event']['sourceObjectId'], 'ajaxSystem');
if (!is_object($ajaxSystem) && isset($data['event']['hubId'])) {
$ajaxSystem = ajaxSystem::byLogicalId($data['event']['hubId'], 'ajaxSystem');
}
if (!is_object($ajaxSystem)) {
continue;
}
$ajaxSystem->checkAndUpdateCmd('event', $data['event']['eventType'], date('Y-m-d H:i:s', $data['event']['timestamp'] / 1000));
$ajaxSystem->checkAndUpdateCmd('eventCode', $data['event']['eventCode'], date('Y-m-d H:i:s', $data['event']['timestamp'] / 1000));
$ajaxSystem->checkAndUpdateCmd('sourceObjectName', $data['event']['sourceObjectName'], date('Y-m-d H:i:s', $data['event']['timestamp'] / 1000));
if($data['event']['eventType'] == 'ALARM'){
$ajaxSystem = ajaxSystem::byLogicalId($data['event']['hubId'], 'ajaxSystem');
if (!is_object($ajaxSystem)) {
continue;
}
$ajaxSystem->checkAndUpdateCmd('event', $data['event']['eventType'], date('Y-m-d H:i:s', $data['event']['timestamp'] / 1000));
$ajaxSystem->checkAndUpdateCmd('eventCode', $data['event']['eventCode'], date('Y-m-d H:i:s', $data['event']['timestamp'] / 1000));
$ajaxSystem->checkAndUpdateCmd('sourceObjectName', $data['event']['sourceObjectName'], date('Y-m-d H:i:s', $data['event']['timestamp'] / 1000));
}
}
}