Separate library that holds helper functions for the main OMF code.

Committer:
danielelopez
Date:
Wed Mar 14 14:14:51 2018 +0000
Revision:
8:e5fe40b77f8f
Parent:
1:1c31b413ba0c
Child:
10:844e209f1d79
Updated to remove unneeded configuration

Who changed what in which revision?

UserRevisionLine numberNew contents of line
danielelopez 0:6156b29d3c91 1 //Copyright 2017 OSIsoft, LLC
danielelopez 0:6156b29d3c91 2 //
danielelopez 0:6156b29d3c91 3 //Licensed under the Apache License, Version 2.0 (the "License");
danielelopez 0:6156b29d3c91 4 //you may not use this file except in compliance with the License.
danielelopez 0:6156b29d3c91 5 //You may obtain a copy of the License at
danielelopez 0:6156b29d3c91 6 //
danielelopez 0:6156b29d3c91 7 //<http://www.apache.org/licenses/LICENSE-2.0>
danielelopez 0:6156b29d3c91 8 //
danielelopez 0:6156b29d3c91 9 //Unless required by applicable law or agreed to in writing, software
danielelopez 0:6156b29d3c91 10 //distributed under the License is distributed on an "AS IS" BASIS,
danielelopez 0:6156b29d3c91 11 //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
danielelopez 0:6156b29d3c91 12 //See the License for the specific language governing permissions and
danielelopez 0:6156b29d3c91 13 //limitations under the License.
danielelopez 0:6156b29d3c91 14
danielelopez 0:6156b29d3c91 15 #ifndef OSISOFT_OMF_H
danielelopez 0:6156b29d3c91 16 #define OSISOFT_OMF_H
danielelopez 0:6156b29d3c91 17
danielelopez 0:6156b29d3c91 18 #include "mbed.h"
danielelopez 0:6156b29d3c91 19 #include "https_request.h"
danielelopez 8:e5fe40b77f8f 20 #include "config.deviceID.h"
danielelopez 0:6156b29d3c91 21
danielelopez 0:6156b29d3c91 22 // ************************************************************************
danielelopez 0:6156b29d3c91 23 // Helper function that casts floats into strings
danielelopez 0:6156b29d3c91 24 // ************************************************************************
danielelopez 0:6156b29d3c91 25
danielelopez 0:6156b29d3c91 26 string OMFLib_float_to_string(float f);
danielelopez 0:6156b29d3c91 27
danielelopez 0:6156b29d3c91 28 // ************************************************************************
danielelopez 0:6156b29d3c91 29 // Helper function that sends an actual web request
danielelopez 0:6156b29d3c91 30 // ************************************************************************
danielelopez 0:6156b29d3c91 31
danielelopez 0:6156b29d3c91 32 void OMFLib_sendMessageToEndpoint(TLSSocket* socket, const char* action, const char* message_type, const char* body);
danielelopez 0:6156b29d3c91 33
danielelopez 0:6156b29d3c91 34 // ************************************************************************
danielelopez 1:1c31b413ba0c 35 // Helper function that sends an actual web request; does not reuse sockets
danielelopez 1:1c31b413ba0c 36 // ************************************************************************
danielelopez 1:1c31b413ba0c 37
danielelopez 1:1c31b413ba0c 38 void OMFLib_sendMessageToEndpoint_NoSocketReuse(NetworkInterface* network, const char* action, const char* message_type, const char* body);
danielelopez 1:1c31b413ba0c 39
danielelopez 1:1c31b413ba0c 40 // ************************************************************************
danielelopez 1:1c31b413ba0c 41 // Helper function: prints out an HTTP response
danielelopez 1:1c31b413ba0c 42 // ************************************************************************
danielelopez 1:1c31b413ba0c 43
danielelopez 1:1c31b413ba0c 44 void OMFLib_dump_response(HttpResponse* res);
danielelopez 1:1c31b413ba0c 45
danielelopez 1:1c31b413ba0c 46 // ************************************************************************
danielelopez 0:6156b29d3c91 47 // Gets the current time in the appropriate OMF format
danielelopez 0:6156b29d3c91 48 // ************************************************************************
danielelopez 0:6156b29d3c91 49
danielelopez 0:6156b29d3c91 50 string OMFLib_getCurrentTimeString();
danielelopez 0:6156b29d3c91 51
danielelopez 0:6156b29d3c91 52 // ************************************************************************
danielelopez 0:6156b29d3c91 53 // Sets the clock via NTP via the nwtwork
danielelopez 0:6156b29d3c91 54 // ************************************************************************
danielelopez 0:6156b29d3c91 55
danielelopez 0:6156b29d3c91 56 void OMFLib_syncClockViaNTP(NetworkInterface* network);
danielelopez 8:e5fe40b77f8f 57
danielelopez 8:e5fe40b77f8f 58 // ------------------------------------------------------------------------
danielelopez 8:e5fe40b77f8f 59
danielelopez 8:e5fe40b77f8f 60 // Automatically generated OMF-SPECIFIC CONSTANTS
danielelopez 8:e5fe40b77f8f 61 // Similarly, specify the name of for the data values type; this should likewise be unique
danielelopez 8:e5fe40b77f8f 62 // for each general class of IoT device--for example, if you were running this script on two different devices,
danielelopez 8:e5fe40b77f8f 63 // each with different numbers and kinds of sensors, you would specify a different data values message type name
danielelopez 8:e5fe40b77f8f 64 // when running the script on each device. If both devices were the same, you could use the same data_values_message_type_name
danielelopez 8:e5fe40b77f8f 65 const string DATA_VALUES_MESSAGE_TYPE_NAME = DEVICE_TYPE + "_data_values_type";
danielelopez 8:e5fe40b77f8f 66
danielelopez 8:e5fe40b77f8f 67 // The unique device name will also be used as part of the container id used to send live data values
danielelopez 8:e5fe40b77f8f 68 const string DATA_VALUES_CONTAINER_ID = DEVICE_NAME + "_data_values_container";
danielelopez 8:e5fe40b77f8f 69
danielelopez 8:e5fe40b77f8f 70 // The device type will also be used for the asset type constant as well
danielelopez 8:e5fe40b77f8f 71 const string ASSETS_MESSAGE_TYPE_NAME = DEVICE_TYPE + "_asset_type";
danielelopez 8:e5fe40b77f8f 72
danielelopez 8:e5fe40b77f8f 73 // The containers message JSON requires both of the above constants; it is also a constant
danielelopez 8:e5fe40b77f8f 74 const string CONTAINERS_MESSAGE_JSON = "["
danielelopez 8:e5fe40b77f8f 75 "{"
danielelopez 8:e5fe40b77f8f 76 "\"id\": \"" + DATA_VALUES_CONTAINER_ID + "\","
danielelopez 8:e5fe40b77f8f 77 "\"typeid\": \"" + DATA_VALUES_MESSAGE_TYPE_NAME + "\""
danielelopez 8:e5fe40b77f8f 78 "}"
danielelopez 8:e5fe40b77f8f 79 "]";
danielelopez 8:e5fe40b77f8f 80
danielelopez 8:e5fe40b77f8f 81 // A JSON packet to containing linking data for the PI AF asset that will be made
danielelopez 8:e5fe40b77f8f 82 const string LINKS_MESSAGE_JSON = "["
danielelopez 8:e5fe40b77f8f 83 "{"
danielelopez 8:e5fe40b77f8f 84 "\"typeid\": \"__Link\"" ","
danielelopez 8:e5fe40b77f8f 85 "\"values\": ["
danielelopez 8:e5fe40b77f8f 86 // This first link will locate such a newly created AF Element under the root PI element targeted by the PI Connector in your target AF database
danielelopez 8:e5fe40b77f8f 87 // This was specfied in the Connector Relay Admin page; note that a new parent element, with the same name as the producer_token, will also be made
danielelopez 8:e5fe40b77f8f 88 "{"
danielelopez 8:e5fe40b77f8f 89 "\"Source\": {"
danielelopez 8:e5fe40b77f8f 90 "\"typeid\": \"" + ASSETS_MESSAGE_TYPE_NAME + "\","
danielelopez 8:e5fe40b77f8f 91 "\"index\": \"_ROOT\""
danielelopez 8:e5fe40b77f8f 92 "},"
danielelopez 8:e5fe40b77f8f 93 "\"Target\": {"
danielelopez 8:e5fe40b77f8f 94 "\"typeid\": \"" + ASSETS_MESSAGE_TYPE_NAME + "\","
danielelopez 8:e5fe40b77f8f 95 "\"index\": \"" + DEVICE_NAME + "\""
danielelopez 8:e5fe40b77f8f 96 "}"
danielelopez 8:e5fe40b77f8f 97 "},"
danielelopez 8:e5fe40b77f8f 98 // This second link will map new PI Points (created by messages sent to the data values container) to a newly create element
danielelopez 8:e5fe40b77f8f 99 "{"
danielelopez 8:e5fe40b77f8f 100 "\"Source\": {"
danielelopez 8:e5fe40b77f8f 101 "\"typeid\": \"" + ASSETS_MESSAGE_TYPE_NAME + "\","
danielelopez 8:e5fe40b77f8f 102 "\"index\": \"" + DEVICE_NAME + + "\""
danielelopez 8:e5fe40b77f8f 103 "},"
danielelopez 8:e5fe40b77f8f 104 "\"Target\": {"
danielelopez 8:e5fe40b77f8f 105 "\"containerid\": \"" + DATA_VALUES_CONTAINER_ID + "\""
danielelopez 8:e5fe40b77f8f 106 "}"
danielelopez 8:e5fe40b77f8f 107 "}"
danielelopez 8:e5fe40b77f8f 108 "]"
danielelopez 8:e5fe40b77f8f 109 "}"
danielelopez 8:e5fe40b77f8f 110 "]";
danielelopez 8:e5fe40b77f8f 111
danielelopez 8:e5fe40b77f8f 112 // ------------------------------------------------------------------------
danielelopez 8:e5fe40b77f8f 113
danielelopez 8:e5fe40b77f8f 114 // Constants used for setting headers when sending OMF messages
danielelopez 8:e5fe40b77f8f 115 const string OMF_VERSION = "1.0";
danielelopez 8:e5fe40b77f8f 116 const string OMF_MESSAGE_FORMAT = "JSON";
danielelopez 8:e5fe40b77f8f 117 const string CONTENT_TYPE = "application/json";
danielelopez 0:6156b29d3c91 118 #endif