first upload

This commit is contained in:
전현우 2026-09-04 11:24:42 +09:00
commit d1e1ad0630
224 changed files with 136970 additions and 0 deletions

181
MistralLLM 설정.txt Normal file
View File

@ -0,0 +1,181 @@
우분투(Ubuntu) 서버 환경에서 Mistral LLM을 구축하고 파이썬 API 서버(FastAPI)로 띄우는 전체 과정을 순서대로 정리해 드립니다.
하드웨어(GPU 유무, RAM 용량)에 구애받지 않고 가장 안정적으로 동작하는 **표준 라이브러리(`transformers`) 기준**으로 작성되었습니다.
---
## 1단계: 가상환경 및 필수 라이브러리 설치
시스템 파이썬을 보호하고 의존성 충돌을 막기 위해 가상환경(Conda)을 세팅합니다.
**1. Conda 가상환경 생성 및 활성화**
```bash
conda create -n mistral-env python=3.10 -y
conda activate mistral-env
```
**2. 필수 파이썬 패키지 설치**
AI 구동 커널, 웹 서버 라이브러리, 허깅페이스 통신 모듈을 한 번에 설치합니다.
```bash
pip install torch transformers accelerate fastapi uvicorn huggingface_hub
```
## 2단계: Hugging Face 인증 및 모델 다운로드
Mistral 7B 모델은 허깅페이스(Hugging Face)를 통해 배포되므로 토큰 인증이 필요합니다.
**1. 토큰 로그인**
```bash
python -m huggingface_hub.cli login
```
* `Token:` 프롬프트가 뜨면 허깅페이스 사이트(Settings -> Access Tokens)에서 발급받은 토큰을 붙여넣고 엔터를 칩니다. (보안상 화면에 글자가 보이지 않습니다.)
* `Add token as git credential? (y/n)` 질문에는 `n`을 입력합니다.
**2. 모델 다운로드 경로 준비**
```bash
mkdir -p ~/mistral_models/7B-Instruct-v0.3
```
**3. 모델 다운로드 실행 (약 15GB)**
```bash
python -m huggingface_hub.cli download mistralai/Mistral-7B-Instruct-v0.3 --local-dir ~/mistral_models/7B-Instruct-v0.3 --local-dir-use-symlinks False
```
## 3단계: 파이썬 웹 서버 코드 작성 (`serve_mistral.py`)
FastAPI를 사용하여 외부에서 API로 LLM에 질문을 던질 수 있도록 서버 코드를 작성합니다.
**1. 파이썬 파일 생성**
```bash
nano serve_mistral.py
```
**2. 서버 코드 붙여넣기**
메모리 부족(Killed)이나 GPU(CUDA) 에러를 방지하기 위해 용량을 절반으로 줄이는 `float16` 옵션과 자동 디스크 오프로딩이 적용된 코드입니다.
```python
import warnings
warnings.filterwarnings("ignore")
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from pydantic import BaseModel
import uvicorn
import torch
import os
from transformers import AutoModelForCausalLM, AutoTokenizer
import time
# =========================================================
# [시스템] AI 모델 로드
# =========================================================
model_path = os.path.expanduser("~/mistral_models/7B-Instruct-v0.3")
print("=== AI 모델 로딩 중... ===")
try:
tokenizer = AutoTokenizer.from_pretrained(model_path)
# 메모리 최적화 및 장치 자동 할당
model = AutoModelForCausalLM.from_pretrained(
model_path,
device_map="auto", # GPU가 없으면 자동으로 CPU/RAM 사용
torch_dtype=torch.float16, # 메모리 사용량 절반 감소
low_cpu_mem_usage=True
)
print("=== AI 준비 완료 ===")
except Exception as e:
print(f"!!! 모델 로드 실패: {e}")
exit()
app = FastAPI()
class ChatRequest(BaseModel):
prompt: str
# =========================================================
# [API] 메인 엔드포인트
# =========================================================
@app.post("/chat")
async def chat_endpoint(request: ChatRequest):
try:
user_input = request.prompt
print(f"\n>> 질문: {user_input}")
# 메시지 템플릿 적용
messages = [{"role": "user", "content": user_input}]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
# 모델 장치(CPU/GPU)에 맞게 입력값 전달
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
start_time = time.time()
print(" (AI 연산 시작...)")
# 텍스트 생성
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=512,
temperature=0.1,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
print(f" (연산 완료: {time.time() - start_time:.2f}초)")
# 결과 디코딩 (입력된 프롬프트 제외)
generated_text = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
return JSONResponse(content={"response": generated_text.strip()})
except Exception as e:
print(f"Server Error: {e}")
return JSONResponse(content={"response": "시스템 오류가 발생했습니다."}, status_code=500)
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
```
* 저장 후 종료: `Ctrl + O` -> `Enter` -> `Ctrl + X`
## 4단계: 무중단 백그라운드 실행 (`tmux`)
SSH 터미널 접속을 끊어도 서버가 계속 켜져 있도록 가상 화면(`tmux`)을 활용합니다.
**1. 백그라운드 세션 생성**
```bash
tmux new -s aiserver
```
**2. 환경 활성화 및 서버 실행**
새로 열린 가상 화면에서 서버를 켭니다.
```bash
conda activate mistral-env
python serve_mistral.py
```
**3. 가상 화면 빠져나오기 (서버 유지)**
서버가 정상적으로 켜진 것을 확인한 뒤, 키보드에서 `Ctrl + B`를 누르고 손을 뗀 다음 `D`를 누릅니다.
이제 터미널 프로그램을 종료해도 백그라운드에서 AI 서버가 정상적으로 요청을 대기합니다.
---
> **운영 팁:** 프로세스가 램 용량을 초과해 강제 종료(Killed)되는 현상이 발생한다면, 우분투 하드디스크 공간을 램처럼 활용하는 **스왑 메모리(Swap Memory)**를 16GB 이상 할당해 주어야 모델이 죽지 않고 연산을 완료할 수 있습니다.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,45 @@
# LEDAgent (Delphi 13) 에이전트 자동화 구현 계획
수동 테스트 용도로 작성되었던 `LEDAgent` 프로그램을 데이터베이스와 연동하여 자율적으로 동작하는 진정한 **'하드웨어 제어 에이전트'**로 업그레이드하기 위한 구현 계획입니다.
## ⚠️ User Review Required (검토 및 확인 필요)
본격적인 코드 수정에 앞서 아래 사항들을 확인해 주시면 정확한 구현이 가능합니다.
> [!IMPORTANT]
> 1. **데이터베이스 접속 정보**: `U_DM.pas`의 `fdConnEtc`를 사용하여 파이썬 서버와 동일한 DB(`mmcl_db`, `root`, `password`, `localhost:3306`)에 접속하도록 소스 코드(`uMain.pas`) 내에 하드코딩해도 괜찮을까요? (혹은 외부 INI 파일 등으로 관리해야 하는지 확인 부탁드립니다.)
> 2. **제어 대상 경광등 IP**: 현재 `uMain.dfm` 화면에 있는 텍스트박스(IP/Port)의 값을 기준으로 DLL 통신을 합니다. 에이전트가 1대의 PC에서 1대의 Q-Light 장비만 전담해서 제어하는 1:1 매핑 구조가 맞는지요?
> 3. **타이머 주기**: DB를 조회하는 주기는 **1초(1000ms)**로 설정할 계획입니다. 적절한지 피드백 부탁드립니다.
## 🛠️ Proposed Changes (제안하는 코드 변경 사항)
### 1. `uMain.pas` (비즈니스 로직 수정)
* **모듈 추가**: `uses` 절에 `U_DM`, `uLogManagerThread`, `FireDAC.Stan.Param` 등을 추가합니다.
* **초기화 및 종료 로직**:
* `FormCreate`:
* `InitLogger`를 호출하여 로그 쓰레드를 시작합니다. (로그 폴더 예: `C:\LEDAgentLogs\`)
* `U_DM.DM.fdConnEtc` 객체에 연결 정보를 주입하고 DB에 연결합니다.
* 폴링용 `TTimer`를 동적으로 생성하고 가동(Interval 1000)합니다.
* `FormDestroy`:
* `TTimer` 중지, DB 연결 해제, `StopLogger`를 호출하여 안전하게 종료합니다.
* **DB 폴링 타이머(Timer) 이벤트 (핵심 로직)**:
* `sensor_info` 테이블을 1초마다 조회하여 `target_status`와 `value_status`가 다른 레코드를 찾습니다.
```sql
SELECT sensor_no, target_ch1_statusID, target_ch2_statusID, target_ch3_statusID
FROM sensor_info
WHERE target_ch1_statusID != value_ch1_statusID
OR target_ch2_statusID != value_ch2_statusID
OR target_ch3_statusID != value_ch3_statusID
```
* 변경 대상이 발견되면:
1. 화면의 IP/Port 및 0,1,2 타겟값을 기반으로 `c_pIdata` 배열을 재구성합니다.
2. `Tcp_Qu_RW` DLL 함수를 호출하여 실제 하드웨어 경광등 색상을 변경합니다.
3. 전송에 성공하면 `UPDATE sensor_info SET value_... = target_...` 쿼리를 실행하여 DB 상태를 갱신(Handshake 완료)합니다.
4. 이 모든 과정을 `AddLog_Thread` (파일 로그)와 `LogMessage` (화면 UI 리스트박스)에 기록합니다.
### 2. `U_DM.pas` 및 `LEDAgent.dpr` (유지)
* 제공된 `U_DM`과 `uLogManagerThread`는 변경 없이 그대로 사용하며, `dpr` 파일에 해당 유닛들이 누락되었다면 추가로 등록합니다.
## ✅ Verification Plan (검증 계획)
* 델파이 빌드(`Shift+F9`) 시 에러가 없는지 확인 안내.
* 파이썬 API 서버로 POST 호출 시, 델파이 프로그램 화면에 "DB에서 제어 명령 수신" 및 "하드웨어 변경 완료" 로그가 실시간으로 찍히고 504 Timeout 없이 200 OK가 떨어지는지 연동 테스트 안내.

View File

@ -0,0 +1,20 @@
program LEDAgent;
uses
Vcl.Forms,
uMain in 'uMain.pas' {frmMain},
U_DM in 'U_DM.pas' {DM: TDataModule},
uLogManagerThread in 'uLogManagerThread.pas',
Vcl.Themes,
Vcl.Styles;
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle('Carbon');
Application.CreateForm(TDM, DM);
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<Transactions>
<Transaction>1899-12-30 00:00:00.000.859,=C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_led_agent\uLogManagerThread.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.949,C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_led_agent\LEDAgent.dproj=D:\MyDoc\Embarcadero\Studio\Projects\Project1.dproj</Transaction>
<Transaction>1899-12-30 00:00:00.000.326,C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_led_agent\uMain.dfm=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.dfm</Transaction>
<Transaction>1899-12-30 00:00:00.000.326,C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_led_agent\uMain.pas=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.261,=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.850,=C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_led_agent\U_DM.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.996,=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.173,=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.271,=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
</Transactions>
</BorlandProject>

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,443 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamptest [Ethernet-type]v1.2'
ClientHeight = 450
ClientWidth = 720
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Position = poScreenCenter
StyleElements = [seClient, seBorder]
OnCreate = FormCreate
TextHeight = 13
object Label1: TLabel
Left = 460
Top = 20
Width = 33
Height = 13
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4367854
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4367854
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4367854
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 21
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 21
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 21
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 21
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 21
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 13
TabOrder = 0
end
end
end

View File

@ -0,0 +1,213 @@
unit MainForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
btnRedOn: TButton;
btnRedBlink: TButton;
btnRedOff: TButton;
btnYellowOn: TButton;
btnYellowBlink: TButton;
btnYellowOff: TButton;
btnGreenOn: TButton;
btnGreenBlink: TButton;
btnGreenOff: TButton;
btnBlueOn: TButton;
btnBlueBlink: TButton;
btnBlueOff: TButton;
btnWhiteOn: TButton;
btnWhiteBlink: TButton;
btnWhiteOff: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
Label1: TLabel;
edtIP1: TEdit;
edtIP2: TEdit;
edtIP3: TEdit;
edtIP4: TEdit;
GroupBox3: TGroupBox;
edtPort: TEdit;
rgModel: TRadioGroup;
btnStatRead: TButton;
btnReset: TButton;
btnExit: TButton;
GroupBox4: TGroupBox;
lbStatus: TListBox;
procedure FormCreate(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvc_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
end;
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
// Get model select
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer; // 2:Red, 3:Yellow, 4:Green, 5:Blue, 6:White
Action: Integer;
i: Integer;
begin
// Reset all to D_not before setting the specific one
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not; // Keep sound unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not; // Keep lamps unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0; // 0-read
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,36 @@
object DM: TDM
Height = 274
Width = 693
object fdConnNilm: TFDConnection
Left = 100
Top = 56
end
object fdQryNilm: TFDQuery
Connection = fdConnNilm
Left = 100
Top = 132
end
object FDPhysPgDriverLink: TFDPhysPgDriverLink
Left = 520
Top = 56
end
object FDGUIxWaitCursor: TFDGUIxWaitCursor
Provider = 'Forms'
ScreenCursor = gcrNone
Left = 520
Top = 132
end
object fdConnEtc: TFDConnection
Left = 300
Top = 56
end
object fdQryEtc: TFDQuery
Connection = fdConnEtc
Left = 300
Top = 132
end
object FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink
Left = 520
Top = 208
end
end

View File

@ -0,0 +1,38 @@
unit U_DM;
interface
uses
System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param,
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Phys.PGDef,
FireDAC.VCLUI.Wait, FireDAC.Comp.UI, FireDAC.Phys.PG, Data.DB,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Phys.MySQLDef,
FireDAC.Phys.MySQL;
type
TDM = class(TDataModule)
fdConnNilm: TFDConnection;
fdQryNilm: TFDQuery;
FDPhysPgDriverLink: TFDPhysPgDriverLink;
FDGUIxWaitCursor: TFDGUIxWaitCursor;
fdConnEtc: TFDConnection;
fdQryEtc: TFDQuery;
FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM: TDM;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
end.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,58 @@
2026-07-21 16:43:42.930 === LEDAgent 시작 ===
2026-07-21 17:00:00.026 === LEDAgent 시작 ===
2026-07-21 17:09:19.045 === LEDAgent 시작 ===
2026-07-21 17:09:45.755 === LEDAgent 시작 ===
2026-07-21 17:12:17.121 === LEDAgent 시작 ===
2026-07-21 17:12:17.137 DB 연결 실패: [FireDAC][Phys][MySQL]-314. Cannot load vendor library [libmysql.dll, libmariadb.dll or libmysqld.dll]. 지정된 모듈을 찾을 수 없습니다
Hint: check it is in the PATH or application EXE directories, and has x86 bitness.
2026-07-21 17:14:33.217 === LEDAgent 종료 ===
2026-07-21 17:15:07.641 === LEDAgent 시작 ===
2026-07-21 17:15:07.695 DB 연결 성공 (qst-s.iptime.org)
2026-07-21 17:15:28.320 === LEDAgent 종료 ===
2026-07-21 17:15:55.575 === LEDAgent 시작 ===
2026-07-21 17:15:55.800 DB 연결 성공 (qst-s.iptime.org)
2026-07-21 17:23:43.274 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-21 17:23:43.403 하드웨어 제어 성공
2026-07-21 17:23:43.416 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:27:51.333 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-21 17:27:51.447 하드웨어 제어 성공
2026-07-21 17:27:51.460 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:28:25.943 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-21 17:28:26.060 하드웨어 제어 성공
2026-07-21 17:28:26.070 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:28:38.185 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-21 17:28:38.301 하드웨어 제어 성공
2026-07-21 17:28:38.313 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:52:06.846 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-21 17:52:06.963 하드웨어 제어 성공
2026-07-21 17:52:06.974 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:52:24.199 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-21 17:52:24.308 하드웨어 제어 성공
2026-07-21 17:52:24.311 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:52:41.517 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-21 17:52:41.628 하드웨어 제어 성공
2026-07-21 17:52:41.640 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:55:49.285 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-21 17:55:49.400 하드웨어 제어 성공
2026-07-21 17:55:49.418 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:55:59.518 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-21 17:55:59.632 하드웨어 제어 성공
2026-07-21 17:55:59.644 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:57:06.531 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-21 17:57:06.648 하드웨어 제어 성공
2026-07-21 17:57:06.660 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:57:41.093 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-21 17:57:41.211 하드웨어 제어 성공
2026-07-21 17:57:41.223 DB 완료 갱신 (Handshake 종료)
2026-07-21 17:59:11.477 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-21 17:59:11.591 하드웨어 제어 성공
2026-07-21 17:59:11.609 DB 완료 갱신 (Handshake 종료)
2026-07-21 18:01:42.834 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-21 18:01:42.947 하드웨어 제어 성공
2026-07-21 18:01:42.959 DB 완료 갱신 (Handshake 종료)
2026-07-21 18:01:54.082 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-21 18:01:54.197 하드웨어 제어 성공
2026-07-21 18:01:54.209 DB 완료 갱신 (Handshake 종료)
2026-07-21 18:02:24.725 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-21 18:02:24.842 하드웨어 제어 성공
2026-07-21 18:02:24.852 DB 완료 갱신 (Handshake 종료)

View File

@ -0,0 +1,802 @@
2026-07-22 08:55:22.029 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 08:55:22.145 하드웨어 제어 성공
2026-07-22 08:55:22.157 DB 완료 갱신 (Handshake 종료)
2026-07-22 08:58:10.777 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 08:58:10.893 하드웨어 제어 성공
2026-07-22 08:58:10.896 DB 완료 갱신 (Handshake 종료)
2026-07-22 08:58:36.183 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 08:58:36.286 하드웨어 제어 성공
2026-07-22 08:58:36.299 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:02:19.199 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 09:02:19.315 하드웨어 제어 성공
2026-07-22 09:02:19.327 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:11:17.614 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 09:11:17.725 하드웨어 제어 성공
2026-07-22 09:11:17.736 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:12:26.530 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 09:12:26.645 하드웨어 제어 성공
2026-07-22 09:12:26.657 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:14:22.745 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:14:22.859 하드웨어 제어 성공
2026-07-22 09:14:22.872 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:14:47.136 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 09:14:47.250 하드웨어 제어 성공
2026-07-22 09:14:47.262 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:15:18.476 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:15:18.592 하드웨어 제어 성공
2026-07-22 09:15:18.603 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:15:58.995 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 09:15:59.112 하드웨어 제어 성공
2026-07-22 09:15:59.124 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:16:04.211 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:16:04.325 하드웨어 제어 성공
2026-07-22 09:16:04.370 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:16:15.455 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 09:16:15.570 하드웨어 제어 성공
2026-07-22 09:16:15.582 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:16:23.667 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 09:16:23.779 하드웨어 제어 성공
2026-07-22 09:16:23.793 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:16:46.024 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:16:46.127 하드웨어 제어 성공
2026-07-22 09:16:46.140 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:17:01.361 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 09:17:01.476 하드웨어 제어 성공
2026-07-22 09:17:01.480 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:17:56.237 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:17:56.351 하드웨어 제어 성공
2026-07-22 09:17:56.363 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:19:03.333 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 09:19:03.449 하드웨어 제어 성공
2026-07-22 09:19:03.453 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:22:30.953 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:22:31.068 하드웨어 제어 성공
2026-07-22 09:22:31.072 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:23:03.447 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 09:23:03.565 하드웨어 제어 성공
2026-07-22 09:23:03.576 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:24:15.397 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 09:24:15.513 하드웨어 제어 성공
2026-07-22 09:24:15.516 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:26:34.314 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:1)
2026-07-22 09:26:34.429 하드웨어 제어 성공
2026-07-22 09:26:34.441 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:28:26.888 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:28:27.002 하드웨어 제어 성공
2026-07-22 09:28:27.015 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:28:36.152 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 09:28:36.268 하드웨어 제어 성공
2026-07-22 09:28:36.279 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:28:57.531 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:28:57.647 하드웨어 제어 성공
2026-07-22 09:28:57.661 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:29:20.022 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 09:29:20.135 하드웨어 제어 성공
2026-07-22 09:29:20.147 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:29:45.473 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:29:45.587 하드웨어 제어 성공
2026-07-22 09:29:45.590 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:30:10.934 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 09:30:11.050 하드웨어 제어 성공
2026-07-22 09:30:11.061 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:30:25.302 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:1)
2026-07-22 09:30:25.415 하드웨어 제어 성공
2026-07-22 09:30:25.425 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:30:47.649 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 09:30:47.759 하드웨어 제어 성공
2026-07-22 09:30:47.771 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:31:03.990 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:1)
2026-07-22 09:31:04.105 하드웨어 제어 성공
2026-07-22 09:31:04.110 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:33:55.277 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:33:55.392 하드웨어 제어 성공
2026-07-22 09:33:55.404 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:41:49.593 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 09:41:49.719 하드웨어 제어 성공
2026-07-22 09:41:49.731 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:42:06.969 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:42:07.084 하드웨어 제어 성공
2026-07-22 09:42:07.090 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:42:23.233 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 09:42:23.345 하드웨어 제어 성공
2026-07-22 09:42:23.358 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:42:33.457 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 09:42:33.572 하드웨어 제어 성공
2026-07-22 09:42:33.584 DB 완료 갱신 (Handshake 종료)
2026-07-22 09:47:18.228 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 09:47:18.331 하드웨어 제어 성공
2026-07-22 09:47:18.336 DB 완료 갱신 (Handshake 종료)
2026-07-22 10:11:15.044 === LEDAgent 시작 ===
2026-07-22 10:11:15.093 DB 연결 성공 (qst-s.iptime.org)
2026-07-22 10:27:14.211 === LEDAgent 종료 ===
2026-07-22 10:27:32.408 === LEDAgent 시작 ===
2026-07-22 10:27:32.437 DB 연결 성공 (qst-s.iptime.org)
2026-07-22 10:27:53.809 === LEDAgent 종료 ===
2026-07-22 10:29:36.999 === LEDAgent 시작 ===
2026-07-22 10:29:37.035 DB 연결 성공 (qst-s.iptime.org)
2026-07-22 10:50:39.395 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:1)
2026-07-22 10:50:39.508 하드웨어 제어 성공
2026-07-22 10:50:39.512 DB 완료 갱신 (Handshake 종료)
2026-07-22 10:50:58.729 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 10:50:58.845 하드웨어 제어 성공
2026-07-22 10:50:58.856 DB 완료 갱신 (Handshake 종료)
2026-07-22 10:51:12.957 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 10:51:13.072 하드웨어 제어 성공
2026-07-22 10:51:13.085 DB 완료 갱신 (Handshake 종료)
2026-07-22 10:51:22.191 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 10:51:22.308 하드웨어 제어 성공
2026-07-22 10:51:22.319 DB 완료 갱신 (Handshake 종료)
2026-07-22 10:51:34.483 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 10:51:34.596 하드웨어 제어 성공
2026-07-22 10:51:34.608 DB 완료 갱신 (Handshake 종료)
2026-07-22 10:51:48.758 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 10:51:48.875 하드웨어 제어 성공
2026-07-22 10:51:48.885 DB 완료 갱신 (Handshake 종료)
2026-07-22 10:52:00.034 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 10:52:00.151 하드웨어 제어 성공
2026-07-22 10:52:00.163 DB 완료 갱신 (Handshake 종료)
2026-07-22 10:52:10.267 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 10:52:10.384 하드웨어 제어 성공
2026-07-22 10:52:10.396 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:24:27.100 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 11:24:27.216 하드웨어 제어 성공
2026-07-22 11:24:27.229 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:24:37.538 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 11:24:37.654 하드웨어 제어 성공
2026-07-22 11:24:37.658 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:25:08.181 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 11:25:08.285 하드웨어 제어 성공
2026-07-22 11:25:08.297 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:25:19.702 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 11:25:19.818 하드웨어 제어 성공
2026-07-22 11:25:19.830 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:25:26.912 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 11:25:27.027 하드웨어 제어 성공
2026-07-22 11:25:27.038 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:25:39.205 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 11:25:39.322 하드웨어 제어 성공
2026-07-22 11:25:39.332 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:25:46.447 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 11:25:46.551 하드웨어 제어 성공
2026-07-22 11:25:46.563 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:38:53.368 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 11:38:53.478 하드웨어 제어 성공
2026-07-22 11:38:53.483 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:39:02.576 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 11:39:02.687 하드웨어 제어 성공
2026-07-22 11:39:02.700 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:39:09.818 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 11:39:09.932 하드웨어 제어 성공
2026-07-22 11:39:09.944 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:40:33.965 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 11:40:34.081 하드웨어 제어 성공
2026-07-22 11:40:34.093 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:40:59.445 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 11:40:59.560 하드웨어 제어 성공
2026-07-22 11:40:59.574 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:42:59.031 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 11:42:59.149 하드웨어 제어 성공
2026-07-22 11:42:59.160 DB 완료 갱신 (Handshake 종료)
2026-07-22 11:43:36.548 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 11:43:36.650 하드웨어 제어 성공
2026-07-22 11:43:36.663 DB 완료 갱신 (Handshake 종료)
2026-07-22 12:45:02.155 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 12:45:02.270 하드웨어 제어 성공
2026-07-22 12:45:02.281 DB 완료 갱신 (Handshake 종료)
2026-07-22 12:45:11.327 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 12:45:11.430 하드웨어 제어 성공
2026-07-22 12:45:11.434 DB 완료 갱신 (Handshake 종료)
2026-07-22 12:45:20.527 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 12:45:20.645 하드웨어 제어 성공
2026-07-22 12:45:20.657 DB 완료 갱신 (Handshake 종료)
2026-07-22 12:48:45.190 === LEDAgent 종료 ===
2026-07-22 12:49:04.477 === LEDAgent 시작 ===
2026-07-22 12:49:04.542 DB 연결 성공 (qst-s.iptime.org)
2026-07-22 12:49:37.223 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 12:49:37.338 하드웨어 제어 성공
2026-07-22 12:49:37.351 DB 완료 갱신 (Handshake 종료)
2026-07-22 12:54:18.361 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 12:54:18.476 하드웨어 제어 성공
2026-07-22 12:54:18.488 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:01:04.904 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:1)
2026-07-22 13:01:05.009 하드웨어 제어 성공
2026-07-22 13:01:05.014 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:01:20.238 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 13:01:20.341 하드웨어 제어 성공
2026-07-22 13:01:20.344 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:01:27.339 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:1)
2026-07-22 13:01:27.456 하드웨어 제어 성공
2026-07-22 13:01:27.467 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:01:38.596 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:01:38.709 하드웨어 제어 성공
2026-07-22 13:01:38.720 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:01:57.012 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:1)
2026-07-22 13:01:57.128 하드웨어 제어 성공
2026-07-22 13:01:57.132 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:14:20.643 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:14:20.759 하드웨어 제어 성공
2026-07-22 13:14:20.764 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:15:41.438 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 13:15:41.552 하드웨어 제어 성공
2026-07-22 13:15:41.558 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:20:03.935 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:20:04.049 하드웨어 제어 성공
2026-07-22 13:20:04.055 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:23:30.334 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 13:23:30.451 하드웨어 제어 성공
2026-07-22 13:23:30.462 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:24:23.370 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:24:23.478 하드웨어 제어 성공
2026-07-22 13:24:23.481 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:24:39.749 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 13:24:39.865 하드웨어 제어 성공
2026-07-22 13:24:39.878 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:25:02.243 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 13:25:02.357 하드웨어 제어 성공
2026-07-22 13:25:02.368 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:25:28.752 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 13:25:28.871 하드웨어 제어 성공
2026-07-22 13:25:28.884 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:25:45.119 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 13:25:45.235 하드웨어 제어 성공
2026-07-22 13:25:45.246 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:25:55.284 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:25:55.397 하드웨어 제어 성공
2026-07-22 13:25:55.410 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:26:15.753 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:1)
2026-07-22 13:26:15.868 하드웨어 제어 성공
2026-07-22 13:26:15.880 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:27:31.362 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 13:27:31.479 하드웨어 제어 성공
2026-07-22 13:27:31.490 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:27:47.717 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 13:27:47.820 하드웨어 제어 성공
2026-07-22 13:27:47.833 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:28:30.607 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:28:30.710 하드웨어 제어 성공
2026-07-22 13:28:30.722 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:29:17.574 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 13:29:17.692 하드웨어 제어 성공
2026-07-22 13:29:17.697 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:29:32.940 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:29:33.055 하드웨어 제어 성공
2026-07-22 13:29:33.066 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:30:06.608 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 13:30:06.726 하드웨어 제어 성공
2026-07-22 13:30:06.731 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:31:36.565 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:31:36.680 하드웨어 제어 성공
2026-07-22 13:31:36.685 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:40:38.245 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:1)
2026-07-22 13:40:38.348 하드웨어 제어 성공
2026-07-22 13:40:38.360 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:42:10.378 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 13:42:10.492 하드웨어 제어 성공
2026-07-22 13:42:10.502 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:42:24.742 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:1)
2026-07-22 13:42:24.844 하드웨어 제어 성공
2026-07-22 13:42:24.858 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:46:23.696 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 13:46:23.812 하드웨어 제어 성공
2026-07-22 13:46:23.816 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:46:35.932 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 13:46:36.035 하드웨어 제어 성공
2026-07-22 13:46:36.041 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:47:31.156 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 13:47:31.272 하드웨어 제어 성공
2026-07-22 13:47:31.277 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:47:39.304 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 13:47:39.420 하드웨어 제어 성공
2026-07-22 13:47:39.423 DB 완료 갱신 (Handshake 종료)
2026-07-22 13:55:19.962 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 13:55:20.080 하드웨어 제어 성공
2026-07-22 13:55:20.091 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:02:42.390 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 14:02:42.506 하드웨어 제어 성공
2026-07-22 14:02:42.518 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:02:48.477 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 14:02:48.585 하드웨어 제어 성공
2026-07-22 14:02:48.591 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:11:40.110 === LEDAgent 종료 ===
2026-07-22 14:12:00.204 === LEDAgent 시작 ===
2026-07-22 14:12:00.244 DB 연결 성공 (qst-s.iptime.org)
2026-07-22 14:43:22.202 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 14:43:22.316 하드웨어 제어 성공
2026-07-22 14:43:22.329 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:43:52.847 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 14:43:52.963 하드웨어 제어 성공
2026-07-22 14:43:52.974 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:46:47.436 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 14:46:47.544 하드웨어 제어 성공
2026-07-22 14:46:47.547 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:46:56.661 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 14:46:56.763 하드웨어 제어 성공
2026-07-22 14:46:56.774 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:47:28.336 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 14:47:28.451 하드웨어 제어 성공
2026-07-22 14:47:28.463 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:47:37.481 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 14:47:37.598 하드웨어 제어 성공
2026-07-22 14:47:37.602 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:47:48.148 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 14:47:48.267 하드웨어 제어 성공
2026-07-22 14:47:48.352 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:48:12.331 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 14:48:12.448 하드웨어 제어 성공
2026-07-22 14:48:12.452 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:48:22.561 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:1)
2026-07-22 14:48:23.575 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:24.576 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:1)
2026-07-22 14:48:25.580 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:26.596 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:1)
2026-07-22 14:48:27.597 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:28.736 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:1)
2026-07-22 14:48:29.752 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:30.755 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:1)
2026-07-22 14:48:31.755 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:32.772 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:1)
2026-07-22 14:48:33.780 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:51.157 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:48:52.158 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:53.342 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:48:54.355 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:55.379 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:48:56.393 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:57.392 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:48:58.393 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:48:59.553 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:00.557 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:01.580 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:02.589 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:03.605 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:04.612 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:05.794 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:06.809 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:07.835 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:08.837 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:09.869 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:10.871 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:12.003 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:13.019 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:14.036 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:15.046 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:16.069 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:17.082 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:18.359 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:18.476 하드웨어 제어 성공
2026-07-22 14:49:18.495 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:49:19.509 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:20.515 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:21.545 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:22.559 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:24.459 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:25.473 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:26.484 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:26.601 하드웨어 제어 성공
2026-07-22 14:49:26.614 DB 완료 갱신 (Handshake 종료)
2026-07-22 14:49:27.643 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:28.645 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:30.591 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:31.594 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:32.621 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:33.633 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 14:49:34.646 DB 명령 감지 - Sensor:103, IP:192.168.200.149 (Target: G:0 Y:0 R:0)
2026-07-22 14:49:35.660 TCP/IP 제어 실패 (하드웨어 연결 확인)
2026-07-22 15:13:29.532 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 15:13:29.646 하드웨어 제어 성공
2026-07-22 15:13:29.659 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:18:07.545 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 15:18:07.649 하드웨어 제어 성공
2026-07-22 15:18:07.660 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:19:18.982 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 15:19:19.084 하드웨어 제어 성공
2026-07-22 15:19:19.097 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:19:29.202 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 15:19:29.318 하드웨어 제어 성공
2026-07-22 15:19:29.332 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:19:47.569 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 15:19:47.672 하드웨어 제어 성공
2026-07-22 15:19:47.683 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:21:54.223 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 15:21:54.340 하드웨어 제어 성공
2026-07-22 15:21:54.352 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:25:06.404 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 15:25:06.520 하드웨어 제어 성공
2026-07-22 15:25:06.532 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:25:24.831 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 15:25:24.947 하드웨어 제어 성공
2026-07-22 15:25:24.954 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:27:57.021 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 15:27:57.135 하드웨어 제어 성공
2026-07-22 15:27:57.144 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:27:59.188 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 15:27:59.305 하드웨어 제어 성공
2026-07-22 15:27:59.317 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:30:48.722 === LEDAgent 종료 ===
2026-07-22 15:33:44.716 === LEDAgent 시작 ===
2026-07-22 15:33:44.757 DB 연결 성공 (qst-s.iptime.org)
2026-07-22 15:34:01.075 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 15:34:01.179 하드웨어 제어 성공
2026-07-22 15:34:01.190 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:34:34.907 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 15:34:35.009 하드웨어 제어 성공
2026-07-22 15:34:35.014 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:39:02.684 하드웨어 동기화 완료 (Sensor:102, R:1 Y:1 G:0)
2026-07-22 15:39:11.847 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 15:39:11.965 하드웨어 제어 성공
2026-07-22 15:39:11.969 DB 완료 갱신 (Handshake 종료)
2026-07-22 15:45:54.017 하드웨어 동기화 완료 (Sensor:102, R:0 Y:0 G:0)
2026-07-22 15:46:05.202 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 15:46:05.318 하드웨어 제어 성공
2026-07-22 15:46:05.327 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:09:48.791 하드웨어 동기화 완료 (Sensor:102, R:1 Y:1 G:0)
2026-07-22 16:10:17.331 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 16:10:17.433 하드웨어 제어 성공
2026-07-22 16:10:17.437 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:21:28.681 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 16:21:28.797 하드웨어 제어 성공
2026-07-22 16:21:28.809 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:26:16.523 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 16:26:16.626 하드웨어 제어 성공
2026-07-22 16:26:16.674 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:33:22.497 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:1)
2026-07-22 16:33:22.601 하드웨어 제어 성공
2026-07-22 16:33:22.613 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:33:33.745 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 16:33:33.864 하드웨어 제어 성공
2026-07-22 16:33:33.874 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:34:36.035 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 16:34:36.151 하드웨어 제어 성공
2026-07-22 16:34:36.163 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:35:52.704 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 16:35:52.807 하드웨어 제어 성공
2026-07-22 16:35:52.817 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:42:36.273 하드웨어 동기화 완료 (Sensor:102, R:2 Y:0 G:1)
2026-07-22 16:43:02.777 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 16:43:02.881 하드웨어 제어 성공
2026-07-22 16:43:02.892 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:46:57.666 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 16:46:57.770 하드웨어 제어 성공
2026-07-22 16:46:57.774 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:47:23.233 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 16:47:23.344 하드웨어 제어 성공
2026-07-22 16:47:23.355 DB 완료 갱신 (Handshake 종료)
2026-07-22 16:59:54.134 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 16:59:54.252 하드웨어 제어 성공
2026-07-22 16:59:54.265 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:00:19.689 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:00:19.806 하드웨어 제어 성공
2026-07-22 17:00:19.809 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:04:20.705 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 17:04:20.811 하드웨어 제어 성공
2026-07-22 17:04:20.822 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:04:45.175 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:04:45.291 하드웨어 제어 성공
2026-07-22 17:04:45.303 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:05:12.847 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 17:05:12.951 하드웨어 제어 성공
2026-07-22 17:05:12.954 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:05:34.240 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:05:34.357 하드웨어 제어 성공
2026-07-22 17:05:34.367 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:14:07.409 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 17:14:07.512 하드웨어 제어 성공
2026-07-22 17:14:07.523 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:14:32.963 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:14:33.067 하드웨어 제어 성공
2026-07-22 17:14:33.079 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:16:26.450 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 17:16:26.553 하드웨어 제어 성공
2026-07-22 17:16:26.557 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:16:46.890 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:16:47.008 하드웨어 제어 성공
2026-07-22 17:16:47.020 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:25:46.309 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 17:25:46.426 하드웨어 제어 성공
2026-07-22 17:25:46.438 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:26:10.844 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:26:10.959 하드웨어 제어 성공
2026-07-22 17:26:10.971 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:34:32.592 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 17:34:32.696 하드웨어 제어 성공
2026-07-22 17:34:32.710 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:35:48.195 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:35:48.312 하드웨어 제어 성공
2026-07-22 17:35:48.325 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:40:08.968 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 17:40:09.086 하드웨어 제어 성공
2026-07-22 17:40:09.097 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:40:24.281 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:40:24.397 하드웨어 제어 성공
2026-07-22 17:40:24.407 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:40:49.822 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-07-22 17:40:49.930 하드웨어 제어 성공
2026-07-22 17:40:49.942 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:41:17.395 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:41:17.500 하드웨어 제어 성공
2026-07-22 17:41:17.505 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:44:57.180 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 17:44:57.297 하드웨어 제어 성공
2026-07-22 17:44:57.302 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:45:09.459 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:45:09.577 하드웨어 제어 성공
2026-07-22 17:45:09.590 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:45:15.600 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 17:45:15.718 하드웨어 제어 성공
2026-07-22 17:45:15.729 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:45:34.973 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:45:35.088 하드웨어 제어 성공
2026-07-22 17:45:35.092 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:46:59.829 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 17:46:59.934 하드웨어 제어 성공
2026-07-22 17:46:59.945 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:47:14.115 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 17:47:14.218 하드웨어 제어 성공
2026-07-22 17:47:14.230 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:47:18.204 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:47:18.321 하드웨어 제어 성공
2026-07-22 17:47:18.334 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:47:27.486 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:1)
2026-07-22 17:47:27.591 하드웨어 제어 성공
2026-07-22 17:47:27.594 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:47:43.732 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:47:43.848 하드웨어 제어 성공
2026-07-22 17:47:43.853 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:47:54.985 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-07-22 17:47:55.090 하드웨어 제어 성공
2026-07-22 17:47:55.093 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:48:11.280 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:48:11.384 하드웨어 제어 성공
2026-07-22 17:48:11.389 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:50:52.868 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:0)
2026-07-22 17:50:52.983 하드웨어 제어 성공
2026-07-22 17:50:52.994 DB 완료 갱신 (Handshake 종료)
2026-07-22 17:51:11.255 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 17:51:11.370 하드웨어 제어 성공
2026-07-22 17:51:11.385 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:04:40.864 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 18:04:40.968 하드웨어 제어 성공
2026-07-22 18:04:40.980 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:05:30.898 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 18:05:31.016 하드웨어 제어 성공
2026-07-22 18:05:31.029 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:10:33.176 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 18:10:33.279 하드웨어 제어 성공
2026-07-22 18:10:33.294 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:10:58.659 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 18:10:58.763 하드웨어 제어 성공
2026-07-22 18:10:58.767 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:15:44.705 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 18:15:44.822 하드웨어 제어 성공
2026-07-22 18:15:44.834 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:16:10.287 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 18:16:10.391 하드웨어 제어 성공
2026-07-22 18:16:10.404 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:18:22.132 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 18:18:22.249 하드웨어 제어 성공
2026-07-22 18:18:22.253 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:18:46.648 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 18:18:46.753 하드웨어 제어 성공
2026-07-22 18:18:46.765 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:24:50.276 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 18:24:50.379 하드웨어 제어 성공
2026-07-22 18:24:50.391 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:25:14.835 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 18:25:14.951 하드웨어 제어 성공
2026-07-22 18:25:14.963 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:34:55.392 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 18:34:55.508 하드웨어 제어 성공
2026-07-22 18:34:55.520 DB 완료 갱신 (Handshake 종료)
2026-07-22 18:35:45.434 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 18:35:45.537 하드웨어 제어 성공
2026-07-22 18:35:45.551 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:04:36.437 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 19:04:36.551 하드웨어 제어 성공
2026-07-22 19:04:36.557 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:05:51.100 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:05:51.206 하드웨어 제어 성공
2026-07-22 19:05:51.211 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:10:29.111 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 19:10:29.215 하드웨어 제어 성공
2026-07-22 19:10:29.226 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:10:54.659 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:10:54.778 하드웨어 제어 성공
2026-07-22 19:10:54.789 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:17:50.721 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 19:17:50.837 하드웨어 제어 성공
2026-07-22 19:17:50.843 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:18:15.222 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:18:15.328 하드웨어 제어 성공
2026-07-22 19:18:15.341 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:22:10.238 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 19:22:10.356 하드웨어 제어 성공
2026-07-22 19:22:10.366 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:22:35.803 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:22:35.907 하드웨어 제어 성공
2026-07-22 19:22:35.911 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:26:03.293 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 19:26:03.409 하드웨어 제어 성공
2026-07-22 19:26:03.420 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:26:28.829 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:26:28.945 하드웨어 제어 성공
2026-07-22 19:26:28.958 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:31:39.409 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 19:31:39.511 하드웨어 제어 성공
2026-07-22 19:31:39.522 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:32:04.955 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:32:05.058 하드웨어 제어 성공
2026-07-22 19:32:05.070 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:34:23.885 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 19:34:24.003 하드웨어 제어 성공
2026-07-22 19:34:24.008 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:36:06.022 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:36:06.137 하드웨어 제어 성공
2026-07-22 19:36:06.150 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:38:34.080 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 19:38:34.197 하드웨어 제어 성공
2026-07-22 19:38:34.209 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:38:59.914 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:39:00.027 하드웨어 제어 성공
2026-07-22 19:39:00.039 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:39:52.984 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 19:39:53.101 하드웨어 제어 성공
2026-07-22 19:39:53.129 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:40:19.610 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:40:19.714 하드웨어 제어 성공
2026-07-22 19:40:19.725 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:47:36.817 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 19:47:36.934 하드웨어 제어 성공
2026-07-22 19:47:36.945 DB 완료 갱신 (Handshake 종료)
2026-07-22 19:48:02.324 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 19:48:02.428 하드웨어 제어 성공
2026-07-22 19:48:02.431 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:04:32.577 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 20:04:32.694 하드웨어 제어 성공
2026-07-22 20:04:32.706 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:04:59.083 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:04:59.186 하드웨어 제어 성공
2026-07-22 20:04:59.198 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:05:25.647 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 20:05:25.750 하드웨어 제어 성공
2026-07-22 20:05:25.754 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:05:48.179 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:05:48.296 하드웨어 제어 성공
2026-07-22 20:05:48.309 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:07:00.747 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 20:07:00.852 하드웨어 제어 성공
2026-07-22 20:07:00.863 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:07:26.232 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:07:26.337 하드웨어 제어 성공
2026-07-22 20:07:26.347 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:10:28.107 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 20:10:28.225 하드웨어 제어 성공
2026-07-22 20:10:28.229 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:10:52.647 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:10:52.764 하드웨어 제어 성공
2026-07-22 20:10:52.775 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:20:48.358 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 20:20:48.462 하드웨어 제어 성공
2026-07-22 20:20:48.474 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:21:13.828 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:21:13.946 하드웨어 제어 성공
2026-07-22 20:21:13.963 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:29:07.832 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 20:29:07.950 하드웨어 제어 성공
2026-07-22 20:29:07.955 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:29:34.470 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:29:34.587 하드웨어 제어 성공
2026-07-22 20:29:34.599 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:30:01.021 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 20:30:01.137 하드웨어 제어 성공
2026-07-22 20:30:01.149 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:31:40.119 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:31:40.222 하드웨어 제어 성공
2026-07-22 20:31:40.233 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:33:21.247 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 20:33:21.363 하드웨어 제어 성공
2026-07-22 20:33:21.374 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:33:45.725 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:33:45.843 하드웨어 제어 성공
2026-07-22 20:33:45.848 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:34:20.415 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 20:34:20.517 하드웨어 제어 성공
2026-07-22 20:34:20.529 DB 완료 갱신 (Handshake 종료)
2026-07-22 20:35:07.455 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 20:35:07.559 하드웨어 제어 성공
2026-07-22 20:35:07.564 DB 완료 갱신 (Handshake 종료)
2026-07-22 21:04:27.015 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 21:04:27.121 하드웨어 제어 성공
2026-07-22 21:04:27.127 DB 완료 갱신 (Handshake 종료)
2026-07-22 21:05:38.546 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 21:05:38.650 하드웨어 제어 성공
2026-07-22 21:05:38.662 DB 완료 갱신 (Handshake 종료)
2026-07-22 21:15:37.232 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 21:15:37.336 하드웨어 제어 성공
2026-07-22 21:15:37.342 DB 완료 갱신 (Handshake 종료)
2026-07-22 21:16:02.792 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 21:16:02.903 하드웨어 제어 성공
2026-07-22 21:16:02.916 DB 완료 갱신 (Handshake 종료)
2026-07-22 21:29:26.014 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 21:29:26.131 하드웨어 제어 성공
2026-07-22 21:29:26.141 DB 완료 갱신 (Handshake 종료)
2026-07-22 21:29:51.545 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 21:29:51.663 하드웨어 제어 성공
2026-07-22 21:29:51.675 DB 완료 갱신 (Handshake 종료)
2026-07-22 21:34:45.845 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 21:34:45.963 하드웨어 제어 성공
2026-07-22 21:34:45.976 DB 완료 갱신 (Handshake 종료)
2026-07-22 21:36:02.522 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 21:36:02.626 하드웨어 제어 성공
2026-07-22 21:36:02.638 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:04:25.012 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 22:04:25.132 하드웨어 제어 성공
2026-07-22 22:04:25.142 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:05:14.057 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 22:05:14.175 하드웨어 제어 성공
2026-07-22 22:05:14.186 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:13:48.136 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 22:13:48.253 하드웨어 제어 성공
2026-07-22 22:13:48.263 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:14:12.672 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 22:14:12.778 하드웨어 제어 성공
2026-07-22 22:14:12.781 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:20:18.504 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 22:20:18.621 하드웨어 제어 성공
2026-07-22 22:20:18.632 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:20:43.004 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 22:20:43.107 하드웨어 제어 성공
2026-07-22 22:20:43.112 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:34:37.682 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 22:34:37.787 하드웨어 제어 성공
2026-07-22 22:34:37.799 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:35:53.248 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 22:35:53.352 하드웨어 제어 성공
2026-07-22 22:35:53.362 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:36:13.780 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 22:36:13.897 하드웨어 제어 성공
2026-07-22 22:36:13.902 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:36:39.334 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 22:36:39.450 하드웨어 제어 성공
2026-07-22 22:36:39.454 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:59:07.390 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 22:59:07.508 하드웨어 제어 성공
2026-07-22 22:59:07.518 DB 완료 갱신 (Handshake 종료)
2026-07-22 22:59:31.954 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 22:59:32.070 하드웨어 제어 성공
2026-07-22 22:59:32.083 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:04:26.319 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 23:04:26.424 하드웨어 제어 성공
2026-07-22 23:04:26.435 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:05:37.758 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 23:05:37.874 하드웨어 제어 성공
2026-07-22 23:05:37.885 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:18:05.511 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 23:18:05.628 하드웨어 제어 성공
2026-07-22 23:18:05.640 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:18:30.033 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 23:18:30.149 하드웨어 제어 성공
2026-07-22 23:18:30.163 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:34:34.828 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-22 23:34:34.945 하드웨어 제어 성공
2026-07-22 23:34:34.952 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:35:49.429 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 23:35:49.546 하드웨어 제어 성공
2026-07-22 23:35:49.560 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:41:43.992 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 23:41:44.111 하드웨어 제어 성공
2026-07-22 23:41:44.122 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:42:10.556 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 23:42:10.671 하드웨어 제어 성공
2026-07-22 23:42:10.682 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:43:03.682 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 23:43:03.799 하드웨어 제어 성공
2026-07-22 23:43:03.813 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:43:29.201 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 23:43:29.303 하드웨어 제어 성공
2026-07-22 23:43:29.311 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:53:51.375 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-22 23:53:51.493 하드웨어 제어 성공
2026-07-22 23:53:51.504 DB 완료 갱신 (Handshake 종료)
2026-07-22 23:54:18.050 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-22 23:54:18.168 하드웨어 제어 성공
2026-07-22 23:54:18.178 DB 완료 갱신 (Handshake 종료)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,633 @@
2026-07-28 00:04:24.207 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 00:04:24.323 하드웨어 제어 성공
2026-07-28 00:04:24.328 DB 완료 갱신 (Handshake 종료)
2026-07-28 00:05:44.929 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 00:05:45.034 하드웨어 제어 성공
2026-07-28 00:05:45.046 DB 완료 갱신 (Handshake 종료)
2026-07-28 00:19:18.302 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 00:19:18.413 하드웨어 제어 성공
2026-07-28 00:19:18.424 DB 완료 갱신 (Handshake 종료)
2026-07-28 00:19:35.682 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 00:19:35.800 하드웨어 제어 성공
2026-07-28 00:19:35.812 DB 완료 갱신 (Handshake 종료)
2026-07-28 00:27:54.229 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 00:27:54.347 하드웨어 제어 성공
2026-07-28 00:27:54.359 DB 완료 갱신 (Handshake 종료)
2026-07-28 00:28:16.736 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 00:28:16.843 하드웨어 제어 성공
2026-07-28 00:28:16.854 DB 완료 갱신 (Handshake 종료)
2026-07-28 00:34:13.431 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 00:34:13.549 하드웨어 제어 성공
2026-07-28 00:34:13.554 DB 완료 갱신 (Handshake 종료)
2026-07-28 00:35:35.079 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 00:35:35.183 하드웨어 제어 성공
2026-07-28 00:35:35.209 DB 완료 갱신 (Handshake 종료)
2026-07-28 01:02:40.214 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 01:02:40.331 하드웨어 제어 성공
2026-07-28 01:02:40.335 DB 완료 갱신 (Handshake 종료)
2026-07-28 01:03:04.766 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 01:03:04.883 하드웨어 제어 성공
2026-07-28 01:03:04.899 DB 완료 갱신 (Handshake 종료)
2026-07-28 01:04:55.032 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 01:04:55.149 하드웨어 제어 성공
2026-07-28 01:04:55.162 DB 완료 갱신 (Handshake 종료)
2026-07-28 01:05:48.229 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 01:05:48.347 하드웨어 제어 성공
2026-07-28 01:05:48.357 DB 완료 갱신 (Handshake 종료)
2026-07-28 01:18:53.199 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 01:18:53.304 하드웨어 제어 성공
2026-07-28 01:18:53.316 DB 완료 갱신 (Handshake 종료)
2026-07-28 01:19:13.586 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 01:19:13.690 하드웨어 제어 성공
2026-07-28 01:19:13.702 DB 완료 갱신 (Handshake 종료)
2026-07-28 01:34:14.823 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 01:34:14.940 하드웨어 제어 성공
2026-07-28 01:34:14.946 DB 완료 갱신 (Handshake 종료)
2026-07-28 01:35:56.999 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 01:35:57.116 하드웨어 제어 성공
2026-07-28 01:35:57.128 DB 완료 갱신 (Handshake 종료)
2026-07-28 02:04:29.857 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 02:04:29.962 하드웨어 제어 성공
2026-07-28 02:04:29.974 DB 완료 갱신 (Handshake 종료)
2026-07-28 02:04:54.454 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 02:04:54.570 하드웨어 제어 성공
2026-07-28 02:04:54.584 DB 완료 갱신 (Handshake 종료)
2026-07-28 02:18:58.578 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 02:18:58.695 하드웨어 제어 성공
2026-07-28 02:18:58.700 DB 완료 갱신 (Handshake 종료)
2026-07-28 02:19:16.970 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 02:19:17.074 하드웨어 제어 성공
2026-07-28 02:19:17.084 DB 완료 갱신 (Handshake 종료)
2026-07-28 02:32:33.006 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 02:32:33.124 하드웨어 제어 성공
2026-07-28 02:32:33.135 DB 완료 갱신 (Handshake 종료)
2026-07-28 02:32:57.501 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 02:32:57.616 하드웨어 제어 성공
2026-07-28 02:32:57.629 DB 완료 갱신 (Handshake 종료)
2026-07-28 02:34:19.212 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 02:34:19.330 하드웨어 제어 성공
2026-07-28 02:34:19.335 DB 완료 갱신 (Handshake 종료)
2026-07-28 02:35:59.207 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 02:35:59.312 하드웨어 제어 성공
2026-07-28 02:35:59.322 DB 완료 갱신 (Handshake 종료)
2026-07-28 03:04:13.024 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 03:04:13.127 하드웨어 제어 성공
2026-07-28 03:04:13.138 DB 완료 갱신 (Handshake 종료)
2026-07-28 03:05:32.728 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 03:05:32.833 하드웨어 제어 성공
2026-07-28 03:05:32.838 DB 완료 갱신 (Handshake 종료)
2026-07-28 03:19:08.206 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 03:19:08.322 하드웨어 제어 성공
2026-07-28 03:19:08.336 DB 완료 갱신 (Handshake 종료)
2026-07-28 03:19:27.650 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 03:19:27.767 하드웨어 제어 성공
2026-07-28 03:19:27.780 DB 완료 갱신 (Handshake 종료)
2026-07-28 03:34:06.421 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 03:34:06.525 하드웨어 제어 성공
2026-07-28 03:34:06.536 DB 완료 갱신 (Handshake 종료)
2026-07-28 03:35:26.144 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 03:35:26.247 하드웨어 제어 성공
2026-07-28 03:35:26.261 DB 완료 갱신 (Handshake 종료)
2026-07-28 04:02:34.104 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 04:02:34.207 하드웨어 제어 성공
2026-07-28 04:02:34.211 DB 완료 갱신 (Handshake 종료)
2026-07-28 04:03:01.650 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 04:03:01.767 하드웨어 제어 성공
2026-07-28 04:03:01.780 DB 완료 갱신 (Handshake 종료)
2026-07-28 04:04:51.961 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 04:04:52.077 하드웨어 제어 성공
2026-07-28 04:04:52.090 DB 완료 갱신 (Handshake 종료)
2026-07-28 04:05:42.091 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 04:05:42.207 하드웨어 제어 성공
2026-07-28 04:05:42.221 DB 완료 갱신 (Handshake 종료)
2026-07-28 04:18:52.319 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 04:18:52.434 하드웨어 제어 성공
2026-07-28 04:18:52.444 DB 완료 갱신 (Handshake 종료)
2026-07-28 04:19:13.730 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 04:19:13.848 하드웨어 제어 성공
2026-07-28 04:19:13.857 DB 완료 갱신 (Handshake 종료)
2026-07-28 04:34:12.140 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 04:34:12.243 하드웨어 제어 성공
2026-07-28 04:34:12.257 DB 완료 갱신 (Handshake 종료)
2026-07-28 04:35:31.857 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 04:35:31.976 하드웨어 제어 성공
2026-07-28 04:35:31.989 DB 완료 갱신 (Handshake 종료)
2026-07-28 05:04:32.972 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 05:04:33.088 하드웨어 제어 성공
2026-07-28 05:04:33.100 DB 완료 갱신 (Handshake 종료)
2026-07-28 05:05:43.474 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 05:05:43.589 하드웨어 제어 성공
2026-07-28 05:05:43.602 DB 완료 갱신 (Handshake 종료)
2026-07-28 05:18:58.346 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 05:18:58.456 하드웨어 제어 성공
2026-07-28 05:18:58.467 DB 완료 갱신 (Handshake 종료)
2026-07-28 05:19:15.727 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 05:19:15.830 하드웨어 제어 성공
2026-07-28 05:19:15.835 DB 완료 갱신 (Handshake 종료)
2026-07-28 05:32:32.832 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 05:32:32.949 하드웨어 제어 성공
2026-07-28 05:32:32.953 DB 완료 갱신 (Handshake 종료)
2026-07-28 05:32:59.383 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 05:32:59.485 하드웨어 제어 성공
2026-07-28 05:32:59.497 DB 완료 갱신 (Handshake 종료)
2026-07-28 05:34:23.268 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 05:34:23.371 하드웨어 제어 성공
2026-07-28 05:34:23.378 DB 완료 갱신 (Handshake 종료)
2026-07-28 05:36:04.537 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 05:36:04.656 하드웨어 제어 성공
2026-07-28 05:36:04.668 DB 완료 갱신 (Handshake 종료)
2026-07-28 06:34:27.059 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 06:34:27.165 하드웨어 제어 성공
2026-07-28 06:34:27.171 DB 완료 갱신 (Handshake 종료)
2026-07-28 06:35:21.228 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 06:35:21.345 하드웨어 제어 성공
2026-07-28 06:35:21.356 DB 완료 갱신 (Handshake 종료)
2026-07-28 07:04:19.274 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 07:04:19.378 하드웨어 제어 성공
2026-07-28 07:04:19.389 DB 완료 갱신 (Handshake 종료)
2026-07-28 07:04:41.722 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 07:04:41.839 하드웨어 제어 성공
2026-07-28 07:04:41.851 DB 완료 갱신 (Handshake 종료)
2026-07-28 07:05:12.417 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 07:05:12.522 하드웨어 제어 성공
2026-07-28 07:05:12.536 DB 완료 갱신 (Handshake 종료)
2026-07-28 07:05:39.054 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 07:05:39.171 하드웨어 제어 성공
2026-07-28 07:05:39.183 DB 완료 갱신 (Handshake 종료)
2026-07-28 07:18:44.994 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 07:18:45.098 하드웨어 제어 성공
2026-07-28 07:18:45.110 DB 완료 갱신 (Handshake 종료)
2026-07-28 07:19:06.419 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 07:19:06.537 하드웨어 제어 성공
2026-07-28 07:19:06.549 DB 완료 갱신 (Handshake 종료)
2026-07-28 07:34:09.853 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 07:34:09.959 하드웨어 제어 성공
2026-07-28 07:34:09.970 DB 완료 갱신 (Handshake 종료)
2026-07-28 07:35:29.508 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 07:35:29.623 하드웨어 제어 성공
2026-07-28 07:35:29.637 DB 완료 갱신 (Handshake 종료)
2026-07-28 08:18:56.401 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 08:18:56.503 하드웨어 제어 성공
2026-07-28 08:18:56.514 DB 완료 갱신 (Handshake 종료)
2026-07-28 08:19:15.793 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 08:19:15.896 하드웨어 제어 성공
2026-07-28 08:19:15.901 DB 완료 갱신 (Handshake 종료)
2026-07-28 08:34:21.259 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 08:34:21.375 하드웨어 제어 성공
2026-07-28 08:34:21.380 DB 완료 갱신 (Handshake 종료)
2026-07-28 08:36:03.303 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 08:36:03.407 하드웨어 제어 성공
2026-07-28 08:36:03.418 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:01:20.846 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 09:01:20.950 하드웨어 제어 성공
2026-07-28 09:01:20.954 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:02:16.082 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:02:16.199 하드웨어 제어 성공
2026-07-28 09:02:16.203 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:04:14.629 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 09:04:14.734 하드웨어 제어 성공
2026-07-28 09:04:14.748 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:05:36.283 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:05:36.398 하드웨어 제어 성공
2026-07-28 09:05:36.410 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:08:40.424 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 09:08:40.541 하드웨어 제어 성공
2026-07-28 09:08:40.556 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:09:07.029 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:09:07.146 하드웨어 제어 성공
2026-07-28 09:09:07.150 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:31:05.914 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 09:31:06.032 하드웨어 제어 성공
2026-07-28 09:31:06.046 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:31:28.433 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:31:28.550 하드웨어 제어 성공
2026-07-28 09:31:28.554 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:32:54.203 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 09:32:54.316 하드웨어 제어 성공
2026-07-28 09:32:54.330 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:33:17.698 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:33:17.817 하드웨어 제어 성공
2026-07-28 09:33:17.828 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:34:15.940 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 09:34:16.054 하드웨어 제어 성공
2026-07-28 09:34:16.068 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:35:38.788 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:35:38.899 하드웨어 제어 성공
2026-07-28 09:35:38.904 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:40:31.233 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 09:40:31.337 하드웨어 제어 성공
2026-07-28 09:40:31.349 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:41:24.374 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:41:24.489 하드웨어 제어 성공
2026-07-28 09:41:24.494 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:43:12.764 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 09:43:12.879 하드웨어 제어 성공
2026-07-28 09:43:12.891 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:43:41.324 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:43:41.430 하드웨어 제어 성공
2026-07-28 09:43:41.448 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:48:41.676 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 09:48:41.780 하드웨어 제어 성공
2026-07-28 09:48:41.792 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:49:08.261 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:49:08.364 하드웨어 제어 성공
2026-07-28 09:49:08.385 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:56:01.528 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 09:56:01.632 하드웨어 제어 성공
2026-07-28 09:56:01.645 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:57:22.243 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:57:22.361 하드웨어 제어 성공
2026-07-28 09:57:22.372 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:57:49.850 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 09:57:49.967 하드웨어 제어 성공
2026-07-28 09:57:49.979 DB 완료 갱신 (Handshake 종료)
2026-07-28 09:59:11.592 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 09:59:11.707 하드웨어 제어 성공
2026-07-28 09:59:11.712 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:07:05.031 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 10:07:05.148 하드웨어 제어 성공
2026-07-28 10:07:05.159 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:07:29.559 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 10:07:29.661 하드웨어 제어 성공
2026-07-28 10:07:29.665 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:08:27.841 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 10:08:27.958 하드웨어 제어 성공
2026-07-28 10:08:27.968 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:09:19.848 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 10:09:19.951 하드웨어 제어 성공
2026-07-28 10:09:19.963 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:12:05.411 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 10:12:05.525 하드웨어 제어 성공
2026-07-28 10:12:05.537 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:17:02.874 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 10:17:02.979 하드웨어 제어 성공
2026-07-28 10:17:02.992 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:18:30.753 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 10:18:30.857 하드웨어 제어 성공
2026-07-28 10:18:30.862 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:18:54.318 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 10:18:54.423 하드웨어 제어 성공
2026-07-28 10:18:54.430 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:19:17.765 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 10:19:17.882 하드웨어 제어 성공
2026-07-28 10:19:17.894 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:19:43.279 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 10:19:43.383 하드웨어 제어 성공
2026-07-28 10:19:43.394 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:31:33.643 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-28 10:31:33.747 하드웨어 제어 성공
2026-07-28 10:31:33.760 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:32:01.198 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 10:32:01.302 하드웨어 제어 성공
2026-07-28 10:32:01.313 DB 완료 갱신 (Handshake 종료)
2026-07-28 10:32:28.794 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 10:32:28.904 하드웨어 제어 성공
2026-07-28 10:32:28.909 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:02:58.146 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 11:02:58.262 하드웨어 제어 성공
2026-07-28 11:02:58.274 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:03:23.706 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 11:03:23.823 하드웨어 제어 성공
2026-07-28 11:03:23.835 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:04:46.629 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 11:04:46.746 하드웨어 제어 성공
2026-07-28 11:04:46.752 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:06:30.917 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 11:06:31.020 하드웨어 제어 성공
2026-07-28 11:06:31.030 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:18:48.694 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 11:18:48.811 하드웨어 제어 성공
2026-07-28 11:18:48.842 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:19:11.094 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 11:19:11.211 하드웨어 제어 성공
2026-07-28 11:19:11.221 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:32:47.744 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 11:32:47.862 하드웨어 제어 성공
2026-07-28 11:32:47.866 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:33:32.792 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 11:33:32.895 하드웨어 제어 성공
2026-07-28 11:33:32.907 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:34:37.181 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 11:34:37.298 하드웨어 제어 성공
2026-07-28 11:34:37.311 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:35:56.871 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 11:35:56.987 하드웨어 제어 성공
2026-07-28 11:35:56.993 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:50:54.403 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 11:50:54.518 하드웨어 제어 성공
2026-07-28 11:50:54.531 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:52:14.016 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 11:52:14.132 하드웨어 제어 성공
2026-07-28 11:52:14.143 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:55:25.083 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 11:55:25.198 하드웨어 제어 성공
2026-07-28 11:55:25.202 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:55:50.680 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 11:55:50.798 하드웨어 제어 성공
2026-07-28 11:55:50.803 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:56:18.302 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 11:56:18.420 하드웨어 제어 성공
2026-07-28 11:56:18.425 DB 완료 갱신 (Handshake 종료)
2026-07-28 11:57:12.511 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 11:57:12.614 하드웨어 제어 성공
2026-07-28 11:57:12.626 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:01:18.059 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 12:01:18.176 하드웨어 제어 성공
2026-07-28 12:01:18.188 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:03:57.349 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 12:03:57.467 하드웨어 제어 성공
2026-07-28 12:03:57.478 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:04:27.968 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 12:04:28.085 하드웨어 제어 성공
2026-07-28 12:04:28.097 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:05:47.782 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 12:05:47.899 하드웨어 제어 성공
2026-07-28 12:05:47.910 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:18:54.689 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 12:18:54.806 하드웨어 제어 성공
2026-07-28 12:18:54.820 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:19:12.057 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 12:19:12.162 하드웨어 제어 성공
2026-07-28 12:19:12.174 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:20:16.428 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 12:20:16.531 하드웨어 제어 성공
2026-07-28 12:20:16.543 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:20:43.072 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 12:20:43.190 하드웨어 제어 성공
2026-07-28 12:20:43.216 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:22:59.027 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 12:22:59.147 하드웨어 제어 성공
2026-07-28 12:22:59.159 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:24:18.733 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 12:24:18.851 하드웨어 제어 성공
2026-07-28 12:24:18.864 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:32:29.347 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 12:32:29.465 하드웨어 제어 성공
2026-07-28 12:32:29.470 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:32:54.894 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 12:32:55.010 하드웨어 제어 성공
2026-07-28 12:32:55.016 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:34:18.777 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 12:34:18.897 하드웨어 제어 성공
2026-07-28 12:34:18.909 DB 완료 갱신 (Handshake 종료)
2026-07-28 12:35:38.451 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 12:35:38.555 하드웨어 제어 성공
2026-07-28 12:35:38.561 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:04:09.306 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 13:04:09.424 하드웨어 제어 성공
2026-07-28 13:04:09.435 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:11:17.157 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 13:11:17.275 하드웨어 제어 성공
2026-07-28 13:11:17.286 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:15:01.226 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 13:15:01.343 하드웨어 제어 성공
2026-07-28 13:15:01.348 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:15:49.285 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 13:15:49.402 하드웨어 제어 성공
2026-07-28 13:15:49.413 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:17:44.812 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 13:17:44.915 하드웨어 제어 성공
2026-07-28 13:17:44.928 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:19:00.363 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 13:19:00.476 하드웨어 제어 성공
2026-07-28 13:19:00.488 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:19:31.025 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 13:19:31.129 하드웨어 제어 성공
2026-07-28 13:19:31.135 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:22:09.361 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 13:22:09.464 하드웨어 제어 성공
2026-07-28 13:22:09.474 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:32:37.693 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 13:32:37.811 하드웨어 제어 성공
2026-07-28 13:32:37.823 DB 완료 갱신 (Handshake 종료)
2026-07-28 13:33:00.164 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 13:33:00.280 하드웨어 제어 성공
2026-07-28 13:33:00.293 DB 완료 갱신 (Handshake 종료)
2026-07-28 14:02:24.405 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 14:02:24.510 하드웨어 제어 성공
2026-07-28 14:02:24.521 DB 완료 갱신 (Handshake 종료)
2026-07-28 14:03:15.597 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 14:03:15.713 하드웨어 제어 성공
2026-07-28 14:03:15.718 DB 완료 갱신 (Handshake 종료)
2026-07-28 14:04:14.797 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 14:04:14.917 하드웨어 제어 성공
2026-07-28 14:04:14.929 DB 완료 갱신 (Handshake 종료)
2026-07-28 14:05:59.981 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 14:06:00.084 하드웨어 제어 성공
2026-07-28 14:06:00.088 DB 완료 갱신 (Handshake 종료)
2026-07-28 14:19:09.565 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 14:19:09.683 하드웨어 제어 성공
2026-07-28 14:19:09.695 DB 완료 갱신 (Handshake 종료)
2026-07-28 14:19:27.942 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 14:19:28.058 하드웨어 제어 성공
2026-07-28 14:19:28.070 DB 완료 갱신 (Handshake 종료)
2026-07-28 14:34:33.432 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 14:34:33.537 하드웨어 제어 성공
2026-07-28 14:34:33.542 DB 완료 갱신 (Handshake 종료)
2026-07-28 14:36:16.532 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 14:36:16.648 하드웨어 제어 성공
2026-07-28 14:36:16.667 DB 완료 갱신 (Handshake 종료)
2026-07-28 15:02:34.219 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 15:02:34.337 하드웨어 제어 성공
2026-07-28 15:02:34.354 DB 완료 갱신 (Handshake 종료)
2026-07-28 15:02:59.731 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 15:02:59.845 하드웨어 제어 성공
2026-07-28 15:02:59.850 DB 완료 갱신 (Handshake 종료)
2026-07-28 15:04:22.569 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 15:04:22.687 하드웨어 제어 성공
2026-07-28 15:04:22.701 DB 완료 갱신 (Handshake 종료)
2026-07-28 15:05:41.304 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 15:05:41.419 하드웨어 제어 성공
2026-07-28 15:05:41.431 DB 완료 갱신 (Handshake 종료)
2026-07-28 15:18:48.346 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 15:18:48.464 하드웨어 제어 성공
2026-07-28 15:18:48.472 DB 완료 갱신 (Handshake 종료)
2026-07-28 15:19:10.892 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 15:19:11.005 하드웨어 제어 성공
2026-07-28 15:19:11.018 DB 완료 갱신 (Handshake 종료)
2026-07-28 15:34:09.335 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 15:34:09.438 하드웨어 제어 성공
2026-07-28 15:34:09.449 DB 완료 갱신 (Handshake 종료)
2026-07-28 15:35:53.609 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 15:35:53.722 하드웨어 제어 성공
2026-07-28 15:35:53.734 DB 완료 갱신 (Handshake 종료)
2026-07-28 16:02:38.027 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 16:02:38.144 하드웨어 제어 성공
2026-07-28 16:02:38.149 DB 완료 갱신 (Handshake 종료)
2026-07-28 16:03:23.978 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 16:03:24.094 하드웨어 제어 성공
2026-07-28 16:03:24.108 DB 완료 갱신 (Handshake 종료)
2026-07-28 16:04:27.334 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 16:04:27.448 하드웨어 제어 성공
2026-07-28 16:04:27.453 DB 완료 갱신 (Handshake 종료)
2026-07-28 16:05:47.034 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 16:05:47.137 하드웨어 제어 성공
2026-07-28 16:05:47.148 DB 완료 갱신 (Handshake 종료)
2026-07-28 16:18:53.088 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 16:18:53.205 하드웨어 제어 성공
2026-07-28 16:18:53.221 DB 완료 갱신 (Handshake 종료)
2026-07-28 16:19:16.580 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 16:19:16.696 하드웨어 제어 성공
2026-07-28 16:19:16.711 DB 완료 갱신 (Handshake 종료)
2026-07-28 16:34:16.033 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 16:34:16.150 하드웨어 제어 성공
2026-07-28 16:34:16.154 DB 완료 갱신 (Handshake 종료)
2026-07-28 16:36:28.149 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 16:36:28.267 하드웨어 제어 성공
2026-07-28 16:36:28.279 DB 완료 갱신 (Handshake 종료)
2026-07-28 17:04:28.348 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 17:04:28.451 하드웨어 제어 성공
2026-07-28 17:04:28.454 DB 완료 갱신 (Handshake 종료)
2026-07-28 17:06:11.541 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 17:06:11.660 하드웨어 제어 성공
2026-07-28 17:06:11.676 DB 완료 갱신 (Handshake 종료)
2026-07-28 17:18:53.768 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 17:18:53.870 하드웨어 제어 성공
2026-07-28 17:18:53.883 DB 완료 갱신 (Handshake 종료)
2026-07-28 17:19:16.293 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 17:19:16.396 하드웨어 제어 성공
2026-07-28 17:19:16.400 DB 완료 갱신 (Handshake 종료)
2026-07-28 17:34:12.674 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 17:34:12.780 하드웨어 제어 성공
2026-07-28 17:34:12.786 DB 완료 갱신 (Handshake 종료)
2026-07-28 17:36:24.551 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 17:36:24.667 하드웨어 제어 성공
2026-07-28 17:36:24.671 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:02:40.493 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 18:02:40.597 하드웨어 제어 성공
2026-07-28 18:02:40.604 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:03:07.121 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 18:03:07.240 하드웨어 제어 성공
2026-07-28 18:03:07.259 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:04:30.910 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 18:04:31.027 하드웨어 제어 성공
2026-07-28 18:04:31.032 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:06:14.080 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 18:06:14.197 하드웨어 제어 성공
2026-07-28 18:06:14.203 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:18:59.226 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 18:18:59.342 하드웨어 제어 성공
2026-07-28 18:18:59.353 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:19:21.734 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 18:19:21.839 하드웨어 제어 성공
2026-07-28 18:19:21.851 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:32:32.682 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 18:32:32.800 하드웨어 제어 성공
2026-07-28 18:32:32.805 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:33:19.644 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 18:33:19.750 하드웨어 제어 성공
2026-07-28 18:33:19.756 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:34:19.863 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 18:34:19.981 하드웨어 제어 성공
2026-07-28 18:34:19.985 DB 완료 갱신 (Handshake 종료)
2026-07-28 18:36:03.201 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 18:36:03.317 하드웨어 제어 성공
2026-07-28 18:36:03.330 DB 완료 갱신 (Handshake 종료)
2026-07-28 19:04:13.173 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 19:04:13.290 하드웨어 제어 성공
2026-07-28 19:04:13.293 DB 완료 갱신 (Handshake 종료)
2026-07-28 19:05:32.871 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 19:05:32.987 하드웨어 제어 성공
2026-07-28 19:05:33.002 DB 완료 갱신 (Handshake 종료)
2026-07-28 19:32:38.647 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 19:32:38.765 하드웨어 제어 성공
2026-07-28 19:32:38.777 DB 완료 갱신 (Handshake 종료)
2026-07-28 19:33:05.233 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 19:33:05.348 하드웨어 제어 성공
2026-07-28 19:33:05.361 DB 완료 갱신 (Handshake 종료)
2026-07-28 19:34:00.357 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 19:34:00.476 하드웨어 제어 성공
2026-07-28 19:34:00.481 DB 완료 갱신 (Handshake 종료)
2026-07-28 19:36:12.080 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 19:36:12.198 하드웨어 제어 성공
2026-07-28 19:36:12.212 DB 완료 갱신 (Handshake 종료)
2026-07-28 20:04:15.968 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 20:04:16.084 하드웨어 제어 성공
2026-07-28 20:04:16.090 DB 완료 갱신 (Handshake 종료)
2026-07-28 20:05:35.693 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 20:05:35.810 하드웨어 제어 성공
2026-07-28 20:05:35.821 DB 완료 갱신 (Handshake 종료)
2026-07-28 20:32:42.724 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 20:32:42.840 하드웨어 제어 성공
2026-07-28 20:32:42.852 DB 완료 갱신 (Handshake 종료)
2026-07-28 20:33:07.235 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 20:33:07.352 하드웨어 제어 성공
2026-07-28 20:33:07.357 DB 완료 갱신 (Handshake 종료)
2026-07-28 20:34:29.922 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 20:34:30.025 하드웨어 제어 성공
2026-07-28 20:34:30.029 DB 완료 갱신 (Handshake 종료)
2026-07-28 20:36:15.166 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 20:36:15.285 하드웨어 제어 성공
2026-07-28 20:36:15.289 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:04:17.265 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 21:04:17.381 하드웨어 제어 성공
2026-07-28 21:04:17.387 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:05:36.970 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 21:05:37.073 하드웨어 제어 성공
2026-07-28 21:05:37.084 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:18:43.643 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 21:18:43.760 하드웨어 제어 성공
2026-07-28 21:18:43.773 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:19:07.155 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 21:19:07.272 하드웨어 제어 성공
2026-07-28 21:19:07.285 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:19:36.782 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 21:19:36.898 하드웨어 제어 성공
2026-07-28 21:19:36.901 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:19:59.203 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 21:19:59.319 하드웨어 제어 성공
2026-07-28 21:19:59.331 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:32:45.485 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 21:32:45.588 하드웨어 제어 성공
2026-07-28 21:32:45.600 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:33:06.908 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 21:33:07.012 하드웨어 제어 성공
2026-07-28 21:33:07.024 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:34:05.154 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 21:34:05.271 하드웨어 제어 성공
2026-07-28 21:34:05.283 DB 완료 갱신 (Handshake 종료)
2026-07-28 21:36:17.025 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 21:36:17.142 하드웨어 제어 성공
2026-07-28 21:36:17.146 DB 완료 갱신 (Handshake 종료)
2026-07-28 22:04:23.395 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 22:04:23.498 하드웨어 제어 성공
2026-07-28 22:04:23.503 DB 완료 갱신 (Handshake 종료)
2026-07-28 22:05:42.992 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 22:05:43.109 하드웨어 제어 성공
2026-07-28 22:05:43.121 DB 완료 갱신 (Handshake 종료)
2026-07-28 22:18:51.612 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 22:18:51.729 하드웨어 제어 성공
2026-07-28 22:18:51.741 DB 완료 갱신 (Handshake 종료)
2026-07-28 22:19:13.021 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 22:19:13.124 하드웨어 제어 성공
2026-07-28 22:19:13.136 DB 완료 갱신 (Handshake 종료)
2026-07-28 22:34:10.542 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 22:34:10.658 하드웨어 제어 성공
2026-07-28 22:34:10.662 DB 완료 갱신 (Handshake 종료)
2026-07-28 22:35:32.173 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 22:35:32.276 하드웨어 제어 성공
2026-07-28 22:35:32.288 DB 완료 갱신 (Handshake 종료)
2026-07-28 23:02:40.375 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 23:02:40.479 하드웨어 제어 성공
2026-07-28 23:02:40.483 DB 완료 갱신 (Handshake 종료)
2026-07-28 23:03:05.890 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 23:03:06.008 하드웨어 제어 성공
2026-07-28 23:03:06.020 DB 완료 갱신 (Handshake 종료)
2026-07-28 23:04:27.523 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 23:04:27.640 하드웨어 제어 성공
2026-07-28 23:04:27.644 DB 완료 갱신 (Handshake 종료)
2026-07-28 23:06:11.672 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 23:06:11.789 하드웨어 제어 성공
2026-07-28 23:06:11.793 DB 완료 갱신 (Handshake 종료)
2026-07-28 23:32:30.834 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 23:32:30.938 하드웨어 제어 성공
2026-07-28 23:32:30.943 DB 완료 갱신 (Handshake 종료)
2026-07-28 23:32:55.371 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 23:32:55.476 하드웨어 제어 성공
2026-07-28 23:32:55.480 DB 완료 갱신 (Handshake 종료)
2026-07-28 23:34:18.140 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-28 23:34:18.251 하드웨어 제어 성공
2026-07-28 23:34:18.254 DB 완료 갱신 (Handshake 종료)
2026-07-28 23:36:02.300 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-28 23:36:02.418 하드웨어 제어 성공
2026-07-28 23:36:02.429 DB 완료 갱신 (Handshake 종료)

View File

@ -0,0 +1,526 @@
2026-07-29 00:04:09.658 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 00:04:09.773 하드웨어 제어 성공
2026-07-29 00:04:09.776 DB 완료 갱신 (Handshake 종료)
2026-07-29 00:05:29.353 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 00:05:29.470 하드웨어 제어 성공
2026-07-29 00:05:29.482 DB 완료 갱신 (Handshake 종료)
2026-07-29 00:33:59.637 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 00:33:59.743 하드웨어 제어 성공
2026-07-29 00:33:59.748 DB 완료 갱신 (Handshake 종료)
2026-07-29 00:35:43.730 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 00:35:43.849 하드웨어 제어 성공
2026-07-29 00:35:43.861 DB 완료 갱신 (Handshake 종료)
2026-07-29 01:02:26.857 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 01:02:26.962 하드웨어 제어 성공
2026-07-29 01:02:26.975 DB 완료 갱신 (Handshake 종료)
2026-07-29 01:02:52.348 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 01:02:52.466 하드웨어 제어 성공
2026-07-29 01:02:52.478 DB 완료 갱신 (Handshake 종료)
2026-07-29 01:04:44.787 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 01:04:44.900 하드웨어 제어 성공
2026-07-29 01:04:44.913 DB 완료 갱신 (Handshake 종료)
2026-07-29 01:05:31.710 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 01:05:31.813 하드웨어 제어 성공
2026-07-29 01:05:31.824 DB 완료 갱신 (Handshake 종료)
2026-07-29 01:18:44.716 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 01:18:44.835 하드웨어 제어 성공
2026-07-29 01:18:44.846 DB 완료 갱신 (Handshake 종료)
2026-07-29 01:19:07.138 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 01:19:07.252 하드웨어 제어 성공
2026-07-29 01:19:07.264 DB 완료 갱신 (Handshake 종료)
2026-07-29 01:34:01.019 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 01:34:01.134 하드웨어 제어 성공
2026-07-29 01:34:01.138 DB 완료 갱신 (Handshake 종료)
2026-07-29 01:35:21.761 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 01:35:21.880 하드웨어 제어 성공
2026-07-29 01:35:21.884 DB 완료 갱신 (Handshake 종료)
2026-07-29 02:02:32.568 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 02:02:32.673 하드웨어 제어 성공
2026-07-29 02:02:32.676 DB 완료 갱신 (Handshake 종료)
2026-07-29 02:02:59.182 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 02:02:59.285 하드웨어 제어 성공
2026-07-29 02:02:59.291 DB 완료 갱신 (Handshake 종료)
2026-07-29 02:04:24.127 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 02:04:24.244 하드웨어 제어 성공
2026-07-29 02:04:24.257 DB 완료 갱신 (Handshake 종료)
2026-07-29 02:05:16.281 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 02:05:16.397 하드웨어 제어 성공
2026-07-29 02:05:16.409 DB 완료 갱신 (Handshake 종료)
2026-07-29 02:18:49.763 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 02:18:49.880 하드웨어 제어 성공
2026-07-29 02:18:49.887 DB 완료 갱신 (Handshake 종료)
2026-07-29 02:19:13.229 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 02:19:13.347 하드웨어 제어 성공
2026-07-29 02:19:13.360 DB 완료 갱신 (Handshake 종료)
2026-07-29 02:34:11.652 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 02:34:11.755 하드웨어 제어 성공
2026-07-29 02:34:11.762 DB 완료 갱신 (Handshake 종료)
2026-07-29 02:35:32.328 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 02:35:32.444 하드웨어 제어 성공
2026-07-29 02:35:32.456 DB 완료 갱신 (Handshake 종료)
2026-07-29 03:02:37.146 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 03:02:37.265 하드웨어 제어 성공
2026-07-29 03:02:37.270 DB 완료 갱신 (Handshake 종료)
2026-07-29 03:03:01.652 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 03:03:01.756 하드웨어 제어 성공
2026-07-29 03:03:01.767 DB 완료 갱신 (Handshake 종료)
2026-07-29 03:03:58.834 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 03:03:58.937 하드웨어 제어 성공
2026-07-29 03:03:58.949 DB 완료 갱신 (Handshake 종료)
2026-07-29 03:05:18.495 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 03:05:18.613 하드웨어 제어 성공
2026-07-29 03:05:18.625 DB 완료 갱신 (Handshake 종료)
2026-07-29 03:18:55.013 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 03:18:55.129 하드웨어 제어 성공
2026-07-29 03:18:55.141 DB 완료 갱신 (Handshake 종료)
2026-07-29 03:19:16.475 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 03:19:16.590 하드웨어 제어 성공
2026-07-29 03:19:16.602 DB 완료 갱신 (Handshake 종료)
2026-07-29 03:34:16.907 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 03:34:17.023 하드웨어 제어 성공
2026-07-29 03:34:17.033 DB 완료 갱신 (Handshake 종료)
2026-07-29 03:36:02.993 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 03:36:03.096 하드웨어 제어 성공
2026-07-29 03:36:03.108 DB 완료 갱신 (Handshake 종료)
2026-07-29 04:04:33.321 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 04:04:33.438 하드웨어 제어 성공
2026-07-29 04:04:33.442 DB 완료 갱신 (Handshake 종료)
2026-07-29 04:05:27.539 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 04:05:27.656 하드웨어 제어 성공
2026-07-29 04:05:27.659 DB 완료 갱신 (Handshake 종료)
2026-07-29 04:32:35.188 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 04:32:35.304 하드웨어 제어 성공
2026-07-29 04:32:35.312 DB 완료 갱신 (Handshake 종료)
2026-07-29 04:33:01.730 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 04:33:01.834 하드웨어 제어 성공
2026-07-29 04:33:01.840 DB 완료 갱신 (Handshake 종료)
2026-07-29 04:34:24.468 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 04:34:24.585 하드웨어 제어 성공
2026-07-29 04:34:24.589 DB 완료 갱신 (Handshake 종료)
2026-07-29 04:36:12.764 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 04:36:12.867 하드웨어 제어 성공
2026-07-29 04:36:12.872 DB 완료 갱신 (Handshake 종료)
2026-07-29 05:04:17.621 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 05:04:17.736 하드웨어 제어 성공
2026-07-29 05:04:17.748 DB 완료 갱신 (Handshake 종료)
2026-07-29 05:05:35.274 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 05:05:35.377 하드웨어 제어 성공
2026-07-29 05:05:35.387 DB 완료 갱신 (Handshake 종료)
2026-07-29 05:18:46.248 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 05:18:46.364 하드웨어 제어 성공
2026-07-29 05:18:46.376 DB 완료 갱신 (Handshake 종료)
2026-07-29 05:19:07.734 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 05:19:07.852 하드웨어 제어 성공
2026-07-29 05:19:07.863 DB 완료 갱신 (Handshake 종료)
2026-07-29 05:34:16.097 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 05:34:16.215 하드웨어 제어 성공
2026-07-29 05:34:16.220 DB 완료 갱신 (Handshake 종료)
2026-07-29 05:36:01.454 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 05:36:01.558 하드웨어 제어 성공
2026-07-29 05:36:01.570 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:04:20.398 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 06:04:20.501 하드웨어 제어 성공
2026-07-29 06:04:20.512 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:05:41.069 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 06:05:41.173 하드웨어 제어 성공
2026-07-29 06:05:41.185 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:32:33.311 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 06:32:33.428 하드웨어 제어 성공
2026-07-29 06:32:33.440 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:32:57.875 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 06:32:57.993 하드웨어 제어 성공
2026-07-29 06:32:58.006 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:34:21.608 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 06:34:21.713 하드웨어 제어 성공
2026-07-29 06:34:21.720 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:35:41.320 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 06:35:41.424 하드웨어 제어 성공
2026-07-29 06:35:41.436 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:44:21.709 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 06:44:21.813 하드웨어 제어 성공
2026-07-29 06:44:21.818 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:47:00.997 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 06:47:01.114 하드웨어 제어 성공
2026-07-29 06:47:01.126 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:47:34.735 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 06:47:34.853 하드웨어 제어 성공
2026-07-29 06:47:34.858 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:49:20.024 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 06:49:20.128 하드웨어 제어 성공
2026-07-29 06:49:20.133 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:52:33.148 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 06:52:33.266 하드웨어 제어 성공
2026-07-29 06:52:33.279 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:53:28.328 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 06:53:28.445 하드웨어 제어 성공
2026-07-29 06:53:28.449 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:54:50.228 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 06:54:50.344 하드웨어 제어 성공
2026-07-29 06:54:50.347 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:56:06.842 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 06:56:06.959 하드웨어 제어 성공
2026-07-29 06:56:06.964 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:57:05.158 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 06:57:05.263 하드웨어 제어 성공
2026-07-29 06:57:05.275 DB 완료 갱신 (Handshake 종료)
2026-07-29 06:59:21.029 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 06:59:21.134 하드웨어 제어 성공
2026-07-29 06:59:21.146 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:02:36.165 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 07:02:36.268 하드웨어 제어 성공
2026-07-29 07:02:36.275 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:03:02.729 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 07:03:02.832 하드웨어 제어 성공
2026-07-29 07:03:02.845 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:04:26.487 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 07:04:26.593 하드웨어 제어 성공
2026-07-29 07:04:26.598 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:05:46.136 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 07:05:46.252 하드웨어 제어 성공
2026-07-29 07:05:46.264 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:18:29.577 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 07:18:29.694 하드웨어 제어 성공
2026-07-29 07:18:29.707 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:18:53.121 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 07:18:53.236 하드웨어 제어 성공
2026-07-29 07:18:53.249 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:32:39.748 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 07:32:39.852 하드웨어 제어 성공
2026-07-29 07:32:39.862 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:33:05.272 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 07:33:05.390 하드웨어 제어 성공
2026-07-29 07:33:05.402 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:34:30.022 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 07:34:30.139 하드웨어 제어 성공
2026-07-29 07:34:30.144 DB 완료 갱신 (Handshake 종료)
2026-07-29 07:36:16.223 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 07:36:16.329 하드웨어 제어 성공
2026-07-29 07:36:16.336 DB 완료 갱신 (Handshake 종료)
2026-07-29 08:04:33.099 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 08:04:33.215 하드웨어 제어 성공
2026-07-29 08:04:33.227 DB 완료 갱신 (Handshake 종료)
2026-07-29 08:05:27.319 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 08:05:27.438 하드웨어 제어 성공
2026-07-29 08:05:27.444 DB 완료 갱신 (Handshake 종료)
2026-07-29 08:34:04.389 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 08:34:04.492 하드웨어 제어 성공
2026-07-29 08:34:04.497 DB 완료 갱신 (Handshake 종료)
2026-07-29 08:35:24.109 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 08:35:24.226 하드웨어 제어 성공
2026-07-29 08:35:24.237 DB 완료 갱신 (Handshake 종료)
2026-07-29 09:00:44.407 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-29 09:00:44.524 하드웨어 제어 성공
2026-07-29 09:00:44.536 DB 완료 갱신 (Handshake 종료)
2026-07-29 09:01:10.912 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 09:01:11.016 하드웨어 제어 성공
2026-07-29 09:01:11.028 DB 완료 갱신 (Handshake 종료)
2026-07-29 09:04:03.504 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 09:04:03.606 하드웨어 제어 성공
2026-07-29 09:04:03.618 DB 완료 갱신 (Handshake 종료)
2026-07-29 09:05:23.122 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 09:05:23.226 하드웨어 제어 성공
2026-07-29 09:05:23.230 DB 완료 갱신 (Handshake 종료)
2026-07-29 09:34:04.364 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 09:34:04.475 하드웨어 제어 성공
2026-07-29 09:34:04.479 DB 완료 갱신 (Handshake 종료)
2026-07-29 09:36:17.166 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 09:36:17.270 하드웨어 제어 성공
2026-07-29 09:36:17.280 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:06:34.107 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 10:06:34.225 하드웨어 제어 성공
2026-07-29 10:06:34.229 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:09:36.897 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 10:09:37.015 하드웨어 제어 성공
2026-07-29 10:09:37.019 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:11:58.835 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 10:11:58.943 하드웨어 제어 성공
2026-07-29 10:11:58.949 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:17:40.028 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 10:17:40.142 하드웨어 제어 성공
2026-07-29 10:17:40.146 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:22:50.682 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 10:22:50.800 하드웨어 제어 성공
2026-07-29 10:22:50.813 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:23:13.147 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 10:23:13.264 하드웨어 제어 성공
2026-07-29 10:23:13.276 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:29:53.800 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-29 10:29:53.916 하드웨어 제어 성공
2026-07-29 10:29:53.921 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:31:15.525 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 10:31:15.629 하드웨어 제어 성공
2026-07-29 10:31:15.640 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:31:42.054 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-29 10:31:42.157 하드웨어 제어 성공
2026-07-29 10:31:42.168 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:32:07.588 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 10:32:07.705 하드웨어 제어 성공
2026-07-29 10:32:07.709 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:32:35.227 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-29 10:32:35.343 하드웨어 제어 성공
2026-07-29 10:32:35.356 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:33:02.782 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 10:33:02.900 하드웨어 제어 성공
2026-07-29 10:33:02.912 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:35:20.784 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 10:35:20.901 하드웨어 제어 성공
2026-07-29 10:35:20.904 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:51:42.046 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-29 10:51:42.162 하드웨어 제어 성공
2026-07-29 10:51:42.168 DB 완료 갱신 (Handshake 종료)
2026-07-29 10:52:08.575 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 10:52:08.678 하드웨어 제어 성공
2026-07-29 10:52:08.691 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:02:50.292 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:02:50.411 하드웨어 제어 성공
2026-07-29 11:02:50.422 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:03:15.814 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:03:15.917 하드웨어 제어 성공
2026-07-29 11:03:15.921 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:04:40.609 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:04:40.713 하드웨어 제어 성공
2026-07-29 11:04:40.725 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:06:25.835 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:06:25.952 하드웨어 제어 성공
2026-07-29 11:06:25.965 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:07:53.665 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:07:53.782 하드웨어 제어 성공
2026-07-29 11:07:53.785 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:08:19.168 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:08:19.286 하드웨어 제어 성공
2026-07-29 11:08:19.297 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:12:02.065 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:12:02.183 하드웨어 제어 성공
2026-07-29 11:12:02.194 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:12:26.612 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:12:26.732 하드웨어 제어 성공
2026-07-29 11:12:26.744 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:13:48.304 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:13:48.422 하드웨어 제어 성공
2026-07-29 11:13:48.426 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:14:14.891 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:14:14.994 하드웨어 제어 성공
2026-07-29 11:14:15.005 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:18:50.025 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:18:50.129 하드웨어 제어 성공
2026-07-29 11:18:50.141 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:19:11.513 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:19:11.631 하드웨어 제어 성공
2026-07-29 11:19:11.644 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:34:45.409 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:34:45.512 하드웨어 제어 성공
2026-07-29 11:34:45.524 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:36:07.117 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:36:07.235 하드웨어 제어 성공
2026-07-29 11:36:07.240 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:49:49.160 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:49:49.266 하드웨어 제어 성공
2026-07-29 11:49:49.278 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:51:05.799 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:51:05.903 하드웨어 제어 성공
2026-07-29 11:51:05.906 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:53:55.347 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:53:55.451 하드웨어 제어 성공
2026-07-29 11:53:55.463 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:54:49.431 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:54:49.547 하드웨어 제어 성공
2026-07-29 11:54:49.550 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:55:19.020 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:55:19.124 하드웨어 제어 성공
2026-07-29 11:55:19.137 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:56:10.118 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 11:56:10.235 하드웨어 제어 성공
2026-07-29 11:56:10.246 DB 완료 갱신 (Handshake 종료)
2026-07-29 11:59:50.900 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 11:59:51.018 하드웨어 제어 성공
2026-07-29 11:59:51.042 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:02:01.748 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 12:02:01.851 하드웨어 제어 성공
2026-07-29 12:02:01.862 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:02:33.445 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 12:02:33.563 하드웨어 제어 성공
2026-07-29 12:02:33.575 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:03:22.531 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 12:03:22.634 하드웨어 제어 성공
2026-07-29 12:03:22.638 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:04:22.779 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 12:04:22.897 하드웨어 제어 성공
2026-07-29 12:04:22.902 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:06:06.970 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 12:06:07.086 하드웨어 제어 성공
2026-07-29 12:06:07.091 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:18:53.406 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 12:18:53.522 하드웨어 제어 성공
2026-07-29 12:18:53.525 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:19:12.832 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 12:19:12.941 하드웨어 제어 성공
2026-07-29 12:19:12.952 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:22:55.671 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 12:22:55.774 하드웨어 제어 성공
2026-07-29 12:22:55.777 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:24:45.066 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 12:24:45.184 하드웨어 제어 성공
2026-07-29 12:24:45.195 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:34:23.337 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 12:34:23.439 하드웨어 제어 성공
2026-07-29 12:34:23.451 DB 완료 갱신 (Handshake 종료)
2026-07-29 12:34:49.954 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 12:34:50.057 하드웨어 제어 성공
2026-07-29 12:34:50.072 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:02:55.785 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 13:02:55.888 하드웨어 제어 성공
2026-07-29 13:02:55.892 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:03:17.181 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 13:03:17.284 하드웨어 제어 성공
2026-07-29 13:03:17.296 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:04:17.551 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 13:04:17.655 하드웨어 제어 성공
2026-07-29 13:04:17.665 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:05:56.603 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 13:05:56.720 하드웨어 제어 성공
2026-07-29 13:05:56.726 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:19:17.159 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 13:19:17.262 하드웨어 제어 성공
2026-07-29 13:19:17.273 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:19:37.535 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 13:19:37.639 하드웨어 제어 성공
2026-07-29 13:19:37.651 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:30:27.698 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-29 13:30:27.817 하드웨어 제어 성공
2026-07-29 13:30:27.837 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:31:51.396 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 13:31:51.514 하드웨어 제어 성공
2026-07-29 13:31:51.526 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:32:53.822 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 13:32:53.924 하드웨어 제어 성공
2026-07-29 13:32:53.930 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:36:27.412 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 13:36:27.530 하드웨어 제어 성공
2026-07-29 13:36:27.541 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:56:51.656 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-29 13:56:51.774 하드웨어 제어 성공
2026-07-29 13:56:51.786 DB 완료 갱신 (Handshake 종료)
2026-07-29 13:57:18.252 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 13:57:18.369 하드웨어 제어 성공
2026-07-29 13:57:18.383 DB 완료 갱신 (Handshake 종료)
2026-07-29 14:04:15.244 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 14:04:15.347 하드웨어 제어 성공
2026-07-29 14:04:15.358 DB 완료 갱신 (Handshake 종료)
2026-07-29 14:05:37.086 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 14:05:37.204 하드웨어 제어 성공
2026-07-29 14:05:37.215 DB 완료 갱신 (Handshake 종료)
2026-07-29 14:34:15.889 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 14:34:15.994 하드웨어 제어 성공
2026-07-29 14:34:15.999 DB 완료 갱신 (Handshake 종료)
2026-07-29 14:36:01.207 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 14:36:01.311 하드웨어 제어 성공
2026-07-29 14:36:01.334 DB 완료 갱신 (Handshake 종료)
2026-07-29 15:04:21.483 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 15:04:21.600 하드웨어 제어 성공
2026-07-29 15:04:21.612 DB 완료 갱신 (Handshake 종료)
2026-07-29 15:05:43.168 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 15:05:43.285 하드웨어 제어 성공
2026-07-29 15:05:43.297 DB 완료 갱신 (Handshake 종료)
2026-07-29 15:10:06.785 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-07-29 15:10:06.888 하드웨어 제어 성공
2026-07-29 15:10:06.902 DB 완료 갱신 (Handshake 종료)
2026-07-29 15:10:33.345 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 15:10:33.447 하드웨어 제어 성공
2026-07-29 15:10:33.459 DB 완료 갱신 (Handshake 종료)
2026-07-29 15:18:53.184 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 15:18:53.288 하드웨어 제어 성공
2026-07-29 15:18:53.291 DB 완료 갱신 (Handshake 종료)
2026-07-29 15:19:14.607 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 15:19:14.711 하드웨어 제어 성공
2026-07-29 15:19:14.716 DB 완료 갱신 (Handshake 종료)
2026-07-29 15:34:14.154 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 15:34:14.257 하드웨어 제어 성공
2026-07-29 15:34:14.262 DB 완료 갱신 (Handshake 종료)
2026-07-29 15:35:59.370 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 15:35:59.488 하드웨어 제어 성공
2026-07-29 15:35:59.499 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:02:37.914 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 16:02:38.029 하드웨어 제어 성공
2026-07-29 16:02:38.034 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:03:03.467 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 16:03:03.584 하드웨어 제어 성공
2026-07-29 16:03:03.597 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:04:27.300 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 16:04:27.404 하드웨어 제어 성공
2026-07-29 16:04:27.414 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:04:49.742 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 16:04:49.858 하드웨어 제어 성공
2026-07-29 16:04:49.869 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:18:59.812 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 16:18:59.917 하드웨어 제어 성공
2026-07-29 16:18:59.921 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:19:24.298 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 16:19:24.414 하드웨어 제어 성공
2026-07-29 16:19:24.419 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:32:39.210 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 16:32:39.325 하드웨어 제어 성공
2026-07-29 16:32:39.338 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:33:03.706 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 16:33:03.822 하드웨어 제어 성공
2026-07-29 16:33:03.834 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:34:26.350 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 16:34:26.468 하드웨어 제어 성공
2026-07-29 16:34:26.475 DB 완료 갱신 (Handshake 종료)
2026-07-29 16:36:07.563 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 16:36:07.666 하드웨어 제어 성공
2026-07-29 16:36:07.678 DB 완료 갱신 (Handshake 종료)
2026-07-29 17:02:41.845 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 17:02:41.959 하드웨어 제어 성공
2026-07-29 17:02:41.972 DB 완료 갱신 (Handshake 종료)
2026-07-29 17:03:07.389 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 17:03:07.505 하드웨어 제어 성공
2026-07-29 17:03:07.516 DB 완료 갱신 (Handshake 종료)
2026-07-29 17:04:03.531 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 17:04:03.648 하드웨어 제어 성공
2026-07-29 17:04:03.659 DB 완료 갱신 (Handshake 종료)
2026-07-29 17:05:48.760 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 17:05:48.876 하드웨어 제어 성공
2026-07-29 17:05:48.887 DB 완료 갱신 (Handshake 종료)
2026-07-29 17:34:05.801 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 17:34:05.917 하드웨어 제어 성공
2026-07-29 17:34:05.923 DB 완료 갱신 (Handshake 종료)
2026-07-29 17:35:51.893 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 17:35:52.008 하드웨어 제어 성공
2026-07-29 17:35:52.020 DB 완료 갱신 (Handshake 종료)
2026-07-29 18:04:09.904 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 18:04:10.023 하드웨어 제어 성공
2026-07-29 18:04:10.035 DB 완료 갱신 (Handshake 종료)
2026-07-29 18:05:31.599 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 18:05:31.702 하드웨어 제어 성공
2026-07-29 18:05:31.712 DB 완료 갱신 (Handshake 종료)
2026-07-29 18:34:17.196 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 18:34:17.315 하드웨어 제어 성공
2026-07-29 18:34:17.320 DB 완료 갱신 (Handshake 종료)
2026-07-29 18:36:04.428 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 18:36:04.545 하드웨어 제어 성공
2026-07-29 18:36:04.556 DB 완료 갱신 (Handshake 종료)
2026-07-29 19:02:36.455 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 19:02:36.560 하드웨어 제어 성공
2026-07-29 19:02:36.565 DB 완료 갱신 (Handshake 종료)
2026-07-29 19:03:03.021 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 19:03:03.138 하드웨어 제어 성공
2026-07-29 19:03:03.142 DB 완료 갱신 (Handshake 종료)
2026-07-29 19:04:25.809 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 19:04:25.928 하드웨어 제어 성공
2026-07-29 19:04:25.934 DB 완료 갱신 (Handshake 종료)
2026-07-29 19:05:20.183 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 19:05:20.288 하드웨어 제어 성공
2026-07-29 19:05:20.299 DB 완료 갱신 (Handshake 종료)
2026-07-29 19:34:03.735 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 19:34:03.852 하드웨어 제어 성공
2026-07-29 19:34:03.857 DB 완료 갱신 (Handshake 종료)
2026-07-29 19:35:47.996 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 19:35:48.110 하드웨어 제어 성공
2026-07-29 19:35:48.123 DB 완료 갱신 (Handshake 종료)
2026-07-29 20:04:14.893 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-07-29 20:04:14.999 하드웨어 제어 성공
2026-07-29 20:04:15.012 DB 완료 갱신 (Handshake 종료)
2026-07-29 20:05:35.561 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-07-29 20:05:35.679 하드웨어 제어 성공
2026-07-29 20:05:35.692 DB 완료 갱신 (Handshake 종료)
2026-07-29 20:07:48.441 DB 폴링 에러: [FireDAC][Phys][MySQL] Lost connection to MySQL server during query

View File

@ -0,0 +1 @@
2026-08-03 11:25:28.391 === LEDAgent 종료 ===

View File

@ -0,0 +1,320 @@
2026-08-05 10:01:15.122 === LEDAgent 시작 ===
2026-08-05 10:01:15.258 DB 연결 성공 (qst-s.iptime.org)
2026-08-05 10:01:20.397 하드웨어 동기화 완료 (Sensor:102, R:0 Y:0 G:0)
2026-08-05 10:05:06.372 === LEDAgent 시작 ===
2026-08-05 10:05:06.409 DB 연결 성공 (qst-s.iptime.org)
2026-08-05 10:05:07.417 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 10:05:07.526 하드웨어 제어 성공
2026-08-05 10:05:07.539 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:06:07.718 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 10:06:07.835 하드웨어 제어 성공
2026-08-05 10:06:07.837 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:06:40.371 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 10:06:40.476 하드웨어 제어 성공
2026-08-05 10:06:40.479 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:08:29.656 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 10:08:29.760 하드웨어 제어 성공
2026-08-05 10:08:29.772 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:08:48.070 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 10:08:48.175 하드웨어 제어 성공
2026-08-05 10:08:48.186 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:09:13.566 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 10:09:13.670 하드웨어 제어 성공
2026-08-05 10:09:13.681 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:11:38.659 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 10:11:38.764 하드웨어 제어 성공
2026-08-05 10:11:38.775 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:16:28.710 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 10:16:28.813 하드웨어 제어 성공
2026-08-05 10:16:28.816 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:17:05.482 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 10:17:05.598 하드웨어 제어 성공
2026-08-05 10:17:05.609 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:19:48.914 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 10:19:49.018 하드웨어 제어 성공
2026-08-05 10:19:49.027 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:27:07.013 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 10:27:07.118 하드웨어 제어 성공
2026-08-05 10:27:07.128 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:27:25.436 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 10:27:25.539 하드웨어 제어 성공
2026-08-05 10:27:25.543 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:31:29.455 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 10:31:29.558 하드웨어 제어 성공
2026-08-05 10:31:29.570 DB 완료 갱신 (Handshake 종료)
2026-08-05 10:32:24.647 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 10:32:24.752 하드웨어 제어 성공
2026-08-05 10:32:24.782 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:01:13.991 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 11:01:14.096 하드웨어 제어 성공
2026-08-05 11:01:14.111 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:01:39.485 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 11:01:39.589 하드웨어 제어 성공
2026-08-05 11:01:39.592 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:02:37.739 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 11:02:37.844 하드웨어 제어 성공
2026-08-05 11:02:37.847 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:03:02.238 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 11:03:02.341 하드웨어 제어 성공
2026-08-05 11:03:02.352 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:04:27.019 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 11:04:27.124 하드웨어 제어 성공
2026-08-05 11:04:27.135 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:05:41.535 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 11:05:41.639 하드웨어 제어 성공
2026-08-05 11:05:41.643 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:19:34.087 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 11:19:34.205 하드웨어 제어 성공
2026-08-05 11:19:34.217 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:19:54.516 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 11:19:54.621 하드웨어 제어 성공
2026-08-05 11:19:54.633 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:30:10.280 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 11:30:10.397 하드웨어 제어 성공
2026-08-05 11:30:10.405 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:30:37.037 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 11:30:37.141 하드웨어 제어 성공
2026-08-05 11:30:37.143 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:31:12.787 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 11:31:12.890 하드웨어 제어 성공
2026-08-05 11:31:12.897 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:31:37.272 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 11:31:37.375 하드웨어 제어 성공
2026-08-05 11:31:37.387 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:32:30.297 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 11:32:30.402 하드웨어 제어 성공
2026-08-05 11:32:30.410 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:33:16.274 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 11:33:16.393 하드웨어 제어 성공
2026-08-05 11:33:16.402 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:57:54.567 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 11:57:54.684 하드웨어 제어 성공
2026-08-05 11:57:54.696 DB 완료 갱신 (Handshake 종료)
2026-08-05 11:59:07.100 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 11:59:07.203 하드웨어 제어 성공
2026-08-05 11:59:07.217 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:01:20.973 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 12:01:21.077 하드웨어 제어 성공
2026-08-05 12:01:21.082 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:02:12.015 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 12:02:12.118 하드웨어 제어 성공
2026-08-05 12:02:12.130 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:02:40.591 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 12:02:40.696 하드웨어 제어 성공
2026-08-05 12:02:40.708 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:03:03.035 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 12:03:03.139 하드웨어 제어 성공
2026-08-05 12:03:03.142 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:08:14.666 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 12:08:14.770 하드웨어 제어 성공
2026-08-05 12:08:14.780 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:09:56.781 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 12:09:56.899 하드웨어 제어 성공
2026-08-05 12:09:56.910 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:19:26.830 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 12:19:26.933 하드웨어 제어 성공
2026-08-05 12:19:26.937 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:19:44.234 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 12:19:44.351 하드웨어 제어 성공
2026-08-05 12:19:44.365 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:31:30.182 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 12:31:30.288 하드웨어 제어 성공
2026-08-05 12:31:30.299 DB 완료 갱신 (Handshake 종료)
2026-08-05 12:32:18.194 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 12:32:18.312 하드웨어 제어 성공
2026-08-05 12:32:18.323 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:01:14.039 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 13:01:14.144 하드웨어 제어 성공
2026-08-05 13:01:14.156 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:02:01.031 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 13:02:01.136 하드웨어 제어 성공
2026-08-05 13:02:01.143 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:02:31.709 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 13:02:31.825 하드웨어 제어 성공
2026-08-05 13:02:31.837 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:02:56.226 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 13:02:56.331 하드웨어 제어 성공
2026-08-05 13:02:56.341 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:04:15.878 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 13:04:15.983 하드웨어 제어 성공
2026-08-05 13:04:15.994 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:05:29.405 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 13:05:29.521 하드웨어 제어 성공
2026-08-05 13:05:29.532 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:09:41.625 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 13:09:41.743 하드웨어 제어 성공
2026-08-05 13:09:41.746 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:10:08.148 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 13:10:08.250 하드웨어 제어 성공
2026-08-05 13:10:08.264 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:26:05.211 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 13:26:05.313 하드웨어 제어 성공
2026-08-05 13:26:05.317 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:28:40.461 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 13:28:40.567 하드웨어 제어 성공
2026-08-05 13:28:40.571 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:32:59.728 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 13:32:59.845 하드웨어 제어 성공
2026-08-05 13:32:59.856 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:37:53.728 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 13:37:53.831 하드웨어 제어 성공
2026-08-05 13:37:53.843 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:38:16.239 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 13:38:16.353 하드웨어 제어 성공
2026-08-05 13:38:16.373 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:51:33.106 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 13:51:33.208 하드웨어 제어 성공
2026-08-05 13:51:33.220 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:51:57.610 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 13:51:57.726 하드웨어 제어 성공
2026-08-05 13:51:57.739 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:52:49.706 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 13:52:49.822 하드웨어 제어 성공
2026-08-05 13:52:49.837 DB 완료 갱신 (Handshake 종료)
2026-08-05 13:53:15.199 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 13:53:15.302 하드웨어 제어 성공
2026-08-05 13:53:15.315 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:01:10.385 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 14:01:10.489 하드웨어 제어 성공
2026-08-05 14:01:10.494 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:01:35.859 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:01:35.975 하드웨어 제어 성공
2026-08-05 14:01:35.987 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:02:28.977 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 14:02:29.080 하드웨어 제어 성공
2026-08-05 14:02:29.092 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:02:53.487 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:02:53.604 하드웨어 제어 성공
2026-08-05 14:02:53.616 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:04:37.616 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 14:04:37.720 하드웨어 제어 성공
2026-08-05 14:04:37.724 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:05:27.662 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:05:27.779 하드웨어 제어 성공
2026-08-05 14:05:27.786 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:31:33.171 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 14:31:33.276 하드웨어 제어 성공
2026-08-05 14:31:33.282 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:31:59.716 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:31:59.833 하드웨어 제어 성공
2026-08-05 14:31:59.843 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:32:30.325 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 14:32:30.441 하드웨어 제어 성공
2026-08-05 14:32:30.461 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:32:54.834 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:32:54.951 하드웨어 제어 성공
2026-08-05 14:32:54.961 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:33:41.814 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 14:33:41.932 하드웨어 제어 성공
2026-08-05 14:33:41.942 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:34:17.604 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 14:34:17.707 하드웨어 제어 성공
2026-08-05 14:34:17.710 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:35:10.674 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:35:10.777 하드웨어 제어 성공
2026-08-05 14:35:10.789 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:40:03.861 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 14:40:03.966 하드웨어 제어 성공
2026-08-05 14:40:03.979 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:40:30.369 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:40:30.485 하드웨어 제어 성공
2026-08-05 14:40:30.496 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:45:59.229 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 14:45:59.343 하드웨어 제어 성공
2026-08-05 14:45:59.348 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:46:26.758 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:46:26.861 하드웨어 제어 성공
2026-08-05 14:46:26.871 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:49:39.646 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 14:49:39.762 하드웨어 제어 성공
2026-08-05 14:49:39.770 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:51:52.421 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 14:51:52.532 하드웨어 제어 성공
2026-08-05 14:51:52.536 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:54:34.858 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:54:34.974 하드웨어 제어 성공
2026-08-05 14:54:34.984 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:55:04.472 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 14:55:04.589 하드웨어 제어 성공
2026-08-05 14:55:04.604 DB 완료 갱신 (Handshake 종료)
2026-08-05 14:55:56.532 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 14:55:56.650 하드웨어 제어 성공
2026-08-05 14:55:56.654 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:02:25.699 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 15:02:25.816 하드웨어 제어 성공
2026-08-05 15:02:25.826 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:02:51.200 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 15:02:51.304 하드웨어 제어 성공
2026-08-05 15:02:51.308 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:04:42.461 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 15:04:42.576 하드웨어 제어 성공
2026-08-05 15:04:42.586 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:05:06.964 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 15:05:07.083 하드웨어 제어 성공
2026-08-05 15:05:07.095 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:11:49.290 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 15:11:49.393 하드웨어 제어 성공
2026-08-05 15:11:49.405 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:12:15.831 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 15:12:15.947 하드웨어 제어 성공
2026-08-05 15:12:15.958 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:16:18.866 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 15:16:18.980 하드웨어 제어 성공
2026-08-05 15:16:18.992 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:16:44.361 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 15:16:44.466 하드웨어 제어 성공
2026-08-05 15:16:44.477 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:19:10.395 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 15:19:10.498 하드웨어 제어 성공
2026-08-05 15:19:10.501 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:20:00.445 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 15:20:00.561 하드웨어 제어 성공
2026-08-05 15:20:00.564 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:24:59.733 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-05 15:24:59.849 하드웨어 제어 성공
2026-08-05 15:24:59.861 DB 완료 갱신 (Handshake 종료)
2026-08-05 15:25:25.230 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 15:25:25.334 하드웨어 제어 성공
2026-08-05 15:25:25.344 DB 완료 갱신 (Handshake 종료)
2026-08-05 16:23:46.779 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 16:23:46.882 하드웨어 제어 성공
2026-08-05 16:23:46.895 DB 완료 갱신 (Handshake 종료)
2026-08-05 16:24:04.109 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 16:24:04.226 하드웨어 제어 성공
2026-08-05 16:24:04.237 DB 완료 갱신 (Handshake 종료)
2026-08-05 16:31:34.481 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 16:31:34.597 하드웨어 제어 성공
2026-08-05 16:31:34.608 DB 완료 갱신 (Handshake 종료)
2026-08-05 16:32:00.026 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 16:32:00.134 하드웨어 제어 성공
2026-08-05 16:32:00.139 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:01:30.963 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 17:01:31.080 하드웨어 제어 성공
2026-08-05 17:01:31.084 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:01:55.484 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 17:01:55.587 하드웨어 제어 성공
2026-08-05 17:01:55.598 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:19:17.269 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 17:19:17.386 하드웨어 제어 성공
2026-08-05 17:19:17.395 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:19:38.710 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 17:19:38.828 하드웨어 제어 성공
2026-08-05 17:19:38.838 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:31:34.536 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 17:31:34.653 하드웨어 제어 성공
2026-08-05 17:31:34.664 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:32:02.099 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 17:32:02.203 하드웨어 제어 성공
2026-08-05 17:32:02.215 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:32:29.636 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 17:32:29.739 하드웨어 제어 성공
2026-08-05 17:32:29.966 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:32:57.290 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 17:32:57.403 하드웨어 제어 성공
2026-08-05 17:32:57.416 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:34:48.635 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-05 17:34:48.738 하드웨어 제어 성공
2026-08-05 17:34:48.751 DB 완료 갱신 (Handshake 종료)
2026-08-05 17:35:33.490 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-05 17:35:33.607 하드웨어 제어 성공
2026-08-05 17:35:33.618 DB 완료 갱신 (Handshake 종료)

View File

@ -0,0 +1 @@
2026-08-10 14:58:47.189 === LEDAgent 종료 ===

View File

@ -0,0 +1,147 @@
2026-08-18 10:19:53.459 === LEDAgent 시작 ===
2026-08-18 10:19:53.597 DB 연결 성공 (qst-s.iptime.org)
2026-08-18 10:20:27.284 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 10:20:27.404 하드웨어 제어 성공
2026-08-18 10:20:27.415 DB 완료 갱신 (Handshake 종료)
2026-08-18 10:20:39.549 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 10:20:39.652 하드웨어 제어 성공
2026-08-18 10:20:39.667 DB 완료 갱신 (Handshake 종료)
2026-08-18 10:20:53.841 하드웨어 동기화 완료 (Sensor:102, R:1 Y:0 G:1)
2026-08-18 10:21:00.968 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 10:21:01.085 하드웨어 제어 성공
2026-08-18 10:21:01.096 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:04:23.541 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 11:04:23.657 하드웨어 제어 성공
2026-08-18 11:04:23.684 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:04:48.041 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 11:04:48.144 하드웨어 제어 성공
2026-08-18 11:04:48.155 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:38:18.391 하드웨어 동기화 완료 (Sensor:102, R:1 Y:0 G:1)
2026-08-18 11:38:24.517 하드웨어 동기화 완료 (Sensor:102, R:0 Y:0 G:0)
2026-08-18 11:38:38.766 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 11:38:38.868 하드웨어 제어 성공
2026-08-18 11:38:38.873 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:41:01.704 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:1)
2026-08-18 11:41:01.820 하드웨어 제어 성공
2026-08-18 11:41:01.835 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:41:17.050 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-08-18 11:41:17.152 하드웨어 제어 성공
2026-08-18 11:41:17.163 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:41:27.247 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-08-18 11:41:27.351 하드웨어 제어 성공
2026-08-18 11:41:27.363 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:41:41.514 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 11:41:41.617 하드웨어 제어 성공
2026-08-18 11:41:41.627 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:42:46.716 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:1 R:1)
2026-08-18 11:42:46.819 하드웨어 제어 성공
2026-08-18 11:42:46.822 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:42:54.968 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:0)
2026-08-18 11:42:55.072 하드웨어 제어 성공
2026-08-18 11:42:55.082 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:43:01.089 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 11:43:01.207 하드웨어 제어 성공
2026-08-18 11:43:01.211 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:44:27.922 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 11:44:28.025 하드웨어 제어 성공
2026-08-18 11:44:28.036 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:44:53.420 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 11:44:53.536 하드웨어 제어 성공
2026-08-18 11:44:53.539 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:45:46.558 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 11:45:46.675 하드웨어 제어 성공
2026-08-18 11:45:46.679 DB 완료 갱신 (Handshake 종료)
2026-08-18 11:46:35.569 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 11:46:35.672 하드웨어 제어 성공
2026-08-18 11:46:35.682 DB 완료 갱신 (Handshake 종료)
2026-08-18 12:11:30.644 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 12:11:30.761 하드웨어 제어 성공
2026-08-18 12:11:30.771 DB 완료 갱신 (Handshake 종료)
2026-08-18 12:12:47.208 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 12:12:47.311 하드웨어 제어 성공
2026-08-18 12:12:47.324 DB 완료 갱신 (Handshake 종료)
2026-08-18 12:13:14.814 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 12:13:14.930 하드웨어 제어 성공
2026-08-18 12:13:14.939 DB 완료 갱신 (Handshake 종료)
2026-08-18 12:13:35.228 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 12:13:35.347 하드웨어 제어 성공
2026-08-18 12:13:35.358 DB 완료 갱신 (Handshake 종료)
2026-08-18 12:16:54.557 DB 폴링 에러: [FireDAC][Phys][MySQL] Lost connection to MySQL server during query
2026-08-18 12:50:03.903 === LEDAgent 종료 ===
2026-08-18 13:12:13.965 === LEDAgent 시작 ===
2026-08-18 13:12:14.116 DB 연결 성공 (qst-s.iptime.org)
2026-08-18 13:12:15.120 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 13:12:15.239 하드웨어 제어 성공
2026-08-18 13:12:15.249 DB 완료 갱신 (Handshake 종료)
2026-08-18 13:12:44.812 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 13:12:44.916 하드웨어 제어 성공
2026-08-18 13:12:44.930 DB 완료 갱신 (Handshake 종료)
2026-08-18 15:19:55.155 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 15:19:55.260 하드웨어 제어 성공
2026-08-18 15:19:55.271 DB 완료 갱신 (Handshake 종료)
2026-08-18 15:20:10.415 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 15:20:10.519 하드웨어 제어 성공
2026-08-18 15:20:10.522 DB 완료 갱신 (Handshake 종료)
2026-08-18 16:21:51.034 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 16:21:51.150 하드웨어 제어 성공
2026-08-18 16:21:51.161 DB 완료 갱신 (Handshake 종료)
2026-08-18 16:22:28.742 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-18 16:22:28.859 하드웨어 제어 성공
2026-08-18 16:22:28.868 DB 완료 갱신 (Handshake 종료)
2026-08-18 16:23:20.879 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 16:23:20.981 하드웨어 제어 성공
2026-08-18 16:23:20.992 DB 완료 갱신 (Handshake 종료)
2026-08-18 17:58:06.825 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 17:58:06.944 하드웨어 제어 성공
2026-08-18 17:58:06.956 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:00:39.075 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 18:00:39.188 하드웨어 제어 성공
2026-08-18 18:00:39.200 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:09:53.658 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 18:09:53.762 하드웨어 제어 성공
2026-08-18 18:09:53.773 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:10:45.724 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 18:10:45.829 하드웨어 제어 성공
2026-08-18 18:10:45.832 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:30:23.321 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 18:30:23.439 하드웨어 제어 성공
2026-08-18 18:30:23.449 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:30:44.776 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 18:30:44.893 하드웨어 제어 성공
2026-08-18 18:30:44.905 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:39:32.882 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 18:39:32.999 하드웨어 제어 성공
2026-08-18 18:39:33.010 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:39:54.565 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 18:39:54.667 하드웨어 제어 성공
2026-08-18 18:39:54.679 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:47:50.553 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 18:47:50.659 하드웨어 제어 성공
2026-08-18 18:47:50.669 DB 완료 갱신 (Handshake 종료)
2026-08-18 18:49:29.633 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 18:49:29.740 하드웨어 제어 성공
2026-08-18 18:49:29.747 DB 완료 갱신 (Handshake 종료)
2026-08-18 19:03:06.676 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 19:03:06.793 하드웨어 제어 성공
2026-08-18 19:03:06.804 DB 완료 갱신 (Handshake 종료)
2026-08-18 19:03:53.709 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 19:03:53.814 하드웨어 제어 성공
2026-08-18 19:03:53.818 DB 완료 갱신 (Handshake 종료)
2026-08-18 21:20:04.234 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 21:20:04.350 하드웨어 제어 성공
2026-08-18 21:20:04.363 DB 완료 갱신 (Handshake 종료)
2026-08-18 21:20:25.610 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 21:20:25.723 하드웨어 제어 성공
2026-08-18 21:20:25.733 DB 완료 갱신 (Handshake 종료)
2026-08-18 21:34:54.273 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 21:34:54.378 하드웨어 제어 성공
2026-08-18 21:34:54.389 DB 완료 갱신 (Handshake 종료)
2026-08-18 21:35:16.711 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 21:35:16.815 하드웨어 제어 성공
2026-08-18 21:35:16.827 DB 완료 갱신 (Handshake 종료)
2026-08-18 23:12:09.822 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-18 23:12:09.926 하드웨어 제어 성공
2026-08-18 23:12:09.937 DB 완료 갱신 (Handshake 종료)
2026-08-18 23:12:32.341 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-18 23:12:32.446 하드웨어 제어 성공
2026-08-18 23:12:32.455 DB 완료 갱신 (Handshake 종료)

View File

@ -0,0 +1,390 @@
2026-08-19 00:40:15.823 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 00:40:15.928 하드웨어 제어 성공
2026-08-19 00:40:15.940 DB 완료 갱신 (Handshake 종료)
2026-08-19 00:41:55.962 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 00:41:56.065 하드웨어 제어 성공
2026-08-19 00:41:56.076 DB 완료 갱신 (Handshake 종료)
2026-08-19 00:49:25.427 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 00:49:25.530 하드웨어 제어 성공
2026-08-19 00:49:25.534 DB 완료 갱신 (Handshake 종료)
2026-08-19 00:49:49.937 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 00:49:50.053 하드웨어 제어 성공
2026-08-19 00:49:50.063 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:20:03.990 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 01:20:04.095 하드웨어 제어 성공
2026-08-19 01:20:04.105 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:20:24.422 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 01:20:24.538 하드웨어 제어 성공
2026-08-19 01:20:24.541 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:46:14.839 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 01:46:14.955 하드웨어 제어 성공
2026-08-19 01:46:14.966 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:47:02.911 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 01:47:03.028 하드웨어 제어 성공
2026-08-19 01:47:03.039 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:47:59.112 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 01:47:59.230 하드웨어 제어 성공
2026-08-19 01:47:59.237 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:48:20.541 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 01:48:20.646 하드웨어 제어 성공
2026-08-19 01:48:20.657 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:50:35.604 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 01:50:35.708 하드웨어 제어 성공
2026-08-19 01:50:35.719 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:51:00.154 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 01:51:00.259 하드웨어 제어 성공
2026-08-19 01:51:00.262 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:51:29.790 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 01:51:29.893 하드웨어 제어 성공
2026-08-19 01:51:29.897 DB 완료 갱신 (Handshake 종료)
2026-08-19 01:52:37.232 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 01:52:37.336 하드웨어 제어 성공
2026-08-19 01:52:37.347 DB 완료 갱신 (Handshake 종료)
2026-08-19 02:11:32.204 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 02:11:32.308 하드웨어 제어 성공
2026-08-19 02:11:32.320 DB 완료 갱신 (Handshake 종료)
2026-08-19 02:11:52.609 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 02:11:52.712 하드웨어 제어 성공
2026-08-19 02:11:52.724 DB 완료 갱신 (Handshake 종료)
2026-08-19 03:57:33.211 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 03:57:33.314 하드웨어 제어 성공
2026-08-19 03:57:33.326 DB 완료 갱신 (Handshake 종료)
2026-08-19 03:57:50.580 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 03:57:50.683 하드웨어 제어 성공
2026-08-19 03:57:50.693 DB 완료 갱신 (Handshake 종료)
2026-08-19 05:20:00.158 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 05:20:00.262 하드웨어 제어 성공
2026-08-19 05:20:00.275 DB 완료 갱신 (Handshake 종료)
2026-08-19 05:20:21.632 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 05:20:21.737 하드웨어 제어 성공
2026-08-19 05:20:21.749 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:31:27.650 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 08:31:27.753 하드웨어 제어 성공
2026-08-19 08:31:27.757 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:33:59.758 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 08:33:59.874 하드웨어 제어 성공
2026-08-19 08:33:59.887 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:34:31.386 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 08:34:31.490 하드웨어 제어 성공
2026-08-19 08:34:31.502 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:36:15.465 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 08:36:15.571 하드웨어 제어 성공
2026-08-19 08:36:15.581 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:38:00.681 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 08:38:00.784 하드웨어 제어 성공
2026-08-19 08:38:00.795 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:38:23.186 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 08:38:23.302 하드웨어 제어 성공
2026-08-19 08:38:23.314 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:39:19.338 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 08:39:19.455 하드웨어 제어 성공
2026-08-19 08:39:19.465 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:40:59.446 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 08:40:59.551 하드웨어 제어 성공
2026-08-19 08:40:59.562 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:42:22.208 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 08:42:22.312 하드웨어 제어 성공
2026-08-19 08:42:22.323 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:44:02.248 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 08:44:02.352 하드웨어 제어 성공
2026-08-19 08:44:02.355 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:44:32.869 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 08:44:32.975 하드웨어 제어 성공
2026-08-19 08:44:32.979 DB 완료 갱신 (Handshake 종료)
2026-08-19 08:47:31.056 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 08:47:31.160 하드웨어 제어 성공
2026-08-19 08:47:31.171 DB 완료 갱신 (Handshake 종료)
2026-08-19 09:03:47.170 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 09:03:47.285 하드웨어 제어 성공
2026-08-19 09:03:47.296 DB 완료 갱신 (Handshake 종료)
2026-08-19 09:04:13.744 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 09:04:13.848 하드웨어 제어 성공
2026-08-19 09:04:13.851 DB 완료 갱신 (Handshake 종료)
2026-08-19 09:07:36.083 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 09:07:36.187 하드웨어 제어 성공
2026-08-19 09:07:36.197 DB 완료 갱신 (Handshake 종료)
2026-08-19 09:08:00.547 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 09:08:00.664 하드웨어 제어 성공
2026-08-19 09:08:00.674 DB 완료 갱신 (Handshake 종료)
2026-08-19 09:08:26.028 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 09:08:26.131 하드웨어 제어 성공
2026-08-19 09:08:26.141 DB 완료 갱신 (Handshake 종료)
2026-08-19 09:08:51.549 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 09:08:51.658 하드웨어 제어 성공
2026-08-19 09:08:51.669 DB 완료 갱신 (Handshake 종료)
2026-08-19 09:19:58.413 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 09:19:58.531 하드웨어 제어 성공
2026-08-19 09:19:58.541 DB 완료 갱신 (Handshake 종료)
2026-08-19 09:20:17.790 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 09:20:17.894 하드웨어 제어 성공
2026-08-19 09:20:17.897 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:25:31.964 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 10:25:32.069 하드웨어 제어 성공
2026-08-19 10:25:32.089 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:26:21.956 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 10:26:22.074 하드웨어 제어 성공
2026-08-19 10:26:22.084 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:29:45.055 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 10:29:45.158 하드웨어 제어 성공
2026-08-19 10:29:45.169 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:30:11.628 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 10:30:11.732 하드웨어 제어 성공
2026-08-19 10:30:11.743 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:31:26.070 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 10:31:26.172 하드웨어 제어 성공
2026-08-19 10:31:26.188 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:31:51.589 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 10:31:51.707 하드웨어 제어 성공
2026-08-19 10:31:51.711 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:42:24.565 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 10:42:24.668 하드웨어 제어 성공
2026-08-19 10:42:24.671 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:42:51.120 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 10:42:51.224 하드웨어 제어 성공
2026-08-19 10:42:51.238 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:43:41.113 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 10:43:41.230 하드웨어 제어 성공
2026-08-19 10:43:41.240 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:44:06.643 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 10:44:06.748 하드웨어 제어 성공
2026-08-19 10:44:06.757 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:44:31.118 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 10:44:31.234 하드웨어 제어 성공
2026-08-19 10:44:31.237 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:44:56.642 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 10:44:56.746 하드웨어 제어 성공
2026-08-19 10:44:56.757 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:46:38.748 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 10:46:38.852 하드웨어 제어 성공
2026-08-19 10:46:38.863 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:47:54.272 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 10:47:54.389 하드웨어 제어 성공
2026-08-19 10:47:54.400 DB 완료 갱신 (Handshake 종료)
2026-08-19 10:48:19.799 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 10:48:19.915 하드웨어 제어 성공
2026-08-19 10:48:19.925 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:04:05.813 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 11:04:05.916 하드웨어 제어 성공
2026-08-19 11:04:05.919 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:04:29.259 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 11:04:29.364 하드웨어 제어 성공
2026-08-19 11:04:29.376 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:04:47.620 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 11:04:47.723 하드웨어 제어 성공
2026-08-19 11:04:47.730 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:05:12.086 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 11:05:12.189 하드웨어 제어 성공
2026-08-19 11:05:12.199 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:06:37.762 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 11:06:37.865 하드웨어 제어 성공
2026-08-19 11:06:37.873 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:07:03.246 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 11:07:03.364 하드웨어 제어 성공
2026-08-19 11:07:03.367 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:11:16.484 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 11:11:16.601 하드웨어 제어 성공
2026-08-19 11:11:16.620 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:11:39.967 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 11:11:40.085 하드웨어 제어 성공
2026-08-19 11:11:40.096 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:45:49.730 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 11:45:49.833 하드웨어 제어 성공
2026-08-19 11:45:49.843 DB 완료 갱신 (Handshake 종료)
2026-08-19 11:46:38.688 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 11:46:38.806 하드웨어 제어 성공
2026-08-19 11:46:38.816 DB 완료 갱신 (Handshake 종료)
2026-08-19 12:11:06.308 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 12:11:06.425 하드웨어 제어 성공
2026-08-19 12:11:06.438 DB 완료 갱신 (Handshake 종료)
2026-08-19 12:13:07.826 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 12:13:07.929 하드웨어 제어 성공
2026-08-19 12:13:07.932 DB 완료 갱신 (Handshake 종료)
2026-08-19 12:21:38.466 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 12:21:38.570 하드웨어 제어 성공
2026-08-19 12:21:38.576 DB 완료 갱신 (Handshake 종료)
2026-08-19 12:22:03.067 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 12:22:03.183 하드웨어 제어 성공
2026-08-19 12:22:03.186 DB 완료 갱신 (Handshake 종료)
2026-08-19 12:22:29.667 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 12:22:29.784 하드웨어 제어 성공
2026-08-19 12:22:29.795 DB 완료 갱신 (Handshake 종료)
2026-08-19 12:23:44.179 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 12:23:44.297 하드웨어 제어 성공
2026-08-19 12:23:44.309 DB 완료 갱신 (Handshake 종료)
2026-08-19 12:52:14.714 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 12:52:14.831 하드웨어 제어 성공
2026-08-19 12:52:14.834 DB 완료 갱신 (Handshake 종료)
2026-08-19 12:52:40.259 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 12:52:40.363 하드웨어 제어 성공
2026-08-19 12:52:40.374 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:00:41.344 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:00:41.458 하드웨어 제어 성공
2026-08-19 13:00:41.481 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:01:05.894 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:01:05.998 하드웨어 제어 성공
2026-08-19 13:01:06.007 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:04:53.759 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:04:53.863 하드웨어 제어 성공
2026-08-19 13:04:53.867 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:05:19.259 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:05:19.364 하드웨어 제어 성공
2026-08-19 13:05:19.374 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:07:01.421 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:07:01.525 하드웨어 제어 성공
2026-08-19 13:07:01.535 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:07:25.907 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:07:26.012 하드웨어 제어 성공
2026-08-19 13:07:26.024 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:13:20.139 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:13:20.257 하드웨어 제어 성공
2026-08-19 13:13:20.273 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:13:45.923 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:13:46.026 하드웨어 제어 성공
2026-08-19 13:13:46.029 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:21:46.884 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:21:46.988 하드웨어 제어 성공
2026-08-19 13:21:46.995 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:22:12.331 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:22:12.436 하드웨어 제어 성공
2026-08-19 13:22:12.446 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:26:50.635 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:26:50.738 하드웨어 제어 성공
2026-08-19 13:26:50.741 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:27:40.657 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:27:40.774 하드웨어 제어 성공
2026-08-19 13:27:40.785 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:30:12.827 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:30:12.930 하드웨어 제어 성공
2026-08-19 13:30:12.942 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:30:38.336 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:30:38.440 하드웨어 제어 성공
2026-08-19 13:30:38.451 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:31:03.827 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:31:03.931 하드웨어 제어 성공
2026-08-19 13:31:03.941 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:31:53.864 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:31:53.980 하드웨어 제어 성공
2026-08-19 13:31:53.991 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:32:19.294 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 13:32:19.398 하드웨어 제어 성공
2026-08-19 13:32:19.408 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:33:34.962 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:33:35.066 하드웨어 제어 성공
2026-08-19 13:33:35.079 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:34:00.456 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 13:34:00.573 하드웨어 제어 성공
2026-08-19 13:34:00.579 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:35:41.546 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:35:41.649 하드웨어 제어 성공
2026-08-19 13:35:41.661 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:36:58.130 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:36:58.234 하드웨어 제어 성공
2026-08-19 13:36:58.244 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:57:12.336 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 13:57:12.441 하드웨어 제어 성공
2026-08-19 13:57:12.453 DB 완료 갱신 (Handshake 종료)
2026-08-19 13:57:36.815 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 13:57:36.918 하드웨어 제어 성공
2026-08-19 13:57:36.928 DB 완료 갱신 (Handshake 종료)
2026-08-19 14:36:33.046 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 14:36:33.163 하드웨어 제어 성공
2026-08-19 14:36:33.174 DB 완료 갱신 (Handshake 종료)
2026-08-19 14:37:24.159 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 14:37:24.262 하드웨어 제어 성공
2026-08-19 14:37:24.277 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:01:50.586 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 15:01:50.704 하드웨어 제어 성공
2026-08-19 15:01:50.713 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:02:38.581 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 15:02:38.699 하드웨어 제어 성공
2026-08-19 15:02:38.711 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:13:54.427 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 15:13:54.531 하드웨어 제어 성공
2026-08-19 15:13:54.534 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:14:22.018 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 15:14:22.136 하드웨어 제어 성공
2026-08-19 15:14:22.161 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:20:11.169 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 15:20:11.273 하드웨어 제어 성공
2026-08-19 15:20:11.283 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:20:32.582 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 15:20:32.700 하드웨어 제어 성공
2026-08-19 15:20:32.714 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:36:38.399 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 15:36:38.502 하드웨어 제어 성공
2026-08-19 15:36:38.517 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:37:04.932 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 15:37:05.041 하드웨어 제어 성공
2026-08-19 15:37:05.054 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:42:45.044 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 15:42:45.148 하드웨어 제어 성공
2026-08-19 15:42:45.163 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:46:15.425 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 15:46:15.543 하드웨어 제어 성공
2026-08-19 15:46:15.554 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:49:44.749 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 15:49:44.864 하드웨어 제어 성공
2026-08-19 15:49:44.874 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:50:12.416 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 15:50:12.521 하드웨어 제어 성공
2026-08-19 15:50:12.531 DB 완료 갱신 (Handshake 종료)
2026-08-19 15:50:37.924 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 15:50:38.042 하드웨어 제어 성공
2026-08-19 15:50:38.059 DB 완료 갱신 (Handshake 종료)
2026-08-19 16:10:42.123 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 16:10:42.228 하드웨어 제어 성공
2026-08-19 16:10:42.239 DB 완료 갱신 (Handshake 종료)
2026-08-19 16:11:08.867 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 16:11:08.972 하드웨어 제어 성공
2026-08-19 16:11:08.984 DB 완료 갱신 (Handshake 종료)
2026-08-19 16:11:34.340 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 16:11:34.445 하드웨어 제어 성공
2026-08-19 16:11:34.449 DB 완료 갱신 (Handshake 종료)
2026-08-19 16:23:47.495 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-19 16:23:47.613 하드웨어 제어 성공
2026-08-19 16:23:47.615 DB 완료 갱신 (Handshake 종료)
2026-08-19 16:24:13.994 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 16:24:14.100 하드웨어 제어 성공
2026-08-19 16:24:14.115 DB 완료 갱신 (Handshake 종료)
2026-08-19 21:32:11.212 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 21:32:11.329 하드웨어 제어 성공
2026-08-19 21:32:11.346 DB 완료 갱신 (Handshake 종료)
2026-08-19 21:32:28.556 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 21:32:28.659 하드웨어 제어 성공
2026-08-19 21:32:28.670 DB 완료 갱신 (Handshake 종료)
2026-08-19 21:37:50.239 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 21:37:50.344 하드웨어 제어 성공
2026-08-19 21:37:50.348 DB 완료 갱신 (Handshake 종료)
2026-08-19 21:39:03.868 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 21:39:03.975 하드웨어 제어 성공
2026-08-19 21:39:03.985 DB 완료 갱신 (Handshake 종료)
2026-08-19 21:40:02.131 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 21:40:02.235 하드웨어 제어 성공
2026-08-19 21:40:02.246 DB 완료 갱신 (Handshake 종료)
2026-08-19 21:40:26.646 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 21:40:26.763 하드웨어 제어 성공
2026-08-19 21:40:26.766 DB 완료 갱신 (Handshake 종료)
2026-08-19 23:13:15.428 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 23:13:15.532 하드웨어 제어 성공
2026-08-19 23:13:15.547 DB 완료 갱신 (Handshake 종료)
2026-08-19 23:14:54.498 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 23:14:54.600 하드웨어 제어 성공
2026-08-19 23:14:54.609 DB 완료 갱신 (Handshake 종료)
2026-08-19 23:23:43.668 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 23:23:43.774 하드웨어 제어 성공
2026-08-19 23:23:43.780 DB 완료 갱신 (Handshake 종료)
2026-08-19 23:24:03.024 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 23:24:03.129 하드웨어 제어 성공
2026-08-19 23:24:03.138 DB 완료 갱신 (Handshake 종료)
2026-08-19 23:28:29.632 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 23:28:29.738 하드웨어 제어 성공
2026-08-19 23:28:29.746 DB 완료 갱신 (Handshake 종료)
2026-08-19 23:28:51.118 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 23:28:51.222 하드웨어 제어 성공
2026-08-19 23:28:51.232 DB 완료 갱신 (Handshake 종료)
2026-08-19 23:36:46.170 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-19 23:36:46.273 하드웨어 제어 성공
2026-08-19 23:36:46.284 DB 완료 갱신 (Handshake 종료)
2026-08-19 23:37:07.620 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-19 23:37:07.735 하드웨어 제어 성공
2026-08-19 23:37:07.738 DB 완료 갱신 (Handshake 종료)

View File

@ -0,0 +1,480 @@
2026-08-20 00:27:44.745 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 00:27:44.861 하드웨어 제어 성공
2026-08-20 00:27:44.865 DB 완료 갱신 (Handshake 종료)
2026-08-20 00:28:31.818 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 00:28:31.934 하드웨어 제어 성공
2026-08-20 00:28:31.946 DB 완료 갱신 (Handshake 종료)
2026-08-20 00:43:25.953 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 00:43:26.072 하드웨어 제어 성공
2026-08-20 00:43:26.084 DB 완료 갱신 (Handshake 종료)
2026-08-20 00:43:47.389 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 00:43:47.494 하드웨어 제어 성공
2026-08-20 00:43:47.507 DB 완료 갱신 (Handshake 종료)
2026-08-20 00:44:20.114 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 00:44:20.229 하드웨어 제어 성공
2026-08-20 00:44:20.240 DB 완료 갱신 (Handshake 종료)
2026-08-20 00:44:39.477 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 00:44:39.581 하드웨어 제어 성공
2026-08-20 00:44:39.594 DB 완료 갱신 (Handshake 종료)
2026-08-20 00:57:22.932 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 00:57:23.036 하드웨어 제어 성공
2026-08-20 00:57:23.047 DB 완료 갱신 (Handshake 종료)
2026-08-20 00:58:09.960 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 00:58:10.079 하드웨어 제어 성공
2026-08-20 00:58:10.090 DB 완료 갱신 (Handshake 종료)
2026-08-20 01:03:28.790 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 01:03:28.907 하드웨어 제어 성공
2026-08-20 01:03:28.918 DB 완료 갱신 (Handshake 종료)
2026-08-20 01:03:49.197 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 01:03:49.304 하드웨어 제어 성공
2026-08-20 01:03:49.316 DB 완료 갱신 (Handshake 종료)
2026-08-20 01:10:26.544 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 01:10:26.659 하드웨어 제어 성공
2026-08-20 01:10:26.674 DB 완료 갱신 (Handshake 종료)
2026-08-20 01:10:54.162 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 01:10:54.281 하드웨어 제어 성공
2026-08-20 01:10:54.292 DB 완료 갱신 (Handshake 종료)
2026-08-20 01:36:35.014 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 01:36:35.131 하드웨어 제어 성공
2026-08-20 01:36:35.142 DB 완료 갱신 (Handshake 종료)
2026-08-20 01:37:21.998 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 01:37:22.115 하드웨어 제어 성공
2026-08-20 01:37:22.126 DB 완료 갱신 (Handshake 종료)
2026-08-20 01:43:07.209 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 01:43:07.324 하드웨어 제어 성공
2026-08-20 01:43:07.333 DB 완료 갱신 (Handshake 종료)
2026-08-20 01:43:29.705 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 01:43:29.808 하드웨어 제어 성공
2026-08-20 01:43:29.818 DB 완료 갱신 (Handshake 종료)
2026-08-20 02:13:11.320 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 02:13:11.423 하드웨어 제어 성공
2026-08-20 02:13:11.427 DB 완료 갱신 (Handshake 종료)
2026-08-20 02:13:58.284 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 02:13:58.400 하드웨어 제어 성공
2026-08-20 02:13:58.412 DB 완료 갱신 (Handshake 종료)
2026-08-20 02:16:39.710 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 02:16:39.827 하드웨어 제어 성공
2026-08-20 02:16:39.831 DB 완료 갱신 (Handshake 종료)
2026-08-20 02:20:57.268 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 02:20:57.386 하드웨어 제어 성공
2026-08-20 02:20:57.396 DB 완료 갱신 (Handshake 종료)
2026-08-20 04:00:48.526 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 04:00:48.641 하드웨어 제어 성공
2026-08-20 04:00:48.645 DB 완료 갱신 (Handshake 종료)
2026-08-20 04:01:09.937 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 04:01:10.041 하드웨어 제어 성공
2026-08-20 04:01:10.052 DB 완료 갱신 (Handshake 종료)
2026-08-20 04:06:01.517 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 04:06:01.629 하드웨어 제어 성공
2026-08-20 04:06:01.635 DB 완료 갱신 (Handshake 종료)
2026-08-20 04:06:26.263 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 04:06:26.376 하드웨어 제어 성공
2026-08-20 04:06:26.381 DB 완료 갱신 (Handshake 종료)
2026-08-20 07:24:14.714 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 07:24:14.820 하드웨어 제어 성공
2026-08-20 07:24:14.833 DB 완료 갱신 (Handshake 종료)
2026-08-20 07:28:57.619 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 07:28:57.736 하드웨어 제어 성공
2026-08-20 07:28:57.747 DB 완료 갱신 (Handshake 종료)
2026-08-20 08:57:14.668 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 08:57:14.786 하드웨어 제어 성공
2026-08-20 08:57:14.797 DB 완료 갱신 (Handshake 종료)
2026-08-20 08:57:40.257 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 08:57:40.374 하드웨어 제어 성공
2026-08-20 08:57:40.385 DB 완료 갱신 (Handshake 종료)
2026-08-20 08:58:05.733 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 08:58:05.840 하드웨어 제어 성공
2026-08-20 08:58:05.850 DB 완료 갱신 (Handshake 종료)
2026-08-20 09:26:56.582 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 09:26:56.699 하드웨어 제어 성공
2026-08-20 09:26:56.710 DB 완료 갱신 (Handshake 종료)
2026-08-20 09:27:42.526 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 09:27:42.644 하드웨어 제어 성공
2026-08-20 09:27:42.648 DB 완료 갱신 (Handshake 종료)
2026-08-20 09:57:44.350 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 09:57:44.453 하드웨어 제어 성공
2026-08-20 09:57:44.464 DB 완료 갱신 (Handshake 종료)
2026-08-20 09:58:09.940 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 09:58:10.059 하드웨어 제어 성공
2026-08-20 09:58:10.071 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:01:49.449 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 10:01:49.554 하드웨어 제어 성공
2026-08-20 10:01:49.557 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:50:37.976 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 10:50:38.079 하드웨어 제어 성공
2026-08-20 10:50:38.093 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:52:00.663 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 10:52:00.766 하드웨어 제어 성공
2026-08-20 10:52:00.769 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:52:23.340 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 10:52:23.444 하드웨어 제어 성공
2026-08-20 10:52:23.454 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:52:52.898 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 10:52:53.015 하드웨어 제어 성공
2026-08-20 10:52:53.025 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:54:10.476 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 10:54:10.594 하드웨어 제어 성공
2026-08-20 10:54:10.596 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:55:30.116 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 10:55:30.219 하드웨어 제어 성공
2026-08-20 10:55:30.229 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:56:43.527 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 10:56:43.630 하드웨어 제어 성공
2026-08-20 10:56:43.641 DB 완료 갱신 (Handshake 종료)
2026-08-20 10:57:40.659 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 10:57:40.763 하드웨어 제어 성공
2026-08-20 10:57:40.774 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:00:39.410 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:00:39.515 하드웨어 제어 성공
2026-08-20 11:00:39.519 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:07:16.419 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:07:16.524 하드웨어 제어 성공
2026-08-20 11:07:16.537 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:07:38.906 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:07:39.023 하드웨어 제어 성공
2026-08-20 11:07:39.035 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:08:09.530 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:08:09.633 하드웨어 제어 성공
2026-08-20 11:08:09.637 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:15:28.413 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:15:28.518 하드웨어 제어 성공
2026-08-20 11:15:28.529 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:16:25.613 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:16:25.730 하드웨어 제어 성공
2026-08-20 11:16:25.741 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:16:46.984 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:16:47.089 하드웨어 제어 성공
2026-08-20 11:16:47.097 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:22:57.763 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:22:57.866 하드웨어 제어 성공
2026-08-20 11:22:57.869 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:26:00.385 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:26:00.490 하드웨어 제어 성공
2026-08-20 11:26:00.501 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:26:27.197 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:26:27.304 하드웨어 제어 성공
2026-08-20 11:26:27.315 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:41:39.112 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:41:39.229 하드웨어 제어 성공
2026-08-20 11:41:39.240 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:42:35.261 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:42:35.378 하드웨어 제어 성공
2026-08-20 11:42:35.390 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:42:56.648 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:42:56.765 하드웨어 제어 성공
2026-08-20 11:42:56.768 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:46:04.486 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:46:04.589 하드웨어 제어 성공
2026-08-20 11:46:04.592 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:47:44.484 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:47:44.603 하드웨어 제어 성공
2026-08-20 11:47:44.606 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:48:15.113 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:48:15.216 하드웨어 제어 성공
2026-08-20 11:48:15.227 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:48:36.594 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:48:36.699 하드웨어 제어 성공
2026-08-20 11:48:36.710 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:50:01.325 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:50:01.429 하드웨어 제어 성공
2026-08-20 11:50:01.433 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:50:20.746 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:50:20.849 하드웨어 제어 성공
2026-08-20 11:50:20.860 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:53:03.209 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:53:03.312 하드웨어 제어 성공
2026-08-20 11:53:03.323 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:53:24.648 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:53:24.766 하드웨어 제어 성공
2026-08-20 11:53:24.778 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:57:51.115 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:57:51.232 하드웨어 제어 성공
2026-08-20 11:57:51.243 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:58:11.585 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 11:58:11.702 하드웨어 제어 성공
2026-08-20 11:58:11.706 DB 완료 갱신 (Handshake 종료)
2026-08-20 11:59:35.229 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 11:59:35.348 하드웨어 제어 성공
2026-08-20 11:59:35.352 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:15:12.490 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 12:15:12.593 하드웨어 제어 성공
2026-08-20 12:15:12.603 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:16:35.211 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 12:16:35.315 하드웨어 제어 성공
2026-08-20 12:16:35.320 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:16:56.604 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 12:16:56.709 하드웨어 제어 성공
2026-08-20 12:16:56.720 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:21:23.078 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 12:21:23.193 하드웨어 제어 성공
2026-08-20 12:21:23.204 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:22:41.649 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 12:22:41.753 하드웨어 제어 성공
2026-08-20 12:22:41.766 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:23:08.163 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 12:23:08.269 하드웨어 제어 성공
2026-08-20 12:23:08.272 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:23:28.544 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 12:23:28.647 하드웨어 제어 성공
2026-08-20 12:23:28.658 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:39:16.172 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 12:39:16.275 하드웨어 제어 성공
2026-08-20 12:39:16.285 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:39:38.642 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 12:39:38.757 하드웨어 제어 성공
2026-08-20 12:39:38.770 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:40:09.260 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 12:40:09.363 하드웨어 제어 성공
2026-08-20 12:40:09.374 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:50:31.003 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 12:50:31.107 하드웨어 제어 성공
2026-08-20 12:50:31.119 DB 완료 갱신 (Handshake 종료)
2026-08-20 12:59:18.906 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 12:59:19.010 하드웨어 제어 성공
2026-08-20 12:59:19.014 DB 완료 갱신 (Handshake 종료)
2026-08-20 13:00:34.463 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 13:00:34.570 하드웨어 제어 성공
2026-08-20 13:00:34.580 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:08:54.319 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 14:08:54.436 하드웨어 제어 성공
2026-08-20 14:08:54.447 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:09:47.370 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:09:47.474 하드웨어 제어 성공
2026-08-20 14:09:47.478 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:20:46.868 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:20:46.985 하드웨어 제어 성공
2026-08-20 14:20:46.989 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:21:09.362 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:21:09.467 하드웨어 제어 성공
2026-08-20 14:21:09.471 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:21:33.855 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:21:33.973 하드웨어 제어 성공
2026-08-20 14:21:33.984 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:22:00.334 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:22:00.451 하드웨어 제어 성공
2026-08-20 14:22:00.455 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:22:26.869 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:22:26.986 하드웨어 제어 성공
2026-08-20 14:22:26.996 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:22:53.484 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:22:53.597 하드웨어 제어 성공
2026-08-20 14:22:53.600 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:28:06.985 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:28:07.104 하드웨어 제어 성공
2026-08-20 14:28:07.115 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:28:33.514 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:28:33.619 하드웨어 제어 성공
2026-08-20 14:28:33.645 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:32:54.832 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:32:54.949 하드웨어 제어 성공
2026-08-20 14:32:54.959 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:33:21.354 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:33:21.469 하드웨어 제어 성공
2026-08-20 14:33:21.481 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:37:17.387 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:37:17.490 하드웨어 제어 성공
2026-08-20 14:37:17.501 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:37:47.984 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:37:48.101 하드웨어 제어 성공
2026-08-20 14:37:48.111 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:38:09.329 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:38:09.434 하드웨어 제어 성공
2026-08-20 14:38:09.437 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:38:36.905 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:38:37.008 하드웨어 제어 성공
2026-08-20 14:38:37.022 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:39:01.446 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:39:01.549 하드웨어 제어 성공
2026-08-20 14:39:01.559 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:39:54.471 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:39:54.575 하드웨어 제어 성공
2026-08-20 14:39:54.586 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:40:29.237 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 14:40:29.342 하드웨어 제어 성공
2026-08-20 14:40:29.345 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:44:42.349 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 14:44:42.466 하드웨어 제어 성공
2026-08-20 14:44:42.477 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:45:08.924 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 14:45:09.042 하드웨어 제어 성공
2026-08-20 14:45:09.045 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:45:34.444 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:45:34.560 하드웨어 제어 성공
2026-08-20 14:45:34.570 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:47:02.255 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 14:47:02.358 하드웨어 제어 성공
2026-08-20 14:47:02.369 DB 완료 갱신 (Handshake 종료)
2026-08-20 14:56:07.277 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 14:56:07.395 하드웨어 제어 성공
2026-08-20 14:56:07.405 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:06:04.575 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:06:04.692 하드웨어 제어 성공
2026-08-20 15:06:04.696 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:06:31.084 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:06:31.201 하드웨어 제어 성공
2026-08-20 15:06:31.217 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:15:23.006 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:15:23.110 하드웨어 제어 성공
2026-08-20 15:15:23.121 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:15:47.512 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:15:47.615 하드웨어 제어 성공
2026-08-20 15:15:47.626 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:24:33.228 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:24:33.332 하드웨어 제어 성공
2026-08-20 15:24:33.343 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:28:50.458 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:28:50.574 하드웨어 제어 성공
2026-08-20 15:28:50.584 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:36:35.787 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 15:36:35.891 하드웨어 제어 성공
2026-08-20 15:36:35.901 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:37:02.303 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:37:02.418 하드웨어 제어 성공
2026-08-20 15:37:02.430 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:40:31.623 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:40:31.742 하드웨어 제어 성공
2026-08-20 15:40:31.747 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:40:59.207 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:40:59.312 하드웨어 제어 성공
2026-08-20 15:40:59.316 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:42:16.809 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 15:42:16.914 하드웨어 제어 성공
2026-08-20 15:42:16.946 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:42:43.374 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:42:43.478 하드웨어 제어 성공
2026-08-20 15:42:43.488 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:43:34.466 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 15:43:34.569 하드웨어 제어 성공
2026-08-20 15:43:34.578 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:44:00.950 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:44:01.057 하드웨어 제어 성공
2026-08-20 15:44:01.060 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:45:47.211 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 15:45:47.330 하드웨어 제어 성공
2026-08-20 15:45:47.341 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:46:11.696 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:46:11.801 하드웨어 제어 성공
2026-08-20 15:46:11.812 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:47:13.949 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:47:14.066 하드웨어 제어 성공
2026-08-20 15:47:14.076 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:48:05.997 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:48:06.114 하드웨어 제어 성공
2026-08-20 15:48:06.124 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:48:32.594 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:48:32.698 하드웨어 제어 성공
2026-08-20 15:48:32.710 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:48:54.014 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:48:54.132 하드웨어 제어 성공
2026-08-20 15:48:54.143 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:50:17.779 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:50:17.882 하드웨어 제어 성공
2026-08-20 15:50:17.893 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:51:05.788 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:51:05.906 하드웨어 제어 성공
2026-08-20 15:51:05.909 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:52:28.574 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:52:28.692 하드웨어 제어 성공
2026-08-20 15:52:28.704 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:58:25.963 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 15:58:26.079 하드웨어 제어 성공
2026-08-20 15:58:26.083 DB 완료 갱신 (Handshake 종료)
2026-08-20 15:58:51.734 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 15:58:51.838 하드웨어 제어 성공
2026-08-20 15:58:51.842 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:01:02.476 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 16:01:02.580 하드웨어 제어 성공
2026-08-20 16:01:02.583 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:01:29.034 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 16:01:29.139 하드웨어 제어 성공
2026-08-20 16:01:29.143 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:01:55.658 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 16:01:55.762 하드웨어 제어 성공
2026-08-20 16:01:55.771 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:02:21.233 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 16:02:21.343 하드웨어 제어 성공
2026-08-20 16:02:21.354 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:06:47.689 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 16:06:47.794 하드웨어 제어 성공
2026-08-20 16:06:47.805 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:07:35.684 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 16:07:35.789 하드웨어 제어 성공
2026-08-20 16:07:35.793 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:08:37.025 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 16:08:37.129 하드웨어 제어 성공
2026-08-20 16:08:37.134 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:14:39.375 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 16:14:39.488 하드웨어 제어 성공
2026-08-20 16:14:39.499 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:16:02.014 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 16:16:02.129 하드웨어 제어 성공
2026-08-20 16:16:02.133 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:16:47.909 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 16:16:48.011 하드웨어 제어 성공
2026-08-20 16:16:48.021 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:25:28.344 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 16:25:28.460 하드웨어 제어 성공
2026-08-20 16:25:28.475 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:25:54.915 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 16:25:55.019 하드웨어 제어 성공
2026-08-20 16:25:55.030 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:29:49.736 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-20 16:29:49.840 하드웨어 제어 성공
2026-08-20 16:29:49.850 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:30:42.851 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 16:30:42.967 하드웨어 제어 성공
2026-08-20 16:30:42.978 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:42:02.929 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 16:42:03.033 하드웨어 제어 성공
2026-08-20 16:42:03.043 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:42:28.471 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 16:42:28.585 하드웨어 제어 성공
2026-08-20 16:42:28.602 DB 완료 갱신 (Handshake 종료)
2026-08-20 16:58:45.474 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 16:58:45.577 하드웨어 제어 성공
2026-08-20 16:58:45.581 DB 완료 갱신 (Handshake 종료)
2026-08-20 17:20:31.403 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 17:20:31.516 하드웨어 제어 성공
2026-08-20 17:20:31.528 DB 완료 갱신 (Handshake 종료)
2026-08-20 17:24:55.775 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 17:24:55.892 하드웨어 제어 성공
2026-08-20 17:24:55.903 DB 완료 갱신 (Handshake 종료)
2026-08-20 17:25:21.242 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 17:25:21.359 하드웨어 제어 성공
2026-08-20 17:25:21.363 DB 완료 갱신 (Handshake 종료)
2026-08-20 17:37:34.572 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 17:37:34.690 하드웨어 제어 성공
2026-08-20 17:37:34.702 DB 완료 갱신 (Handshake 종료)
2026-08-20 17:38:26.727 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 17:38:26.841 하드웨어 제어 성공
2026-08-20 17:38:26.856 DB 완료 갱신 (Handshake 종료)
2026-08-20 17:38:52.291 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 17:38:52.393 하드웨어 제어 성공
2026-08-20 17:38:52.407 DB 완료 갱신 (Handshake 종료)
2026-08-20 17:41:24.472 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 17:41:24.589 하드웨어 제어 성공
2026-08-20 17:41:24.602 DB 완료 갱신 (Handshake 종료)
2026-08-20 17:58:02.906 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 17:58:03.010 하드웨어 제어 성공
2026-08-20 17:58:03.022 DB 완료 갱신 (Handshake 종료)
2026-08-20 18:18:29.236 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 18:18:29.354 하드웨어 제어 성공
2026-08-20 18:18:29.366 DB 완료 갱신 (Handshake 종료)
2026-08-20 20:17:27.535 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 20:17:27.640 하드웨어 제어 성공
2026-08-20 20:17:27.651 DB 완료 갱신 (Handshake 종료)
2026-08-20 20:17:48.017 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 20:17:48.122 하드웨어 제어 성공
2026-08-20 20:17:48.134 DB 완료 갱신 (Handshake 종료)
2026-08-20 20:18:45.133 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 20:18:45.246 하드웨어 제어 성공
2026-08-20 20:18:45.249 DB 완료 갱신 (Handshake 종료)
2026-08-20 20:19:10.641 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 20:19:10.745 하드웨어 제어 성공
2026-08-20 20:19:10.751 DB 완료 갱신 (Handshake 종료)
2026-08-20 20:19:38.233 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-20 20:19:38.350 하드웨어 제어 성공
2026-08-20 20:19:38.360 DB 완료 갱신 (Handshake 종료)
2026-08-20 20:20:52.774 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-20 20:20:52.891 하드웨어 제어 성공
2026-08-20 20:20:52.902 DB 완료 갱신 (Handshake 종료)

View File

@ -0,0 +1,43 @@
2026-08-21 00:41:02.467 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-21 00:41:02.570 하드웨어 제어 성공
2026-08-21 00:41:02.581 DB 완료 갱신 (Handshake 종료)
2026-08-21 00:41:22.901 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-21 00:41:23.018 하드웨어 제어 성공
2026-08-21 00:41:23.030 DB 완료 갱신 (Handshake 종료)
2026-08-21 03:06:32.821 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-21 03:06:32.926 하드웨어 제어 성공
2026-08-21 03:06:32.937 DB 완료 갱신 (Handshake 종료)
2026-08-21 03:09:05.970 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-21 03:09:06.089 하드웨어 제어 성공
2026-08-21 03:09:06.100 DB 완료 갱신 (Handshake 종료)
2026-08-21 05:52:06.483 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-21 05:52:06.601 하드웨어 제어 성공
2026-08-21 05:52:06.612 DB 완료 갱신 (Handshake 종료)
2026-08-21 05:52:29.958 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-21 05:52:30.061 하드웨어 제어 성공
2026-08-21 05:52:30.073 DB 완료 갱신 (Handshake 종료)
2026-08-21 05:54:42.788 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-21 05:54:42.904 하드웨어 제어 성공
2026-08-21 05:54:42.917 DB 완료 갱신 (Handshake 종료)
2026-08-21 05:55:08.318 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-21 05:55:08.424 하드웨어 제어 성공
2026-08-21 05:55:08.436 DB 완료 갱신 (Handshake 종료)
2026-08-21 06:53:32.237 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-21 06:53:32.354 하드웨어 제어 성공
2026-08-21 06:53:32.360 DB 완료 갱신 (Handshake 종료)
2026-08-21 06:53:53.783 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-21 06:53:53.900 하드웨어 제어 성공
2026-08-21 06:53:53.911 DB 완료 갱신 (Handshake 종료)
2026-08-21 09:13:35.177 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:0 R:1)
2026-08-21 09:13:35.295 하드웨어 제어 성공
2026-08-21 09:13:35.307 DB 완료 갱신 (Handshake 종료)
2026-08-21 09:14:00.729 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-21 09:14:00.832 하드웨어 제어 성공
2026-08-21 09:14:00.844 DB 완료 갱신 (Handshake 종료)
2026-08-21 09:17:49.470 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:0 Y:1 R:0)
2026-08-21 09:17:49.581 하드웨어 제어 성공
2026-08-21 09:17:49.593 DB 완료 갱신 (Handshake 종료)
2026-08-21 09:18:39.520 DB 명령 감지 - Sensor:102, IP:192.168.200.114 (Target: G:1 Y:0 R:0)
2026-08-21 09:18:39.635 하드웨어 제어 성공
2026-08-21 09:18:39.662 DB 완료 갱신 (Handshake 종료)
2026-08-21 10:09:40.894 === LEDAgent 종료 ===

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,6 @@
[DB]
Host=qst-s.iptime.org
Port=33063
User=mmcl_user
Password=qsentech!1233
Database=mmcl_db

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
program LEDAgent;
uses
Vcl.Forms,
uMain in 'uMain.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View File

@ -0,0 +1,14 @@
program LEDAgent;
uses
Vcl.Forms,
uMain in 'uMain.pas' {fMain};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TfMain, fMain);
Application.Run;
end.

View File

@ -0,0 +1,14 @@
program LEDAgent;
uses
Vcl.Forms,
uMain in 'uMain.pas' {frmMain};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.

View File

@ -0,0 +1,17 @@
program LEDAgent;
uses
Vcl.Forms,
uMain in 'uMain.pas' {frmMain},
U_DM in 'U_DM.pas' {DM: TDataModule},
uLogManagerThread in 'uLogManagerThread.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TDM, DM);
Application.CreateForm(TfrmMain, frmMain);
Application.Run;
end.

View File

@ -0,0 +1,429 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamptest [Ethernet-type]v1.2'
ClientHeight = 450
ClientWidth = 720
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object Label1: TLabel
Left = 460
Top = 20
Width = 38
Height = 13
Caption = 'TCP/IP'
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 21
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 21
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 21
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 21
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 21
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 13
TabOrder = 0
end
end
end

View File

@ -0,0 +1,427 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamptest [Ethernet-type]v1.2'
ClientHeight = 450
ClientWidth = 720
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Position = poScreenCenter
OnCreate = FormCreate
TextHeight = 13
object Label1: TLabel
Left = 460
Top = 20
Width = 33
Height = 13
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 21
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 21
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 21
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 21
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 21
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 13
TabOrder = 0
end
end
end

View File

@ -0,0 +1,442 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamptest [Ethernet-type]v1.2'
ClientHeight = 450
ClientWidth = 720
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Position = poScreenCenter
OnCreate = FormCreate
TextHeight = 13
object Label1: TLabel
Left = 460
Top = 20
Width = 33
Height = 13
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4367854
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4367854
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4367854
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 21
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 21
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 21
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 21
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 21
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 13
TabOrder = 0
end
end
end

View File

@ -0,0 +1,560 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamp Control [Ethernet-type]'
ClientHeight = 665
ClientWidth = 850
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
OnCreate = FormCreate
OnDestroy = FormDestroy
TextHeight = 14
object GroupBox1: TGroupBox
Left = 0
Top = 65
Width = 409
Height = 600
Align = alLeft
Caption = '[ TEST ] Lamp Control'
TabOrder = 0
ExplicitHeight = 694
object GroupBox2: TGroupBox
Left = 2
Top = 78
Width = 405
Height = 206
Align = alTop
Caption = 'Sound Select'
TabOrder = 0
ExplicitTop = 400
object btnSoundOff: TButton
Left = 18
Top = 24
Width = 367
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 18
Top = 72
Width = 169
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 18
Top = 116
Width = 169
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 18
Top = 160
Width = 169
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 216
Top = 72
Width = 169
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 216
Top = 116
Width = 169
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object GroupBox3: TGroupBox
Left = 2
Top = 16
Width = 405
Height = 62
Align = alTop
Caption = 'TCP Setting'
TabOrder = 1
object Label1: TLabel
Left = 20
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object Label2: TLabel
Left = 262
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object edtIP1: TEdit
Left = 72
Top = 25
Width = 35
Height = 22
TabOrder = 0
Text = '192'
end
object edtIP4: TEdit
Left = 195
Top = 25
Width = 35
Height = 22
TabOrder = 1
Text = '114'
end
object edtIP3: TEdit
Left = 154
Top = 25
Width = 35
Height = 22
TabOrder = 2
Text = '200'
end
object edtIP2: TEdit
Left = 113
Top = 25
Width = 35
Height = 22
TabOrder = 3
Text = '168'
end
object edtPort: TEdit
Left = 314
Top = 25
Width = 73
Height = 22
TabOrder = 4
Text = '20000'
end
end
object GroupBox5: TGroupBox
Left = 2
Top = 284
Width = 405
Height = 314
Align = alClient
Caption = 'LED Control'
TabOrder = 2
ExplicitLeft = 195
ExplicitTop = 102
ExplicitWidth = 885
ExplicitHeight = 662
object Label7: TLabel
Left = 24
Top = 263
Width = 58
Height = 25
Caption = 'Silver'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label6: TLabel
Left = 24
Top = 205
Width = 45
Height = 25
Caption = 'Blue'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label5: TLabel
Left = 24
Top = 147
Width = 62
Height = 25
Caption = 'Green'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label4: TLabel
Left = 24
Top = 89
Width = 70
Height = 25
Caption = 'Yellow'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 24
Top = 34
Width = 44
Height = 25
Caption = 'RED'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object btnRedBlink: TButton
Left = 209
Top = 22
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 305
Top = 254
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 209
Top = 254
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 113
Top = 254
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 305
Top = 196
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 209
Top = 196
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 113
Top = 196
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 305
Top = 138
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 209
Top = 138
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 113
Top = 138
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 305
Top = 80
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 209
Top = 80
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 113
Top = 80
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 305
Top = 22
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOn: TButton
Left = 113
Top = 22
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
end
object GroupBox4: TGroupBox
Left = 409
Top = 65
Width = 441
Height = 600
Align = alClient
Caption = '[ Status ]'
TabOrder = 2
ExplicitLeft = 534
ExplicitTop = 165
ExplicitWidth = 516
ExplicitHeight = 304
object lbStatus: TListBox
Left = 2
Top = 16
Width = 437
Height = 582
Align = alClient
ItemHeight = 14
TabOrder = 0
ExplicitLeft = 16
ExplicitTop = 24
ExplicitWidth = 480
ExplicitHeight = 50
end
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 850
Height = 65
Align = alTop
BevelKind = bkFlat
BevelOuter = bvNone
TabOrder = 3
ExplicitWidth = 1106
DesignSize = (
846
61)
object btnStatRead: TButton
Left = 449
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'Stat_Read'
TabOrder = 0
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 582
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'Reset'
TabOrder = 1
OnClick = btnResetClick
end
object btnExit: TButton
Left = 716
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'EXIT'
TabOrder = 2
OnClick = btnExitClick
ExplicitLeft = 972
end
end
object rgModel: TRadioGroup
Left = 559
Top = 306
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 1
end
end

View File

@ -0,0 +1,563 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamp Control [Ethernet-type]'
ClientHeight = 712
ClientWidth = 850
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
OnCreate = FormCreate
OnDestroy = FormDestroy
TextHeight = 14
object GroupBox1: TGroupBox
Left = 0
Top = 65
Width = 409
Height = 647
Align = alLeft
Caption = '[ TEST ] Lamp Control'
TabOrder = 0
ExplicitHeight = 694
object GroupBox2: TGroupBox
Left = 2
Top = 121
Width = 405
Height = 208
Align = alTop
Caption = 'Sound Select'
TabOrder = 0
object btnSoundOff: TButton
Left = 18
Top = 24
Width = 367
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 18
Top = 72
Width = 169
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 18
Top = 116
Width = 169
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 18
Top = 160
Width = 169
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 216
Top = 72
Width = 169
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 216
Top = 116
Width = 169
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object GroupBox3: TGroupBox
Left = 2
Top = 16
Width = 405
Height = 105
Align = alTop
Caption = 'TCP Setting'
TabOrder = 1
DesignSize = (
405
105)
object Label1: TLabel
Left = 20
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object Label2: TLabel
Left = 262
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object edtIP1: TEdit
Left = 72
Top = 25
Width = 35
Height = 22
TabOrder = 0
Text = '192'
end
object edtIP4: TEdit
Left = 195
Top = 25
Width = 35
Height = 22
TabOrder = 1
Text = '114'
end
object edtIP3: TEdit
Left = 154
Top = 25
Width = 35
Height = 22
TabOrder = 2
Text = '200'
end
object edtIP2: TEdit
Left = 113
Top = 25
Width = 35
Height = 22
TabOrder = 3
Text = '168'
end
object edtPort: TEdit
Left = 314
Top = 25
Width = 73
Height = 22
TabOrder = 4
Text = '20000'
end
object btnStatRead: TButton
Left = 262
Top = 57
Width = 125
Height = 36
Anchors = [akTop, akRight]
Caption = 'Stat_Read'
TabOrder = 5
OnClick = btnStatReadClick
end
end
object GroupBox5: TGroupBox
Left = 2
Top = 329
Width = 405
Height = 316
Align = alClient
Caption = 'LED Control'
TabOrder = 2
ExplicitLeft = 195
ExplicitTop = 102
ExplicitWidth = 885
ExplicitHeight = 662
object Label7: TLabel
Left = 24
Top = 263
Width = 58
Height = 25
Caption = 'Silver'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label6: TLabel
Left = 24
Top = 205
Width = 45
Height = 25
Caption = 'Blue'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label5: TLabel
Left = 24
Top = 147
Width = 62
Height = 25
Caption = 'Green'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label4: TLabel
Left = 24
Top = 89
Width = 70
Height = 25
Caption = 'Yellow'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 24
Top = 34
Width = 44
Height = 25
Caption = 'RED'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object btnRedBlink: TButton
Left = 209
Top = 22
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 305
Top = 254
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 209
Top = 254
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 113
Top = 254
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 305
Top = 196
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 209
Top = 196
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 113
Top = 196
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 305
Top = 138
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 209
Top = 138
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 113
Top = 138
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 305
Top = 80
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 209
Top = 80
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 113
Top = 80
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 305
Top = 22
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOn: TButton
Left = 113
Top = 22
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
end
object GroupBox4: TGroupBox
Left = 409
Top = 65
Width = 441
Height = 647
Align = alClient
Caption = '[ Status ]'
TabOrder = 2
ExplicitLeft = 534
ExplicitTop = 165
ExplicitWidth = 516
ExplicitHeight = 304
object lbStatus: TListBox
Left = 2
Top = 16
Width = 437
Height = 629
Align = alClient
ItemHeight = 14
TabOrder = 0
ExplicitLeft = 16
ExplicitTop = 24
ExplicitWidth = 480
ExplicitHeight = 50
end
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 850
Height = 65
Align = alTop
BevelKind = bkFlat
BevelOuter = bvNone
TabOrder = 3
ExplicitWidth = 1106
DesignSize = (
846
61)
object btnReset: TButton
Left = 582
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'Status Clear'
TabOrder = 0
OnClick = btnResetClick
end
object btnExit: TButton
Left = 716
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'EXIT'
TabOrder = 1
OnClick = btnExitClick
ExplicitLeft = 972
end
end
object rgModel: TRadioGroup
Left = 431
Top = 106
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 1
Visible = False
end
end

View File

@ -0,0 +1,563 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamp Control [Ethernet-type]'
ClientHeight = 712
ClientWidth = 850
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
OnCreate = FormCreate
OnDestroy = FormDestroy
TextHeight = 14
object GroupBox1: TGroupBox
Left = 0
Top = 65
Width = 409
Height = 647
Align = alLeft
Caption = '[ TEST ] Lamp Control'
TabOrder = 0
ExplicitHeight = 694
object GroupBox2: TGroupBox
Left = 2
Top = 121
Width = 405
Height = 208
Align = alTop
Caption = 'Sound Select'
TabOrder = 0
object btnSoundOff: TButton
Left = 18
Top = 24
Width = 367
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 18
Top = 72
Width = 169
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 18
Top = 116
Width = 169
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 18
Top = 160
Width = 169
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 216
Top = 72
Width = 169
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 216
Top = 116
Width = 169
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object GroupBox3: TGroupBox
Left = 2
Top = 16
Width = 405
Height = 105
Align = alTop
Caption = 'TCP Setting'
TabOrder = 1
DesignSize = (
405
105)
object Label1: TLabel
Left = 20
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object Label2: TLabel
Left = 262
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object edtIP1: TEdit
Left = 72
Top = 25
Width = 35
Height = 22
TabOrder = 0
Text = '192'
end
object edtIP4: TEdit
Left = 195
Top = 25
Width = 35
Height = 22
TabOrder = 1
Text = '114'
end
object edtIP3: TEdit
Left = 154
Top = 25
Width = 35
Height = 22
TabOrder = 2
Text = '200'
end
object edtIP2: TEdit
Left = 113
Top = 25
Width = 35
Height = 22
TabOrder = 3
Text = '168'
end
object edtPort: TEdit
Left = 314
Top = 25
Width = 73
Height = 22
TabOrder = 4
Text = '20000'
end
object btnStatRead: TButton
Left = 18
Top = 57
Width = 367
Height = 36
Anchors = [akTop, akRight]
Caption = 'Stat_Read'
TabOrder = 5
OnClick = btnStatReadClick
end
end
object GroupBox5: TGroupBox
Left = 2
Top = 329
Width = 405
Height = 316
Align = alClient
Caption = 'LED Control'
TabOrder = 2
ExplicitLeft = 195
ExplicitTop = 102
ExplicitWidth = 885
ExplicitHeight = 662
object Label7: TLabel
Left = 24
Top = 263
Width = 58
Height = 25
Caption = 'Silver'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label6: TLabel
Left = 24
Top = 205
Width = 45
Height = 25
Caption = 'Blue'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label5: TLabel
Left = 24
Top = 147
Width = 62
Height = 25
Caption = 'Green'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label4: TLabel
Left = 24
Top = 89
Width = 70
Height = 25
Caption = 'Yellow'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 24
Top = 34
Width = 44
Height = 25
Caption = 'RED'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object btnRedBlink: TButton
Left = 209
Top = 22
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 305
Top = 254
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 209
Top = 254
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 113
Top = 254
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 305
Top = 196
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 209
Top = 196
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 113
Top = 196
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 305
Top = 138
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 209
Top = 138
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 113
Top = 138
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 305
Top = 80
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 209
Top = 80
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 113
Top = 80
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 305
Top = 22
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOn: TButton
Left = 113
Top = 22
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
end
object GroupBox4: TGroupBox
Left = 409
Top = 65
Width = 441
Height = 647
Align = alClient
Caption = '[ Status ]'
TabOrder = 2
ExplicitLeft = 534
ExplicitTop = 165
ExplicitWidth = 516
ExplicitHeight = 304
object lbStatus: TListBox
Left = 2
Top = 16
Width = 437
Height = 629
Align = alClient
ItemHeight = 14
TabOrder = 0
ExplicitLeft = 16
ExplicitTop = 24
ExplicitWidth = 480
ExplicitHeight = 50
end
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 850
Height = 65
Align = alTop
BevelKind = bkFlat
BevelOuter = bvNone
TabOrder = 3
ExplicitWidth = 1106
DesignSize = (
846
61)
object btnReset: TButton
Left = 582
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'Status Clear'
TabOrder = 0
OnClick = btnResetClick
end
object btnExit: TButton
Left = 716
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'EXIT'
TabOrder = 1
OnClick = btnExitClick
ExplicitLeft = 972
end
end
object rgModel: TRadioGroup
Left = 431
Top = 106
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 1
Visible = False
end
end

View File

@ -0,0 +1,548 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'MMCL QLight_Lamp Control [Ethernet-type]'
ClientHeight = 712
ClientWidth = 850
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
OnCreate = FormCreate
OnDestroy = FormDestroy
TextHeight = 14
object GroupBox1: TGroupBox
Left = 0
Top = 65
Width = 409
Height = 647
Align = alLeft
Caption = '[ TEST ] Lamp Control'
TabOrder = 0
object GroupBox2: TGroupBox
Left = 2
Top = 121
Width = 405
Height = 208
Align = alTop
Caption = 'Sound Select'
TabOrder = 0
object btnSoundOff: TButton
Left = 18
Top = 24
Width = 367
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 18
Top = 72
Width = 169
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 18
Top = 116
Width = 169
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 18
Top = 160
Width = 169
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 216
Top = 72
Width = 169
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 216
Top = 116
Width = 169
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object GroupBox3: TGroupBox
Left = 2
Top = 16
Width = 405
Height = 105
Align = alTop
Caption = 'TCP Setting'
TabOrder = 1
DesignSize = (
405
105)
object Label1: TLabel
Left = 20
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object Label2: TLabel
Left = 262
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object edtIP1: TEdit
Left = 72
Top = 25
Width = 35
Height = 22
TabOrder = 0
Text = '192'
end
object edtIP4: TEdit
Left = 195
Top = 25
Width = 35
Height = 22
TabOrder = 1
Text = '114'
end
object edtIP3: TEdit
Left = 154
Top = 25
Width = 35
Height = 22
TabOrder = 2
Text = '200'
end
object edtIP2: TEdit
Left = 113
Top = 25
Width = 35
Height = 22
TabOrder = 3
Text = '168'
end
object edtPort: TEdit
Left = 314
Top = 25
Width = 73
Height = 22
TabOrder = 4
Text = '20000'
end
object btnStatRead: TButton
Left = 18
Top = 57
Width = 367
Height = 36
Anchors = [akTop, akRight]
Caption = 'Stat_Read'
TabOrder = 5
OnClick = btnStatReadClick
end
end
object GroupBox5: TGroupBox
Left = 2
Top = 329
Width = 405
Height = 316
Align = alClient
Caption = 'LED Control'
TabOrder = 2
object Label7: TLabel
Left = 24
Top = 263
Width = 58
Height = 25
Caption = 'Silver'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label6: TLabel
Left = 24
Top = 205
Width = 45
Height = 25
Caption = 'Blue'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label5: TLabel
Left = 24
Top = 147
Width = 62
Height = 25
Caption = 'Green'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label4: TLabel
Left = 24
Top = 89
Width = 70
Height = 25
Caption = 'Yellow'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 24
Top = 34
Width = 44
Height = 25
Caption = 'RED'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object btnRedBlink: TButton
Left = 209
Top = 22
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 305
Top = 254
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 209
Top = 254
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 113
Top = 254
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 305
Top = 196
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 209
Top = 196
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 113
Top = 196
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 305
Top = 138
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 209
Top = 138
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 113
Top = 138
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 305
Top = 80
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 209
Top = 80
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 113
Top = 80
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 305
Top = 22
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOn: TButton
Left = 113
Top = 22
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
end
object GroupBox4: TGroupBox
Left = 409
Top = 65
Width = 441
Height = 647
Align = alClient
Caption = '[ Status ]'
TabOrder = 2
object lbStatus: TListBox
Left = 2
Top = 16
Width = 437
Height = 629
Align = alClient
ItemHeight = 14
TabOrder = 0
end
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 850
Height = 65
Align = alTop
BevelKind = bkFlat
BevelOuter = bvNone
TabOrder = 3
DesignSize = (
846
61)
object btnReset: TButton
Left = 582
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'Status Clear'
TabOrder = 0
OnClick = btnResetClick
end
object btnExit: TButton
Left = 716
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'EXIT'
TabOrder = 1
OnClick = btnExitClick
end
end
object rgModel: TRadioGroup
Left = 431
Top = 106
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 1
Visible = False
end
end

View File

@ -0,0 +1,420 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamptest [Ethernet-type]'
ClientHeight = 456
ClientWidth = 689
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
OnCreate = FormCreate
TextHeight = 15
object Label1: TLabel
Left = 460
Top = 20
Width = 36
Height = 15
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 21
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 21
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 21
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 21
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 23
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 15
TabOrder = 0
end
end
end

View File

@ -0,0 +1,420 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamptest [Ethernet-type]'
ClientHeight = 456
ClientWidth = 689
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
OnCreate = FormCreate
TextHeight = 15
object Label1: TLabel
Left = 460
Top = 20
Width = 36
Height = 15
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 21
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 21
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 21
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 21
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 23
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 15
TabOrder = 0
end
end
end

View File

@ -0,0 +1,426 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamptest [Ethernet-type]'
ClientHeight = 456
ClientWidth = 689
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
OnCreate = FormCreate
TextHeight = 15
object Label1: TLabel
Left = 460
Top = 20
Width = 36
Height = 15
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWhite
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 21
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 21
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 21
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 21
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 23
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 15
TabOrder = 0
end
end
end

View File

@ -0,0 +1,441 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamptest [Ethernet-type]'
ClientHeight = 456
ClientWidth = 689
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Segoe UI'
Font.Style = []
OnCreate = FormCreate
TextHeight = 15
object Label1: TLabel
Left = 460
Top = 20
Width = 36
Height = 15
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 23
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 23
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 23
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 23
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 23
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 15
TabOrder = 0
end
end
end

View File

@ -0,0 +1,443 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamp Control [Ethernet-type]'
ClientHeight = 456
ClientWidth = 689
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
OnDestroy = FormDestroy
TextHeight = 15
object Label1: TLabel
Left = 460
Top = 20
Width = 36
Height = 15
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 23
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 23
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 23
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 23
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 23
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 87
Caption = 'Status'
TabOrder = 11
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 50
ItemHeight = 15
TabOrder = 0
end
end
end

View File

@ -0,0 +1,452 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'QLight_Lamp Control [Ethernet-type]'
ClientHeight = 605
ClientWidth = 689
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
OnCreate = FormCreate
OnDestroy = FormDestroy
DesignSize = (
689
605)
TextHeight = 14
object Label1: TLabel
Left = 460
Top = 20
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object GroupBox1: TGroupBox
Left = 16
Top = 16
Width = 320
Height = 330
Caption = 'Lamp Control'
TabOrder = 0
object btnRedOn: TButton
Left = 16
Top = 24
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedBlink: TButton
Left = 112
Top = 24
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 208
Top = 24
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 16
Top = 82
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 112
Top = 82
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 208
Top = 82
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 16
Top = 140
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 112
Top = 140
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 208
Top = 140
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 16
Top = 198
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 112
Top = 198
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 208
Top = 198
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 16
Top = 256
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 112
Top = 256
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 208
Top = 256
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
object GroupBox2: TGroupBox
Left = 352
Top = 50
Width = 180
Height = 296
Caption = 'Sound Select'
TabOrder = 1
object btnSoundOff: TButton
Left = 16
Top = 24
Width = 150
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 16
Top = 72
Width = 150
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 16
Top = 116
Width = 150
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 16
Top = 160
Width = 150
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 16
Top = 204
Width = 150
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 16
Top = 248
Width = 150
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object edtIP1: TEdit
Left = 512
Top = 17
Width = 35
Height = 22
TabOrder = 2
Text = '192'
end
object edtIP2: TEdit
Left = 553
Top = 17
Width = 35
Height = 22
TabOrder = 3
Text = '168'
end
object edtIP3: TEdit
Left = 594
Top = 17
Width = 35
Height = 22
TabOrder = 4
Text = '200'
end
object edtIP4: TEdit
Left = 635
Top = 17
Width = 35
Height = 22
TabOrder = 5
Text = '114'
end
object GroupBox3: TGroupBox
Left = 552
Top = 50
Width = 120
Height = 60
Caption = 'TCP/ PORT'
TabOrder = 6
object edtPort: TEdit
Left = 24
Top = 24
Width = 73
Height = 22
TabOrder = 0
Text = '20000'
end
end
object rgModel: TRadioGroup
Left = 552
Top = 120
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 7
end
object btnStatRead: TButton
Left = 552
Top = 304
Width = 120
Height = 41
Caption = 'Stat_Read'
TabOrder = 8
OnClick = btnStatReadClick
end
object btnReset: TButton
Left = 552
Top = 351
Width = 120
Height = 41
Caption = 'Reset'
TabOrder = 9
OnClick = btnResetClick
end
object btnExit: TButton
Left = 552
Top = 398
Width = 120
Height = 41
Caption = 'EXIT'
TabOrder = 10
OnClick = btnExitClick
end
object GroupBox4: TGroupBox
Left = 16
Top = 352
Width = 516
Height = 236
Anchors = [akLeft, akTop, akBottom]
Caption = 'Status'
TabOrder = 11
ExplicitHeight = 87
DesignSize = (
516
236)
object lbStatus: TListBox
Left = 16
Top = 24
Width = 480
Height = 199
Anchors = [akLeft, akTop, akBottom]
ItemHeight = 14
TabOrder = 0
ExplicitHeight = 50
end
end
end

View File

@ -0,0 +1,24 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.

View File

@ -0,0 +1,24 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
type
TfMain = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
fMain: TfMain;
implementation
{$R *.dfm}
end.

View File

@ -0,0 +1,213 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
btnRedOn: TButton;
btnRedBlink: TButton;
btnRedOff: TButton;
btnYellowOn: TButton;
btnYellowBlink: TButton;
btnYellowOff: TButton;
btnGreenOn: TButton;
btnGreenBlink: TButton;
btnGreenOff: TButton;
btnBlueOn: TButton;
btnBlueBlink: TButton;
btnBlueOff: TButton;
btnWhiteOn: TButton;
btnWhiteBlink: TButton;
btnWhiteOff: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
Label1: TLabel;
edtIP1: TEdit;
edtIP2: TEdit;
edtIP3: TEdit;
edtIP4: TEdit;
GroupBox3: TGroupBox;
edtPort: TEdit;
rgModel: TRadioGroup;
btnStatRead: TButton;
btnReset: TButton;
btnExit: TButton;
GroupBox4: TGroupBox;
lbStatus: TListBox;
procedure FormCreate(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvb_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
end;
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
// Get model select
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer; // 2:Red, 3:Yellow, 4:Green, 5:Blue, 6:White
Action: Integer;
i: Integer;
begin
// Reset all to D_not before setting the specific one
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not; // Keep sound unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not; // Keep lamps unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0; // 0-read
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,219 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
btnRedOn: TButton;
btnRedBlink: TButton;
btnRedOff: TButton;
btnYellowOn: TButton;
btnYellowBlink: TButton;
btnYellowOff: TButton;
btnGreenOn: TButton;
btnGreenBlink: TButton;
btnGreenOff: TButton;
btnBlueOn: TButton;
btnBlueBlink: TButton;
btnBlueOff: TButton;
btnWhiteOn: TButton;
btnWhiteBlink: TButton;
btnWhiteOff: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
Label1: TLabel;
edtIP1: TEdit;
edtIP2: TEdit;
edtIP3: TEdit;
edtIP4: TEdit;
GroupBox3: TGroupBox;
edtPort: TEdit;
rgModel: TRadioGroup;
btnStatRead: TButton;
btnReset: TButton;
btnExit: TButton;
GroupBox4: TGroupBox;
lbStatus: TListBox;
procedure FormCreate(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnRedOnClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvb_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
end;
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
// Get model select
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer; // 2:Red, 3:Yellow, 4:Green, 5:Blue, 6:White
Action: Integer;
i: Integer;
begin
// Reset all to D_not before setting the specific one
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not; // Keep sound unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not; // Keep lamps unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0; // 0-read
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
pprocedure TfrmMain.btnRedOnClick(Sender: TObject);
begin
end;
rocedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,213 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
btnRedOn: TButton;
btnRedBlink: TButton;
btnRedOff: TButton;
btnYellowOn: TButton;
btnYellowBlink: TButton;
btnYellowOff: TButton;
btnGreenOn: TButton;
btnGreenBlink: TButton;
btnGreenOff: TButton;
btnBlueOn: TButton;
btnBlueBlink: TButton;
btnBlueOff: TButton;
btnWhiteOn: TButton;
btnWhiteBlink: TButton;
btnWhiteOff: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
Label1: TLabel;
edtIP1: TEdit;
edtIP2: TEdit;
edtIP3: TEdit;
edtIP4: TEdit;
GroupBox3: TGroupBox;
edtPort: TEdit;
rgModel: TRadioGroup;
btnStatRead: TButton;
btnReset: TButton;
btnExit: TButton;
GroupBox4: TGroupBox;
lbStatus: TListBox;
procedure FormCreate(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvb_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
end;
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
// Get model select
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer; // 2:Red, 3:Yellow, 4:Green, 5:Blue, 6:White
Action: Integer;
i: Integer;
begin
// Reset all to D_not before setting the specific one
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not; // Keep sound unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not; // Keep lamps unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0; // 0-read
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,213 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
btnRedOn: TButton;
btnRedBlink: TButton;
btnRedOff: TButton;
btnYellowOn: TButton;
btnYellowBlink: TButton;
btnYellowOff: TButton;
btnGreenOn: TButton;
btnGreenBlink: TButton;
btnGreenOff: TButton;
btnBlueOn: TButton;
btnBlueBlink: TButton;
btnBlueOff: TButton;
btnWhiteOn: TButton;
btnWhiteBlink: TButton;
btnWhiteOff: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
Label1: TLabel;
edtIP1: TEdit;
edtIP2: TEdit;
edtIP3: TEdit;
edtIP4: TEdit;
GroupBox3: TGroupBox;
edtPort: TEdit;
rgModel: TRadioGroup;
btnStatRead: TButton;
btnReset: TButton;
btnExit: TButton;
GroupBox4: TGroupBox;
lbStatus: TListBox;
procedure FormCreate(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvb_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
end;
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
// Get model select
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer; // 2:Red, 3:Yellow, 4:Green, 5:Blue, 6:White
Action: Integer;
i: Integer;
begin
// Reset all to D_not before setting the specific one
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not; // Keep sound unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not; // Keep lamps unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0; // 0-read
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,213 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
btnRedOn: TButton;
btnRedBlink: TButton;
btnRedOff: TButton;
btnYellowOn: TButton;
btnYellowBlink: TButton;
btnYellowOff: TButton;
btnGreenOn: TButton;
btnGreenBlink: TButton;
btnGreenOff: TButton;
btnBlueOn: TButton;
btnBlueBlink: TButton;
btnBlueOff: TButton;
btnWhiteOn: TButton;
btnWhiteBlink: TButton;
btnWhiteOff: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
Label1: TLabel;
edtIP1: TEdit;
edtIP2: TEdit;
edtIP3: TEdit;
edtIP4: TEdit;
GroupBox3: TGroupBox;
edtPort: TEdit;
rgModel: TRadioGroup;
btnStatRead: TButton;
btnReset: TButton;
btnExit: TButton;
GroupBox4: TGroupBox;
lbStatus: TListBox;
procedure FormCreate(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvc_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
end;
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
// Get model select
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer; // 2:Red, 3:Yellow, 4:Green, 5:Blue, 6:White
Action: Integer;
i: Integer;
begin
// Reset all to D_not before setting the specific one
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not; // Keep sound unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not; // Keep lamps unchanged
c_pIdata[0] := 1; // Write mode
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0; // 0-read
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,396 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
System.IniFiles, Data.DB, U_DM, uLogManagerThread;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
btnRedOn: TButton;
btnRedBlink: TButton;
btnRedOff: TButton;
btnYellowOn: TButton;
btnYellowBlink: TButton;
btnYellowOff: TButton;
btnGreenOn: TButton;
btnGreenBlink: TButton;
btnGreenOff: TButton;
btnBlueOn: TButton;
btnBlueBlink: TButton;
btnBlueOff: TButton;
btnWhiteOn: TButton;
btnWhiteBlink: TButton;
btnWhiteOff: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
Label1: TLabel;
edtIP1: TEdit;
edtIP2: TEdit;
edtIP3: TEdit;
edtIP4: TEdit;
GroupBox3: TGroupBox;
edtPort: TEdit;
rgModel: TRadioGroup;
btnStatRead: TButton;
btnReset: TButton;
btnExit: TButton;
GroupBox4: TGroupBox;
lbStatus: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
// 환경 설정 변수
FDBHost, FDBUser, FDBPass, FDBName: string;
FDBPort: Integer;
// 폴링 타이머
FPollingTimer: TTimer;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
procedure LoadSettings;
procedure InitDB;
procedure OnPollingTimer(Sender: TObject);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvc_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.LoadSettings;
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'settings.ini');
try
FDBHost := Ini.ReadString('DB', 'Host', '0.0.0.0');
FDBPort := Ini.ReadInteger('DB', 'Port', 33063);
FDBUser := Ini.ReadString('DB', 'User', 'mmcl_user');
FDBPass := Ini.ReadString('DB', 'Password', '');
FDBName := Ini.ReadString('DB', 'Database', 'mmcl_db');
finally
Ini.Free;
end;
end;
procedure TfrmMain.InitDB;
begin
DM.fdConnEtc.Close;
DM.fdConnEtc.Params.Clear;
DM.fdConnEtc.Params.Add('DriverID=MySQL');
DM.fdConnEtc.Params.Add('Server=' + FDBHost);
DM.fdConnEtc.Params.Add('Port=' + IntToStr(FDBPort));
DM.fdConnEtc.Params.Add('Database=' + FDBName);
DM.fdConnEtc.Params.Add('User_Name=' + FDBUser);
if FDBPass <> '' then
DM.fdConnEtc.Params.Add('Password=' + FDBPass);
DM.fdConnEtc.Params.Add('CharacterSet=utf8mb4');
try
DM.fdConnEtc.Connected := True;
LogMessage('DB 연결 성공 (' + FDBHost + ')');
AddLog_Thread('DB 연결 성공 (' + FDBHost + ')');
except
on E: Exception do
begin
LogMessage('DB 연결 실패: ' + E.Message);
AddLog_Thread('DB 연결 실패: ' + E.Message);
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize LED data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
// 1. 로그 시스템 초기화
InitLogger(ExtractFilePath(Application.ExeName) + 'Logs', 'LEDAgent', rtDaily);
AddLog_Thread('=== LEDAgent 시작 ===');
// 2. INI 설정 로드
LoadSettings;
// 3. DB 연결
InitDB;
// 4. 폴링 타이머 가동 (1초=1000ms)
FPollingTimer := TTimer.Create(Self);
FPollingTimer.Interval := 1000;
FPollingTimer.OnTimer := OnPollingTimer;
FPollingTimer.Enabled := True;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
if Assigned(FPollingTimer) then
begin
FPollingTimer.Enabled := False;
FPollingTimer.Free;
end;
if Assigned(DM) and DM.fdConnEtc.Connected then
DM.fdConnEtc.Close;
AddLog_Thread('=== LEDAgent 종료 ===');
StopLogger;
end;
procedure TfrmMain.OnPollingTimer(Sender: TObject);
var
SensorNo, DbLedPort: Integer;
DbLedIp: string;
T1, T2, T3: Integer;
IpParts: TArray<string>;
SendSuccess: Boolean;
i: Integer;
begin
FPollingTimer.Enabled := False; // 겹침 방지
try
if not DM.fdConnEtc.Connected then Exit;
DM.fdQryEtc.Close;
DM.fdQryEtc.SQL.Text :=
'SELECT sensor_no, target_ch1_statusID, target_ch2_statusID, target_ch3_statusID, led_ip, led_port ' +
'FROM sensor_info ' +
'WHERE sensor_typeid = 2 ' +
' AND (target_ch1_statusID != value_ch1_statusID ' +
' OR target_ch2_statusID != value_ch2_statusID ' +
' OR target_ch3_statusID != value_ch3_statusID) ' +
'LIMIT 1';
try
DM.fdQryEtc.Open;
except
on E: Exception do
begin
AddLog_Thread('DB 폴링 에러: ' + E.Message);
Exit;
end;
end;
if not DM.fdQryEtc.IsEmpty then
begin
SensorNo := DM.fdQryEtc.FieldByName('sensor_no').AsInteger;
T1 := DM.fdQryEtc.FieldByName('target_ch1_statusID').AsInteger; // Green
T2 := DM.fdQryEtc.FieldByName('target_ch2_statusID').AsInteger; // Yellow
T3 := DM.fdQryEtc.FieldByName('target_ch3_statusID').AsInteger; // Red
DbLedIp := DM.fdQryEtc.FieldByName('led_ip').AsString;
DbLedPort := DM.fdQryEtc.FieldByName('led_port').AsInteger;
if DbLedPort = 0 then DbLedPort := 20000;
LogMessage(Format('DB 명령 감지 - Sensor:%d, IP:%s (Target: G:%d Y:%d R:%d)', [SensorNo, DbLedIp, T1, T2, T3]));
AddLog_Thread(Format('DB 명령 감지 - Sensor:%d, IP:%s (Target: G:%d Y:%d R:%d)', [SensorNo, DbLedIp, T1, T2, T3]));
// 1. LED 전송용 데이터 배열 구성
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // write 모드
c_pIdata[1] := 0; // 모델 기본값
c_pIdata[7] := 0; // 사운드 끄기 기본
c_pIdata[4] := T1; // Green (2: Red, 3: Yellow, 4: Green)
c_pIdata[3] := T2; // Yellow
c_pIdata[2] := T3; // Red
// 2. IP 및 Port 준비 (DB 기준)
IpParts := DbLedIp.Split(['.']);
if Length(IpParts) = 4 then
begin
c_pIpadd[0] := StrToIntDef(IpParts[0], 192);
c_pIpadd[1] := StrToIntDef(IpParts[1], 168);
c_pIpadd[2] := StrToIntDef(IpParts[2], 200);
c_pIpadd[3] := StrToIntDef(IpParts[3], 114);
end;
// 3. DLL 호출하여 하드웨어 제어
SendSuccess := Tcp_Qu_RW(DbLedPort, c_pIpadd[0], c_pIdata[0]);
if SendSuccess then
begin
AddLog_Thread('하드웨어 제어 성공');
LogMessage('하드웨어 제어 성공');
// 4. DB 상태 갱신 (Handshake 완료)
DM.fdQryEtc.Close;
DM.fdQryEtc.SQL.Text :=
'UPDATE sensor_info ' +
'SET value_ch1_statusID = :v1, value_ch2_statusID = :v2, value_ch3_statusID = :v3 ' +
'WHERE sensor_no = :sno';
DM.fdQryEtc.ParamByName('v1').AsInteger := T1;
DM.fdQryEtc.ParamByName('v2').AsInteger := T2;
DM.fdQryEtc.ParamByName('v3').AsInteger := T3;
DM.fdQryEtc.ParamByName('sno').AsInteger := SensorNo;
DM.fdQryEtc.ExecSQL;
AddLog_Thread('DB 완료 갱신 (Handshake 종료)');
LogMessage('DB 반영 완료');
end
else
begin
AddLog_Thread('TCP/IP 제어 실패 (하드웨어 연결 확인)');
LogMessage('LED 통신 실패');
end;
end;
finally
FPollingTimer.Enabled := True;
end;
end;
//---------------------------------------------------------
// 기존 UI 매뉴얼 테스트 로직 (수동 테스트용 유지)
//---------------------------------------------------------
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer;
Action: Integer;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not;
c_pIdata[0] := 1;
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[0] := 1;
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0;
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,404 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
System.IniFiles, Data.DB, U_DM, uLogManagerThread;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
rgModel: TRadioGroup;
GroupBox4: TGroupBox;
lbStatus: TListBox;
Panel1: TPanel;
btnStatRead: TButton;
btnReset: TButton;
btnExit: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
GroupBox3: TGroupBox;
edtIP1: TEdit;
edtIP4: TEdit;
edtIP3: TEdit;
edtIP2: TEdit;
Label1: TLabel;
Label2: TLabel;
edtPort: TEdit;
GroupBox5: TGroupBox;
btnRedBlink: TButton;
Label7: TLabel;
Label6: TLabel;
Label5: TLabel;
Label4: TLabel;
Label3: TLabel;
btnWhiteOff: TButton;
btnWhiteBlink: TButton;
btnWhiteOn: TButton;
btnBlueOff: TButton;
btnBlueBlink: TButton;
btnBlueOn: TButton;
btnGreenOff: TButton;
btnGreenBlink: TButton;
btnGreenOn: TButton;
btnYellowOff: TButton;
btnYellowBlink: TButton;
btnYellowOn: TButton;
btnRedOff: TButton;
btnRedOn: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
// 환경 설정 변수
FDBHost, FDBUser, FDBPass, FDBName: string;
FDBPort: Integer;
// 폴링 타이머
FPollingTimer: TTimer;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
procedure LoadSettings;
procedure InitDB;
procedure OnPollingTimer(Sender: TObject);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvc_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.LoadSettings;
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'settings.ini');
try
FDBHost := Ini.ReadString('DB', 'Host', '0.0.0.0');
FDBPort := Ini.ReadInteger('DB', 'Port', 33063);
FDBUser := Ini.ReadString('DB', 'User', 'mmcl_user');
FDBPass := Ini.ReadString('DB', 'Password', '');
FDBName := Ini.ReadString('DB', 'Database', 'mmcl_db');
finally
Ini.Free;
end;
end;
procedure TfrmMain.InitDB;
begin
DM.fdConnEtc.Close;
DM.fdConnEtc.Params.Clear;
DM.fdConnEtc.Params.Add('DriverID=MySQL');
DM.fdConnEtc.Params.Add('Server=' + FDBHost);
DM.fdConnEtc.Params.Add('Port=' + IntToStr(FDBPort));
DM.fdConnEtc.Params.Add('Database=' + FDBName);
DM.fdConnEtc.Params.Add('User_Name=' + FDBUser);
if FDBPass <> '' then
DM.fdConnEtc.Params.Add('Password=' + FDBPass);
DM.fdConnEtc.Params.Add('CharacterSet=utf8mb4');
try
DM.fdConnEtc.Connected := True;
LogMessage('DB 연결 성공 (' + FDBHost + ')');
AddLog_Thread('DB 연결 성공 (' + FDBHost + ')');
except
on E: Exception do
begin
LogMessage('DB 연결 실패: ' + E.Message);
AddLog_Thread('DB 연결 실패: ' + E.Message);
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize LED data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
// 1. 로그 시스템 초기화
InitLogger(ExtractFilePath(Application.ExeName) + 'Logs', 'LEDAgent', rtDaily);
AddLog_Thread('=== LEDAgent 시작 ===');
// 2. INI 설정 로드
LoadSettings;
// 3. DB 연결
InitDB;
// 4. 폴링 타이머 가동 (1초=1000ms)
FPollingTimer := TTimer.Create(Self);
FPollingTimer.Interval := 1000;
FPollingTimer.OnTimer := OnPollingTimer;
FPollingTimer.Enabled := True;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
if Assigned(FPollingTimer) then
begin
FPollingTimer.Enabled := False;
FPollingTimer.Free;
end;
if Assigned(DM) and DM.fdConnEtc.Connected then
DM.fdConnEtc.Close;
AddLog_Thread('=== LEDAgent 종료 ===');
StopLogger;
end;
procedure TfrmMain.OnPollingTimer(Sender: TObject);
var
SensorNo, DbLedPort: Integer;
DbLedIp: string;
T1, T2, T3: Integer;
IpParts: TArray<string>;
SendSuccess: Boolean;
i: Integer;
begin
FPollingTimer.Enabled := False; // 겹침 방지
try
if not DM.fdConnEtc.Connected then Exit;
DM.fdQryEtc.Close;
DM.fdQryEtc.SQL.Text :=
'SELECT sensor_no, target_ch1_statusID, target_ch2_statusID, target_ch3_statusID, led_ip, led_port ' +
'FROM sensor_info ' +
'WHERE sensor_typeid = 2 ' +
' AND (target_ch1_statusID != value_ch1_statusID ' +
' OR target_ch2_statusID != value_ch2_statusID ' +
' OR target_ch3_statusID != value_ch3_statusID) ' +
'LIMIT 1';
try
DM.fdQryEtc.Open;
except
on E: Exception do
begin
AddLog_Thread('DB 폴링 에러: ' + E.Message);
Exit;
end;
end;
if not DM.fdQryEtc.IsEmpty then
begin
SensorNo := DM.fdQryEtc.FieldByName('sensor_no').AsInteger;
T1 := DM.fdQryEtc.FieldByName('target_ch1_statusID').AsInteger; // Green
T2 := DM.fdQryEtc.FieldByName('target_ch2_statusID').AsInteger; // Yellow
T3 := DM.fdQryEtc.FieldByName('target_ch3_statusID').AsInteger; // Red
DbLedIp := DM.fdQryEtc.FieldByName('led_ip').AsString;
DbLedPort := DM.fdQryEtc.FieldByName('led_port').AsInteger;
if DbLedPort = 0 then DbLedPort := 20000;
LogMessage(Format('DB 명령 감지 - Sensor:%d, IP:%s (Target: G:%d Y:%d R:%d)', [SensorNo, DbLedIp, T1, T2, T3]));
AddLog_Thread(Format('DB 명령 감지 - Sensor:%d, IP:%s (Target: G:%d Y:%d R:%d)', [SensorNo, DbLedIp, T1, T2, T3]));
// 1. LED 전송용 데이터 배열 구성
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // write 모드
c_pIdata[1] := 0; // 모델 기본값
c_pIdata[7] := 0; // 사운드 끄기 기본
c_pIdata[4] := T1; // Green (2: Red, 3: Yellow, 4: Green)
c_pIdata[3] := T2; // Yellow
c_pIdata[2] := T3; // Red
// 2. IP 및 Port 준비 (DB 기준)
IpParts := DbLedIp.Split(['.']);
if Length(IpParts) = 4 then
begin
c_pIpadd[0] := StrToIntDef(IpParts[0], 192);
c_pIpadd[1] := StrToIntDef(IpParts[1], 168);
c_pIpadd[2] := StrToIntDef(IpParts[2], 200);
c_pIpadd[3] := StrToIntDef(IpParts[3], 114);
end;
// 3. DLL 호출하여 하드웨어 제어
SendSuccess := Tcp_Qu_RW(DbLedPort, c_pIpadd[0], c_pIdata[0]);
if SendSuccess then
begin
AddLog_Thread('하드웨어 제어 성공');
LogMessage('하드웨어 제어 성공');
// 4. DB 상태 갱신 (Handshake 완료)
DM.fdQryEtc.Close;
DM.fdQryEtc.SQL.Text :=
'UPDATE sensor_info ' +
'SET value_ch1_statusID = :v1, value_ch2_statusID = :v2, value_ch3_statusID = :v3 ' +
'WHERE sensor_no = :sno';
DM.fdQryEtc.ParamByName('v1').AsInteger := T1;
DM.fdQryEtc.ParamByName('v2').AsInteger := T2;
DM.fdQryEtc.ParamByName('v3').AsInteger := T3;
DM.fdQryEtc.ParamByName('sno').AsInteger := SensorNo;
DM.fdQryEtc.ExecSQL;
AddLog_Thread('DB 완료 갱신 (Handshake 종료)');
LogMessage('DB 반영 완료');
end
else
begin
AddLog_Thread('TCP/IP 제어 실패 (하드웨어 연결 확인)');
LogMessage('LED 통신 실패');
end;
end;
finally
FPollingTimer.Enabled := True;
end;
end;
//---------------------------------------------------------
// 기존 UI 매뉴얼 테스트 로직 (수동 테스트용 유지)
//---------------------------------------------------------
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer;
Action: Integer;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not;
c_pIdata[0] := 1;
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[0] := 1;
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0;
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,10 @@
[DB]
Host=0.0.0.0
Port=33063
User=mmcl_user
Password=*******
Database=mmcl_db
[LED]
IP=0.0.0.0
PORT=20000

View File

@ -0,0 +1,163 @@
unit uLogManagerThread;
interface
uses
System.Classes, System.SysUtils, System.Generics.Collections,
System.SyncObjs;
type
TRollingType = (rtDaily, rtHourly);
procedure InitLogger(const Folder, FilePrefix: string; RollType: TRollingType);
procedure AddLog_Thread(const Msg: string);
procedure StopLogger;
implementation
var
LogQueue: TThreadedQueue<string>;
LogThread: TThread;
LogFolder : string;
LogFilePrefix: string;
RollingType : TRollingType;
StopFlag: Boolean = False;
type
TLogThread = class(TThread)
private
FCurrentFileName: string;
function GetLogFileName: string;
procedure WriteToFile(const S: string);
protected
procedure Execute; override;
end;
procedure InitLogger(const Folder, FilePrefix: string; RollType: TRollingType);
begin
LogFolder := IncludeTrailingPathDelimiter(Folder);
if not DirectoryExists(LogFolder) then
ForceDirectories(LogFolder);
LogFilePrefix := FilePrefix;
RollingType := RollType;
LogQueue := TThreadedQueue<string>.Create(1000, 1000, 1000);
StopFlag := False;
LogThread := TLogThread.Create(False);
end;
procedure StopLogger;
begin
StopFlag := True;
if Assigned(LogThread) then
begin
LogThread.WaitFor;
LogThread.Free;
LogThread := nil;
end;
if Assigned(LogQueue) then
begin
LogQueue.Free;
LogQueue := nil;
end;
end;
procedure AddLog_Thread(const Msg: string);
begin
if Assigned(LogQueue) then
LogQueue.PushItem(FormatDateTime('yyyy-mm-dd hh:nn:ss.zzz', Now) + ' ' + Msg);
end;
{ TLogThread }
function TLogThread.GetLogFileName: string;
var
S: string;
begin
case RollingType of
rtDaily: S := FormatDateTime('yyyy-mm-dd', Now);
rtHourly: S := FormatDateTime('yyyy-mm-dd_hh', Now);
end;
Result := LogFolder + LogFilePrefix + '_' + S + '.txt';
end;
procedure TLogThread.WriteToFile(const S: string);
var
FS: TFileStream;
SW: TStreamWriter;
begin
if FCurrentFileName <> GetLogFileName then
FCurrentFileName := GetLogFileName;
// Append 모드로 열기
if FileExists(FCurrentFileName) then
FS := TFileStream.Create(FCurrentFileName, fmOpenWrite or fmShareDenyNone)
else
FS := TFileStream.Create(FCurrentFileName, fmCreate or fmShareDenyNone);
try
FS.Seek(0, soEnd);
// UTF-8 + BOM (파일 최초 생성 자동)
SW := TStreamWriter.Create(FS, TEncoding.UTF8);
try
SW.WriteLine(S);
SW.Flush;
finally
SW.Free;
end;
finally
FS.Free;
end;
end;
{
procedure TLogThread.WriteToFile(const S: string);
var
F: TextFile;
begin
if FCurrentFileName <> GetLogFileName then
FCurrentFileName := GetLogFileName;
AssignFile(F, FCurrentFileName);
if FileExists(FCurrentFileName) then
Append(F)
else
Rewrite(F);
try
Writeln(F, S);
finally
CloseFile(F);
end;
end;
}
procedure TLogThread.Execute;
var
LogItem: string;
WR: TWaitResult;
begin
FCurrentFileName := GetLogFileName;
while not StopFlag do
begin
WR := LogQueue.PopItem(LogItem); // Delphi 10.4에서 유일하게 존재하는 PopItem
if WR = wrSignaled then
begin
WriteToFile(LogItem);
end
else
Sleep(10); // 큐가 비었으면 잠시 쉬었다가 다시 확인
end;
end;
end.

View File

@ -0,0 +1,550 @@
object frmMain: TfrmMain
Left = 0
Top = 0
Caption = 'MMCL LEDAgent'
ClientHeight = 712
ClientWidth = 850
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Tahoma'
Font.Style = []
OnCreate = FormCreate
OnDestroy = FormDestroy
TextHeight = 14
object GroupBox1: TGroupBox
Left = 0
Top = 65
Width = 409
Height = 647
Align = alLeft
Caption = '[ TEST ] QLight_Lamp Control - Ethernet-type'
TabOrder = 0
object GroupBox2: TGroupBox
Left = 2
Top = 121
Width = 405
Height = 208
Align = alTop
Caption = 'Sound Select'
TabOrder = 0
object btnSoundOff: TButton
Left = 18
Top = 24
Width = 367
Height = 35
Caption = 'Sound OFF'
TabOrder = 0
OnClick = btnSoundClick
end
object btnSound1: TButton
Left = 18
Top = 72
Width = 169
Height = 35
Caption = 'Fire A-WANG'
TabOrder = 1
OnClick = btnSoundClick
end
object btnSound2: TButton
Left = 18
Top = 116
Width = 169
Height = 35
Caption = 'Emergency'
TabOrder = 2
OnClick = btnSoundClick
end
object btnSound3: TButton
Left = 18
Top = 160
Width = 169
Height = 35
Caption = 'Ambulance'
TabOrder = 3
OnClick = btnSoundClick
end
object btnSound4: TButton
Left = 216
Top = 72
Width = 169
Height = 35
Caption = 'PI-PI-PI'
TabOrder = 4
OnClick = btnSoundClick
end
object btnSound5: TButton
Left = 216
Top = 116
Width = 169
Height = 35
Caption = 'PI_contiune'
TabOrder = 5
OnClick = btnSoundClick
end
end
object GroupBox3: TGroupBox
Left = 2
Top = 16
Width = 405
Height = 105
Align = alTop
Caption = 'TCP Setting'
TabOrder = 1
DesignSize = (
405
105)
object Label1: TLabel
Left = 20
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object Label2: TLabel
Left = 262
Top = 28
Width = 38
Height = 14
Caption = 'TCP/IP'
end
object edtIP1: TEdit
Left = 72
Top = 25
Width = 35
Height = 22
TabOrder = 0
Text = '192'
end
object edtIP4: TEdit
Left = 195
Top = 25
Width = 35
Height = 22
TabOrder = 1
Text = '114'
end
object edtIP3: TEdit
Left = 154
Top = 25
Width = 35
Height = 22
TabOrder = 2
Text = '200'
end
object edtIP2: TEdit
Left = 113
Top = 25
Width = 35
Height = 22
TabOrder = 3
Text = '168'
end
object edtPort: TEdit
Left = 314
Top = 25
Width = 73
Height = 22
TabOrder = 4
Text = '20000'
end
object btnStatRead: TButton
Left = 18
Top = 57
Width = 367
Height = 36
Anchors = [akTop, akRight]
Caption = 'Stat_Read'
TabOrder = 5
OnClick = btnStatReadClick
end
end
object GroupBox5: TGroupBox
Left = 2
Top = 329
Width = 405
Height = 316
Align = alClient
Caption = 'LED Control'
TabOrder = 2
object Label7: TLabel
Left = 24
Top = 263
Width = 58
Height = 25
Caption = 'Silver'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label6: TLabel
Left = 24
Top = 205
Width = 45
Height = 25
Caption = 'Blue'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label5: TLabel
Left = 24
Top = 147
Width = 62
Height = 25
Caption = 'Green'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label4: TLabel
Left = 24
Top = 89
Width = 70
Height = 25
Caption = 'Yellow'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object Label3: TLabel
Left = 24
Top = 34
Width = 44
Height = 25
Caption = 'RED'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -21
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
end
object btnRedBlink: TButton
Left = 209
Top = 22
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 0
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOff: TButton
Left = 305
Top = 254
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 1
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteBlink: TButton
Left = 209
Top = 254
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 2
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnWhiteOn: TButton
Left = 113
Top = 254
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clSilver
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 3
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOff: TButton
Left = 305
Top = 196
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 4
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueBlink: TButton
Left = 209
Top = 196
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 5
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnBlueOn: TButton
Left = 113
Top = 196
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlue
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 6
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOff: TButton
Left = 305
Top = 138
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 7
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenBlink: TButton
Left = 209
Top = 138
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 8
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnGreenOn: TButton
Left = 113
Top = 138
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clGreen
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 9
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOff: TButton
Left = 305
Top = 80
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 10
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowBlink: TButton
Left = 209
Top = 80
Width = 80
Height = 50
Caption = 'ON/OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -16
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 11
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnYellowOn: TButton
Left = 113
Top = 80
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = 4706810
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 12
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOff: TButton
Left = 305
Top = 22
Width = 80
Height = 50
Caption = 'OFF'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 13
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
object btnRedOn: TButton
Left = 113
Top = 22
Width = 80
Height = 50
Caption = 'ON'
Font.Charset = DEFAULT_CHARSET
Font.Color = clRed
Font.Height = -24
Font.Name = 'Tahoma'
Font.Style = [fsBold]
ParentFont = False
TabOrder = 14
StyleElements = [seClient, seBorder]
OnClick = btnLampClick
end
end
end
object GroupBox4: TGroupBox
Left = 409
Top = 65
Width = 441
Height = 647
Align = alClient
Caption = '[ Status ]'
TabOrder = 2
object lbStatus: TListBox
Left = 2
Top = 16
Width = 437
Height = 629
Align = alClient
ItemHeight = 14
TabOrder = 0
ExplicitLeft = 3
end
end
object Panel1: TPanel
Left = 0
Top = 0
Width = 850
Height = 65
Align = alTop
BevelOuter = bvNone
TabOrder = 3
DesignSize = (
850
65)
object btnReset: TButton
Left = 586
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'Status Clear'
TabOrder = 0
OnClick = btnResetClick
ExplicitLeft = 582
end
object btnExit: TButton
Left = 720
Top = 9
Width = 120
Height = 41
Anchors = [akTop, akRight]
Caption = 'EXIT'
TabOrder = 1
OnClick = btnExitClick
ExplicitLeft = 716
end
end
object rgModel: TRadioGroup
Left = 431
Top = 106
Width = 120
Height = 170
Caption = 'Model Select'
ItemIndex = 0
Items.Strings = (
'WS'
'WP'
'WM(1)'
'WA(1)'
'WB'
'Buzz'
'WM(8)'
'WA(8)')
TabOrder = 1
Visible = False
end
end

View File

@ -0,0 +1,483 @@
unit uMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
System.IniFiles, Data.DB, U_DM, uLogManagerThread;
type
TfrmMain = class(TForm)
GroupBox1: TGroupBox;
rgModel: TRadioGroup;
GroupBox4: TGroupBox;
lbStatus: TListBox;
Panel1: TPanel;
btnReset: TButton;
btnExit: TButton;
GroupBox2: TGroupBox;
btnSoundOff: TButton;
btnSound1: TButton;
btnSound2: TButton;
btnSound3: TButton;
btnSound4: TButton;
btnSound5: TButton;
GroupBox3: TGroupBox;
edtIP1: TEdit;
edtIP4: TEdit;
edtIP3: TEdit;
edtIP2: TEdit;
Label1: TLabel;
Label2: TLabel;
edtPort: TEdit;
GroupBox5: TGroupBox;
btnRedBlink: TButton;
Label7: TLabel;
Label6: TLabel;
Label5: TLabel;
Label4: TLabel;
Label3: TLabel;
btnWhiteOff: TButton;
btnWhiteBlink: TButton;
btnWhiteOn: TButton;
btnBlueOff: TButton;
btnBlueBlink: TButton;
btnBlueOn: TButton;
btnGreenOff: TButton;
btnGreenBlink: TButton;
btnGreenOn: TButton;
btnYellowOff: TButton;
btnYellowBlink: TButton;
btnYellowOn: TButton;
btnRedOff: TButton;
btnRedOn: TButton;
btnStatRead: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnLampClick(Sender: TObject);
procedure btnSoundClick(Sender: TObject);
procedure btnStatReadClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
private
{ Private declarations }
c_pIdata: array[0..14] of Byte;
c_pIpadd: array[0..3] of Byte;
// 환경 설정 변수
FDBHost, FDBUser, FDBPass, FDBName: string;
FDBPort: Integer;
// 폴링 타이머
FPollingTimer: TTimer;
FStatusSyncTimer: TTimer;
function SendCommand: Boolean;
procedure LogMessage(const Msg: string);
procedure LoadSettings;
procedure InitDB;
procedure OnPollingTimer(Sender: TObject);
procedure OnStatusSyncTimer(Sender: TObject);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
function Tcp_Qu_RW(iPort: Integer; var pbIp: Byte; var pbData: Byte): Boolean; stdcall; external 'Qtvc_dll.dll';
implementation
{$R *.dfm}
const
C_lampoff = 0;
C_lampon = 1;
C_lampblink = 2;
D_not = 100;
procedure TfrmMain.LoadSettings;
var
Ini: TIniFile;
begin
Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'settings.ini');
try
FDBHost := Ini.ReadString('DB', 'Host', '0.0.0.0');
FDBPort := Ini.ReadInteger('DB', 'Port', 33063);
FDBUser := Ini.ReadString('DB', 'User', 'mmcl_user');
FDBPass := Ini.ReadString('DB', 'Password', '');
FDBName := Ini.ReadString('DB', 'Database', 'mmcl_db');
finally
Ini.Free;
end;
end;
procedure TfrmMain.InitDB;
begin
DM.fdConnEtc.Close;
DM.fdConnEtc.Params.Clear;
DM.fdConnEtc.Params.Add('DriverID=MySQL');
DM.fdConnEtc.Params.Add('Server=' + FDBHost);
DM.fdConnEtc.Params.Add('Port=' + IntToStr(FDBPort));
DM.fdConnEtc.Params.Add('Database=' + FDBName);
DM.fdConnEtc.Params.Add('User_Name=' + FDBUser);
if FDBPass <> '' then
DM.fdConnEtc.Params.Add('Password=' + FDBPass);
DM.fdConnEtc.Params.Add('CharacterSet=utf8mb4');
try
DM.fdConnEtc.Connected := True;
LogMessage('DB 연결 성공 (' + FDBHost + ')');
AddLog_Thread('DB 연결 성공 (' + FDBHost + ')');
except
on E: Exception do
begin
LogMessage('DB 연결 실패: ' + E.Message);
AddLog_Thread('DB 연결 실패: ' + E.Message);
end;
end;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Initialize LED data
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // 1-write, 0-read
c_pIdata[1] := 0; // type default
// 1. 로그 시스템 초기화
InitLogger(ExtractFilePath(Application.ExeName) + 'Logs', 'LEDAgent', rtDaily);
AddLog_Thread('=== LEDAgent 시작 ===');
// 2. INI 설정 로드
LoadSettings;
// 3. DB 연결
InitDB;
// 4. 폴링 타이머 가동 (1=1000ms)
FPollingTimer := TTimer.Create(Self);
FPollingTimer.Interval := 1000;
FPollingTimer.OnTimer := OnPollingTimer;
FPollingTimer.Enabled := True;
// 5. 실시간 상태 동기화 타이머 가동 (5=5000ms)
FStatusSyncTimer := TTimer.Create(Self);
FStatusSyncTimer.Interval := 5000;
FStatusSyncTimer.OnTimer := OnStatusSyncTimer;
FStatusSyncTimer.Enabled := True;
end;
procedure TfrmMain.FormDestroy(Sender: TObject);
begin
if Assigned(FPollingTimer) then
begin
FPollingTimer.Enabled := False;
FPollingTimer.Free;
end;
if Assigned(FStatusSyncTimer) then
begin
FStatusSyncTimer.Enabled := False;
FStatusSyncTimer.Free;
end;
if Assigned(DM) and DM.fdConnEtc.Connected then
DM.fdConnEtc.Close;
AddLog_Thread('=== LEDAgent 종료 ===');
StopLogger;
end;
procedure TfrmMain.OnPollingTimer(Sender: TObject);
var
SensorNo, DbLedPort: Integer;
DbLedIp: string;
T1, T2, T3: Integer;
IpParts: TArray<string>;
SendSuccess: Boolean;
i: Integer;
begin
FPollingTimer.Enabled := False; // 겹침 방지
try
if not DM.fdConnEtc.Connected then Exit;
DM.fdQryEtc.Close;
DM.fdQryEtc.SQL.Text :=
'SELECT sensor_no, target_ch1_statusID, target_ch2_statusID, target_ch3_statusID, led_ip, led_port ' +
'FROM sensor_info ' +
'WHERE sensor_typeid = 2 ' +
' AND (target_ch1_statusID != value_ch1_statusID ' +
' OR target_ch2_statusID != value_ch2_statusID ' +
' OR target_ch3_statusID != value_ch3_statusID) ' +
'LIMIT 1';
try
DM.fdQryEtc.Open;
except
on E: Exception do
begin
AddLog_Thread('DB 폴링 에러: ' + E.Message);
Exit;
end;
end;
if not DM.fdQryEtc.IsEmpty then
begin
SensorNo := DM.fdQryEtc.FieldByName('sensor_no').AsInteger;
T1 := DM.fdQryEtc.FieldByName('target_ch1_statusID').AsInteger; // Green
T2 := DM.fdQryEtc.FieldByName('target_ch2_statusID').AsInteger; // Yellow
T3 := DM.fdQryEtc.FieldByName('target_ch3_statusID').AsInteger; // Red
DbLedIp := DM.fdQryEtc.FieldByName('led_ip').AsString;
DbLedPort := DM.fdQryEtc.FieldByName('led_port').AsInteger;
if DbLedPort = 0 then DbLedPort := 20000;
LogMessage(Format('DB 명령 감지 - Sensor:%d, IP:%s (Target: G:%d Y:%d R:%d)', [SensorNo, DbLedIp, T1, T2, T3]));
AddLog_Thread(Format('DB 명령 감지 - Sensor:%d, IP:%s (Target: G:%d Y:%d R:%d)', [SensorNo, DbLedIp, T1, T2, T3]));
// 1. LED 전송용 데이터 배열 구성
for i := 0 to 14 do c_pIdata[i] := D_not;
c_pIdata[0] := 1; // write 모드
c_pIdata[1] := 0; // 모델 기본값
c_pIdata[7] := 0; // 사운드 끄기 기본
c_pIdata[4] := T1; // Green (2: Red, 3: Yellow, 4: Green)
c_pIdata[3] := T2; // Yellow
c_pIdata[2] := T3; // Red
// 2. IP Port 준비 (DB 기준)
IpParts := DbLedIp.Split(['.']);
if Length(IpParts) = 4 then
begin
c_pIpadd[0] := StrToIntDef(IpParts[0], 192);
c_pIpadd[1] := StrToIntDef(IpParts[1], 168);
c_pIpadd[2] := StrToIntDef(IpParts[2], 200);
c_pIpadd[3] := StrToIntDef(IpParts[3], 114);
end;
// 3. DLL 호출하여 하드웨어 제어
SendSuccess := Tcp_Qu_RW(DbLedPort, c_pIpadd[0], c_pIdata[0]);
if SendSuccess then
begin
AddLog_Thread('하드웨어 제어 성공');
LogMessage('하드웨어 제어 성공');
// 4. DB 상태 갱신 (Handshake 완료)
DM.fdQryEtc.Close;
DM.fdQryEtc.SQL.Text :=
'UPDATE sensor_info ' +
'SET value_ch1_statusID = :v1, value_ch2_statusID = :v2, value_ch3_statusID = :v3 ' +
'WHERE sensor_no = :sno';
DM.fdQryEtc.ParamByName('v1').AsInteger := T1;
DM.fdQryEtc.ParamByName('v2').AsInteger := T2;
DM.fdQryEtc.ParamByName('v3').AsInteger := T3;
DM.fdQryEtc.ParamByName('sno').AsInteger := SensorNo;
DM.fdQryEtc.ExecSQL;
AddLog_Thread('DB 완료 갱신 (Handshake 종료)');
LogMessage('DB 반영 완료');
end
else
begin
AddLog_Thread('TCP/IP 제어 실패 (하드웨어 연결 확인)');
LogMessage('LED 통신 실패');
end;
end;
finally
FPollingTimer.Enabled := True;
end;
end;
procedure TfrmMain.OnStatusSyncTimer(Sender: TObject);
var
SensorNo, DbLedPort: Integer;
DbLedIp: string;
PhysR, PhysY, PhysG: Integer;
DbR, DbY, DbG: Integer;
IpParts: TArray<string>;
Success: Boolean;
begin
FStatusSyncTimer.Enabled := False;
try
if not DM.fdConnEtc.Connected then Exit;
DM.fdQryEtc.Close;
DM.fdQryEtc.SQL.Text := 'SELECT sensor_no, value_ch1_statusID, value_ch2_statusID, value_ch3_statusID, led_ip, led_port FROM sensor_info WHERE sensor_typeid = 2';
try
DM.fdQryEtc.Open;
except
Exit;
end;
while not DM.fdQryEtc.Eof do
begin
SensorNo := DM.fdQryEtc.FieldByName('sensor_no').AsInteger;
DbG := DM.fdQryEtc.FieldByName('value_ch1_statusID').AsInteger;
DbY := DM.fdQryEtc.FieldByName('value_ch2_statusID').AsInteger;
DbR := DM.fdQryEtc.FieldByName('value_ch3_statusID').AsInteger;
DbLedIp := DM.fdQryEtc.FieldByName('led_ip').AsString;
DbLedPort := DM.fdQryEtc.FieldByName('led_port').AsInteger;
if DbLedPort = 0 then DbLedPort := 20000;
IpParts := DbLedIp.Split(['.']);
if Length(IpParts) = 4 then
begin
c_pIpadd[0] := StrToIntDef(IpParts[0], 192);
c_pIpadd[1] := StrToIntDef(IpParts[1], 168);
c_pIpadd[2] := StrToIntDef(IpParts[2], 200);
c_pIpadd[3] := StrToIntDef(IpParts[3], 114);
c_pIdata[0] := 0; // READ mode
Success := Tcp_Qu_RW(DbLedPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
PhysR := c_pIdata[2];
PhysY := c_pIdata[3];
PhysG := c_pIdata[4];
// 하드웨어 상태와 DB 상태가 다르면 양쪽(Target, Value) 모두 덮어씌움
if (PhysR <> DbR) or (PhysY <> DbY) or (PhysG <> DbG) then
begin
DM.fdConnEtc.ExecSQL(
'UPDATE sensor_info SET value_ch1_statusID=:g, value_ch2_statusID=:y, value_ch3_statusID=:r, target_ch1_statusID=:g2, target_ch2_statusID=:y2, target_ch3_statusID=:r2 WHERE sensor_no=:s',
[PhysG, PhysY, PhysR, PhysG, PhysY, PhysR, SensorNo]
);
AddLog_Thread(Format('하드웨어 동기화 완료 (Sensor:%d, R:%d Y:%d G:%d)', [SensorNo, PhysR, PhysY, PhysG]));
end;
end;
end;
DM.fdQryEtc.Next;
end;
finally
FStatusSyncTimer.Enabled := True;
end;
end;
//---------------------------------------------------------
// 기존 UI 매뉴얼 테스트 로직 (수동 테스트용 유지)
//---------------------------------------------------------
procedure TfrmMain.LogMessage(const Msg: string);
begin
lbStatus.Items.Insert(0, FormatDateTime('hh:nn:ss', Now) + ' ' + Msg);
end;
function TfrmMain.SendCommand: Boolean;
var
iPort: Integer;
begin
Result := False;
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[1] := rgModel.ItemIndex;
Result := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Result then
LogMessage('[Success send]')
else
LogMessage('[Send Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnLampClick(Sender: TObject);
var
Btn: TButton;
ColorIdx: Integer;
Action: Integer;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[7] := D_not;
c_pIdata[0] := 1;
Btn := Sender as TButton;
if (Btn = btnRedOn) or (Btn = btnRedBlink) or (Btn = btnRedOff) then ColorIdx := 2
else if (Btn = btnYellowOn) or (Btn = btnYellowBlink) or (Btn = btnYellowOff) then ColorIdx := 3
else if (Btn = btnGreenOn) or (Btn = btnGreenBlink) or (Btn = btnGreenOff) then ColorIdx := 4
else if (Btn = btnBlueOn) or (Btn = btnBlueBlink) or (Btn = btnBlueOff) then ColorIdx := 5
else if (Btn = btnWhiteOn) or (Btn = btnWhiteBlink) or (Btn = btnWhiteOff) then ColorIdx := 6
else Exit;
if Btn.Caption = 'ON' then Action := C_lampon
else if Btn.Caption = 'ON/OFF' then Action := C_lampblink
else Action := C_lampoff;
c_pIdata[ColorIdx] := Action;
SendCommand;
end;
procedure TfrmMain.btnSoundClick(Sender: TObject);
var
Btn: TButton;
i: Integer;
begin
for i := 2 to 6 do c_pIdata[i] := D_not;
c_pIdata[0] := 1;
Btn := Sender as TButton;
if Btn = btnSoundOff then c_pIdata[7] := 0
else if Btn = btnSound1 then c_pIdata[7] := 1
else if Btn = btnSound2 then c_pIdata[7] := 2
else if Btn = btnSound3 then c_pIdata[7] := 3
else if Btn = btnSound4 then c_pIdata[7] := 4
else if Btn = btnSound5 then c_pIdata[7] := 5
else c_pIdata[7] := D_not;
SendCommand;
end;
procedure TfrmMain.btnStatReadClick(Sender: TObject);
var
iPort: Integer;
Success: Boolean;
StatusStr: string;
begin
try
c_pIpadd[0] := StrToIntDef(edtIP1.Text, 192);
c_pIpadd[1] := StrToIntDef(edtIP2.Text, 168);
c_pIpadd[2] := StrToIntDef(edtIP3.Text, 200);
c_pIpadd[3] := StrToIntDef(edtIP4.Text, 114);
iPort := StrToIntDef(edtPort.Text, 20000);
c_pIdata[0] := 0;
Success := Tcp_Qu_RW(iPort, c_pIpadd[0], c_pIdata[0]);
if Success then
begin
StatusStr := '[Read Success] ';
if c_pIdata[2] = 0 then StatusStr := StatusStr + 'R-OFF ' else if c_pIdata[2] = 1 then StatusStr := StatusStr + 'R-ON ' else if c_pIdata[2] = 2 then StatusStr := StatusStr + 'R-BLINK ';
if c_pIdata[3] = 0 then StatusStr := StatusStr + 'Y-OFF ' else if c_pIdata[3] = 1 then StatusStr := StatusStr + 'Y-ON ' else if c_pIdata[3] = 2 then StatusStr := StatusStr + 'Y-BLINK ';
if c_pIdata[4] = 0 then StatusStr := StatusStr + 'G-OFF ' else if c_pIdata[4] = 1 then StatusStr := StatusStr + 'G-ON ' else if c_pIdata[4] = 2 then StatusStr := StatusStr + 'G-BLINK ';
LogMessage(StatusStr);
end
else
LogMessage('[Read Error]');
except
on E: Exception do
LogMessage('[Error] ' + E.Message);
end;
end;
procedure TfrmMain.btnResetClick(Sender: TObject);
begin
lbStatus.Clear;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
end.

View File

@ -0,0 +1,20 @@
program NilmMQTT_Agent;
uses
Vcl.Forms,
uMain in 'uMain.pas' {fMain},
U_DM in 'U_DM.pas' {DM: TDataModule},
Vcl.Themes,
Vcl.Styles,
uLogManagerThread in 'uLogManagerThread.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle('Carbon');
Application.CreateForm(TDM, DM);
Application.CreateForm(TfMain, fMain);
Application.Run;
end.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<BorlandProject>
<Transactions>
<Transaction>1899-12-30 00:00:00.000.261,=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.271,=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.175,=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.054,D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas=C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_nilm_agent\uMain.pas</Transaction>
<Transaction>1899-12-30 00:00:00.000.054,D:\MyDoc\Embarcadero\Studio\Projects\Unit1.dfm=C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_nilm_agent\uMain.dfm</Transaction>
<Transaction>1899-12-30 00:00:00.000.013,D:\MyDoc\Embarcadero\Studio\Projects\Project1.dproj=C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_nilm_agent\NilmMQTT_Agent.dproj</Transaction>
<Transaction>1899-12-30 00:00:00.000.996,=D:\MyDoc\Embarcadero\Studio\Projects\Unit1.pas</Transaction>
<Transaction>2026-07-22 16:38:15.876,=C:\Users\MyName\Desktop\antigravity\MMCL(Machine Monitoring Control for LLM)\agents\delphi_nilm_agent\uLogManagerThread.pas</Transaction>
</Transactions>
</BorlandProject>

Binary file not shown.

View File

@ -0,0 +1,753 @@
unit UMQTTClient;
interface
uses
System.SysUtils, System.Classes, System.SyncObjs, System.DateUtils,
System.Generics.Collections,
IdTCPClient, IdGlobal, IdExceptionCore, IdException, IdIOHandler;
type
TMQTTMessageEvent = procedure(const ATopic, APayload: string) of object;
TMQTTStatusEvent = procedure(AConnected: Boolean; const AErrorMsg: string) of object;
TMQTTRecvThread = class;
TMQTTClient = class
private
FHost: string;
FPort: Word;
FClientID: string;
FUserName: string;
FPassword: string;
FTCPClient: TIdTCPClient;
FRecvThread: TMQTTRecvThread;
FOnMessage: TMQTTMessageEvent;
FOnStatus: TMQTTStatusEvent;
FConnected: Boolean;
FSubscribeTopics: TStringList;
FKeepAlive: Word;
FPacketID: Word;
FActive: Boolean;
FSendQueue: TList<TIdBytes>;
FSendLock: TCriticalSection;
function NextPacketID: Word;
function BuildConnectPacket: TIdBytes;
function BuildSubscribePacket(const ATopic: string): TIdBytes;
function BuildPingReqPacket: TIdBytes;
function BuildDisconnectPacket: TIdBytes;
function BuildPublishPacket(const ATopic, APayload: string): TIdBytes;
function EncodeRemainingLength(ALength: Integer): TIdBytes;
function BuildUnsubscribePacket(const ATopic: string): TIdBytes;
procedure SetConnected(AValue: Boolean; const AErrorMsg: string = '');
procedure FireMessage(const ATopic, APayload: string);
procedure EnqueuePacket(const AData: TIdBytes);
public
constructor Create(const AHost: string; APort: Word; const AClientID: string = ''; const AUserName: string = ''; const APassword: string = '');
destructor Destroy; override;
procedure Connect;
procedure Disconnect;
procedure Subscribe(const ATopic: string);
procedure Unsubscribe(const ATopic: string);
procedure Publish(const ATopic, APayload: string);
property Host: string read FHost write FHost;
property Port: Word read FPort write FPort;
property UserName: string read FUserName write FUserName;
property Password: string read FPassword write FPassword;
property Connected: Boolean read FConnected;
property OnMessage: TMQTTMessageEvent read FOnMessage write FOnMessage;
property OnStatus: TMQTTStatusEvent read FOnStatus write FOnStatus;
end;
TMQTTRecvThread = class(TThread)
private
FOwner: TMQTTClient;
function ReadRemainingLength: Integer;
procedure ProcessPublish(ARemainingLen: Integer);
function FlushSendQueue: Boolean;
protected
procedure Execute; override;
public
constructor Create(AOwner: TMQTTClient);
end;
implementation
{ TMQTTClient }
constructor TMQTTClient.Create(const AHost: string; APort: Word; const AClientID: string; const AUserName: string; const APassword: string);
begin
inherited Create;
FHost := AHost;
FPort := APort;
FUserName := AUserName;
FPassword := APassword;
Randomize;
if AClientID <> '' then
FClientID := AClientID + IntToStr(Random(99999))
else
FClientID := 'Qsentech' + IntToStr(Random(99999));
FKeepAlive := 60;
FPacketID := 0;
FConnected := False;
FActive := False;
FSubscribeTopics := TStringList.Create;
FSubscribeTopics.Sorted := True;
FSubscribeTopics.Duplicates := dupIgnore;
FSendQueue := TList<TIdBytes>.Create;
FSendLock := TCriticalSection.Create;
FTCPClient := TIdTCPClient.Create(nil);
FTCPClient.ConnectTimeout := 5000;
// ReadTimeout: 읽기 대기 시간 (500ms 폴링 주기)
FTCPClient.ReadTimeout := 500;
end;
destructor TMQTTClient.Destroy;
begin
Disconnect;
FTCPClient.Free;
FSendQueue.Free;
FSendLock.Free;
FSubscribeTopics.Free;
inherited;
end;
function TMQTTClient.NextPacketID: Word;
begin
Inc(FPacketID);
if FPacketID = 0 then
FPacketID := 1;
Result := FPacketID;
end;
function TMQTTClient.EncodeRemainingLength(ALength: Integer): TIdBytes;
var
EncodedByte: Byte;
Len: Integer;
begin
SetLength(Result, 0);
Len := ALength;
repeat
EncodedByte := Len mod 128;
Len := Len div 128;
if Len > 0 then
EncodedByte := EncodedByte or $80;
SetLength(Result, Length(Result) + 1);
Result[High(Result)] := EncodedByte;
until Len = 0;
end;
{
function TMQTTClient.BuildConnectPacket: TIdBytes;
var
VarHeader, Payload, Remaining, Packet: TIdBytes;
ClientIDBytes: TIdBytes;
RemLen: Integer;
begin
SetLength(VarHeader, 10);
VarHeader[0] := 0;
VarHeader[1] := 4;
VarHeader[2] := Ord('M');
VarHeader[3] := Ord('Q');
VarHeader[4] := Ord('T');
VarHeader[5] := Ord('T');
VarHeader[6] := 4;
VarHeader[7] := 2;
VarHeader[8] := Hi(FKeepAlive);
VarHeader[9] := Lo(FKeepAlive);
ClientIDBytes := ToBytes(FClientID, IndyTextEncoding_UTF8);
SetLength(Payload, 2 + Length(ClientIDBytes));
Payload[0] := Hi(Word(Length(ClientIDBytes)));
Payload[1] := Lo(Word(Length(ClientIDBytes)));
if Length(ClientIDBytes) > 0 then
CopyTIdBytes(ClientIDBytes, 0, Payload, 2, Length(ClientIDBytes));
RemLen := Length(VarHeader) + Length(Payload);
Remaining := EncodeRemainingLength(RemLen);
SetLength(Packet, 1 + Length(Remaining) + RemLen);
Packet[0] := $10;
CopyTIdBytes(Remaining, 0, Packet, 1, Length(Remaining));
CopyTIdBytes(VarHeader, 0, Packet, 1 + Length(Remaining), Length(VarHeader));
CopyTIdBytes(Payload, 0, Packet, 1 + Length(Remaining) + Length(VarHeader), Length(Payload));
Result := Packet;
end;
}
function TMQTTClient.BuildConnectPacket: TIdBytes;
var
VarHeader, Payload, Remaining, Packet: TIdBytes;
ClientIDBytes: TIdBytes;
UserBytes: TIdBytes;
PassBytes: TIdBytes;
RemLen: Integer;
P: Integer;
ConnectFlags: Byte;
procedure AddMQTTString(var Dest: TIdBytes; const Data: TIdBytes);
var
OldLen: Integer;
begin
OldLen := Length(Dest);
SetLength(Dest, OldLen + 2 + Length(Data));
Dest[OldLen] := Hi(Word(Length(Data)));
Dest[OldLen + 1] := Lo(Word(Length(Data)));
if Length(Data) > 0 then
CopyTIdBytes(Data, 0, Dest, OldLen + 2, Length(Data));
end;
begin
// =========================
// CONNECT FLAGS 생성
// =========================
ConnectFlags := $02; // Clean Session
if FUserName <> '' then
ConnectFlags := ConnectFlags or $80;
if FPassword <> '' then
ConnectFlags := ConnectFlags or $40;
// =========================
// Variable Header
// =========================
SetLength(VarHeader, 10);
VarHeader[0] := 0;
VarHeader[1] := 4;
VarHeader[2] := Ord('M');
VarHeader[3] := Ord('Q');
VarHeader[4] := Ord('T');
VarHeader[5] := Ord('T');
VarHeader[6] := 4; // MQTT 3.1.1
VarHeader[7] := ConnectFlags;
VarHeader[8] := Hi(FKeepAlive);
VarHeader[9] := Lo(FKeepAlive);
// =========================
// Payload
// =========================
SetLength(Payload, 0);
// Client ID
ClientIDBytes := ToBytes(FClientID, IndyTextEncoding_UTF8);
AddMQTTString(Payload, ClientIDBytes);
// Username
if FUserName <> '' then
begin
UserBytes := ToBytes(FUserName, IndyTextEncoding_UTF8);
AddMQTTString(Payload, UserBytes);
end;
// Password
if FPassword <> '' then
begin
PassBytes := ToBytes(FPassword, IndyTextEncoding_UTF8);
AddMQTTString(Payload, PassBytes);
end;
// =========================
// Remaining Length
// =========================
RemLen := Length(VarHeader) + Length(Payload);
Remaining := EncodeRemainingLength(RemLen);
// =========================
// Fixed Header
// =========================
SetLength(Packet, 1 + Length(Remaining) + RemLen);
Packet[0] := $10;
P := 1;
CopyTIdBytes(Remaining, 0, Packet, P, Length(Remaining));
Inc(P, Length(Remaining));
CopyTIdBytes(VarHeader, 0, Packet, P, Length(VarHeader));
Inc(P, Length(VarHeader));
CopyTIdBytes(Payload, 0, Packet, P, Length(Payload));
Result := Packet;
end;
function TMQTTClient.BuildSubscribePacket(const ATopic: string): TIdBytes;
var
TopicBytes, VarHeader, Payload, Remaining, Packet: TIdBytes;
PID: Word;
RemLen: Integer;
begin
PID := NextPacketID;
SetLength(VarHeader, 2);
VarHeader[0] := Hi(PID);
VarHeader[1] := Lo(PID);
TopicBytes := ToBytes(ATopic, IndyTextEncoding_UTF8);
SetLength(Payload, 2 + Length(TopicBytes) + 1);
Payload[0] := Hi(Word(Length(TopicBytes)));
Payload[1] := Lo(Word(Length(TopicBytes)));
CopyTIdBytes(TopicBytes, 0, Payload, 2, Length(TopicBytes));
Payload[2 + Length(TopicBytes)] := 0;
RemLen := Length(VarHeader) + Length(Payload);
Remaining := EncodeRemainingLength(RemLen);
SetLength(Packet, 1 + Length(Remaining) + RemLen);
Packet[0] := $82;
CopyTIdBytes(Remaining, 0, Packet, 1, Length(Remaining));
CopyTIdBytes(VarHeader, 0, Packet, 1 + Length(Remaining), Length(VarHeader));
CopyTIdBytes(Payload, 0, Packet, 1 + Length(Remaining) + Length(VarHeader), Length(Payload));
Result := Packet;
end;
function TMQTTClient.BuildUnsubscribePacket(const ATopic: string): TIdBytes;
var
TopicBytes, VarHeader, Payload, Remaining, Packet: TIdBytes;
PID: Word;
RemLen: Integer;
begin
PID := NextPacketID;
SetLength(VarHeader, 2);
VarHeader[0] := Hi(PID);
VarHeader[1] := Lo(PID);
TopicBytes := ToBytes(ATopic, IndyTextEncoding_UTF8);
SetLength(Payload, 2 + Length(TopicBytes));
Payload[0] := Hi(Word(Length(TopicBytes)));
Payload[1] := Lo(Word(Length(TopicBytes)));
CopyTIdBytes(TopicBytes, 0, Payload, 2, Length(TopicBytes));
RemLen := Length(VarHeader) + Length(Payload);
Remaining := EncodeRemainingLength(RemLen);
SetLength(Packet, 1 + Length(Remaining) + RemLen);
Packet[0] := $A2;
CopyTIdBytes(Remaining, 0, Packet, 1, Length(Remaining));
CopyTIdBytes(VarHeader, 0, Packet, 1 + Length(Remaining), Length(VarHeader));
CopyTIdBytes(Payload, 0, Packet, 1 + Length(Remaining) + Length(VarHeader), Length(Payload));
Result := Packet;
end;
function TMQTTClient.BuildPingReqPacket: TIdBytes;
begin
SetLength(Result, 2);
Result[0] := $C0;
Result[1] := $00;
end;
function TMQTTClient.BuildDisconnectPacket: TIdBytes;
begin
SetLength(Result, 2);
Result[0] := $E0;
Result[1] := $00;
end;
function TMQTTClient.BuildPublishPacket(const ATopic, APayload: string): TIdBytes;
var
TopicBytes, PayloadBytes, Remaining, Packet: TIdBytes;
RemLen, Offset: Integer;
begin
TopicBytes := ToBytes(ATopic, IndyTextEncoding_UTF8);
PayloadBytes := ToBytes(APayload, IndyTextEncoding_UTF8);
RemLen := 2 + Length(TopicBytes) + Length(PayloadBytes);
Remaining := EncodeRemainingLength(RemLen);
SetLength(Packet, 1 + Length(Remaining) + RemLen);
Packet[0] := $30;
Offset := 1;
CopyTIdBytes(Remaining, 0, Packet, Offset, Length(Remaining));
Inc(Offset, Length(Remaining));
Packet[Offset] := Hi(Word(Length(TopicBytes)));
Packet[Offset + 1] := Lo(Word(Length(TopicBytes)));
Inc(Offset, 2);
CopyTIdBytes(TopicBytes, 0, Packet, Offset, Length(TopicBytes));
Inc(Offset, Length(TopicBytes));
if Length(PayloadBytes) > 0 then
CopyTIdBytes(PayloadBytes, 0, Packet, Offset, Length(PayloadBytes));
Result := Packet;
end;
procedure TMQTTClient.EnqueuePacket(const AData: TIdBytes);
begin
FSendLock.Enter;
try
FSendQueue.Add(AData);
finally
FSendLock.Leave;
end;
end;
procedure TMQTTClient.SetConnected(AValue: Boolean; const AErrorMsg: string = '');
var
LStatusEvent: TMQTTStatusEvent;
begin
// 상태가 실제로 변경될 때만 이벤트 발생 (UI 플리커 방지)
// if FConnected = AValue then Exit; // 에러 로깅을 위해 매번 발생시키도록 수정
FConnected := AValue;
LStatusEvent := FOnStatus;
if Assigned(LStatusEvent) then
begin
TThread.Queue(nil,
procedure
begin
if Assigned(LStatusEvent) then
LStatusEvent(AValue, AErrorMsg);
end);
end;
end;
procedure TMQTTClient.FireMessage(const ATopic, APayload: string);
var
LTopic, LPayload: string;
LMessageEvent: TMQTTMessageEvent;
begin
LTopic := ATopic;
LPayload := APayload;
LMessageEvent := FOnMessage;
if Assigned(LMessageEvent) then
begin
TThread.Queue(nil,
procedure
begin
if Assigned(LMessageEvent) then
LMessageEvent(LTopic, LPayload);
end);
end;
end;
procedure TMQTTClient.Connect;
begin
if FActive then
Exit;
FActive := True;
FRecvThread := TMQTTRecvThread.Create(Self);
end;
procedure TMQTTClient.Disconnect;
begin
FActive := False;
if FRecvThread <> nil then
begin
FRecvThread.Terminate;
FRecvThread.WaitFor;
FreeAndNil(FRecvThread);
end;
FConnected := False;
if Assigned(FOnStatus) then
FOnStatus(False, 'User Disconnected');
end;
procedure TMQTTClient.Subscribe(const ATopic: string);
begin
if FSubscribeTopics.IndexOf(ATopic) < 0 then
FSubscribeTopics.Add(ATopic);
if FConnected then
EnqueuePacket(BuildSubscribePacket(ATopic));
end;
procedure TMQTTClient.Unsubscribe(const ATopic: string);
var
Idx: Integer;
begin
Idx := FSubscribeTopics.IndexOf(ATopic);
if Idx >= 0 then
FSubscribeTopics.Delete(Idx);
if FConnected then
EnqueuePacket(BuildUnsubscribePacket(ATopic));
end;
procedure TMQTTClient.Publish(const ATopic, APayload: string);
begin
if FConnected then
EnqueuePacket(BuildPublishPacket(ATopic, APayload));
end;
{ TMQTTRecvThread }
constructor TMQTTRecvThread.Create(AOwner: TMQTTClient);
begin
inherited Create(False);
FreeOnTerminate := False;
FOwner := AOwner;
end;
function TMQTTRecvThread.ReadRemainingLength: Integer;
var
Multiplier: Integer;
EncodedByte: Byte;
begin
Result := 0;
Multiplier := 1;
repeat
EncodedByte := FOwner.FTCPClient.IOHandler.ReadByte;
Result := Result + (EncodedByte and $7F) * Multiplier;
Multiplier := Multiplier * 128;
until (EncodedByte and $80) = 0;
end;
procedure TMQTTRecvThread.ProcessPublish(ARemainingLen: Integer);
var
TopicLen: Word;
TopicBytes, PayloadBytes: TIdBytes;
Topic, Payload: string;
PayloadLen: Integer;
begin
TopicLen := FOwner.FTCPClient.IOHandler.ReadByte shl 8;
TopicLen := TopicLen or FOwner.FTCPClient.IOHandler.ReadByte;
FOwner.FTCPClient.IOHandler.ReadBytes(TopicBytes, TopicLen);
Topic := BytesToString(TopicBytes, IndyTextEncoding_UTF8);
PayloadLen := ARemainingLen - 2 - TopicLen;
if PayloadLen > 0 then
begin
FOwner.FTCPClient.IOHandler.ReadBytes(PayloadBytes, PayloadLen);
Payload := BytesToString(PayloadBytes, IndyTextEncoding_UTF8);
end
else
Payload := '';
FOwner.FireMessage(Topic, Payload);
end;
function TMQTTRecvThread.FlushSendQueue: Boolean;
var
Packets: TList<TIdBytes>;
Pkt: TIdBytes;
begin
Result := True;
Packets := nil;
FOwner.FSendLock.Enter;
try
if FOwner.FSendQueue.Count > 0 then
begin
Packets := TList<TIdBytes>.Create;
Packets.AddRange(FOwner.FSendQueue);
FOwner.FSendQueue.Clear;
end;
finally
FOwner.FSendLock.Leave;
end;
if Packets <> nil then
begin
try
for Pkt in Packets do
begin
try
FOwner.FTCPClient.IOHandler.Write(Pkt);
except
Result := False;
Break;
end;
end;
finally
Packets.Free;
end;
end;
end;
procedure TMQTTRecvThread.Execute;
var
ConnAckBuf: TIdBytes;
PacketType: Byte;
RemainingLen: Integer;
DiscardBuf: TIdBytes;
LastPingTime: TDateTime;
PingIntervalSec: Integer;
begin
PingIntervalSec := FOwner.FKeepAlive div 2;
if PingIntervalSec < 10 then
PingIntervalSec := 10;
while not Terminated do
begin
// === Connection Phase ===
try
FOwner.FTCPClient.Host := FOwner.FHost;
FOwner.FTCPClient.Port := FOwner.FPort;
FOwner.FTCPClient.Connect;
FOwner.FTCPClient.IOHandler.ReadTimeout := 500; // 읽기 타임아웃 재설정
// CONNECT 패킷 전송
FOwner.FTCPClient.IOHandler.Write(FOwner.BuildConnectPacket);
// 무한대기 읽기로 CONNACK 수신 (접속시에만)
FOwner.FTCPClient.IOHandler.ReadTimeout := 500;
var WaitCount := 0;
while (WaitCount < 20) and not Terminated do
begin
FOwner.FTCPClient.IOHandler.CheckForDataOnSource(500);
if not FOwner.FTCPClient.IOHandler.InputBufferIsEmpty then
Break;
Inc(WaitCount);
end;
if Terminated then Break;
FOwner.FTCPClient.IOHandler.ReadBytes(ConnAckBuf, 4, False);
if (Length(ConnAckBuf) >= 4) and (ConnAckBuf[0] = $20) and (ConnAckBuf[3] = $00) then
begin
FOwner.SetConnected(True, '');
LastPingTime := Now;
// Subscribe all registered topics
for var I := 0 to FOwner.FSubscribeTopics.Count - 1 do
begin
FOwner.FTCPClient.IOHandler.Write(FOwner.BuildSubscribePacket(FOwner.FSubscribeTopics[I]));
end;
end
else
begin
try FOwner.FTCPClient.Disconnect; except end;
if Length(ConnAckBuf) >= 4 then
FOwner.SetConnected(False, '서버 접속 거부됨 (Return Code: ' + IntToStr(ConnAckBuf[3]) + ')')
else
FOwner.SetConnected(False, '서버 응답 없음 (CONNACK 타임아웃)');
if not Terminated then Sleep(5000);
Continue;
end;
except
on E: Exception do
begin
FOwner.SetConnected(False, '소켓 통신 에러: ' + E.Message);
try FOwner.FTCPClient.Disconnect; except end;
if not Terminated then Sleep(5000);
Continue;
end;
end;
// === Receive Loop ===
while not Terminated do
begin
// 1) 송신 flush
if not FlushSendQueue then
Break; // 전송 실패 = 연결 끊김
// 2) PINGREQ 주기적 전송
if SecondsBetween(Now, LastPingTime) >= PingIntervalSec then
begin
LastPingTime := Now;
try
FOwner.FTCPClient.IOHandler.Write(FOwner.BuildPingReqPacket);
except
Break; // 전송 실패 = 연결 끊김
end;
end;
// 3) 소켓에서 데이터 읽기 시도
if FOwner.FTCPClient.IOHandler.InputBufferIsEmpty then
begin
FOwner.FTCPClient.IOHandler.CheckForDataOnSource(500);
if FOwner.FTCPClient.IOHandler.InputBufferIsEmpty then
Continue;
end;
try
PacketType := FOwner.FTCPClient.IOHandler.ReadByte;
except
on E: EIdConnClosedGracefully do
begin
Break;
end;
on E: EIdException do
begin
Break;
end;
on E: Exception do
begin
Break;
end;
end;
// 4) 패킷 나머지 읽기 (데이터가 있으므로 타임아웃 가능성 낮음)
try
RemainingLen := ReadRemainingLength;
case (PacketType and $F0) of
$30: // PUBLISH
ProcessPublish(RemainingLen);
$90: // SUBACK
begin
if RemainingLen > 0 then
FOwner.FTCPClient.IOHandler.ReadBytes(DiscardBuf, RemainingLen);
end;
$D0: // PINGRESP
begin
// Keep-Alive 확인 완료
if RemainingLen > 0 then
FOwner.FTCPClient.IOHandler.ReadBytes(DiscardBuf, RemainingLen);
end;
else
// 없는 패킷 남은 바이트 소비
if RemainingLen > 0 then
FOwner.FTCPClient.IOHandler.ReadBytes(DiscardBuf, RemainingLen);
end;
except
// 패킷 파싱 오류 = 연결 끊김
Break;
end;
end;
// === 연결 끊김 처리 ===
FOwner.SetConnected(False, '네트워크 단절');
if not Terminated then
begin
try FOwner.FTCPClient.Disconnect; except end;
for var I := 1 to 50 do
begin
if Terminated then Break;
Sleep(100);
end;
end else
begin
try
if FOwner.FTCPClient.Connected and (FOwner.FTCPClient.IOHandler <> nil) then
FOwner.FTCPClient.IOHandler.Write(FOwner.BuildDisconnectPacket);
except end;
try FOwner.FTCPClient.Disconnect; except end;
end;
end;
end;
end.

View File

@ -0,0 +1,36 @@
object DM: TDM
Height = 274
Width = 693
object fdConnNilm: TFDConnection
Left = 100
Top = 56
end
object fdQryNilm: TFDQuery
Connection = fdConnNilm
Left = 100
Top = 132
end
object FDPhysPgDriverLink: TFDPhysPgDriverLink
Left = 520
Top = 56
end
object FDGUIxWaitCursor: TFDGUIxWaitCursor
Provider = 'Forms'
ScreenCursor = gcrNone
Left = 520
Top = 132
end
object fdConnEtc: TFDConnection
Left = 300
Top = 56
end
object fdQryEtc: TFDQuery
Connection = fdConnEtc
Left = 300
Top = 132
end
object FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink
Left = 520
Top = 208
end
end

View File

@ -0,0 +1,38 @@
unit U_DM;
interface
uses
System.SysUtils, System.Classes, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param,
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Phys.PGDef,
FireDAC.VCLUI.Wait, FireDAC.Comp.UI, FireDAC.Phys.PG, Data.DB,
FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Phys.MySQLDef,
FireDAC.Phys.MySQL;
type
TDM = class(TDataModule)
fdConnNilm: TFDConnection;
fdQryNilm: TFDQuery;
FDPhysPgDriverLink: TFDPhysPgDriverLink;
FDGUIxWaitCursor: TFDGUIxWaitCursor;
fdConnEtc: TFDConnection;
fdQryEtc: TFDQuery;
FDPhysMySQLDriverLink1: TFDPhysMySQLDriverLink;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM: TDM;
implementation
{%CLASSGROUP 'Vcl.Controls.TControl'}
{$R *.dfm}
end.

View File

@ -0,0 +1,45 @@
# NILM Agent MQTT 구독 및 데이터 적재 자동화 계획
NILM Agent가 시작될 때 데이터베이스에서 NILM 센서들의 MQTT 토픽 정보를 읽어와 자동으로 구독(Subscribe)하고, 메시지 수신 시 매칭되는 센서 번호로 DB에 저장하도록 구현하는 계획입니다.
## User Review Required
> [!WARNING]
> 현재 MariaDB의 `sensor_info` 테이블에는 MQTT 토픽을 저장하는 컬럼이 없습니다. (과거 설계인 `schema.sql`에도 없음)
> 따라서 `sensor_info` 테이블에 `mqtt_topic` 이라는 컬럼을 추가하는 DB 마이그레이션이 먼저 필요합니다. 이 컬럼을 추가해도 괜찮으신지 확인 부탁드립니다.
## Proposed Changes
### 1. Database (MariaDB)
`sensor_info` 테이블에 MQTT 토픽을 저장할 수 있는 컬럼을 추가합니다.
```sql
ALTER TABLE sensor_info ADD COLUMN mqtt_topic VARCHAR(100) NULL AFTER _desc;
```
*테스트를 위해 기존 센서(101번)에 임시 토픽(예: `nilm/sensor1`)을 부여할 예정입니다.*
### 2. Delphi Agent (`agents/delphi_nilm_agent/uMain.pas`)
#### [MODIFY] uMain.pas
* **멤버 변수 추가**:
* `FClient: TMQTTClient;` 추가 및 `UMQTTClient` uses 절 포함.
* 토픽과 센서 번호를 매핑하기 위한 `FTopicSensorMap: TDictionary<string, Integer>;` 추가.
* **`btnStartClick` 로직 변경**:
1. DB 연동 (`SetupDatabase`)
2. `sensor_info` 테이블에서 `sensor_typeid = 1` 이고 `mqtt_topic`이 있는 센서 번호(sensor_no)와 토픽 조회.
3. 조회된 정보를 `FTopicSensorMap`에 저장.
4. `TMQTTClient` 객체를 생성하고 MQTT 브로커(host, port)에 연결.
5. 맵에 저장된 모든 토픽들에 대해 `Subscribe` 명령 수행.
* **`OnMqttMessageReceived` 로직 변경**:
* 기존에 하드코딩된 `101` 대신, 수신된 `Topic`을 `FTopicSensorMap`에서 찾아 해당하는 실제 `sensor_no`로 `InsertNilmData` 호출.
* **`btnStopClick` 및 Form 닫기 처리**:
* `FClient.Disconnect;`, 맵 객체(`FTopicSensorMap`) 및 클라이언트 해제 로직 추가로 메모리 누수 방지.
## Verification Plan
### Automated/Manual Verification
1. 파이썬 스크립트 등을 통해 MySQL에 접속하여 `sensor_info` 테이블에 `mqtt_topic` 컬럼이 추가되었는지 확인.
2. 101번 센서에 테스트용 토픽 업데이트 (`UPDATE sensor_info SET mqtt_topic = 'test/nilm/101' WHERE sensor_no = 101;`).
3. 델파이 IDE에서 `NilmMQTT_Agent` 프로젝트를 열고 컴파일 후 실행.
4. "Start Agent" 버튼 클릭 시, 콘솔(Memo) 창에 MQTT 접속 및 해당 토픽 구독 성공 메시지가 뜨는지 확인.
5. 임시 MQTT 클라이언트(MQTT.fx 등)로 `test/nilm/101` 토픽에 JSON 데이터를 Publish.
6. DB(`sensor_history_log` 및 `sensor_info`)에 값이 정상적으로 INSERT/UPDATE 되는지 확인.

View File

@ -0,0 +1,28 @@
# NILM Agent 다중 토픽 DB 연동 지원
델파이 NILM Agent(전력 모니터링 에이전트)가 이제 데이터베이스와 완벽하게 연동되어, 하드코딩 없이 동적으로 여러 대의 센서 데이터를 동시에 수집할 수 있게 되었습니다!
## 주요 변경 사항 요약
1. **DB 기반 동적 구독 (`uMain.pas` / `btnStartClick`)**:
과거처럼 에이전트 소스코드에 `101번` 센서라고 못을 박아두지 않습니다.
에이전트 시작(Start) 시점에 DB(`sensor_info`)를 스캔하여 NILM 장비(`sensor_typeid=1`)들의 `mqtt_topic`을 모조리 가져온 다음, **존재하는 모든 토픽을 자동으로 일괄 구독(Subscribe)** 하도록 수정했습니다.
2. **메시지 매핑 및 자동 분류 (`OnMqttMessageReceived`)**:
메시지가 쏟아져 들어와도 델파이 내부에 구축된 맵핑 사전(`TDictionary`)을 통해 **"이 토픽은 101번 장비꺼, 저 토픽은 102번 장비꺼"** 라고 0.001초만에 찾아내어 각각 알맞은 `sensor_no`로 DB에 저장(INSERT/UPDATE)합니다.
3. **안전한 메모리 관리 (`btnStopClick`)**:
에이전트를 중지(Stop)할 때 단순히 소켓만 끊는 것이 아니라, MQTT 객체를 완전히 메모리에서 제거하여 프로그램이 오래 켜져 있어도 버그나 램 누수가 없도록 클린업 로직을 추가했습니다.
## 확인 및 테스트 방법
> [!TIP]
> 델파이 소스코드가 변경되었으므로, **반드시 델파이 IDE에서 `NilmMQTT_Agent.dpr` 프로젝트를 재빌드(Compile) 후 다시 실행**해 주셔야 합니다.
1. **DB 사전 작업**:
사용하시는 DB 툴(HeidiSQL 등)에서 `sensor_info` 테이블을 열어 `mqtt_topic` 컬럼에 `test/nilm/101` 같은 토픽을 입력해 줍니다.
2. **에이전트 실행**: 델파이에서 새 코드로 에이전트를 실행하고 **[Start Agent]** 버튼을 누릅니다.
- 로그창에 "DB에서 X개의 토픽 매핑 정보를 로드했습니다."와 "구독 토픽 추가: test/nilm/101" 메시지가 뜨는지 확인합니다.
3. **데이터 수신 테스트**:
- 외부 MQTT 테스트 툴(MQTT.fx 또는 mqtt-spy)을 이용해 해당 토픽으로 JSON 데이터를 발송해 봅니다.
- 에이전트가 정상적으로 수신하여 MariaDB에 값을 채워넣는지 확인합니다!

View File

@ -0,0 +1,55 @@
# AI 기반 실시간 설비 상태 모니터링 및 LED 제어 기획안
이 기획안은 NILM(전력 계측) 에이전트가 수집하는 실시간 전기 데이터를 LLM으로 분석하여 설비의 가동/미가동/에러 상태를 판별하고, 그 결과에 따라 경광등(LED)을 자동 제어하는 기능에 대한 설계입니다.
## 🚨 User Review Required (중요 고려사항)
LLM(Mistral)은 텍스트 분석 및 추론에 특화되어 있으나, 응답을 생성하는 데 시간(수 초~수십 초)이 소요되며 시스템 리소스를 많이 차지합니다.
NILM 데이터가 1초 단위로 들어오는데 **매초 LLM에 질의하는 것은 성능상 불가능**합니다. 따라서 데이터를 어떻게 모아서 LLM에 전달할 것인지에 대한 설계가 가장 중요합니다.
## ❓ Open Questions (결정 필요 사항)
1. **LLM 질의 주기 및 조건**:
- 일정 시간마다 질의? (예: 1분마다 평균값을 계산하여 질의)
- 변화량 기반 질의? (예: 전력량이 이전 대비 20% 이상 급변했을 때만 질의)
- *(추천)* 전력량의 유의미한 변동(예: 1kW 이상 변동)이 발생했을 때만 백엔드로 전송하여 LLM 분석을 요청하는 것이 효율적입니다.
2. **기준값(Threshold) 제공 방식**:
- LLM이 에러나 가동 상태를 판단하려면 기준점이 필요합니다. (예: 대기전력 100W, 정상가동 2000W)
- DB에 저장된 `nilm_init_value`(초기 기준값)를 LLM 프롬프트에 같이 제공하여 스스로 비교 판단하게 할까요?
3. **LED 제어 주체**:
- 기존에 설계된 방식처럼, LLM 분석 완료 후 백엔드가 DB의 **`target_status`** 만 변경해두면, 기존 경광등 에어전트(또는 현재 에이전트)가 이를 감지하여 LED 색상을 바꾸는(Handshake) 방식을 유지하는 것이 좋겠습니다. 동의하시나요?
---
## 🛠️ Proposed Changes (제안하는 시스템 흐름)
### 1. 흐름도 (Architecture Flow)
1. **NILM 데이터 수집**: 델파이 NILM Agent가 센서로부터 데이터를 수신.
2. **상태 변경 감지 (델파이)**: 수신된 전력값이 기존 상태(이전 판단 시점)와 비교하여 큰 폭의 변동이 있을 경우, 백엔드 API로 데이터 전송.
3. **상태 분석 (Python FastAPI + Mistral)**: // Ollama+LLm 으로 변경
- 백엔드는 "현재 전력: 150W, 정상 가동 기준: 2000W. 현재 상태를 '가동(GREEN)', '미가동(YELLOW)', '에러(RED)' 중 하나로 판별하라"는 프롬프트를 생성하여 LLM에 질의.
4. **목표 상태 갱신 (DB)**: LLM이 "YELLOW"라고 답변하면, 백엔드가 `sensor_info`의 해당 설비 `target_ch*_statusID`를 YELLOW 상태로 업데이트.
5. **LED 제어 적용**: LED 제어 에이전트가 목표 상태를 감지하고 실제 하드웨어 경광등 색상을 변경.
### 2. 컴포넌트별 상세 수정 계획
#### [MODIFY] 백엔드 API (`backend/main.py`)
- **신규 API 추가**: `POST /api/analyze_power`
- **Request**: `{ "machine_id": "dev1", "voltage": 220, "current": 0.6, "power": 132 }`
- **로직**:
1. DB에서 해당 설비의 `nilm_init_value` (정상 가동 기준 전력) 조회.
2. Mistral LLM 프롬프트 구성 및 추론 요청.
3. LLM 결과(RED/YELLOW/GREEN) 파싱 후 `sensor_info`의 `target_status` 업데이트 및 `event_log` 에 로그 기록.
4. Response 반환 (`{"reply": "[AI 판단] 미가동 상태로 전환되었습니다. (YELLOW)"}`)
#### [MODIFY] NILM 에이전트 (`agents/delphi_nilm_agent/uMain.pas`)
- **HTTP 클라이언트 모듈 추가**: `TNetHTTPClient` 또는 `TIdHTTP` 컴포넌트를 사용하여 REST API 호출 기능 추가.
- **분석 요청 로직 (Threshold Logic)**:
- 매번 들어오는 데이터를 전부 백엔드에 쏘지 않도록 필터링 로직 구현.
- 예: 최근 5초 평균값을 구한 뒤, 이전 상태의 전력값과 비교하여 오차범위(예: ±10%)를 벗어나는 급격한 변화가 감지될 때만 `/api/analyze_power` API를 비동기(Thread)로 호출.
- UI에 `[AI 상태 분석 중...]` 로그 출력 추가.
---
## ✅ Verification Plan (검증 계획)
1. **임계값 테스트**: NILM 센서에서 임의로 전류 값을 0으로 떨어뜨리거나, 비정상적으로 높은 값을 보냈을 때 델파이 에이전트가 이를 감지하고 API를 호출하는지 확인.
2. **LLM 추론 테스트**: FastAPI 백엔드 단독으로 전력 데이터를 넣었을 때 Mistral 모델이 RED, YELLOW, GREEN 중 하나를 정확히 내뱉는지 프롬프트 튜닝 및 확인.
3. **End-to-End 동작**: NILM 데이터 수신 -> LLM 추론 -> DB 갱신 -> 로그 기록의 전체 사이클 확인.

Some files were not shown because too many files have changed in this diff Show More