86 lines
3.0 KiB
PHP
86 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace Modules\Maintenance\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Modules\Maintenance\Models\IotAlert;
|
|
use Modules\Maintenance\Models\IotDevice;
|
|
use Modules\Maintenance\Models\IotPredictiveRule;
|
|
use Modules\Maintenance\Models\IotTelemetry;
|
|
use Modules\Maintenance\Services\IotIngestionService;
|
|
|
|
class IotController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
if (! auth()->user()->can('maintenance.view')) {
|
|
abort(403);
|
|
}
|
|
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$devices = IotDevice::where('business_id', $business_id)->get();
|
|
$alerts = IotAlert::where('business_id', $business_id)->where('status', 'open')->latest('id')->limit(20)->get();
|
|
|
|
return view('maintenance::iot.index', compact('devices', 'alerts'));
|
|
}
|
|
|
|
public function ingest(Request $request, IotIngestionService $ingestion)
|
|
{
|
|
$validated = $request->validate([
|
|
'business_id' => 'required|integer',
|
|
'device_uid' => 'required|string',
|
|
'readings' => 'required|array',
|
|
'readings.*.metric' => 'required|string',
|
|
'readings.*.value' => 'required|numeric',
|
|
]);
|
|
|
|
$ingestion->ingest((int) $validated['business_id'], $validated['device_uid'], $validated['readings']);
|
|
|
|
return response()->json(['success' => true]);
|
|
}
|
|
|
|
public function storeDevice(Request $request)
|
|
{
|
|
if (! auth()->user()->can('maintenance.equipment.update')) {
|
|
abort(403);
|
|
}
|
|
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$validated = $request->validate([
|
|
'device_uid' => 'required|string|max:100',
|
|
'name' => 'required|string|max:255',
|
|
'protocol' => 'required|in:mqtt,opcua,http,modbus',
|
|
'equipment_id' => 'nullable|integer',
|
|
'topic' => 'nullable|string',
|
|
]);
|
|
|
|
IotDevice::create(array_merge($validated, ['business_id' => $business_id]));
|
|
|
|
return redirect()->back()->with('status', ['success' => 1, 'msg' => __('maintenance::lang.iot_device_created')]);
|
|
}
|
|
|
|
public function storeRule(Request $request)
|
|
{
|
|
if (! auth()->user()->can('maintenance.equipment.update')) {
|
|
abort(403);
|
|
}
|
|
|
|
$business_id = $request->session()->get('user.business_id');
|
|
$validated = $request->validate([
|
|
'equipment_id' => 'nullable|integer',
|
|
'metric' => 'required|string|max:100',
|
|
'operator' => 'required|in:gt,lt,gte,lte,eq',
|
|
'threshold' => 'required|numeric',
|
|
'auto_work_order' => 'nullable|boolean',
|
|
]);
|
|
|
|
IotPredictiveRule::create(array_merge($validated, [
|
|
'business_id' => $business_id,
|
|
'auto_work_order' => $request->boolean('auto_work_order'),
|
|
]));
|
|
|
|
return redirect()->back()->with('status', ['success' => 1, 'msg' => __('maintenance::lang.iot_rule_created')]);
|
|
}
|
|
}
|