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! |
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-body''' 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 |