Documentation ¶
Overview ¶
Package client contains utilties for creating Simple IoT clients.
A Simple IoT Client contains the logic for nodes described in the Simple IoT graph store. Examples of built in clients include: Modbus, 1-wire, Upstream, etc.
A client Manager is used to watch the Simple IoT store and create and update new clients as they are created and modified.
See Client and NewManager for ideas on how to get started with your own client.
When debugging client test code, it can be very useful to dump the node tree for inspection. This can be done with the following code:
nodes, err := client.ExportNodes(nc, "root") if err != nil { t.Fatal("Error exporting nodes: ", err) } fmt.Println(string(nodes))
This package also contains a number of utility functions for interacting with the Simple IoT NATS API.
Index ¶
- Constants
- Variables
- func AdminStoreMaint(nc *nats.Conn) error
- func AdminStoreVerify(nc *nats.Conn) error
- func DecodeEdgePointsMsg(msg *nats.Msg) (string, string, []data.Point, error)
- func DecodeNodePointsMsg(msg *nats.Msg) (string, []data.Point, error)
- func DecodeUpEdgePointsMsg(msg *nats.Msg) (string, string, string, []data.Point, error)
- func DecodeUpNodePointsMsg(msg *nats.Msg) (string, string, []data.Point, error)
- func DeleteNode(nc *nats.Conn, id, parent string, origin string) error
- func Dump(nc *nats.Conn, msg *nats.Msg) error
- func DuplicateNode(nc *nats.Conn, id, newParent, origin string) error
- func EdgeConnect(eo EdgeOptions) (*nats.Conn, error)
- func ExpBackoff(attempts int, max time.Duration) time.Duration
- func ExportNodes(nc *nats.Conn, id string) ([]byte, error)
- func GetNatsURI(nc *nats.Conn) (string, string, error)
- func GetNodes(nc *nats.Conn, parent, id, typ string, includeDel bool) ([]data.NodeEdge, error)
- func GetNodesForUser(nc *nats.Conn, userID string) ([]data.NodeEdge, error)
- func GetNodesType[T any](nc *nats.Conn, parent, id string) ([]T, error)
- func GetRootNode(nc *nats.Conn) (data.NodeEdge, error)
- func ImportNodes(nc *nats.Conn, parent string, yamlData []byte, origin string, preserveIDs bool) error
- func ListenForFile(nc *nats.Conn, dir, deviceID string, callback func(path string)) error
- func Log(natsServer, authToken string)
- func MirrorNode(nc *nats.Conn, id, newParent, origin string) error
- func MoveNode(nc *nats.Conn, id, oldParent, newParent, origin string) error
- func NatsSendFileFromHTTP(nc *nats.Conn, deviceID string, url string, callback func(int)) error
- func NodeWatcher[T any](nc *nats.Conn, id, parent string) (get func() T, stop func(), err error)
- func ReplaceIDs(nodes *data.NodeEdgeChildren, parent string)
- func SendEdgePoint(nc *nats.Conn, nodeID, parentID string, point data.Point, ack bool) error
- func SendEdgePoints(nc *nats.Conn, nodeID, parentID string, points data.Points, ack bool) error
- func SendFile(nc *nats.Conn, deviceID string, reader io.Reader, name string, ...) error
- func SendNode(nc *nats.Conn, node data.NodeEdge, origin string) error
- func SendNodePoint(nc *nats.Conn, nodeID string, point data.Point, ack bool) error
- func SendNodePoints(nc *nats.Conn, nodeID string, points data.Points, ack bool) error
- func SendNodeType[T any](nc *nats.Conn, node T, origin string) error
- func SendPoints(nc *nats.Conn, subject string, points data.Points, ack bool) error
- func SerialDecode(d []byte) (byte, string, []byte, error)
- func SerialEncode(seq byte, subject string, points data.Points) ([]byte, error)
- func String(nc *nats.Conn, msg *nats.Msg) (string, error)
- func SubjectEdgeAllPoints() string
- func SubjectEdgePoints(nodeID, parentID string) string
- func SubjectNodeAllPoints() string
- func SubjectNodeHRPoints(nodeID string) string
- func SubjectNodePoints(nodeID string) string
- func SubscribeEdgePoints(nc *nats.Conn, id, parent string, callback func(points []data.Point)) (stop func(), err error)
- func SubscribePoints(nc *nats.Conn, id string, callback func(points []data.Point)) (stop func(), err error)
- func UserCheck(nc *nats.Conn, email, pass string) ([]data.NodeEdge, error)
- type AccessPoint
- type Action
- type ActionInactive
- type CanBus
- type CanBusClient
- type Client
- func NewCanBusClient(nc *nats.Conn, config CanBus) Client
- func NewDbClient(nc *nats.Conn, config Db) Client
- func NewFileClient(nc *nats.Conn, config File) Client
- func NewMetricsClient(nc *nats.Conn, config Metrics) Client
- func NewNTPClient(nc *nats.Conn, config NTP) Client
- func NewNetworkManagerClient(nc *nats.Conn, config NetworkManager) Client
- func NewParticleClient(nc *nats.Conn, config Particle) Client
- func NewRuleClient(nc *nats.Conn, config Rule) Client
- func NewSerialDevClient(nc *nats.Conn, config SerialDev) Client
- func NewShellyClient(nc *nats.Conn, config Shelly) Client
- func NewShellyIOClient(nc *nats.Conn, config ShellyIo) Client
- func NewSignalGeneratorClient(nc *nats.Conn, config SignalGenerator) Client
- func NewSyncClient(nc *nats.Conn, config Sync) Client
- func NewUpdateClient(nc *nats.Conn, config Update) Client
- type CobsWrapper
- type Condition
- type Db
- type DbClient
- type Destination
- type Device
- type EdgeOptions
- type File
- type FileClient
- type Group
- type IPv4Address
- type IPv4Config
- type IPv4Netmask
- type IPv6Address
- type IPv6Config
- type Manager
- type Metric
- type Metrics
- type MetricsClient
- type NTP
- type NTPClient
- type NetworkManager
- type NetworkManagerClient
- func (c *NetworkManagerClient) EdgePoints(_ string, _ string, _ []data.Point)
- func (c *NetworkManagerClient) Points(nodeID string, points []data.Point)
- func (c *NetworkManagerClient) Run() error
- func (c *NetworkManagerClient) Stop(error)
- func (c *NetworkManagerClient) SyncConnections() (errs []error, fatal error)
- func (c *NetworkManagerClient) SyncDevices() (errs []error, fatal error)
- func (c *NetworkManagerClient) SyncHostname() (errs []error, fatal error)
- func (c *NetworkManagerClient) WifiScan() error
- type NetworkManagerConn
- type NetworkManagerDevice
- type NewPoints
- type Particle
- type ParticleClient
- type ParticleEvent
- type Rule
- type RuleClient
- type RunGroup
- type RunStop
- type SerialDev
- type SerialDevClient
- type Shelly
- type ShellyClient
- type ShellyGen
- type ShellyIOClient
- type ShellyIo
- func (sio *ShellyIo) Desc() string
- func (sio *ShellyIo) Gen() ShellyGen
- func (sio *ShellyIo) GetStatus() (data.Points, error)
- func (sio *ShellyIo) IsSettableOnOff() bool
- func (sio *ShellyIo) SetName(name string) error
- func (sio *ShellyIo) SetOnOff(comp string, index int, on bool) (data.Points, error)
- type SignalGenerator
- type SignalGeneratorClient
- type SiotExport
- type Sync
- type SyncClient
- type Update
- type UpdateClient
- type User
- type Variable
- type WiFiConfig
Examples ¶
Constants ¶
const BatchSizeLimit = 1000000
BatchSizeLimit is the largest number of points generated per batch. If the number of points to be generated by a SignalGenerator exceed this limit, the remaining points will be dropped and generated wave signals may experience a phase shift.
const InfluxMeasurement = "points"
InfluxMeasurement is the Influx measurement to which all points are written
const NTPConfigPath = "/etc/systemd/timesyncd.conf.d/simpleiot.conf"
NTPConfigPath points to the systemd-timesyncd configuration file
const RescanTimeoutSeconds = 10
RescanTimeoutSeconds is the maximum number of seconds since LastScan that can elapse before scanning for access points is requested
Variables ¶
var ErrCobsDecodeError = errors.New("COBS decode error")
ErrCobsDecodeError indicates we got an error decoding a COBS packet
var ErrCobsLeftoverBufferFull = errors.New("COBS leftover buffer too full")
ErrCobsLeftoverBufferFull indicates our leftover buffer is too full to process
var ErrCobsTooMuchData = errors.New("COBS decode: too much data without null")
ErrCobsTooMuchData indicates we received too much data without a null in it to delineate packets
Functions ¶
func AdminStoreMaint ¶ added in v0.6.0
func AdminStoreMaint(nc *nats.Conn) error
AdminStoreMaint can be used fix store issues
func AdminStoreVerify ¶ added in v0.6.0
func AdminStoreVerify(nc *nats.Conn) error
AdminStoreVerify can be used verify the store
func DecodeEdgePointsMsg ¶
DecodeEdgePointsMsg decodes NATS message into node ID and points returns nodeID, parentID, points, error
func DecodeNodePointsMsg ¶
DecodeNodePointsMsg decodes NATS message into node ID and points
func DecodeUpEdgePointsMsg ¶ added in v0.6.0
DecodeUpEdgePointsMsg decodes NATS message into node ID and points returns upID, nodeID, parentID, points, error
func DecodeUpNodePointsMsg ¶ added in v0.6.0
DecodeUpNodePointsMsg decodes NATS message into node ID and points returns upID, nodeID, points, error
func DeleteNode ¶
DeleteNode removes a node from the specified parent node
func DuplicateNode ¶
DuplicateNode is used to Duplicate a node and all its children
func EdgeConnect ¶
func EdgeConnect(eo EdgeOptions) (*nats.Conn, error)
EdgeConnect is a function that attempts connections for edge devices with appropriate timeouts, backups, etc. Currently set to disconnect if we don't have a connection after 6m, and then exp backup to try to connect every 6m after that.
func ExpBackoff ¶
ExpBackoff calculates an exponential time backup to max duration + a random fraction of 1s
func ExportNodes ¶ added in v0.14.0
ExportNodes is used to export nodes at a particular location to YAML The YAML format looks like:
nodes: - id: inst1 type: device parent: root points: - type: versionApp children: - id: d7f5bbe9-a300-4197-93fa-b8e5e07f683a type: user parent: inst1 points: - type: firstName text: admin - type: lastName text: user - type: phone - type: email text: admin - type: pass text: admin
Key="0" and Tombstone points with value set to 0 are removed from the export to make it easier to read.
func GetNatsURI ¶ added in v0.6.0
GetNatsURI returns the nats URI and auth token for the SIOT server this can be used to set up new NATS connections with different requirements (no echo, etc) return URI, authToken, error
func GetNodes ¶ added in v0.6.0
GetNodes over NATS. Maps to the `p.<id>.<parent>` NATS API. Returns data.ErrDocumentNotFound if node is not found. If parent is set to "none", the edge details are not included and the hash is blank. If parent is set to "all", then all living instances of the node are returned. If parent is set and id is "all", then all child nodes are returned. Parent can be set to "root" and id to "all" to fetch the root node(s).
func GetNodesForUser ¶
GetNodesForUser gets all nodes for a user
func GetNodesType ¶ added in v0.6.0
GetNodesType gets node of a custom type. id and parent work the same as GetNodes Deleted nodes are not included.
func GetRootNode ¶ added in v0.6.0
GetRootNode returns the root node of the instance
func ImportNodes ¶ added in v0.14.0
func ImportNodes(nc *nats.Conn, parent string, yamlData []byte, origin string, preserveIDs bool) error
ImportNodes is used to import nodes at a location in YAML format. New IDs are generated for all nodes unless preserve IDs is set to true. If there multiple references to the same ID, then an attempt is made to replace all of these with the new ID. This also allows you to use "friendly" ID names in hand generated YAML files.
func ListenForFile ¶
ListenForFile listens for a file sent from server. dir is the directly to place downloaded files.
func Log ¶ added in v0.5.2
func Log(natsServer, authToken string)
Log all nats messages. This function does not block and does not clean up after itself.
func MirrorNode ¶
MirrorNode adds a an existing node to a new parent. A node can have multiple parents.
func NatsSendFileFromHTTP ¶ added in v0.5.1
NatsSendFileFromHTTP fetchs a file using http and sends via nats. Callback provides % complete (0-100).
func NodeWatcher ¶ added in v0.4.0
NodeWatcher creates a node watcher. update() is called any time there is an update. Stop can be called to stop the watcher. get() can be called to get the current value.
func ReplaceIDs ¶ added in v0.14.0
func ReplaceIDs(nodes *data.NodeEdgeChildren, parent string)
ReplaceIDs is used to replace IDs tree of nodes. If there multiple references to the same ID, then an attempt is made to replace all of these with the new ID. This function modifies the tree that is passed in. Replace IDs also updates the partent fields.
func SendEdgePoint ¶
SendEdgePoint sends a edge point using the nats protocol
func SendEdgePoints ¶
SendEdgePoints sends points using the nats protocol
func SendFile ¶
func SendFile(nc *nats.Conn, deviceID string, reader io.Reader, name string, callback func(int)) error
SendFile can be used to send a file to a device. Callback provides bytes transferred.
func SendNodePoint ¶
SendNodePoint sends a node point using the nats protocol
func SendNodePoints ¶
SendNodePoints sends node points using the nats protocol
func SendNodeType ¶ added in v0.4.0
SendNodeType is used to send a node to a nats server. Can be used to create nodes.
func SendPoints ¶ added in v0.4.0
SendPoints sends points to specified subject
func SerialDecode ¶ added in v0.4.0
SerialDecode can be used to decode serial data in a client. returns seq, subject, payload
func SerialEncode ¶ added in v0.4.0
SerialEncode can be used in a client to encode points sent over a serial link.
func SubjectEdgeAllPoints ¶
func SubjectEdgeAllPoints() string
SubjectEdgeAllPoints provides subject for all edge points for any node
func SubjectEdgePoints ¶
SubjectEdgePoints constructs a NATS subject for edge points
func SubjectNodeAllPoints ¶
func SubjectNodeAllPoints() string
SubjectNodeAllPoints provides subject for all points for any node
func SubjectNodeHRPoints ¶ added in v0.5.1
SubjectNodeHRPoints constructs a NATS subject for high rate node points
func SubjectNodePoints ¶
SubjectNodePoints constructs a NATS subject for node points
func SubscribeEdgePoints ¶ added in v0.4.0
func SubscribeEdgePoints(nc *nats.Conn, id, parent string, callback func(points []data.Point)) (stop func(), err error)
SubscribeEdgePoints subscripts to edge point updates for a node and executes a callback when new points arrive. stop() can be called to clean up the subscription
Types ¶
type AccessPoint ¶ added in v0.14.0
type AccessPoint struct { SSID string `json:"ssid"` BSSID string `json:"bssid"` Strength uint8 `json:"strength"` Flags uint32 `json:"flags"` WPAFlags uint32 `json:"wpaFlags"` RSNFlags uint32 `json:"rsnFlags"` }
AccessPoint describes a network access point
func ResolveAccessPoint ¶ added in v0.14.0
func ResolveAccessPoint(ap nm.AccessPoint) (apOut AccessPoint, err error)
ResolveAccessPoint returns an AccessPoint from a NetworkManager AccessPoint
func (AccessPoint) MarshallJSON ¶ added in v0.14.0
func (ap AccessPoint) MarshallJSON() ([]byte, error)
MarshallJSON returns a JSON representation of the AP
type Action ¶ added in v0.5.0
type Action struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Disabled bool `point:"disabled"` Active bool `point:"active"` Error string `point:"error"` // Action: notify, setValue, playAudio Action string `point:"action"` NodeID string `point:"nodeID"` PointType string `point:"pointType"` PointKey string `point:"pointKey"` // PointType: number, text, onOff ValueType string `point:"valueType"` Value float64 `point:"value"` ValueText string `point:"valueText"` // the following are used for audio playback PointChannel int `point:"pointChannel"` PointDevice string `point:"pointDevice"` PointFilePath string `point:"pointFilePath"` }
Action defines actions that can be taken if a rule is active.
type ActionInactive ¶ added in v0.5.0
type ActionInactive struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Active bool `point:"active"` // Action: notify, setValue, playAudio Action string `point:"action"` NodeID string `point:"nodeID"` PointType string `point:"pointType"` PointKey string `point:"pointKey"` // PointType: number, text, onOff ValueType string `point:"valueType"` Value float64 `point:"value"` ValueText string `point:"valueText"` // the following are used for audio playback PointChannel int `point:"pointChannel"` PointDevice string `point:"pointDevice"` PointFilePath string `point:"pointFilePath"` }
ActionInactive defines actions that can be taken if a rule is inactive. this is defined for use with the client.SendNodeType API
type CanBus ¶ added in v0.7.0
type CanBus struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Device string `point:"device"` BitRate string `point:"bitRate"` MsgsInDb int `point:"msgsInDb"` SignalsInDb int `point:"signalsInDb"` MsgsRecvdDb int `point:"msgsRecvdDb"` MsgsRecvdDbReset bool `point:"msgsRecvdDbReset"` MsgsRecvdOther int `point:"msgsRecvdOther"` MsgsRecvdOtherReset bool `point:"msgsRecvdOtherReset"` Databases []File `child:"file"` }
CanBus represents a CAN socket config. The name matches the front-end node type "canBus" to link the two so that when a canBus node is created on the frontend the client manager knows to start a CanBus client.
type CanBusClient ¶ added in v0.7.0
type CanBusClient struct {
// contains filtered or unexported fields
}
CanBusClient is a SIOT client used to communicate on a CAN bus
func (*CanBusClient) EdgePoints ¶ added in v0.7.0
func (cb *CanBusClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*CanBusClient) Points ¶ added in v0.7.0
func (cb *CanBusClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*CanBusClient) Run ¶ added in v0.7.1
func (cb *CanBusClient) Run() error
Run the main logic for this client and blocks until stopped There are several main aspects of the CAN bus client
the listener function is a process that recieves CAN bus frames from the Linux SocketCAN socket and sends the frames out on the canMsgRx channel
when a frame is recieved on the canMsgRx channel in the main loop, it is decoded and a point is sent out for each canparse.Signal in the frame. The key of each point contains the message name, signal name, and signal units
func (*CanBusClient) Stop ¶ added in v0.7.0
func (cb *CanBusClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type Client ¶
type Client interface { RunStop Points(string, []data.Point) EdgePoints(string, string, []data.Point) }
Client interface describes methods a Simple Iot client must implement. This is to be kept as simple as possible, and the ClientManager does all the heavy lifting of interacting with the rest of the SIOT system. Run should block until Stop is called. Run MUST return when Stop is called. Stop does not block -- wait until Run returns if you need to know the client is stopped. Points and EdgePoints are called when there are updates to the client node. The client Manager filters out all points with Origin set to "" because it assumes the point was generated by the client and the client already knows about it. Thus, if you want points to get to a client, Origin must be set.
func NewCanBusClient ¶ added in v0.7.0
NewCanBusClient returns a new CanBusClient with a NATS connection and a config
func NewDbClient ¶ added in v0.5.0
NewDbClient ...
func NewFileClient ¶ added in v0.18.0
NewFileClient ...
func NewMetricsClient ¶ added in v0.8.0
NewMetricsClient ...
func NewNTPClient ¶ added in v0.12.6
NewNTPClient returns a new NTPClient using its configuration read from the Client Manager
func NewNetworkManagerClient ¶ added in v0.14.0
func NewNetworkManagerClient(nc *nats.Conn, config NetworkManager) Client
NewNetworkManagerClient returns a new NetworkManagerClient using its configuration read from the Client Manager
func NewParticleClient ¶ added in v0.9.0
NewParticleClient ...
func NewRuleClient ¶ added in v0.5.0
NewRuleClient constructor ...
func NewSerialDevClient ¶ added in v0.4.0
NewSerialDevClient ...
func NewShellyClient ¶ added in v0.10.0
NewShellyClient ...
func NewShellyIOClient ¶ added in v0.10.0
NewShellyIOClient ...
func NewSignalGeneratorClient ¶ added in v0.5.1
func NewSignalGeneratorClient(nc *nats.Conn, config SignalGenerator) Client
NewSignalGeneratorClient ...
func NewSyncClient ¶ added in v0.6.0
NewSyncClient constructor
func NewUpdateClient ¶ added in v0.16.0
NewUpdateClient ...
type CobsWrapper ¶ added in v0.4.0
type CobsWrapper struct {
// contains filtered or unexported fields
}
CobsWrapper can be used to wrap an io.ReadWriteCloser to COBS encode/decode data
func NewCobsWrapper ¶ added in v0.4.0
func NewCobsWrapper(dev io.ReadWriteCloser, maxMessageLength int) *CobsWrapper
NewCobsWrapper creates a new cobs wrapper
func (*CobsWrapper) Close ¶ added in v0.4.0
func (cw *CobsWrapper) Close() error
Close the device wrapped.
func (*CobsWrapper) Read ¶ added in v0.4.0
func (cw *CobsWrapper) Read(b []byte) (int, error)
Read a COBS encoded data stream. The stream may optionally start with one or more NULL bytes and must end with a NULL byte. This Read blocks until we get an entire packet or an error. b must be large enough to hold the entire packet.
func (*CobsWrapper) SetDebug ¶ added in v0.5.3
func (cw *CobsWrapper) SetDebug(debug int)
SetDebug sets the debug level. If >= 9, then it dumps the raw data received.
type Condition ¶ added in v0.5.0
type Condition struct { // general parameters ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Disabled bool `point:"disabled"` ConditionType string `point:"conditionType"` MinActive float64 `point:"minActive"` Active bool `point:"active"` Error string `point:"error"` // used with point value rules NodeID string `point:"nodeID"` PointType string `point:"pointType"` PointKey string `point:"pointKey"` PointIndex int `point:"pointIndex"` ValueType string `point:"valueType"` Operator string `point:"operator"` Value float64 `point:"value"` ValueText string `point:"valueText"` // used with shedule rules Start string `point:"start"` End string `point:"end"` Weekdays []bool `point:"weekday"` Dates []string `point:"date"` }
Condition defines parameters to look for in a point or a schedule.
type Db ¶ added in v0.5.0
type Db struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` URI string `point:"uri"` Org string `point:"org"` Bucket string `point:"bucket"` AuthToken string `point:"authToken"` TagPointTypes []string `point:"tagPointType"` }
Db represents the configuration for a SIOT DB client
type DbClient ¶ added in v0.5.0
type DbClient struct {
// contains filtered or unexported fields
}
DbClient is a SIOT database client
func (*DbClient) EdgePoints ¶ added in v0.5.0
EdgePoints is called by the Manager when new edge points for this node are received.
func (*DbClient) Points ¶ added in v0.5.0
Points is called by the Manager when new points for this node are received.
type Destination ¶ added in v0.14.2
type Destination struct { // NodeID indicating the destination for points; if not specified, the point // destination is determined by the Parent field NodeID string `point:"nodeID"` // Parent is set if points should be sent to the parent node; otherwise, // points are send to the origin node. Parent bool `point:"parent"` // HighRate indicates that points should be sent over the phrup NATS // subject. If set, points are never sent to the origin node; rather, it is // implied that points will be sent to the NodeID (if set) or the parent // node. HighRate bool `point:"highRate"` // PointType indicates the point type for generated points PointType string `point:"pointType"` // PointKey indicates the point key for generated points PointKey string `point:"pointKey"` }
Destination indicates the destination for generated points, including the point type and key
type Device ¶ added in v0.6.0
type Device struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` }
Device represents the instance SIOT is running on
type EdgeOptions ¶
type EdgeOptions struct { URI string AuthToken string NoEcho bool Connected func() Disconnected func() Reconnected func() Closed func() }
EdgeOptions describes options for connecting edge devices
type File ¶ added in v0.7.0
type File struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Name string `point:"name"` Data string `point:"data"` Size string `point:"size"` Binary bool `point:"binary"` Hash string `point:"hash"` }
File represents a file that a user uploads or is present in some location
func (*File) GetContents ¶ added in v0.18.0
GetContents reads the file contents and does any decoding necessary if it is a binary file
type FileClient ¶ added in v0.18.0
type FileClient struct {
// contains filtered or unexported fields
}
FileClient is used to manage files
func (*FileClient) EdgePoints ¶ added in v0.18.0
func (f *FileClient) EdgePoints( _ string, _ string, _ []data.Point, )
EdgePoints is called when the client's node edge points are updated
func (*FileClient) Points ¶ added in v0.18.0
func (f *FileClient) Points(nodeID string, points []data.Point)
Points is called when the client's node points are updated
func (*FileClient) Run ¶ added in v0.18.0
func (f *FileClient) Run() error
Run the main logic for the file client
func (*FileClient) Stop ¶ added in v0.18.0
func (f *FileClient) Stop(error)
Stop stops the File Client
type Group ¶ added in v0.5.2
type Group struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` }
Group represents a group node
type IPv4Address ¶ added in v0.14.0
type IPv4Address string
IPv4Address is a string representation of an IPv4 address
func IPv4AddressUint32 ¶ added in v0.14.0
func IPv4AddressUint32(n uint32, order binary.ByteOrder) IPv4Address
IPv4AddressUint32 converts an IPv4 address in uint32 format to a string
func (IPv4Address) String ¶ added in v0.14.0
func (addr IPv4Address) String() string
String returns the underlying string
func (IPv4Address) Uint32 ¶ added in v0.14.0
func (addr IPv4Address) Uint32(order binary.ByteOrder) uint32
Uint32 convert an IPv4 address in string format to a uint32
func (IPv4Address) Valid ¶ added in v0.14.0
func (addr IPv4Address) Valid() bool
Valid returns true if string is valid IPv4 address
type IPv4Config ¶ added in v0.14.0
type IPv4Config struct { StaticIP bool `json:"staticIP" point:"staticIP"` Address IPv4Address `json:"address" point:"address"` Netmask IPv4Netmask `json:"netmask" point:"netmask"` Gateway IPv4Address `json:"gateway" point:"gateway"` DNSServer1 IPv4Address `json:"dnsServer1" point:"dnsServer1"` DNSServer2 IPv4Address `json:"dnsServer2" point:"dnsServer2"` }
IPv4Config defines data for IPv4 config
func ResolveIPv4Config ¶ added in v0.14.0
func ResolveIPv4Config(settings map[string]any) IPv4Config
ResolveIPv4Config creates a new IPv4Config from a map of D-Bus settings
func (IPv4Config) DBus ¶ added in v0.14.0
func (c IPv4Config) DBus() map[string]any
DBus returns the IPv4 settings in a generic map to be sent over D-Bus See https://developer-old.gnome.org/NetworkManager/stable/settings-ipv4.html
func (IPv4Config) Equal ¶ added in v0.14.2
func (c IPv4Config) Equal(c2 IPv4Config) bool
Equal returns true if and only if the two IPv4Config structs are equivalent
func (IPv4Config) Method ¶ added in v0.14.2
func (c IPv4Config) Method() string
Method returns the IP configuration method (i.e. "auto" or "manual")
type IPv4Netmask ¶ added in v0.14.0
type IPv4Netmask IPv4Address
IPv4Netmask is a string representation of an IPv4 netmask
func IPv4NetmaskPrefix ¶ added in v0.14.0
func IPv4NetmaskPrefix(prefix uint8) IPv4Netmask
IPv4NetmaskPrefix converts an integer IPv4 prefix to netmask string
func (IPv4Netmask) Prefix ¶ added in v0.14.0
func (str IPv4Netmask) Prefix() uint32
Prefix converts a subnet mask string to IPv4 prefix
func (IPv4Netmask) Valid ¶ added in v0.14.0
func (str IPv4Netmask) Valid() bool
Valid returns true if subnet mask in dot notation is valid
type IPv6Address ¶ added in v0.14.0
type IPv6Address string
IPv6Address is a string representation of an IPv4 address
func NewIPv6Address ¶ added in v0.14.0
func NewIPv6Address(bs []byte) IPv6Address
NewIPv6Address converts an IPv6 address in []byte format to a string
func (IPv6Address) Bytes ¶ added in v0.14.0
func (addr IPv6Address) Bytes() []byte
Bytes convert an IPv6 address in string format to []byte
func (IPv6Address) String ¶ added in v0.14.0
func (addr IPv6Address) String() string
String returns the underlying string
func (IPv6Address) Valid ¶ added in v0.14.0
func (addr IPv6Address) Valid() bool
Valid return true if string is valid IPv6 address
type IPv6Config ¶ added in v0.14.0
type IPv6Config struct { StaticIP bool `json:"staticIP"` Address IPv6Address `json:"address"` Prefix uint8 `json:"prefix"` Gateway IPv6Address `json:"gateway"` DNSServer1 IPv6Address `json:"dnsServer1"` DNSServer2 IPv6Address `json:"dnsServer2"` }
IPv6Config defines data for IPv6 configs
func ResolveIPv6Config ¶ added in v0.14.0
func ResolveIPv6Config(settings map[string]any) IPv6Config
ResolveIPv6Config creates a new IPv6Config from a map of D-Bus settings
func (IPv6Config) DBus ¶ added in v0.14.0
func (c IPv6Config) DBus() map[string]any
DBus returns the IPv6 settings in a generic map to be sent over D-Bus See https://developer-old.gnome.org/NetworkManager/stable/settings-ipv6.html
func (IPv6Config) Equal ¶ added in v0.14.2
func (c IPv6Config) Equal(c2 IPv6Config) bool
Equal returns true if and only if the two IPv6Config structs are equivalent
func (IPv6Config) Method ¶ added in v0.14.2
func (c IPv6Config) Method() string
Method returns the IP configuration method (i.e. "auto" or "manual")
type Manager ¶
type Manager[T any] struct { // contains filtered or unexported fields }
Manager manages a node type, watches for changes, adds/removes instances that get added/deleted
func NewManager ¶
func NewManager[T any](nc *nats.Conn, construct func(nc *nats.Conn, config T) Client, parentTypes []string) *Manager[T]
NewManager takes constructor for a node client and returns a Manager for that client The Node Type is inferred from the Go type passed in, so you must name Go client Types to manage the node type definitions. The manager recursively finds nodes that are children of group nodes and the node types found in parentTypes.
Example ¶
package main import ( "log" "github.com/nats-io/nats.go" "github.com/simpleiot/simpleiot/client" "github.com/simpleiot/simpleiot/data" "github.com/simpleiot/simpleiot/server" ) // exNode is decoded data from the client node type exNode struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Port int `point:"port"` Role string `edgepoint:"role"` } // exNodeClient contains the logic for this client type exNodeClient struct { nc *nats.Conn config exNode stop chan struct{} stopped chan struct{} newPoints chan client.NewPoints newEdgePoints chan client.NewPoints chGetConfig chan chan exNode } // newExNodeClient is passed to the NewManager() function call -- when // a new node is detected, the Manager will call this function to construct // a new client. func newExNodeClient(nc *nats.Conn, config exNode) client.Client { return &exNodeClient{ nc: nc, config: config, stop: make(chan struct{}), newPoints: make(chan client.NewPoints), newEdgePoints: make(chan client.NewPoints), } } // Run the main logic for this client and blocks until stopped func (tnc *exNodeClient) Run() error { for { select { case <-tnc.stop: close(tnc.stopped) return nil case pts := <-tnc.newPoints: err := data.MergePoints(pts.ID, pts.Points, &tnc.config) if err != nil { log.Println("error merging new points:", err) } log.Printf("New config: %+v\n", tnc.config) case pts := <-tnc.newEdgePoints: err := data.MergeEdgePoints(pts.ID, pts.Parent, pts.Points, &tnc.config) if err != nil { log.Println("error merging new points:", err) } case ch := <-tnc.chGetConfig: ch <- tnc.config } } } // Stop sends a signal to the Run function to exit func (tnc *exNodeClient) Stop(_ error) { close(tnc.stop) } // Points is called by the Manager when new points for this // node are received. func (tnc *exNodeClient) Points(id string, points []data.Point) { tnc.newPoints <- client.NewPoints{id, "", points} } // EdgePoints is called by the Manager when new edge points for this // node are received. func (tnc *exNodeClient) EdgePoints(id, parent string, points []data.Point) { tnc.newEdgePoints <- client.NewPoints{id, parent, points} } func main() { nc, root, stop, err := server.TestServer() if err != nil { log.Println("Error starting test server:", err) } defer stop() testConfig := testNode{"", "", "fancy test node", 8118, "admin"} // Convert our custom struct to a data.NodeEdge struct ne, err := data.Encode(testConfig) if err != nil { log.Println("Error encoding node:", err) } ne.Parent = root.ID // hydrate database with test node err = client.SendNode(nc, ne, "test") if err != nil { log.Println("Error sending node:", err) } // Create a new manager for nodes of type "testNode". The manager looks for new nodes under the // root and if it finds any, it instantiates a new client, and sends point updates to it m := client.NewManager(nc, newExNodeClient, nil) err = m.Run() if err != nil { log.Println("Error running:", err) } // Now any updates to the node will trigger Points/EdgePoints callbacks in the above client }
Output:
type Metric ¶
type Metric struct {
// contains filtered or unexported fields
}
Metric is a type that can be used to track metrics and periodically report them to a node point. Data is queued and averaged and then the average is sent out as a point.
type Metrics ¶ added in v0.8.0
type Metrics struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Type string `point:"type"` Name string `point:"name"` Period int `point:"period"` }
Metrics represents the config of a metrics node type
type MetricsClient ¶ added in v0.8.0
type MetricsClient struct {
// contains filtered or unexported fields
}
MetricsClient is a SIOT client used to collect system or app metrics
func (*MetricsClient) EdgePoints ¶ added in v0.8.0
func (m *MetricsClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*MetricsClient) Points ¶ added in v0.8.0
func (m *MetricsClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*MetricsClient) Run ¶ added in v0.8.0
func (m *MetricsClient) Run() error
Run the main logic for this client and blocks until stopped
func (*MetricsClient) Stop ¶ added in v0.8.0
func (m *MetricsClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type NTP ¶ added in v0.12.6
type NTP struct { ID string `node:"id"` Parent string `node:"parent"` Servers []string `point:"server"` FallbackServers []string `point:"fallbackServer"` }
NTP client configuration
type NTPClient ¶ added in v0.12.6
type NTPClient struct {
// contains filtered or unexported fields
}
NTPClient is a SimpleIoT client that synchronizes NTP servers to local systemd-timesync configuration
func (*NTPClient) EdgePoints ¶ added in v0.12.6
EdgePoints is called when the client's node edge points are updated
func (*NTPClient) Points ¶ added in v0.12.6
Points is called when the client's node points are updated
func (*NTPClient) UpdateConfig ¶ added in v0.12.6
UpdateConfig writes the NTP configuration to NTPConfigPath and restarts system-timesyncd
type NetworkManager ¶ added in v0.14.0
type NetworkManager struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Disabled bool `point:"disabled"` Hostname string `point:"hostname"` RequestWiFiScan bool `point:"requestWiFiScan"` NetworkingEnabled *bool `point:"networkingEnabled"` WirelessEnabled *bool `point:"wirelessEnabled"` WirelessHardwareEnabled *bool `point:"wirelessHardwareEnabled"` Devices []NetworkManagerDevice `child:"networkManagerDevice"` Connections []NetworkManagerConn `child:"networkManagerConn"` }
NetworkManager client configuration
type NetworkManagerClient ¶ added in v0.14.0
type NetworkManagerClient struct {
// contains filtered or unexported fields
}
NetworkManagerClient is a SimpleIoT client that manages network interfaces and their connections using NetworkManager via D-Bus. Network connections and device states are synchronized between NetworkManager and the SimpleIoT node tree.
========================== ======================== --- device state --> ================== | NetworkManager (D-Bus) | <--> | NetworkManagerClient | | SimpleIoT Tree | ========================== ======================== <-- connection settings --> ==================
The NetworkManagerClient only controls SimpleIoT "managed" connections within NetworkManager. Although all connections will be added to the SIOT tree, unmanaged NetworkManager connections will not be updated or deleted by SimpleIoT.
func (*NetworkManagerClient) EdgePoints ¶ added in v0.14.0
func (c *NetworkManagerClient) EdgePoints( _ string, _ string, _ []data.Point, )
EdgePoints is called when the client's node edge points are updated
func (*NetworkManagerClient) Points ¶ added in v0.14.0
func (c *NetworkManagerClient) Points(nodeID string, points []data.Point)
Points is called when the client's node points are updated
func (*NetworkManagerClient) Run ¶ added in v0.14.0
func (c *NetworkManagerClient) Run() error
Run starts the NetworkManager Client. Restarts if `networkManager` nodes or their descendants are added / removed.
func (*NetworkManagerClient) Stop ¶ added in v0.14.0
func (c *NetworkManagerClient) Stop(error)
Stop stops the NetworkManager Client
func (*NetworkManagerClient) SyncConnections ¶ added in v0.14.0
func (c *NetworkManagerClient) SyncConnections() (errs []error, fatal error)
SyncConnections performs a one-way synchronization of the NetworkManagerConn nodes in the SIOT tree with connections in NetworkManager via D-Bus. The sync direction is determined by the connection's Managed flag. If set, the connection in NetworkManager is updated with the data in the SIOT tree; otherwise, the SIOT tree is updated with the data in NetworkManager. Returns a list of errors in the order in which they are encountered. If a fatal error occurs that aborts the sync operation, that will be included in `errs` and returned as `fatal`.
func (*NetworkManagerClient) SyncDevices ¶ added in v0.14.0
func (c *NetworkManagerClient) SyncDevices() (errs []error, fatal error)
SyncDevices performs a one-way synchronization of the devices in NetworkManager with the NetworkManagerDevices nodes in the SIOT tree via D-Bus. Additionally, the NetworkingEnabled and WirelessHardwareEnabled flags are copied to the SIOT tree; the WirelessEnabled flag is copied to NetworkManager if it is non-nil and copied to the SIOT tree if it is nil. Returns a list of errors in the order in which they are encountered. If a fatal error occurs that aborts the sync operation, that will be included in `errs` and returned as `fatal`.
func (*NetworkManagerClient) SyncHostname ¶ added in v0.14.0
func (c *NetworkManagerClient) SyncHostname() (errs []error, fatal error)
SyncHostname writes the hostname from the SimpleIoT tree to NetworkManager; however, if SimpleIoT does not have a hostname set, the current hostname will be stored in the tree instead.
func (*NetworkManagerClient) WifiScan ¶ added in v0.14.0
func (c *NetworkManagerClient) WifiScan() error
WifiScan scans for Wi-Fi access points using available Wi-Fi devices. When scanning is complete, the access points are saved as points on the NetworkManagerDevice node.
type NetworkManagerConn ¶ added in v0.14.0
type NetworkManagerConn struct { ID string `node:"id"` // matches UUID in NetworkManager Parent string `node:"parent"` Description string `point:"description"` // matches ID in NetworkManager // Type is one of the NetworkManager connection types (i.e. 802-3-ethernet) // See https://developer-old.gnome.org/NetworkManager/stable/ Type string `point:"type"` // Managed flag indicates that SimpleIoT is managing this connection. // All connections in NetworkManager are added to the SIOT tree, but if a // connection is flagged "managed", the SIOT tree is used as the source of // truth, and settings are synchronized one-way from SIOT to NetworkManager. Managed bool `point:"managed"` AutoConnect bool `point:"autoConnect"` AutoConnectPriority int32 `point:"autoConnectPriority"` InterfaceName string `point:"interfaceName"` // LastActivated is the timestamp the connection was last activated in // seconds since the UNIX epoch. Called "timestamp" in NetworkManager. LastActivated uint64 `point:"lastActivated"` IPv4Config IPv4Config `point:"ipv4Config"` IPv6Config IPv6Config `point:"ipv6Config"` WiFiConfig WiFiConfig `point:"wiFiConfig"` // Error contains an error message from the last NetworkManager sync or an // empty string if sync was successful Error string `point:"error"` }
NetworkManagerConn defines a NetworkManager connection
func ResolveNetworkManagerConn ¶ added in v0.14.0
func ResolveNetworkManagerConn(settings nm.ConnectionSettings) NetworkManagerConn
ResolveNetworkManagerConn returns a NetworkManagerConn from D-Bus settings Note: Secrets must be added to the connection manually
func (NetworkManagerConn) DBus ¶ added in v0.14.0
func (c NetworkManagerConn) DBus() nm.ConnectionSettings
DBus returns an object that can be passed over D-Bus Returns nil if the connection ID does not include the prefix `SimpleIoT:` See https://developer-old.gnome.org/NetworkManager/stable/ch01.html
func (NetworkManagerConn) Equal ¶ added in v0.14.0
func (c NetworkManagerConn) Equal(c2 NetworkManagerConn) bool
Equal returns true if and only if the two connections will produce the same DBus settings
type NetworkManagerDevice ¶ added in v0.14.0
type NetworkManagerDevice struct { ID string `node:"id"` Parent string `node:"parent"` Path string `point:"path"` Interface string `point:"interface"` State string `point:"state"` DeviceType string `point:"deviceType"` // ActiveConnectionID IPv4Addresses []IPv4Address `point:"ipv4Addresses"` IPv4Netmasks []IPv4Netmask `point:"ipv4Netmasks"` IPv4Gateway IPv4Address `point:"ipv4Gateway"` IPv4Nameservers []IPv4Address `point:"ipv4Nameservers"` IPv6Addresses []IPv6Address `point:"ipv6Addresses"` IPv6Prefixes []uint8 `point:"ipv6Prefixes"` IPv6Gateway IPv6Address `point:"ipv6Gateway"` IPv6Nameservers []IPv6Address `point:"ipv6Nameservers"` HardwareAddress string `point:"hardwareAddress"` Managed bool // Wi-Fi specific properties ActiveAccessPoint *AccessPoint `point:"activeAccessPoint"` AccessPoints []string `point:"accessPoints"` // JSON-encoded strings }
NetworkManagerDevice is a device managed by NetworkManager
func ResolveDevice ¶ added in v0.14.0
func ResolveDevice(parent string, device nm.Device) ( dev NetworkManagerDevice, err error, )
ResolveDevice returns a NetworkManagerDevice from a NetworkManager Device
type NewPoints ¶ added in v0.5.0
NewPoints is used to pass new points through channels in client drivers
type Particle ¶ added in v0.9.0
type Particle struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Disabled bool `point:"disabled"` AuthToken string `point:"authToken"` }
Particle represents the configuration for the SIOT Particle client
type ParticleClient ¶ added in v0.9.0
type ParticleClient struct {
// contains filtered or unexported fields
}
ParticleClient is a SIOT particle client
func (*ParticleClient) EdgePoints ¶ added in v0.9.0
func (pc *ParticleClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*ParticleClient) Points ¶ added in v0.9.0
func (pc *ParticleClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*ParticleClient) Run ¶ added in v0.9.0
func (pc *ParticleClient) Run() error
Run runs the main logic for this client and blocks until stopped
func (*ParticleClient) Stop ¶ added in v0.9.0
func (pc *ParticleClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type ParticleEvent ¶ added in v0.9.0
type ParticleEvent struct { Data string `json:"data"` TTL uint32 `json:"ttl"` Timestamp time.Time `json:"published_at"` CoreID string `json:"coreid"` }
ParticleEvent from particle
type Rule ¶ added in v0.5.0
type Rule struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Disabled bool `point:"disabled"` Active bool `point:"active"` Error string `point:"error"` Conditions []Condition `child:"condition"` Actions []Action `child:"action"` ActionsInactive []Action `child:"actionInactive"` }
Rule represent a rule node config
type RuleClient ¶ added in v0.5.0
type RuleClient struct {
// contains filtered or unexported fields
}
RuleClient is a SIOT client used to run rules
func (*RuleClient) EdgePoints ¶ added in v0.5.0
func (rc *RuleClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*RuleClient) Points ¶ added in v0.5.0
func (rc *RuleClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*RuleClient) Run ¶ added in v0.7.1
func (rc *RuleClient) Run() error
Run runs the main logic for this client and blocks until stopped
func (*RuleClient) Stop ¶ added in v0.5.0
func (rc *RuleClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type RunGroup ¶ added in v0.18.0
type RunGroup struct {
// contains filtered or unexported fields
}
RunGroup is used to group a list of clients and start/stop them currently a thin wrapper around run.Group that adds a Stop() function
func DefaultClients ¶ added in v0.5.2
DefaultClients returns an actor for the default group of built in clients
func NewRunGroup ¶ added in v0.18.0
NewRunGroup creates a new client group
type RunStop ¶ added in v0.7.1
RunStop is an interface that implements the Run() and Stop() methods. This pattern is used wherever long running processes are required. Warning!!! Stop() may get called after Run() has exitted when using mechanisms like run.Group, so be sure that Stop() never blocks -- it must return for things to work properly.
type SerialDev ¶ added in v0.4.0
type SerialDev struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Port string `point:"port"` Baud string `point:"baud"` MaxMessageLength int `point:"maxMessageLength"` HRDestNode string `point:"hrDest"` SyncParent bool `point:"syncParent"` Debug int `point:"debug"` Disabled bool `point:"disabled"` Log string `point:"log"` Rx int `point:"rx"` RxReset bool `point:"rxReset"` Tx int `point:"tx"` TxReset bool `point:"txReset"` HrRx int64 `point:"hrRx"` HrRxReset bool `point:"hrRxReset"` Uptime int `point:"uptime"` ErrorCount int `point:"errorCount"` ErrorCountReset bool `point:"errorCountReset"` ErrorCountHR int `point:"errorCountHR"` ErrorCountResetHR bool `point:"errorCountResetHR"` Rate bool `point:"rate"` RateHR bool `point:"rate"` Connected bool `point:"connected"` Download string `point:"download"` Progress int `point:"progress"` Files []File `child:"file"` }
SerialDev represents a serial (MCU) config
type SerialDevClient ¶ added in v0.4.0
type SerialDevClient struct {
// contains filtered or unexported fields
}
SerialDevClient is a SIOT client used to manage serial devices
func (*SerialDevClient) EdgePoints ¶ added in v0.4.0
func (sd *SerialDevClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*SerialDevClient) Points ¶ added in v0.4.0
func (sd *SerialDevClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*SerialDevClient) Run ¶ added in v0.7.1
func (sd *SerialDevClient) Run() error
Run the main logic for this client and blocks until stopped
func (*SerialDevClient) Stop ¶ added in v0.4.0
func (sd *SerialDevClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type Shelly ¶ added in v0.10.0
type Shelly struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Disabled bool `point:"disabled"` IOs []ShellyIo `child:"shellyIo"` }
Shelly describes the shelly client config
type ShellyClient ¶ added in v0.10.0
type ShellyClient struct {
// contains filtered or unexported fields
}
ShellyClient is a SIOT particle client
func (*ShellyClient) EdgePoints ¶ added in v0.10.0
func (sc *ShellyClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*ShellyClient) Points ¶ added in v0.10.0
func (sc *ShellyClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*ShellyClient) Run ¶ added in v0.10.0
func (sc *ShellyClient) Run() error
Run runs the main logic for this client and blocks until stopped
func (*ShellyClient) Stop ¶ added in v0.10.0
func (sc *ShellyClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type ShellyGen ¶ added in v0.10.0
type ShellyGen int
ShellyGen describes the generation of device (Gen1/Gen2)
type ShellyIOClient ¶ added in v0.10.0
type ShellyIOClient struct {
// contains filtered or unexported fields
}
ShellyIOClient is a SIOT particle client
func (*ShellyIOClient) EdgePoints ¶ added in v0.10.0
func (sioc *ShellyIOClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*ShellyIOClient) Points ¶ added in v0.10.0
func (sioc *ShellyIOClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*ShellyIOClient) Run ¶ added in v0.10.0
func (sioc *ShellyIOClient) Run() error
Run runs the main logic for this client and blocks until stopped
func (*ShellyIOClient) Stop ¶ added in v0.10.0
func (sioc *ShellyIOClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type ShellyIo ¶ added in v0.10.0
type ShellyIo struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` DeviceID string `point:"deviceID"` Type string `point:"type"` IP string `point:"ip"` Value []float64 `point:"value"` ValueSet []float64 `point:"valueSet"` Switch []bool `point:"switch"` SwitchSet []bool `point:"switchSet"` Light []bool `point:"light"` LightSet []bool `point:"lightSet"` Input []bool `point:"input"` Offline bool `point:"offline"` Controlled bool `point:"controlled"` Disabled bool `point:"disabled"` }
ShellyIo describes the config/state for a shelly io
func (*ShellyIo) IsSettableOnOff ¶ added in v0.10.0
IsSettableOnOff returns true if the device can be turned on/off
type SignalGenerator ¶ added in v0.5.1
type SignalGenerator struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` Disabled bool `point:"disabled"` Destination Destination `point:"destination"` Units string `point:"units"` // SignalType must be one of: "sine", "square", "triangle", or "random walk" SignalType string `point:"signalType"` MinValue float64 `point:"minValue"` MaxValue float64 `point:"maxValue"` // InitialValue is the starting value for the signal generator. // For random walk, this must be between MinValue and MaxValue. For wave // functions, this must be in radians (i.e. between 0 and 2 * Pi). InitialValue float64 `point:"initialValue"` RoundTo float64 `point:"roundTo"` // SampleRate in Hz. SampleRate float64 `point:"sampleRate"` // BatchPeriod is the batch timer interval in ms. When the timer fires, it // generates a batch of points at the specified SampleRate. If not set, // timer will fire for each sample at SampleRate. BatchPeriod int `point:"batchPeriod"` // Frequency for wave functions (in Hz.) Frequency float64 `point:"frequency"` // Min./Max. increment amount for random walk function MinIncrement float64 `point:"minIncrement"` MaxIncrement float64 `point:"maxIncrement"` // Current value Value float64 `point:"value"` Tags map[string]string `point:"tag"` }
SignalGenerator config
type SignalGeneratorClient ¶ added in v0.5.1
type SignalGeneratorClient struct {
// contains filtered or unexported fields
}
SignalGeneratorClient for signal generator nodes
func (*SignalGeneratorClient) EdgePoints ¶ added in v0.5.1
func (sgc *SignalGeneratorClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*SignalGeneratorClient) Points ¶ added in v0.5.1
func (sgc *SignalGeneratorClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*SignalGeneratorClient) Run ¶ added in v0.7.1
func (sgc *SignalGeneratorClient) Run() error
Run the main logic for this client and blocks until stopped
func (*SignalGeneratorClient) Stop ¶ added in v0.5.1
func (sgc *SignalGeneratorClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type SiotExport ¶ added in v0.14.0
type SiotExport struct {
Nodes []data.NodeEdgeChildren
}
SiotExport is the format used for exporting and importing data (currently YAML)
type Sync ¶ added in v0.6.0
type Sync struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` URI string `point:"uri"` AuthToken string `point:"authToken"` Period int `point:"period"` Disabled bool `point:"disabled"` SyncCount int `point:"syncCount"` SyncCountReset bool `point:"syncCountReset"` }
Sync represents an sync node config
type SyncClient ¶ added in v0.6.0
type SyncClient struct {
// contains filtered or unexported fields
}
SyncClient is a SIOT client used to handle upstream connections
func (*SyncClient) EdgePoints ¶ added in v0.6.0
func (up *SyncClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*SyncClient) Points ¶ added in v0.6.0
func (up *SyncClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*SyncClient) Run ¶ added in v0.7.1
func (up *SyncClient) Run() error
Run the main logic for this client and blocks until stopped
func (*SyncClient) Stop ¶ added in v0.6.0
func (up *SyncClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type Update ¶ added in v0.16.0
type Update struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` VersionOS string `point:"versionOS"` URI string `point:"uri"` OSUpdates []string `point:"osUpdate"` DownloadOS string `point:"downloadOS"` OSDownloaded string `point:"osDownloaded"` DiscardDownload string `point:"discardDownload"` Prefix string `point:"prefix"` Directory string `point:"directory"` PollPeriod int `point:"pollPeriod"` Refresh bool `point:"refresh"` AutoDownload bool `point:"autoDownload"` AutoReboot bool `point:"autoReboot"` }
Update represents the config of a metrics node type
type UpdateClient ¶ added in v0.16.0
type UpdateClient struct {
// contains filtered or unexported fields
}
UpdateClient is a SIOT client used to collect system or app metrics
func (*UpdateClient) EdgePoints ¶ added in v0.16.0
func (m *UpdateClient) EdgePoints(nodeID, parentID string, points []data.Point)
EdgePoints is called by the Manager when new edge points for this node are received.
func (*UpdateClient) Points ¶ added in v0.16.0
func (m *UpdateClient) Points(nodeID string, points []data.Point)
Points is called by the Manager when new points for this node are received.
func (*UpdateClient) Run ¶ added in v0.16.0
func (m *UpdateClient) Run() error
Run the main logic for this client and blocks until stopped
func (*UpdateClient) Stop ¶ added in v0.16.0
func (m *UpdateClient) Stop(_ error)
Stop sends a signal to the Run function to exit
type User ¶ added in v0.5.1
type User struct { ID string `node:"id"` Parent string `node:"parent"` FirstName string `point:"firstName"` LastName string `point:"lastName"` Phone string `point:"phone"` Email string `point:"email"` Pass string `point:"pass"` }
User represents a user node
type Variable ¶ added in v0.5.0
type Variable struct { ID string `node:"id"` Parent string `node:"parent"` Description string `point:"description"` VariableType string `point:"variableType"` Value map[string]float64 `point:"value"` }
Variable represents the config of a variable node type
type WiFiConfig ¶ added in v0.14.0
type WiFiConfig struct { SSID string `point:"ssid"` // From NetworkManager: Key management used for the connection. One of // "none" (WEP), "ieee8021x" (Dynamic WEP), "wpa-none" (Ad-Hoc WPA-PSK), // "wpa-psk" (infrastructure WPA-PSK), "sae" (SAE) or "wpa-eap" // (WPA-Enterprise). This property must be set for any Wi-Fi connection that // uses security. KeyManagement string `point:"keyManagement"` PSK string `point:"psk"` }
WiFiConfig defines 802.11 wireless configuration
Source Files ¶
- admin.go
- auth.go
- backoff.go
- can.go
- client-state.go
- client.go
- cobs-wrapper.go
- db.go
- debug.go
- device.go
- doc.go
- edge.go
- file-transfer.go
- file.go
- group.go
- manager.go
- metric.go
- metrics.go
- msg.go
- network-manager-conn.go
- network-manager-device.go
- network-manager.go
- node-tag-cache.go
- node.go
- ntp.go
- particle.go
- point.go
- rule.go
- run_group.go
- schedule.go
- send-file.go
- serial-wrapper.go
- serial.go
- shelly-io-client.go
- shelly-io.go
- shelly.go
- signal-generator.go
- start-stop.go
- subject.go
- sync.go
- update.go
- uri.go
- user.go
- variable.go