Info | ||
---|---|---|
| ||
This page is originally from a git repository where its content can be managed and presented in a more dynamical way. This is a snapshot as of today ( ). There will be no frequent updates or alike. New content comes with a new documentation platform – some day! |
Table of Contents | ||||||
---|---|---|---|---|---|---|
|
input:
Per API: Search for all items of contact x, i) by (system) email address, ii) by contact names.
/sensors/device/getItemsOfContact/{contactEmail}
OR/sensors/contacts/getContactsByName/{firstName}/{lastName}
--> email address will be output, then go on with step 1input:
/sensors/device/getItemsOfContact/{contactEmail}
OR/sensors/contacts/getContactsByName/{firstName}/{lastName}
--> email address as output then go to step 1/sensors/contacts/getAllContactRoles
--> pick out which ID is related to which role type (e.g. Data scientist="id": 29]input:
get /sensors/item/getItemByUrn/{urn}
--> filter for "id"
create a usable token post [input] /sensors/contacts/login
(input is a json holding username and password) --> response --> save token
get /sensors/events/getAllEventTypes
--> filter for event type id for input in #5.5
create json for other input for #5
put /sensors/events/putEvent/{deviceID}
+ INPUT {
}
Precondition: only valid for current configuration. If the item was object to modifications (mounts) the results may differ.
input:
https://sensor.awi.de/rest/sensors/item/getChildrenOfItem/{itemID}
https://sensor.awi.de/rest/sensors/sensorOutputs/getAllSensorOutputTypes
-> filter by i.e. regex "temp" (water temperature, technical temperature, etc. ...)https://sensor.awi.de/rest/sensors/sensorOutputs/getDeviceSensorOutputs/{itemID}
TODO: solve outputType is matching exactly but the response is not unique.... doh!
input:
https://sandbox.sensor.awi.de/rest/sensors/sensorOutputs/getAllSensorOutputTypes
-> filterhttps://sandbox.sensor.awi.de/rest/sensors/unitsOfMeasurement/getAllUnitsOfMeasurement
-> filterhttps://sandbox.sensor.awi.de/rest/sensors/item/getItemByUrn/{URN}
-> derive IDput https://sandbox.sensor.awi.de/rest/sensors/sensorOutputs/putSensorOutput/{itemID}
+ INPUT {
}
Possibly a look in the available output types/units is useful in advance, if these things shall be modified.
get sensorOutputs/getDeviceSensorOutputs/{itemID}
-> use reply to fill new json
put sensorOutputs/modifySensorOutput/{outputID}/{itemID}
+ INPUT {
}
sensorOutputs/deleteSensorOutputFromDevice/{outputID}/{itemID}
-> doneinput:
/sensors/sensorOutputs/getDeviceSensorOutputs/{deviceID}
--> scrape all IDs to a list/sensors/sensorOutputs/getSensorOutput/{parameterID}
--> collect infos oninput:
https://sensor.awi.de/rest/sensors/contacts/login
https://sensor.awi.de/rest/sensors/contacts/getAllContactRoles
https://sensor.awi.de/rest/sensors/item/getItemByUrn/
https://sensor.awi.de/rest/sensors/contacts/putExistingContactToDevice/{itemID}/{userID}/{contactRoleID}
https://sensor.awi.de/rest/sensors/contacts/deleteContactFromDevice/{itemID}/{userID}/{contactRoleID}
input:
This procedures applies also to sensors/events/getAllEventTypes
, sensors/sensorOutputs/getAllSensorOutputTypes
, sensors/unitsOfMeasurement/getAllUnitsOfMeasurement
, sensors/measurementProperties/getAllMeasurementPropertyTypes
, and several more.
input:
https://sensor.awi.de/rest/sensors/item/getAllItemCategories
input:
https://sensor.awi.de/rest/sensors/item/getDetailedItem/{itemID}?includeChildren=true
create id list of output items
get https://sensor.awi.de/rest/sensors/sensorOutputs/getSensorOutput/{sensorOutputID}
-> create lists
export
For a complete list of all subitems (of all subitems of all subitems), make use of a while loop as in use case no. 3.
As altnerative approach the endpoint https://sensor.awi.de/rest/sensors/item/getChildrenOfItem/{itemID}
could be facilitated as well.
input:
https://sensor.awi.de/rest/sensors/contacts/login
--> generate auth tokenhttps://sensor.awi.de/rest/sensors/item/getAllItemCategories
--> item type IDhttps://sensor.awi.de/rest/sensors/item/getAllItemStatuses
--> status code IDhttps://sandbox.sensor.awi.de/rest/sensors/item/createItem?parentItemID={parentItemID}
--> create iteminput:
https://sensor.awi.de/rest/sensors/contacts/login
--> generate auth tokenhttps://sensor.awi.de/rest/sensors/itemReassignment/assignItemToItem/{itemID}
+ --> content json-bodyCode Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
'''
basic documentation of sensor.awi.de REST-API can be found here: https://sensor.awi.de/api/
'''
## necessary libraries
import json
import requests
import datetime
## PROD
#sensorURL<- "https://sensor.awi.de/rest/sensors/"
## SANDBOX
sensorURL <- "https://sandbox.sensor.awi.de/rest/sensors/"
## + ================================ | xxx | ================================ + ##
'''
USE CASE 1: We are looking for a list of items that have a certain user in their contact list.
1.1.a We know the contact email address (as in sensor.awi.de) of the user.
'''
## + ================================ | xxx | ================================ + ##
email = 'marcel.nicolaus@awi.de'
## create link for API call
link = sensorURL + "device/getItemsOfContact/" + email
## calling api
answer = requests.get(link)
## the content itself, read as a json object
fullList = json.loads(answer.content)
## status of request (see httpstatuses.com/)
answer.status_code
## since the result can be 0 items, 1 item, and >1 items , we filter the item ids according the number of items and write to a list
if len(fullList) == 0:
itemList = []
elif len(fullList) == 1:
itemList = [fullList[0]['id']]
else:
itemList = [i['id'] for i in fullList]
## there we go:
print(itemList)
## + ================================ | xxx | ================================ + ##
'''
USE CASE 1: We are looking for a list of items that have a certain user in their contact list.
1.1.b We know the last name (and if necessary the first name) of the user. Aim: get a single email address.
'''
## + ================================ | xxx | ================================ + ##
## creation of the API call
link = sensorURL + 'contacts/getAllSystemContacts'
## CASE: unique last name or no contact found
## variables
lastName = 'Gerchow'
## calling api
answer = requests.get(link)
x = json.loads(answer.content)
## loop over entire list
for a in x:
if a['lastName'] == lastName:
print(a['email'])
## CASE: non-unique last name or no contact
## variables
lastName = 'Nicolaus'
firstName = 'Rita'
## calling api
answer = requests.get(link)
x = json.loads(answer.content)
## loop over entire list
for a in x:
if a['lastName'] == lastName and a['firstName'] == firstName:
print(a['email'])
## + ================================ | xxx | ================================ + ##
'''
USE CASE 1: We are looking for a list of items that have a certain user in their contact list.
1.2. We have info from 1.1 but need that user only with a certain contact role (e.g. 'Principal Investigator').
'''
## + ================================ | xxx | ================================ + ##
## which user should be searched?
## remember 'email' from 1.1?
#email = 'sandra.tippenhauer@awi.de'
## what role should be filtered?
inputRole = 'Principal Investigator'
inputRole = 'Editor'
## create empty lists
lstID, lstURN = [], []
## recycling of itemList from 1.1
for item in itemList:
link = sensorURL + "contacts/getDeviceContacts/" + str(item)
answer = requests.get(link)
x = json.loads(answer.content)
## create dictionaries to map uuids to vocables
dictRoles = {}
dictAccounts = {}
for i in x:
if isinstance(i['contact'], dict):
dictAccounts[i['contact']['@uuid']] = i['contact']['email']
if isinstance(i['vocable'], dict):
dictRoles[i['vocable']['@uuid']] = i['vocable']['generalName']
## extracting from item
user, role = [], []
for i in x:
if isinstance(i['vocable'], dict):
role.append(i['vocable']['@uuid'])
elif isinstance(i['vocable'], str):
role.append(i['vocable'])
else:
pass
##
if isinstance(i['contact'], dict):
user.append(i['contact']['@uuid'])
elif isinstance(i['contact'], str):
user.append(i['contact'])
else:
pass
## merging info from item and mapping dict
for i in range(len(user)): ## <-- could improve!!!
if dictRoles[role[i]] == inputRole and dictAccounts[user[i]] == email:
lstID.append(item)
lstURN.append(x[0]['item']['urn'])
## neat output as some sort of report ...
print(json.dumps({'user':email,
'timeOfQuery':datetime.datetime.isoformat(datetime.datetime.utcnow()),
'role':inputRole,
'urn':lstURN,
'id':lstID})
)
## ... or just as a single list if item IDs
print(lstID)
## eof
|