In [1]:
import hkvfewspy as hkv
from datetime import datetime
import pandas as pd
import altair as alt
from datetime import datetime

In [2]:
hkv.__version__


Out[2]:
'0.6.0'

In [3]:
# set client
# make sure your URL maps to the entry point of the fews pi service
# observed variants:
# - http://<host>:<port>/FewsPiService?wsdl
# - http://<host>:<port>/FewsWebServices/fewspiservice?wsdl
# - http://<host>:<port>/FewsPiService/fewspiservice?wsdl
pi = hkv.Pi()
pi.setClient(wsdl='localhost:8080/FewsWebServices/fewspiservice?wsdl')

In [4]:
# get filter
filters = pi.getFilters()
filter_id = filters.f_fewsPi['id']

In [5]:
# write pandas.DataFrame
df = pd.DataFrame(data=pd.np.random.randint(0, 100, size=(10,1)), 
                  index=pd.date_range(start='2018-03-01', periods=10, freq='D'),
                  columns=['value'])
df['user'] = 'hoek'
df.head()


Out[5]:
value user
2018-03-01 60 hoek
2018-03-02 24 hoek
2018-03-03 5 hoek
2018-03-04 65 hoek
2018-03-05 80 hoek

In [6]:
# set some variable settings
module_instance_id = 'i_wav_streamflow'
location_id = 'awash_awash'
qualifier_id = 'q_streamflow'
parameter_id = 'Q.STAT'

In [7]:
# create pi-timeseries object
pi_ts = pi.setPiTimeSeries()

# set a header object
pi_ts.write.header.moduleInstanceId(module_instance_id)
pi_ts.write.header.locationId(location_id)
pi_ts.write.header.qualifierId(qualifier_id)
pi_ts.write.header.parameterId(parameter_id)

# set an events object (pandas.Series or pandas.DataFrame)
pi_ts.write.events(df)
pi_ts_xml = pi_ts.to.pi_xml()

In [8]:
# ingest pi-timeseries into fews
pi.putTimeSeriesForFilter(
    filterId=filter_id, 
    piTimeSeriesXmlContent=pi_ts.to.pi_xml()
)


External time series successfully mapped to FEWS time series awash_awash Q.STAT   q_streamflow nonequidistant
1 time series imported, 0 time series rejected
The following locations-parameter combination imported  awash_awash:Q.STAT

In [9]:
# start and end date
start_date = df.index[0]
end_date = df.index[-1]

In [10]:
# initiate query object
query = pi.setQueryParameters()

In [11]:
# fill query object
query.filterId(filter_id)
query.parameterIds(parameter_id)
query.locationIds(location_id)
query.startTime(start_date)
query.endTime(end_date)
query.clientTimeZone('Europe/Amsterdam')

In [12]:
# query timeseries
df_query = pi.getTimeSeries(queryParameters=query, setFormat='df')

In [13]:
# print first five rows
df_query.head()


Out[13]:
flag user value
date moduleInstanceId qualifierId parameterId units locationId stationName
2018-03-01 01:00:00+01:00 i_wav_streamflow q_streamflow Q.STAT m3/s awash_awash awash_awash 0 hoek 60
2018-03-02 01:00:00+01:00 i_wav_streamflow q_streamflow Q.STAT m3/s awash_awash awash_awash 0 hoek 24
2018-03-03 01:00:00+01:00 i_wav_streamflow q_streamflow Q.STAT m3/s awash_awash awash_awash 0 hoek 5
2018-03-04 01:00:00+01:00 i_wav_streamflow q_streamflow Q.STAT m3/s awash_awash awash_awash 0 hoek 65
2018-03-05 01:00:00+01:00 i_wav_streamflow q_streamflow Q.STAT m3/s awash_awash awash_awash 0 hoek 80

In [ ]: