Files
opensprinkler-weather/routes/adjustmentMethods/RainDelayAdjustmentMethod.ts
2019-11-10 22:36:19 +00:00

39 lines
1.3 KiB
TypeScript

import { AdjustmentMethod, AdjustmentMethodResponse, AdjustmentOptions } from "./AdjustmentMethod";
import { GeoCoordinates, PWS, ZimmermanWateringData } from "../../types";
import { WeatherProvider } from "../weatherProviders/WeatherProvider";
/**
* Only delays watering if it is currently raining and does not adjust the watering scale.
*/
async function calculateRainDelayWateringScale(
adjustmentOptions: RainDelayAdjustmentOptions,
coordinates: GeoCoordinates,
weatherProvider: WeatherProvider,
pws?: PWS
): Promise< AdjustmentMethodResponse > {
const wateringData: ZimmermanWateringData = await weatherProvider.getWateringData( coordinates, pws );
const raining = wateringData && wateringData.raining;
const d = adjustmentOptions.hasOwnProperty( "d" ) ? adjustmentOptions.d : 24;
return {
scale: undefined,
rawData: {
weatherProvider: wateringData.weatherProvider,
raining: raining ? 1 : 0,
},
rainDelay: raining ? d : undefined,
wateringData: wateringData
}
}
export interface RainDelayAdjustmentOptions extends AdjustmentOptions {
/** The rain delay to use (in hours). */
d?: number;
}
const RainDelayAdjustmentMethod: AdjustmentMethod = {
calculateWateringScale: calculateRainDelayWateringScale
};
export default RainDelayAdjustmentMethod;