In [1]:
import hkvfewspy as hkv
import pandas as pd

Set Rest endpoint


In [2]:
pi = hkv.Pi(protocol='rest')
url = 'http://localhost:8080/FewsWebServices/rest/fewspiservice/v1/'
pi.setUrl(url=url)

Get Requests


In [3]:
filters = pi.getFilters()
filters


Out[3]:
f_ruw_ongevalideerd_ADC f_ruw_ongevalideerd_ADV f_ruw_ongevalideerd_ALT f_ruw_ongevalideerd_AQD f_ruw_ongevalideerd_MPP f_ruw_ongevalideerd_STA f_ruw_ongevalideerd_STB f_ruw_gevalideerd_ADC f_ruw_gevalideerd_ADV f_ruw_gevalideerd_ALT f_ruw_gevalideerd_AQD f_ruw_gevalideerd_MPP f_ruw_gevalideerd_STB f_meteo f_dms
id f_ruw_ongevalideerd.ADC f_ruw_ongevalideerd.ADV f_ruw_ongevalideerd.ALT f_ruw_ongevalideerd.AQD f_ruw_ongevalideerd.MPP f_ruw_ongevalideerd.STA f_ruw_ongevalideerd.STB f_ruw_gevalideerd.ADC f_ruw_gevalideerd.ADV f_ruw_gevalideerd.ALT f_ruw_gevalideerd.AQD f_ruw_gevalideerd.MPP f_ruw_gevalideerd.STB f_meteo f_dms
name ADC ADV ALT AQD MPP STA STB ADC ADV ALT AQD MPP STB KNMI-meteo DMS-data

In [4]:
locations = pi.getLocations(filterId='f_ruw_gevalideerd.ADV')
locations


Out[4]:
FL65 FL66 FL67 FL68 FL69 FL70 FL65_A FL65_B FL65_C FL69_A FL69_B FL69_C
lat 52.57262694703878 52.60351437349362 52.63440351394213 52.67941353559804 52.64605003559749 52.688348465311826 52.57514377528408 52.5750538909331 52.57496400639703 52.6444960993523 52.64457693986963 52.64469371574405
locationId FL65 FL66 FL67 FL68 FL69 FL70 FL65_A FL65_B FL65_C FL69_A FL69_B FL69_C
lon 5.37282288109573 5.3640595418873955 5.406910284297334 5.324480364657235 5.41056506735915 5.328238993224599 5.376923021876932 5.3767755265279416 5.3766280317805935 5.405984021292452 5.406250004564957 5.406589879488774
shortName FL65 Marker Wadden Zuiderstrand FL66 Marker Wadden Noorderstrand FL67 Markermeer Natuurstrand FL68 Markermeer Vooroeverdam FL69 IJsselmeer 2 FL70 IJsselmeer 1 FL65_A Marker Wadden Zuiderstrand FL65_B Marker Wadden Zuiderstrand FL65_C Marker Wadden Zuiderstrand FL69_A IJsselmeer 2 FL69_B IJsselmeer 2 FL69_C IJsselmeer 2
x 154025.0 153432.0 156334.0 150758.0 156581.0 151013.0 154303.0 154293.0 154283.0 156271.0 156289.0 156312.0
y 509448.0 512885.0 516322.0 521332.0 517618.0 522326.0 509728.0 509718.0 509708.0 517445.0 517454.0 517467.0

In [5]:
parameters = pi.getParameters(filterId='f_ruw_gevalideerd.ADV')
parameters


Out[5]:
D_0_water S_0_sound S_0_east S_0_north S_0_up T_0 V_0_battery ErrCode_0 Status_0 Amp1_0 Amp2_0 Amp3_0 Corr1_0 Corr2_0 Corr3_0 Heading_0 Pitch_0 Roll_0
displayUnit hPa m/s m/s m/s m/s oC V - - m m m % % % o o o
id D.0.water S.0.sound S.0.east S.0.north S.0.up T.0 V.0.battery ErrCode.0 Status.0 Amp1.0 Amp2.0 Amp3.0 Corr1.0 Corr2.0 Corr3.0 Heading.0 Pitch.0 Roll.0
name Waterdruk [hPa] - noneq Snelheid geluid [m/s] - noneq Snelheid east [m/s] - noneq Snelheid north [m/s] - noneq Snelheid up [m/s] - noneq Temperatuur [°C] - noneq Voltage batterij [V] - noneq Error code [-] - noneq Status [-] - noneq Amp1 [m] - noneq Amp2 [m] - noneq Amp3 [m] - noneq Corr1 [-] - noneq Corr2 [-] - noneq Corr3 [-] - noneq Heading [-] - noneq Pitch [-] - noneq Roll [-] - noneq
parameterType instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous instantaneous
unit hPa m/s m/s m/s m/s oC V - - m m m % % % o o o
usesDatum false false false false false false false false false false false false false false false false false false

In [6]:
query_parameters = pi.setQueryParameters(protocol='rest')

In [7]:
query_parameters.filterId('f_ruw_ongevalideerd.STB')
query_parameters.locationIds(['FL65'])
query_parameters.parameterIds(['H.w.0'])
query_parameters.startTime(pd.datetime(2019,5,18,3,38))
query_parameters.endTime(pd.datetime(2019,5,18,3,39))
query_parameters.useMilliseconds(True) # new in 2017.02
query_parameters.version('1.25')

In [8]:
query_parameters.query


Out[8]:
{'convertDatum': False,
 'importFromExternalDataSource': False,
 'omitMissing': False,
 'onlyHeaders': False,
 'onlyManualEdits': False,
 'showEnsembleMemberIds': False,
 'documentVersion': '1.25',
 'documentFormat': 'PI_XML',
 'showStatistics': False,
 'showThresholds': False,
 'useDisplayUnits': True,
 'filterId': 'f_ruw_ongevalideerd.STB',
 'locationIds': ['FL65'],
 'parameterIds': ['H.w.0'],
 'startTime': '2019-05-18T03:38:00Z',
 'endTime': '2019-05-18T03:39:00Z',
 'useMilliseconds': True}

In [9]:
timeseries = pi.getTimeSeries(query_parameters, print_response=False)
timeseries.head()


Out[9]:
moduleInstanceId qualifierId parameterId units locationId stationName flag value
date
2019-05-18 03:38:00+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 -0.147
2019-05-18 03:38:00.010000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 2
2019-05-18 03:38:00.175000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 1
2019-05-18 03:38:00.208000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 1
2019-05-18 03:38:00.226000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 1

Post Requests


In [10]:
# set some variable settings
module_instance_id = 'ruw_ongevalideerd_STB	'
location_id = 'FL65'
parameter_id = 'H.w.0'
#timeseries['user'] = 'hoek'

In [11]:
import random
new_index = []
for ts in timeseries.index:
    new_index.append(ts.replace(microsecond=random.randint(0, 999)*1000))

In [12]:
timeseries.index = pd.DatetimeIndex(new_index)
timeseries.value = 1

In [13]:
timeseries.head()


Out[13]:
moduleInstanceId qualifierId parameterId units locationId stationName flag value
2019-05-18 03:38:00.568000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 1
2019-05-18 03:38:00.654000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 1
2019-05-18 03:38:00.765000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 1
2019-05-18 03:38:00.430000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 1
2019-05-18 03:38:00.835000+00:00 ruw_ongevalideerd_STB H.w.0 mNAP FL65 FL65 Marker Wadden Zuiderstrand 0 1

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

# set the root version
pi_ts.write.root.version('1.25')

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

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


WARNING:root: The following column names are ignored: 'locationId', 'qualifierId', 'units', 'parameterId', 'moduleInstanceId', 'stationName'. 
 Only the following column names are accepted: 'value', 'minValue', 'maxValue', 'flag', 'flagSource', 'comment', 'user''

In [15]:
filterId='f_ruw_ongevalideerd.STB'
convertDatum=True
pi.postTimeSeries(filterId=filterId, piTimeSeriesXmlContent=pi_ts_xml, convertDatum=convertDatum)


External time series successfully mapped to FEWS time series FL65 H.w.0   nonequidistant
1 time series imported, 0 time series rejected
The following locations-parameter combination imported  FL65:H.w.0

In [ ]: