platypush/platypush/backend/http/static/js/widgets/date-time-weather/index.js

69 lines
1.9 KiB
JavaScript

Vue.component('date-time-weather', {
template: '#tmpl-widget-date-time-weather',
props: ['config'],
data: function() {
return {
weather: undefined,
sensors: {},
now: new Date(),
weatherIcon: undefined,
};
},
methods: {
refresh: async function() {
let weather = (await request('weather.forecast.get_hourly_forecast')).data[0];
this.onWeatherChange(weather);
},
refreshTime: function() {
this.now = new Date();
},
formatDate: function(date) {
return date.toDateString().substring(0, 10);
},
formatTime: function(date) {
return date.toTimeString().substring(0, 8);
},
onWeatherChange: function(event) {
if (!this.weather)
this.weather = {};
Vue.set(this, 'weather', {...this.weather, ...event});
var skycons = new Skycons({
'color':'#333', 'resizeClear':'true'
});
if (this.weatherIcon) {
skycons.remove('weather-icon');
}
skycons.add('weather-icon', this.weather.icon);
this.weatherIcon = this.weather.icon;
},
onSensorData: function(event) {
if ('temperature' in event.data)
this.sensors.temperature = event.data.temperature;
if ('humidity' in event.data)
this.sensors.temperature = event.data.humidity;
},
},
mounted: function() {
this.refresh();
setInterval(this.refresh, 900000);
setInterval(this.refreshTime, 1000);
registerEventHandler(this.onWeatherChange, 'platypush.message.event.weather.NewWeatherConditionEvent');
registerEventHandler(this.onSensorData, 'platypush.message.event.sensor.SensorDataChangeEvent');
},
});