@@ -17,6 +17,7 @@ import selector_getters from './getters/selector_getters'
1717import wema_settings_getters from './getters/wema_settings_getters'
1818import obs_settings_getters from './getters/obs_settings_getters'
1919import accumulated_getters from './getters/accumulated_getters'
20+ import moment from 'moment'
2021
2122const hasKey = ( obj , key ) => { return Object . keys ( obj ) . includes ( key ) }
2223
@@ -30,7 +31,7 @@ const state = {
3031
3132 weather : { } ,
3233 enclosure : { } ,
33-
34+ siteOwmReports : { } ,
3435 forecast : [ ] ,
3536
3637 screen : { } ,
@@ -51,6 +52,12 @@ const getters = {
5152
5253 site : state => state . site ,
5354 now : state => state . now ,
55+ owmReport : ( state , getters , rootState , rootGetters ) => {
56+ const wema_name = rootGetters [ 'site_config/wema_name' ]
57+ if ( wema_name ) {
58+ return JSON . parse ( state . siteOwmReports [ wema_name ] . report )
59+ }
60+ } ,
5461
5562 /**
5663 * Site operational status:
@@ -267,6 +274,10 @@ const mutations = {
267274 state . obs_settings = status . obs_settings
268275 } ,
269276
277+ storeNewOwmReport ( state , { wema_name, newReport, newTimestamp } ) {
278+ state . siteOwmReports [ wema_name ] = { report : newReport , timestamp : newTimestamp }
279+ } ,
280+
270281 status ( state , status ) {
271282 state . status = status
272283 const device_types = [
@@ -311,7 +322,6 @@ const mutations = {
311322
312323 state . forecast = [ ]
313324 }
314-
315325}
316326
317327const actions = {
@@ -403,6 +413,25 @@ const actions = {
403413 }
404414 } ,
405415
416+ getLatestOwmReport ( { commit, rootState, rootGetters, state } ) {
417+ const wema_name = rootGetters [ 'site_config/wema_name' ]
418+ if ( wema_name ) {
419+ // request and store a new report if not cached or cached more than 1 hour ago
420+ if ( ! ( wema_name in state . siteOwmReports ) || moment ( state . siteOwmReports [ wema_name ] . timestamp ) . isBefore ( moment ( ) . subtract ( 1 , 'hours' ) ) ) {
421+ return new Promise ( ( resolve , reject ) => {
422+ const url = rootState . api_endpoints . status_endpoint + `/${ wema_name } /owm_report`
423+ axios . get ( url ) . then ( response => {
424+ commit ( 'storeNewOwmReport' , { wema_name, newReport : response . data . status . owm_report , newTimestamp : moment ( ) } )
425+ resolve ( )
426+ } ) . catch ( e => {
427+ console . log ( e )
428+ reject ( e )
429+ } )
430+ } )
431+ }
432+ }
433+ } ,
434+
406435 // Reset to empty values. Used for sites without any status available.
407436 clearStatus ( { commit } ) {
408437 // commit('status',empty_status)
0 commit comments