iot_go_agent_sdk

package module
v0.0.0-...-3e1e694 Latest Latest
Warning

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

Go to latest
Published: Aug 24, 2022 License: Apache-2.0 Imports: 13 Imported by: 1

README

iot-go-agent-sdk

SDK for building agents for VK CS IoT Platform based on Go programming language

Usage

package main

import (
	"context"

	httptransport "github.com/go-openapi/runtime/client"
	
	sdk "github.com/vk-cs/iot-go-agent-sdk"
	"github.com/vk-cs/iot-go-agent-sdk/gen/swagger/http_client/client/agents"
	"github.com/vk-cs/iot-go-agent-sdk/gen/swagger/http_client/client/events"
	"github.com/vk-cs/iot-go-agent-sdk/gen/swagger/http_client/models"
)

func main() {
	cli := sdk.NewHTTPClient()

	// get agent config
	resp, _ := cli.Agents.GetAgentConfig(&agents.GetAgentConfigParams{
		// get latest version
		Version: nil,
		Context: context.Background(),
	}, httptransport.BasicAuth("login", "password"))
	cfg := resp.Payload

	// get status tag directly from config
	statusTag, _ := sdk.FindTagByPath(cfg.Agent.Tag, sdk.StatusTagPath)
	
	// or use wrapper for quick access
	tree := sdk.NewTagTree(cfg.Agent.Tag)
	statusTagNode, _ := tree.GetStatusTag()
	statusTag = statusTagNode.Tag
	cfgVersion, _ := tree.GetConfigVersionTag()
	cfgUpdatedAt, _ := tree.ConfigUpdatedAtTagPath()
	
	// send to platform new agent status and cfg version
	now := sdk.Now()
	cli.Events.AddEvent(events.AddEventParams{
		Context: context.Background(),
		Body: &models.AddEvent{
			Tags: []*models.TagValueObject{
				// set agent status
				{
					ID: statusTag.ID,
					Timestamp: &now,
					Value: sdk.Online,
				},
				// set agent config version
				{
					ID: cfgVersion.Tag.ID,
					Timestamp: &now,
					Value: cfg.Version,
				},
				{
					ID: cfgUpdatedAt.Tag.ID,
					Timestamp: &now,
					Value: &now,
				},
			},
		},
	}, httptransport.BasicAuth("login", "password"))
	
	// same for device
	deviceStatusTag, _ := sdk.FindTagByPath(cfg.Agent.Devices[0].Tag, sdk.StatusTagPath)

	cli.Events.AddEvent(events.AddEventParams{
		Context: context.Background(),
		Body: &models.AddEvent{
			Tags: []*models.TagValueObject{
				{
					ID: deviceStatusTag.ID,
					Timestamp: &now,
					Value: sdk.Online,
				},				
			},
		},
	}, httptransport.BasicAuth("login", "password"))	
}

Development

Regenerate http client from swagger api spec

make generate

Documentation

Index

Constants

View Source
const (
	EventTopic               = "iot/event/fmt/json"
	LogTopic                 = "iot/log/fmt/json"
	CommandTopic             = "iot/cmd/agent/%d/fmt/json"
	CommandAgentStatusTopic  = "iot/cmd/agent/%d/status/fmt/json"
	CommandDeviceStatusTopic = "iot/cmd/device/%d/status/fmt/json"
)
View Source
const (
	DefaultHTTPHost = "api-iot.mcs.mail.ru"
)

Variables

View Source
var (
	StatusTagPath          = []string{"$state", "$status"}
	ConfigVersionTagPath   = []string{"$state", "$config", "$version"}
	ConfigUpdatedAtTagPath = []string{"$state", "$config", "$updated_at"}
)

Functions

func FindTagByPath

func FindTagByPath(tags []*models.TagConfigObject, path []string) (*models.TagConfigObject, bool)

FindTagByPath returns tag by path from given agent or device tags subtree

func NewHTTPClient

func NewHTTPClient() *client.HTTP

func Now

func Now() int64

Now returns current timestamp in microseconds (default time format in platform API)

Types

type MQTTClient

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

func NewMQTTClient

func NewMQTTClient(agentID int64, host string) *MQTTClient

func (*MQTTClient) Connect

func (c *MQTTClient) Connect(login, password string) error

func (*MQTTClient) Disconnect

func (c *MQTTClient) Disconnect()

func (*MQTTClient) PublishAgentCommandStatus

func (c *MQTTClient) PublishAgentCommandStatus(command *mqtt.CommandStatusMessage) error

func (*MQTTClient) PublishCommand

func (c *MQTTClient) PublishCommand(agentID int64, command *mqtt.CommandMessage) error

func (*MQTTClient) PublishDeviceCommandStatus

func (c *MQTTClient) PublishDeviceCommandStatus(deviceID int64, command *mqtt.CommandStatusMessage) error

func (*MQTTClient) PublishEvent

func (c *MQTTClient) PublishEvent(eventMessage *mqtt.EventMessage) error

func (*MQTTClient) PublishLog

func (c *MQTTClient) PublishLog(logMessage *mqtt.LogMessage) error

func (*MQTTClient) Subscribe

func (c *MQTTClient) Subscribe(subscriber service.Subscriber) error

type Status

type Status string

Status represents current status of agent or device

const (
	Online  Status = "online"
	Offline Status = "offline"
)

type TagNode

type TagNode struct {
	Tag      models.TagConfigObject
	Children map[string]TagNode
}

func NewTagNode

func NewTagNode(tag models.TagConfigObject) TagNode

func (TagNode) GetPath

func (node TagNode) GetPath(path []string) (TagNode, bool)

type TagTree

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

func NewTagTree

func NewTagTree(root models.TagConfigObject) *TagTree

func (*TagTree) ConfigUpdatedAtTagPath

func (tree *TagTree) ConfigUpdatedAtTagPath() (TagNode, bool)

func (*TagTree) GetConfigVersionTag

func (tree *TagTree) GetConfigVersionTag() (TagNode, bool)

func (*TagTree) GetPath

func (tree *TagTree) GetPath(path []string) (TagNode, bool)

func (*TagTree) GetRoot

func (tree *TagTree) GetRoot() TagNode

func (*TagTree) GetStatusTag

func (tree *TagTree) GetStatusTag() (TagNode, bool)

Jump to

Keyboard shortcuts

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