FAQs

Last updated: January 3rd, 2020

General

What experience does Indicium Dynamics have to delivering IT to OT integration projects?

Indicium Dynamics have delivered a number of successful projects, integrating IT and OT together. Check out our showcase page for some examples.

Features

Are you planning on offering a cloud hosting service for user data?

Yes. We are planning on offering a secure service where you can publish your data to the cloud and access your dashboards online. This will include a web based portal and an app with push notification support.

If I want a specific feature, can you build it for me?

Yes. We love feedback and suggestions, so contact us to tell us your ideas. You can also contract us to build custom features or solutions, specfic to your requirements.

Pricing

What does my license entitle me to?

You will get 12 months of support and upgrades when you pay your license fee. You can renew your license at any time.

Support

How do I change my database connection details?

Your database connection string is stored in your appsettings.json file.

{
    "ConnectionStrings": {
        "DefaultConnection": "Server=localhost;Database=DataBus;Trusted_Connection=True;MultipleActiveResultSets=true",
    },
    "DataBusConfig": {
        "ConfigManager": "EntityFrameworkConfig"
    },
}

You can also change you configuration type between EntityFrameworkConfig, FileConfig or MongoDBConfig

How do I modify where my log files are stored and logging levels?

You can change your logging details in the appsettings.json file.
"Logging": {
    "PathFormat": "Logs/indicium.databus-{Date}.log",
    "IncludeScopes": false,
    "Debug": {
        "LogLevel": {
            "Default": "Information"
        }
    },
    "Console": {
        "LogLevel": {
            "Default": "Information"
        }
    },
    "LogLevel": {
        "Default": "Information",
        "System": "Information",
        "Microsoft": "Warning",
        "Microsoft.EntityFrameworkCore.Database.Command": "Warning",
        "Microsoft.EntityFrameworkCore.Infrastructure": "Warning",
        "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker": "Warning",
        "Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor": "Warning",
        "Microsoft.AspNetCore.Hosting.Internal.WebHost": "Warning",
        "Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler": "Warning",
        "Microsoft.AspNetCore.Authorization.DefaultAuthorizationService": "Warning"
    }
},

How do I consume a web feed, like getting weather data?

By using the Web Feed plugin, you can obtain data from a service that publishes their data on a uri, then use the 'New Data Received Event' to process that data and use the JSON Extract Plugin to extract the individual items from the JSON in the Pipeline.

This example processes weather data from the Australian Government Bureau of Meteorology: http://www.bom.gov.au/fwo/IDT60801/IDT60801.94975.json


import clr
from System import DateTime,String,Math,Convert,Globalization
from Indicium.DataBus.Common.Data import *
clr.AddReference('NewtonSoft.Json')

from Newtonsoft.Json import *

class Automation:
    def __init__(self):
        self.heartbeat = 0          

    def newData(self, data):
        self.heartbeat += 1
        
        seriesEvent = SeriesEvent()
        seriesEvent.Uri = data.Uri
        seriesEvent.Name = data.Name
        
        wJson = data.Point.ParseJson()
        dataArr = wJson.observations.data
        
        for item in dataArr:    
            weather = Linq.JObject()
            weather.temp = item.apparent_t
            weather.cloud = item.cloud
            try:
                dateT = dateT = DateTime.ParseExact(item.aifstime_utc.ToString(),'yyyyMMddhhmmss',Globalization.CultureInfo.CurrentCulture)                
                tVal = TimeValue.Create(dateT,weather)
                seriesEvent.Values.Add(tVal)
                
            except Exception as ex:
                weather.dt = item.aifstime_utc.ToString()
               
            
        return seriesEvent
											

Here is another example where the url is a csv file. Use this in conjuction with the CsvExtractPlugin to get values from the individual columns in your Pipeline.


import csv
from StringIO import StringIO
from System import DateTime,String,Math,Convert,Globalization, DateTimeOffset, TimeZoneInfo
from Indicium.DataBus.Common.Data import *

class Automation:
    def newData(self, data):
        
        seriesEvent = SeriesEvent()
        seriesEvent.Uri = data.Uri
        seriesEvent.Name = data.Name
        
        stringCsv = StringIO(data.Point.Value)
        
        sReader = csv.reader(stringCsv,delimiter=',')
        
        counter = 0
        for row in sReader:
            counter += 1
            if counter > 1:  #Skip header row 
                try:
                    dt = DateTimeOffset.Parse(row[1])
                    tVal = TimeValue.Create(dt, ",".join(row))
                    seriesEvent.Values.Add(tVal)
                except Exception as ex:
                    exc = ex
        
        return seriesEvent