📄 Configuration File

<?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));
    }
  }
}