mirror of
https://github.com/ckaczor/HomeMonitor.git
synced 2026-02-07 09:35:38 -05:00
Start work on new web display
This commit is contained in:
4
WebDisplay/src/services/laundry/device-message.ts
Normal file
4
WebDisplay/src/services/laundry/device-message.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export default class DeviceMessage {
|
||||
name: string = '';
|
||||
status: boolean = false;
|
||||
}
|
||||
4
WebDisplay/src/services/laundry/laundry-status.ts
Normal file
4
WebDisplay/src/services/laundry/laundry-status.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export default class LaundryStatus {
|
||||
washer: boolean | undefined = false;
|
||||
dryer: boolean | undefined = false;
|
||||
}
|
||||
64
WebDisplay/src/services/laundry/main.ts
Normal file
64
WebDisplay/src/services/laundry/main.ts
Normal file
@@ -0,0 +1,64 @@
|
||||
import { HubConnectionBuilder, HubConnection } from '@microsoft/signalr';
|
||||
import axios from 'axios';
|
||||
import DeviceMessage from './device-message';
|
||||
import LaundryStatus from './laundry-status';
|
||||
import Environment from '../../environment';
|
||||
|
||||
export default class LaundryService {
|
||||
private connection: HubConnection;
|
||||
private started: boolean = false;
|
||||
private latestStatus: LaundryStatus = new LaundryStatus();
|
||||
|
||||
constructor() {
|
||||
this.connection = new HubConnectionBuilder()
|
||||
.withUrl(Environment.getUrlPrefix() + '/api/hub/device-status', {
|
||||
withCredentials: false,
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
async getLatest(): Promise<LaundryStatus> {
|
||||
const response = await axios.get<DeviceMessage[]>(Environment.getUrlPrefix() + `/api/device-status/status/recent`);
|
||||
|
||||
const newStatus = new LaundryStatus();
|
||||
|
||||
response.data.forEach((deviceMessage) => {
|
||||
if (deviceMessage.name === 'washer') {
|
||||
newStatus.washer = deviceMessage.status;
|
||||
} else if (deviceMessage.name === 'dryer') {
|
||||
newStatus.dryer = deviceMessage.status;
|
||||
}
|
||||
});
|
||||
|
||||
return newStatus;
|
||||
}
|
||||
|
||||
async start(callback: (laundryStatus: LaundryStatus) => void) {
|
||||
if (this.started) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.started = true;
|
||||
|
||||
this.latestStatus = await this.getLatest();
|
||||
|
||||
await this.connection.start();
|
||||
|
||||
this.connection!.on('LatestStatus', (message: string) => {
|
||||
const deviceMessage = JSON.parse(message) as DeviceMessage;
|
||||
|
||||
const newStatus = new LaundryStatus();
|
||||
|
||||
newStatus.dryer = this.latestStatus.dryer;
|
||||
newStatus.washer = this.latestStatus.washer;
|
||||
|
||||
if (deviceMessage.name === 'washer') {
|
||||
newStatus.washer = deviceMessage.status;
|
||||
} else if (deviceMessage.name === 'dryer') {
|
||||
newStatus.dryer = deviceMessage.status;
|
||||
}
|
||||
|
||||
callback(newStatus);
|
||||
});
|
||||
}
|
||||
}
|
||||
30
WebDisplay/src/services/power/main.ts
Normal file
30
WebDisplay/src/services/power/main.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { HubConnectionBuilder, HubConnection } from '@microsoft/signalr';
|
||||
import PowerStatus from './power-status';
|
||||
import Environment from '../../environment';
|
||||
|
||||
export default class PowerService {
|
||||
private connection: HubConnection;
|
||||
private started: boolean = false;
|
||||
|
||||
constructor() {
|
||||
this.connection = new HubConnectionBuilder()
|
||||
.withUrl(Environment.getUrlPrefix() + '/api/hub/power', {
|
||||
withCredentials: false,
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
async start(callback: (powerStatus: PowerStatus) => void) {
|
||||
if (this.started) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.started = true;
|
||||
|
||||
await this.connection.start();
|
||||
|
||||
this.connection!.on('LatestSample', (message: string) => {
|
||||
callback(JSON.parse(message));
|
||||
});
|
||||
}
|
||||
}
|
||||
4
WebDisplay/src/services/power/power-status.ts
Normal file
4
WebDisplay/src/services/power/power-status.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export default class PowerStatus {
|
||||
Generation: number = 0;
|
||||
Consumption: number = 0;
|
||||
}
|
||||
38
WebDisplay/src/services/weather/main.ts
Normal file
38
WebDisplay/src/services/weather/main.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { HubConnectionBuilder, HubConnection } from '@microsoft/signalr';
|
||||
import WeatherUpdate from './weather-update';
|
||||
import WeatherRecent from './weather-recent';
|
||||
import Environment from '../../environment';
|
||||
import axios from 'axios';
|
||||
|
||||
export default class WeatherService {
|
||||
private connection: HubConnection;
|
||||
private started: boolean = false;
|
||||
|
||||
constructor() {
|
||||
this.connection = new HubConnectionBuilder()
|
||||
.withUrl(Environment.getUrlPrefix() + '/api/hub/weather', {
|
||||
withCredentials: false,
|
||||
})
|
||||
.build();
|
||||
}
|
||||
|
||||
async getLatest(): Promise<WeatherRecent> {
|
||||
const response = await axios.get<WeatherRecent>(Environment.getUrlPrefix() + `/api/weather/readings/recent`);
|
||||
|
||||
return response.data;
|
||||
}
|
||||
|
||||
async start(callback: (weatherUpdate: WeatherUpdate) => void) {
|
||||
if (this.started) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.started = true;
|
||||
|
||||
await this.connection.start();
|
||||
|
||||
this.connection!.on('LatestReading', (message: string) => {
|
||||
callback(JSON.parse(message));
|
||||
});
|
||||
}
|
||||
}
|
||||
25
WebDisplay/src/services/weather/weather-recent.ts
Normal file
25
WebDisplay/src/services/weather/weather-recent.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
export default class WeatherRecent {
|
||||
type: string | undefined;
|
||||
message: null | undefined;
|
||||
timestamp: Date | undefined;
|
||||
windDirection: string | undefined;
|
||||
windSpeed: number | undefined;
|
||||
humidity: number | undefined;
|
||||
rain: number | undefined;
|
||||
pressure: number | undefined;
|
||||
temperature: number | undefined;
|
||||
batteryLevel: number | undefined;
|
||||
lightLevel: number | undefined;
|
||||
latitude: number | undefined;
|
||||
longitude: number | undefined;
|
||||
altitude: number | undefined;
|
||||
satelliteCount: number | undefined;
|
||||
gpsTimestamp: Date | undefined;
|
||||
windChill: number | undefined;
|
||||
heatIndex: number | undefined;
|
||||
dewPoint: number | undefined;
|
||||
pressureDifferenceThreeHour: number | undefined;
|
||||
pressureSlope: number | undefined;
|
||||
pressureAngle: number | undefined;
|
||||
rainLastHour: number | undefined;
|
||||
}
|
||||
25
WebDisplay/src/services/weather/weather-update.ts
Normal file
25
WebDisplay/src/services/weather/weather-update.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
export default class WeatherUpdate {
|
||||
Type: string | undefined;
|
||||
Message: null | undefined;
|
||||
Timestamp: Date | undefined;
|
||||
WindDirection: string | undefined;
|
||||
WindSpeed: number | undefined;
|
||||
Humidity: number | undefined;
|
||||
Rain: number | undefined;
|
||||
Pressure: number | undefined;
|
||||
Temperature: number | undefined;
|
||||
BatteryLevel: number | undefined;
|
||||
LightLevel: number | undefined;
|
||||
Latitude: number | undefined;
|
||||
Longitude: number | undefined;
|
||||
Altitude: number | undefined;
|
||||
SatelliteCount: number | undefined;
|
||||
GpsTimestamp: Date | undefined;
|
||||
WindChill: number | undefined;
|
||||
HeatIndex: number | undefined;
|
||||
DewPoint: number | undefined;
|
||||
PressureDifferenceThreeHour: number | undefined;
|
||||
PressureSlope: number | undefined;
|
||||
PressureAngle: number | undefined;
|
||||
RainLastHour: number | undefined;
|
||||
}
|
||||
Reference in New Issue
Block a user