Files
HECO2/TestProgram/PCDashBoard/Model/RoomState.cs
T
jeon 5a96a696b1 chore: HERV 통합 저장소 초기 커밋
- 펌웨어(program), C# 대시보드(TestProgram), 시뮬레이터(Simulator),
  프로토콜/문서(Protocol, doc) 전체를 단일 저장소로 통합
- program 폴더의 별도 git 저장소를 제거하고 통합 저장소에 흡수
- 빌드 산출물(program/build, bin/obj, *.o/.elf/.bin/.hex 등) .gitignore 처리
- 사내 Synology NAS Git 원격 연결 예정

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 21:44:23 +09:00

81 lines
3.4 KiB
C#

using System.ComponentModel;
using System.Runtime.CompilerServices;
using ErvProtocol;
namespace ErvDashboard.Model
{
// 각실(거실/침실1~3) 상태 + 제어값
public class RoomState : INotifyPropertyChanged
{
public int RoomId { get; } // 1=거실, 2~4=침실1~3
public string Name { get; }
public RoomState(int id, string name) { RoomId = id; Name = name; }
bool _damperSaOpen, _damperEaOpen;
int _pm25, _pm10, _voc, _co2, _temp, _humi;
AirQuality _airQuality = AirQuality.Normal;
int _ledDim;
int _loadScore;
int _finalVolume;
// 급기(SA) 댐퍼 열림/닫힘 (토글, 제어 가능)
public bool DamperSaOpen
{
get => _damperSaOpen;
set { if (_damperSaOpen != value) { _damperSaOpen = value; OnChanged(); } }
}
// 배기(EA) 댐퍼 열림/닫힘 (토글, 제어 가능)
public bool DamperEaOpen
{
get => _damperEaOpen;
set { if (_damperEaOpen != value) { _damperEaOpen = value; OnChanged(); } }
}
// 공기질 센서값 (표시)
public int Pm25 { get => _pm25; set { if (_pm25 != value) { _pm25 = value; OnChanged(); } } }
public int Pm10 { get => _pm10; set { if (_pm10 != value) { _pm10 = value; OnChanged(); } } }
public int Voc { get => _voc; set { if (_voc != value) { _voc = value; OnChanged(); } } }
public int Co2 { get => _co2; set { if (_co2 != value) { _co2 = value; OnChanged(); } } }
// 온도(℃)·습도(%) (표시)
public int Temp { get => _temp; set { if (_temp != value) { _temp = value; OnChanged(); } } }
public int Humi { get => _humi; set { if (_humi != value) { _humi = value; OnChanged(); } } }
// 공기질 상태코드(1~4, 프로토콜) — L3/L4 가 모두 매우나쁨(1)으로 합쳐지므로 표시는 LoadScore(Level) 사용
public AirQuality AirQuality
{
get => _airQuality;
set { if (_airQuality != value) { _airQuality = value; OnChanged(); } }
}
// 공기질 표시(좋음/보통/나쁨/매우나쁨/최악)는 각실 Level(=LoadScore 0~4) 기준 — L4(최악, 빨강)까지 구분
public string AirQualityText => LoadScore switch
{
0 => "좋음",
1 => "보통",
2 => "나쁨",
3 => "매우나쁨",
4 => "최악",
_ => "-",
};
// LED 디밍 0~9 (슬라이드, 제어 가능)
public int LedDim
{
get => _ledDim;
set { var v = value < 0 ? 0 : value > 9 ? 9 : value; if (_ledDim != v) { _ledDim = v; OnChanged(); } }
}
// 자동운전 - 각실 부하점수(=Level 0~4, 읽기전용). 변경 시 공기질 표시도 갱신.
public int LoadScore { get => _loadScore; set { if (_loadScore != value) { _loadScore = value; OnChanged(); OnChanged(nameof(AirQualityText)); } } }
// 자동운전 - 최종 풍량 (읽기전용)
public int FinalVolume { get => _finalVolume; set { if (_finalVolume != value) { _finalVolume = value; OnChanged(); } } }
public event PropertyChangedEventHandler? PropertyChanged;
void OnChanged([CallerMemberName] string? n = null) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(n));
}
}