39 lines
1.9 KiB
PHP
39 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
namespace Belevo\EnelixEMS;
|
|
|
|
require_once __DIR__.'/NetzfahrplanV4Rueckmeldung.php';
|
|
|
|
/** Shared physical reading used by receiver and battery immediately before a trial command. */
|
|
trait BatterieNetzfahrplanV4RueckmeldungTrait
|
|
{
|
|
private function registriereV4Rueckmeldung(): void
|
|
{
|
|
$this->RegisterPropertyString('NetzfahrplanV4RueckmeldungKonfiguration', '{}');
|
|
}
|
|
|
|
private function v4BatterieRueckmeldung(): array
|
|
{
|
|
$json=$this->ReadPropertyString('NetzfahrplanV4RueckmeldungKonfiguration');
|
|
if (strlen($json)>65536) throw new \RuntimeException('feedback_configuration_too_large');
|
|
$c=json_decode($json,true,32,JSON_THROW_ON_ERROR);
|
|
if (!is_array($c) || ($c['batteryInstanceId']??null)!==$this->InstanceID) throw new \RuntimeException('feedback_battery_binding_invalid');
|
|
if (!in_array($c['managerId']??0,$this->zugeordneteManagerIDs(),true)) throw new \RuntimeException('feedback_manager_binding_invalid');
|
|
return NetzfahrplanV4Rueckmeldung::read($c,static function(int $id):array {
|
|
if (!IPS_VariableExists($id)) throw new \RuntimeException('feedback_variable_missing');
|
|
$v=IPS_GetVariable($id);$o=IPS_GetObject($id);$value=GetValue($id);
|
|
return ['value'=>$value,'updated'=>$v['VariableUpdated'],'changed'=>$v['VariableChanged'],'parentID'=>$o['ParentID'],'ident'=>$o['ObjectIdent']];
|
|
},time());
|
|
}
|
|
|
|
/** Read only. A returned current value is NOT actuator permission. */
|
|
public function GetV4BatterieRueckmeldung(): string
|
|
{
|
|
try { $r=$this->v4BatterieRueckmeldung(); }
|
|
catch (\Throwable $e) { $r=['kind'=>'local_physical_feedback','status'=>'unavailable','reason'=>substr($e->getMessage(),0,200),
|
|
'batteryW'=>null,'gridW'=>null,'usableForTrial'=>false,'canDispatch'=>false]; }
|
|
return json_encode($r,JSON_THROW_ON_ERROR);
|
|
}
|
|
}
|