data

package
v0.0.25 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 13, 2021 License: Apache-2.0 Imports: 5 Imported by: 10

Documentation

Index

Constants

View Source
const (
	CmdUpdateApp string = "updateApp"
	CmdPoll             = "poll"
	CmdFieldMode        = "fieldMode"
)

define valid commands

View Source
const (
	// general point types
	PointTypeDescription string = "description"
	PointTypeScale              = "scale"
	PointTypeOffset             = "offset"
	PointTypeUnits              = "units"
	PointTypeValue              = "value"
	PointTypeValueSet           = "valueSet"
	// PointTypeID typically refers to Node ID
	PointTypeID                 = "id"
	PointTypeAddress            = "address"
	PointTypeDebug              = "debug"
	PointTypeInitialized        = "initialized"
	PointTypePollPeriod         = "pollPeriod"
	PointTypeErrorCount         = "errorCount"
	PointTypeErrorCountReset    = "errorCountReset"
	PointTypeErrorCountEOF      = "errorCountEOF"
	PointTypeErrorCountEOFReset = "errorCountEOFReset"
	PointTypeErrorCountCRC      = "errorCountCRC"
	PointTypeErrorCountCRCReset = "errorCountCRCReset"
	PointTypeReadOnly           = "readOnly"
	PointTypeURI                = "uri"

	// An device node describes an phyical device -- it may be the
	// cloud server, gateway, etc
	NodeTypeDevice         = "device"
	PointTypeCmdPending    = "cmdPending"
	PointTypeSwUpdateState = "swUpdateState"
	PointTypeStartApp      = "startApp"
	PointTypeStartSystem   = "startSystem"
	PointTypeUpdateOS      = "updateOS"
	PointTypeUpdateApp     = "updateApp"
	PointTypeSysState      = "sysState"

	PointValueSysStateUnknown  = "unknown"
	PointValueSysStatePowerOff = "powerOff"
	PointValueSysStateOffline  = "offline"
	PointValueSysStateOnline   = "online"

	PointTypeSwUpdateRunning      = "swUpdateRunning"
	PointTypeSwUpdateError        = "swUpdateError"
	PointTypeSwUpdatePercComplete = "swUpdatePercComplete"
	PointTypeOSVersion            = "osVersion"
	PointTypeAppVersion           = "appVersion"
	PointTypeHwVersion            = "hwVersion"

	// user node describes a system user and is used to control
	// access to the system (typically through web UI)
	NodeTypeUser       = "user"
	PointTypeFirstName = "firstName"
	PointTypeLastName  = "lastName"
	PointTypePhone     = "phone"
	PointTypeEmail     = "email"
	PointTypePass      = "pass"

	// modbus nodes
	// in modbus land, terminology is a big backwards, client is master,
	// and server is slave.
	NodeTypeModbus = "modbus"

	PointTypeClientServer = "clientServer"
	PointValueClient      = "client"
	PointValueServer      = "server"

	PointTypePort = "port"
	PointTypeBaud = "baud"

	PointTypeProtocol = "protocol"
	PointValueRTU     = "RTU"
	PointValueTCP     = "TCP"

	NodeTypeModbusIO = "modbusIo"

	PointTypeModbusIOType           = "modbusIoType"
	PointValueModbusDiscreteInput   = "modbusDiscreteInput"
	PointValueModbusCoil            = "modbusCoil"
	PointValueModbusInputRegister   = "modbusInputRegister"
	PointValueModbusHoldingRegister = "modbusHoldingRegister"

	PointTypeDataFormat = "dataFormat"
	PointValueUINT16    = "uint16"
	PointValueINT16     = "int16"
	PointValueUINT32    = "uint32"
	PointValueINT32     = "int32"
	PointValueFLOAT32   = "float32"

	// A group node is used to group users and devices
	// or generally to add structure to the node graph.
	NodeTypeGroup = "group"

	// a rule node describes a rule that may run on the system
	NodeTypeRule = "rule"

	PointTypeActive = "active"

	NodeTypeCondition = "condition"

	PointTypePointID    = "pointID"
	PointTypePointType  = "pointType"
	PointTypePointIndex = "pointIndex"
	PointTypeValueType  = "valueType"
	PointValueNumber    = "number"
	PointValueOnOff     = "onOff"
	PointValueText      = "text"

	PointTypeOperator     = "operator"
	PointValueGreaterThan = ">"
	PointValueLessThan    = "<"
	PointValueEqual       = "="
	PointValueNotEqual    = "!="
	PointValueOn          = "on"
	PointValueOff         = "off"
	PointValueContains    = "contains"

	PointTypeMinActive = "minActive"

	NodeTypeAction = "action"

	PointTypeActionType = "actionType"

	PointValueActionNotify   = "notify"
	PointValueActionSetValue = "setValue"

	// Transient points that are used for notifications, etc.
	// These points are not stored in the state of any node,
	// but are recorded in the time series database to record history.
	PointMsgAll  = "msgAll"
	PointMsgUser = "msgUser"

	NodeTypeMsgService = "msgService"

	PointTypeService = "service"

	PointValueTwilio = "twilio"
	PointValueSMTP   = "smtp"

	PointTypeSID       = "sid"
	PointTypeAuthToken = "authToken"
	PointTypeFrom      = "from"

	NodeTypeVariable      = "variable"
	PointTypeVariableType = "variableType"
)

define common node and point types that have special meaning in the system.

Variables

This section is empty.

Functions

func BoolToFloat added in v0.0.16

func BoolToFloat(v bool) float64

BoolToFloat converts bool to float

func FloatToBool added in v0.0.16

func FloatToBool(v float64) bool

FloatToBool converts a float to bool

Types

type Action added in v0.0.8

type Action struct {
	ID             string
	Description    string
	Action         string
	NodeID         string
	PointType      string
	PointValueType string
	PointValue     float64
	PointTextValue string
}

Action defines actions that can be taken if a rule is active. Template can optionally be used to customize the message that is sent and uses Io Type or IDs to fill in the values. Example might be: JamMonitoring: Alert: {{ description }} is in ALARM state with tank level of {{ tankLevel }}.

type Auth added in v0.0.5

type Auth struct {
	Token  string `json:"token"`
	IsRoot bool   `json:"isRoot"`
	Email  string `json:"email"`
}

Auth is an authentication response.

type Condition added in v0.0.8

type Condition struct {
	ID             string
	Description    string
	NodeID         string
	PointType      string
	PointID        string
	PointIndex     int
	PointValueType string
	Operator       string
	PointValue     float64
	PointTextValue string
	MinTimeActive  float64
	Active         bool
}

Condition defines parameters to look for in a sample. Either SampleType or SampleID (or both) can be set. They can't both be "".

type Config added in v0.0.5

type Config struct {
	NAME  string `json:"id"`
	IO    string
	Value float64 `json:"value"`
}

Config defines parameter of config

type Edge added in v0.0.15

type Edge struct {
	ID   string `json:"id"`
	Up   string `json:"up"`
	Down string `json:"down"`
}

Edge is used to describe the relationship between two nodes

type Event

type Event struct {
	Time    time.Time
	Type    EventType
	Level   EventLevel
	Message string
}

Event describes something that happened and might be displayed to user in a a sequential log format.

type EventLevel

type EventLevel int

EventLevel is used to describe the "severity" of the event and can be used to quickly filter the type of events

const (
	EventLevelFault EventLevel = 3
	EventLevelInfo
	EventLevelDebug
)

define valid events

type EventType

type EventType int

EventType describes an event. Custom applications that build on top of Simple IoT should custom event types at high number above 10,000 to ensure there is not a collision between type IDs. Note, these enums should never change.

const (
	EventTypeStartSystem EventType = 10
	EventTypeStartApp
	EventTypeSystemUpdate
	EventTypeAppUpdate
)

define valid events

type GpsPos

type GpsPos struct {
	Lat    float64 `json:"lat"`
	Long   float64 `json:"long"`
	Fix    string  `json:"fix"`
	NumSat int64   `json:"numSat"`
}

GpsPos describes location and fix information from a GPS

func (*GpsPos) FromGPGGA

func (p *GpsPos) FromGPGGA(gpgga nmea.GPGGA)

FromGPGGA converts a GPGGA string to a position/fix

type Group added in v0.0.5

type Group struct {
	ID     string      `json:"id" boltholdKey:"ID"`
	Name   string      `json:"name"`
	Parent string      `json:"parent"`
	Users  []UserRoles `json:"users"`
}

An Group represents a named collection of Users and Devices.

func (*Group) FindUsers added in v0.0.5

func (o *Group) FindUsers(role Role) []string

FindUsers returns users for specified role

type Message added in v0.0.23

type Message struct {
	ID             string
	UserID         string
	ParentID       string
	NotificationID string
	Email          string
	Phone          string
	Subject        string
	Message        string
}

Message describes a notification that is sent to a particular user

func PbDecodeMessage added in v0.0.23

func PbDecodeMessage(data []byte) (Message, error)

PbDecodeMessage converts a protobuf to a message data structure

func (*Message) ToPb added in v0.0.23

func (m *Message) ToPb() ([]byte, error)

ToPb converts to protobuf data

type MsgService added in v0.0.23

type MsgService struct {
	ID        string
	Service   string
	SID       string
	AuthToken string
	From      string
}

MsgService is used to represent message services such as Twilio, SMTP, etc

func NodeToMsgService added in v0.0.23

func NodeToMsgService(node Node) (MsgService, error)

NodeToMsgService converts a node to message service

type Node added in v0.0.12

type Node struct {
	ID     string `json:"id" boltholdKey:"ID"`
	Type   string `json:"type"`
	Points Points `json:"points"`
}

Node represents the state of a device. UUID is recommended for ID to prevent collisions is distributed instances.

func PbDecodeNode added in v0.0.22

func PbDecodeNode(data []byte) (Node, error)

PbDecodeNode converts a protobuf to node data structure

func (*Node) Desc added in v0.0.12

func (n *Node) Desc() string

Desc returns Description if set, otherwise ID

func (*Node) ProcessPoint added in v0.0.12

func (n *Node) ProcessPoint(pIn Point)

ProcessPoint takes a point for a device and adds/updates its array of points

func (*Node) SetCmdPending added in v0.0.12

func (n *Node) SetCmdPending(pending bool)

SetCmdPending for device

func (*Node) SetState added in v0.0.12

func (n *Node) SetState(state string)

SetState sets the device state

func (*Node) SetSwUpdateState added in v0.0.12

func (n *Node) SetSwUpdateState(state SwUpdateState)

SetSwUpdateState for a device

func (*Node) State added in v0.0.12

func (n *Node) State() string

State returns the current state of a device

func (*Node) ToNodeEdge added in v0.0.15

func (n *Node) ToNodeEdge(parent string) NodeEdge

ToNodeEdge converts to data structure used in API requests

func (*Node) ToPb added in v0.0.23

func (n *Node) ToPb() ([]byte, error)

ToPb encodes a node to a protobuf

func (*Node) ToUser added in v0.0.15

func (n *Node) ToUser() User

ToUser converts a node to user struct

func (*Node) UpdateState added in v0.0.12

func (n *Node) UpdateState() (string, bool)

UpdateState does routine updates of state (offline status, etc). Returns true if state was updated. We originally considered offline to be when we did not receive data from a remote device for X minutes. However, with points that could represent a config change as well. Eventually we may want to improve this to look at point types, but this is probably OK for now.

type NodeCmd added in v0.0.12

type NodeCmd struct {
	ID     string `json:"id,omitempty" boltholdKey:"ID"`
	Cmd    string `json:"cmd"`
	Detail string `json:"detail,omitempty"`
}

NodeCmd represents a command to be sent to a device

type NodeEdge added in v0.0.15

type NodeEdge struct {
	ID     string `json:"id" boltholdKey:"ID"`
	Type   string `json:"type"`
	Parent string `json:"parent"`
	Points Points `json:"points"`
}

NodeEdge combines node and edge data, used for APIs

func RemoveDuplicateNodesID added in v0.0.23

func RemoveDuplicateNodesID(nodes []NodeEdge) []NodeEdge

RemoveDuplicateNodesID removes duplicate nodes in list with the same ID (can have different parents)

func RemoveDuplicateNodesIDParent added in v0.0.23

func RemoveDuplicateNodesIDParent(nodes []NodeEdge) []NodeEdge

RemoveDuplicateNodesIDParent removes duplicate nodes in list with the same ID and parent

func (*NodeEdge) ProcessPoint added in v0.0.16

func (n *NodeEdge) ProcessPoint(pIn Point)

ProcessPoint takes a point for a device and adds/updates its array of points

func (*NodeEdge) ToNode added in v0.0.15

func (n *NodeEdge) ToNode() Node

ToNode converts to structure stored in db

type NodeVersion added in v0.0.12

type NodeVersion struct {
	OS  string `json:"os"`
	App string `json:"app"`
	HW  string `json:"hw"`
}

NodeVersion represents the device SW version

type Notification added in v0.0.23

type Notification struct {
	ID         string
	SourceNode string
	Subject    string
	Message    string
}

Notification represents a message sent by a node

func PbDecodeNotification added in v0.0.23

func PbDecodeNotification(data []byte) (Notification, error)

PbDecodeNotification converts a protobuf to notification data structure

func (*Notification) ToPb added in v0.0.23

func (n *Notification) ToPb() ([]byte, error)

ToPb converts to protobuf data

type Point added in v0.0.11

type Point struct {
	// ID of the sensor that provided the point
	ID string `json:"id,omitempty"`

	// Type of point (voltage, current, key, etc)
	Type string `json:"type,omitempty" boltholdIndex:"Type"`

	// Index is used to specify a position in an array such as
	// which pump, temp sensor, etc.
	Index int `json:"index,omitempty"`

	// Time the point was taken
	Time time.Time `json:"time,omitempty" boltholdKey:"Time" gob:"-"`

	// Duration over which the point was taken. This is useful
	// for averaged values to know what time period the value applies
	// to.
	Duration time.Duration `json:"duration,omitempty"`

	// Average OR
	// Instantaneous analog or digital value of the point.
	// 0 and 1 are used to represent digital values
	Value float64 `json:"value,omitempty"`

	// Optional text value of the point for data that is best represented
	// as a string rather than a number.
	Text string `json:"text,omitempty"`

	// statistical values that may be calculated over the duration of the point
	Min float64 `json:"min,omitempty"`
	Max float64 `json:"max,omitempty"`
}

Point is a flexible data structure that can be used to represent a sensor value or a configuration parameter. ID, Type, and Index uniquely identify a point in a device

func PbDecodePoints added in v0.0.11

func PbDecodePoints(data []byte) ([]Point, error)

PbDecodePoints decode protobuf encoded points

func PbToPoint added in v0.0.11

func PbToPoint(sPb *pb.Point) (Point, error)

PbToPoint converts pb point to point

func (*Point) Bool added in v0.0.11

func (s *Point) Bool() bool

Bool returns a bool representation of value

func (Point) ToPb added in v0.0.11

func (s Point) ToPb() (pb.Point, error)

ToPb encodes point in protobuf format

type PointAverager added in v0.0.23

type PointAverager struct {
	// contains filtered or unexported fields
}

PointAverager accumulates points, and averages them. The average can be reset.

func NewPointAverager added in v0.0.23

func NewPointAverager(pointType string) *PointAverager

NewPointAverager initializes and returns an averager

func (*PointAverager) AddPoint added in v0.0.23

func (pa *PointAverager) AddPoint(s Point)

AddPoint takes a point, and adds it to the total

func (*PointAverager) GetAverage added in v0.0.23

func (pa *PointAverager) GetAverage() Point

GetAverage returns the average of the accumulated points

func (*PointAverager) ResetAverage added in v0.0.23

func (pa *PointAverager) ResetAverage()

ResetAverage sets the accumulated total to zero

type PointFilter added in v0.0.11

type PointFilter struct {
	// contains filtered or unexported fields
}

PointFilter is used to send points upstream. It only sends the data has changed, and at a max frequency

func NewPointFilter added in v0.0.11

func NewPointFilter(minSend, periodicSend time.Duration) *PointFilter

NewPointFilter is used to creat a new point filter If points have changed that get sent out at a minSend interval frequency of minSend. All points are periodically sent at lastPeriodicSend interval. Set minSend to 0 for things like config settings where you want them to be sent whenever anything changes.

func (*PointFilter) Add added in v0.0.11

func (sf *PointFilter) Add(points []Point) []Point

Add adds points and returns points that meet the filter criteria

type Points added in v0.0.11

type Points []Point

Points is an array of Point

func (*Points) LatestTime added in v0.0.11

func (ps *Points) LatestTime() time.Time

LatestTime returns the latest timestamp of a devices points

func (*Points) Text added in v0.0.11

func (ps *Points) Text(id, typ string, index int) (string, bool)

Text fetches a text value from an array of points given ID, Type, and Index. If ID or Type are set to "", they are ignored.

func (*Points) ToPb added in v0.0.23

func (ps *Points) ToPb() ([]byte, error)

ToPb encodes an array of points into protobuf

func (*Points) Value added in v0.0.11

func (ps *Points) Value(id, typ string, index int) (float64, bool)

Value fetches a value from an array of points given ID, Type, and Index. If ID or Type are set to "", they are ignored.

func (*Points) ValueBool added in v0.0.16

func (ps *Points) ValueBool(id, typ string, index int) (bool, bool)

ValueBool returns value as bool

func (*Points) ValueInt added in v0.0.16

func (ps *Points) ValueInt(id, typ string, index int) (int, bool)

ValueInt returns value as integer

type Role added in v0.0.5

type Role string

Role of user

const (
	RoleAdmin Role = "admin"
	RoleUser       = "user"
)

define standard roles

type Rule added in v0.0.8

type Rule struct {
	ID          string
	Description string
	Active      bool
	Conditions  []Condition
	Actions     []Action
}

Rule defines a conditions and actions that are run if condition is true. Global indicates the rule applies to all Devices. The rule config and state is separated so we can make updates to the Rule without config affecting state, and state affecting config as these are typically done by two different entities.

func NodeToRule added in v0.0.22

func NodeToRule(ruleNode NodeEdge, conditionNodes, actionNodes []NodeEdge) (*Rule, error)

NodeToRule converts nodes that make up a rule to a node

type RuleConfig added in v0.0.8

type RuleConfig struct {
}

RuleConfig contains parts of the rule that a users changes

type RuleState added in v0.0.8

type RuleState struct {
	Active     bool      `json:"active"`
	LastAction time.Time `json:"lastAction"`
}

RuleState contains parts of a rule that the system changes

type StandardResponse

type StandardResponse struct {
	Success bool   `json:"success"`
	Error   string `json:"error,omitempty"`
	ID      string `json:"id,omitempty"`
}

StandardResponse is the standard response to any request

type SwUpdateState added in v0.0.9

type SwUpdateState struct {
	Running     bool   `json:"running"`
	Error       string `json:"error"`
	PercentDone int    `json:"percentDone"`
}

SwUpdateState represents the state of an update

type TimeWindowAverager

type TimeWindowAverager struct {
	// contains filtered or unexported fields
}

TimeWindowAverager accumulates points, and averages them on a fixed time period and outputs the average/min/max, etc as a point

func NewTimeWindowAverager

func NewTimeWindowAverager(windowLen time.Duration, callBack func(Point), pointType string) *TimeWindowAverager

NewTimeWindowAverager initializes and returns an averager

func (*TimeWindowAverager) NewPoint added in v0.0.23

func (twa *TimeWindowAverager) NewPoint(s Point)

NewPoint takes a point, and if the time window expired, it calls the callback function with the a new point which is avg of all points since start time.

type User

type User struct {
	ID        string `json:"id" boltholdKey:"ID"`
	FirstName string `json:"firstName"`
	LastName  string `json:"lastName"`
	Phone     string `json:"phone"`
	Email     string `json:"email"`
	Pass      string `json:"pass"`
}

User represents a user of the system

func NodeToUser added in v0.0.23

func NodeToUser(node Node) (User, error)

NodeToUser converts a node to a user

func (*User) ToNode added in v0.0.15

func (u *User) ToNode() Node

ToNode converts a user structure into a node

func (*User) ToPoints added in v0.0.15

func (u *User) ToPoints() Points

ToPoints converts a user structure into points

type UserRoles added in v0.0.5

type UserRoles struct {
	UserID string `json:"userId"`
	Roles  []Role `json:"roles"`
}

UserRoles describes a users roles in a group

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL