flumewater

package module
v0.0.0-...-5af733e Latest Latest
Warning

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

Go to latest
Published: Mar 23, 2021 License: MIT Imports: 10 Imported by: 0

README

Flume Water Go Client

This client connects to the Flume Water API and allows you to perform any action easily.

For example usage, check out some of the test files.

TODO

  • Handle refresh tokens
  • Do the golang better

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	ClientID     string
	ClientSecret string
	Username     string
	Password     string
	Timeout      time.Duration

	AuthData FlumeWaterAuthData
	// contains filtered or unexported fields
}

func NewClient

func NewClient(clientID string, clientSecret string, username string, password string) (client Client)

func (*Client) Close

func (fw *Client) Close()

func (*Client) Connect

func (fw *Client) Connect() error

func (*Client) FetchAllEventRulesForDevice

func (fw *Client) FetchAllEventRulesForDevice(deviceID string, queryParams QueryParamsBase) (eventRules []FlumeWaterEventRule, err error)

func (*Client) FetchAllUsageAlertRulesForDevice

func (fw *Client) FetchAllUsageAlertRulesForDevice(deviceID string, queryParams QueryParamsBase) (alertRules []FlumeWaterUsageAlertRule, err error)

func (*Client) FetchDeviceBudgets

func (fw *Client) FetchDeviceBudgets(deviceID string, queryParams QueryParamsBase) (budgets []FlumeWaterBudget, err error)

func (*Client) FetchFlumeContactInfo

func (fw *Client) FetchFlumeContactInfo(queryParams FlumeWaterContactParams) (contacts []FlumeWaterContact, err error)

func (*Client) FetchSingleUsageAlertRulesForDevice

func (fw *Client) FetchSingleUsageAlertRulesForDevice(deviceID string, RuleID int) (usageAlert FlumeWaterUsageAlertRule, err error)

func (*Client) FetchUser

func (fw *Client) FetchUser() (flumeUser FlumeWaterUser, err error)

func (*Client) FetchUserDevice

func (fw *Client) FetchUserDevice(deviceID string, queryParams FlumeWaterFetchDeviceRequest) (device FlumeWaterDevice, err error)

func (*Client) FetchUserDevices

func (fw *Client) FetchUserDevices(queryParams FlumeWaterFetchDeviceRequest) (devices []FlumeWaterDevice, err error)

func (*Client) FetchUserLocation

func (fw *Client) FetchUserLocation(locationID int) (location FlumeWaterLocation, err error)

func (*Client) FetchUserLocations

func (fw *Client) FetchUserLocations(queryParams LocationsQueryParams) (locations []FlumeWaterLocation, err error)

func (*Client) FetchUserNotifications

func (fw *Client) FetchUserNotifications(queryParams FlumeWaterNotificationsParams) (notifications []FlumeWaterNotification, err error)

func (*Client) FetchUserSubscription

func (fw *Client) FetchUserSubscription(subscriptionID int) (subscription FlumeWaterSubscription, err error)

func (*Client) FetchUserSubscriptions

func (fw *Client) FetchUserSubscriptions(queryParams FlumeWaterSubscriptionParams) (subscriptions []FlumeWaterSubscription, err error)

func (*Client) FetchUserUsageAlerts

func (fw *Client) FetchUserUsageAlerts(queryParams FlumeWaterUsageAlertsParams) (flumeResp *FlumeWaterUsageAlertsResponse, err error)

func (*Client) FlumeGet

func (fw *Client) FlumeGet(fetchURL string, flumeResponse interface{}) (err error)

func (*Client) GetToken

func (fw *Client) GetToken() (err error)

func (*Client) QueryUserDevice

func (fw *Client) QueryUserDevice(deviceID string, Queries FlumeWaterQueryRequest) (queryResults []FlumeWaterQueryResult, err error)

func (*Client) RefreshToken

func (fw *Client) RefreshToken() (err error)

func (*Client) UpdateUserLocation

func (fw *Client) UpdateUserLocation(locationID string, awayMode bool) (flumeResp *ResponseBase, err error)

func (*Client) UserID

func (fw *Client) UserID() (userID int)

type FlumeWaterAuthData

type FlumeWaterAuthData struct {
	TokenType    string `json:"token_type"`
	AccessToken  string `json:"access_token"`
	ExpiresIn    int    `json:"expires_in"`
	RefreshToken string `json:"refresh_token"`
}

type FlumeWaterAuthRequest

type FlumeWaterAuthRequest struct {
	GrantType    string `json:"grant_type"`
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret"`
	Username     string `json:"username"`
	Password     string `json:"password"`
}

type FlumeWaterAuthResponse

type FlumeWaterAuthResponse struct {
	*ResponseBase
	Data []FlumeWaterAuthData `json:"data"`
}

type FlumeWaterBucket

type FlumeWaterBucket string
const (
	FlumeWaterBucketMinute FlumeWaterBucket = "MIN"
	FlumeWaterBucketHour   FlumeWaterBucket = "HR"
	FlumeWaterBucketDay    FlumeWaterBucket = "DAY"
	FlumeWaterBucketMonth  FlumeWaterBucket = "MON"
	FlumeWaterBucketYear   FlumeWaterBucket = "YR"
)

type FlumeWaterBudget

type FlumeWaterBudget struct {
	ID         int    `json:"id"`
	Name       string `json:"name"`
	Type       string `json:"type"`
	Value      int    `json:"value"`
	Thresholds []int  `json:"thresholds"`
	Actual     int    `json:"actual"`
}

type FlumeWaterContact

type FlumeWaterContact struct {
	ID       int    `json:"id"`
	Category string `json:"category"`
	Type     string `json:"type"`
	Detail   string `json:"detail"`
}

type FlumeWaterContactCategory

type FlumeWaterContactCategory string
const (
	FlumeWaterContactCategorySupport FlumeWaterContactCategory = "SUPPORT"
)

type FlumeWaterContactParams

type FlumeWaterContactParams struct {
	*QueryParamsBase
	Type     FlumeWaterContactType     `url:"type,omitempty"`
	Category FlumeWaterContactCategory `url:"category,omitempty"`
}

func NewFlumeWaterContactParams

func NewFlumeWaterContactParams() *FlumeWaterContactParams

type FlumeWaterContactResponse

type FlumeWaterContactResponse struct {
	*ResponseBase
	Data []FlumeWaterContact `json:"data"`
}

type FlumeWaterContactType

type FlumeWaterContactType string
const (
	FlumeWaterContactTypePhone FlumeWaterContactType = "PHONE"
	FlumeWaterContactTypeEmail FlumeWaterContactType = "EMAIL"
)

type FlumeWaterDevice

type FlumeWaterDevice struct {
	ID            string               `json:"id"`
	BridgeID      string               `json:"bridge_id"`
	Type          FlumeWaterDeviceType `json:"type"`
	Name          string               `json:"name"`
	Description   string               `json:"description"`
	AddedDatetime string               `json:"added_datetime"`
	UserID        int                  `json:"user_id"`
	Registered    bool                 `json:"registered"`
	Oriented      bool                 `json:"oriented"`
	LastSeen      string               `json:"last_seen"`
	Location      FlumeWaterLocation   `json:"location"`
	User          FlumeWaterUser       `json:"user"`
}

type FlumeWaterDeviceBudgetsResponse

type FlumeWaterDeviceBudgetsResponse struct {
	*ResponseBase
	Data []FlumeWaterBudget `json:"data"`
}

type FlumeWaterDeviceType

type FlumeWaterDeviceType int
const (
	FlumeWaterDeviceTypeBridge FlumeWaterDeviceType = 1
	FlumeWaterDeviceTypeSensor FlumeWaterDeviceType = 2
)

type FlumeWaterEventRule

type FlumeWaterEventRule struct {
	ID               string  `json:"id"`
	Name             string  `json:"name"`
	Active           bool    `json:"active"`
	FlowRate         float64 `json:"flow_rate"`
	Duration         int     `json:"duration"`
	NotifyEvery      int     `json:"notify_every"`
	NotificationType string  `json:"notification_type"`
}

type FlumeWaterEventRuleResponse

type FlumeWaterEventRuleResponse struct {
	*ResponseBase
	Data []FlumeWaterEventRule `json:"data"`
}

type FlumeWaterFetchDeviceRequest

type FlumeWaterFetchDeviceRequest struct {
	IncludeUser     bool `url:"user,omitempty"`
	IncludeLocation bool `url:"location,omitempty"`
}

type FlumeWaterFetchDeviceResponse

type FlumeWaterFetchDeviceResponse struct {
	*ResponseBase
	Data []FlumeWaterDevice `json:"data"`
}

type FlumeWaterFetchUserResponse

type FlumeWaterFetchUserResponse struct {
	*ResponseBase
	Data []FlumeWaterUser `json:"data"`
}

type FlumeWaterLocation

type FlumeWaterLocation struct {
	ID              int                    `json:"id"`
	UserID          int                    `json:"user_id"`
	Name            string                 `json:"name"`
	PrimaryLocation bool                   `json:"primary_location"`
	Address         string                 `json:"address"`
	Address2        string                 `json:"address_2"`
	City            string                 `json:"city"`
	State           string                 `json:"state"`
	PostalCode      string                 `json:"postal_code"`
	Country         string                 `json:"country"`
	TZ              string                 `json:"tz"`
	Installation    string                 `json:"installation"`
	BuildingType    string                 `json:"building_type"`
	UsageProfile    FlumeWaterUsageProfile `json:"usage_profile"`
}

type FlumeWaterLocationsResponse

type FlumeWaterLocationsResponse struct {
	*ResponseBase
	Data []FlumeWaterLocation `json:"data"`
}

type FlumeWaterNotification

type FlumeWaterNotification struct {
	ID              int                          `json:"id"`
	DeviceID        string                       `json:"device_id"`
	UserID          int                          `json:"user_id"`
	EventRule       string                       `json:"event_rule"`
	Type            int                          `json:"type"`
	Message         string                       `json:"message"`
	CreatedDatetime time.Time                    `json:"created_datetime"`
	Title           string                       `json:"title"`
	Read            bool                         `json:"read"`
	Extra           FlumeWaterNotificationsExtra `json:"extra"`
}

type FlumeWaterNotificationType

type FlumeWaterNotificationType int
const (
	FlumeWaterNotificationTypeUsageAlert FlumeWaterNotificationType = 1
	FlumeWaterNotificationTypeBudget     FlumeWaterNotificationType = 2
	FlumeWaterNotificationTypeGeneral    FlumeWaterNotificationType = 4
	FlumeWaterNotificationTypeHeartbeat  FlumeWaterNotificationType = 8
	FlumeWaterNotificationTypeBattery    FlumeWaterNotificationType = 16
)

type FlumeWaterNotificationsExtra

type FlumeWaterNotificationsExtra struct {
	Percentage    int       `json:"percentage"`
	BudgetType    string    `json:"budget_type"`
	BudgetStart   time.Time `json:"budget_start"`
	EventRuleName string    `json:"event_rule_name"`
}

type FlumeWaterNotificationsParams

type FlumeWaterNotificationsParams struct {
	*QueryParamsBase
	DeviceID          string                     `url:"device_id,omitempty"`
	LocationID        int                        `url:"location_id,omitempty"`
	AlertType         string                     `url:"alert_type,omitempty"`
	NotificationType  FlumeWaterNotificationType `url:"type,omitempty"`
	NotificationTypes int                        `url:"types,omitempty"`
	Read              bool                       `url:"read,omitempty"`
}

func NewFlumeWaterNotificationsParams

func NewFlumeWaterNotificationsParams() *FlumeWaterNotificationsParams

type FlumeWaterNotificationsResponse

type FlumeWaterNotificationsResponse struct {
	*ResponseBase
	Data []FlumeWaterNotification `json:"data"`
}

type FlumeWaterOperation

type FlumeWaterOperation string
const (
	FlumeWaterOperationSum     FlumeWaterOperation = "SUM"
	FlumeWaterOperationAverage FlumeWaterOperation = "AVG"
	FlumeWaterOperationMin     FlumeWaterOperation = "MIN"
	FlumeWaterOperationMax     FlumeWaterOperation = "MAX"
	FlumeWaterOperationCount   FlumeWaterOperation = "CNT"
)

type FlumeWaterQuery

type FlumeWaterQuery struct {
	Bucket          FlumeWaterBucket        `json:"bucket"`
	GroupMultiplier int                     `json:"group_multiplier,omitempty"`
	SinceDatetime   string                  `json:"since_datetime"`
	UntilDatetime   string                  `json:"until_datetime,omitempty"`
	Operation       FlumeWaterOperation     `json:"operation,omitempty"`
	Units           FlumeWaterUnit          `json:"units,omitempty"`
	SortDirection   FlumeWaterSortDirection `json:"sort_direction,omitempty"`
	RequestID       string                  `json:"request_id"`
}

type FlumeWaterQueryRequest

type FlumeWaterQueryRequest struct {
	Queries []FlumeWaterQuery `json:"queries"`
}

type FlumeWaterQueryResponse

type FlumeWaterQueryResponse struct {
	*ResponseBase
	Data []FlumeWaterQueryResult `json:"data"`
}

type FlumeWaterQueryResult

type FlumeWaterQueryResult map[string][]FlumeWaterQueryResultBucket

type FlumeWaterQueryResultBucket

type FlumeWaterQueryResultBucket struct {
	Datetime string  `json:"datetime"`
	Value    float64 `json:"value"`
}

type FlumeWaterRefreshTokenRequest

type FlumeWaterRefreshTokenRequest struct {
	GrantType    string `json:"grant_type"`
	RefreshToken string `json:"refresh_token"`
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret"`
}

type FlumeWaterSortDirection

type FlumeWaterSortDirection string
const (
	FlumeWaterSortDirectionAsc  FlumeWaterSortDirection = "ASC"
	FlumeWaterSortDirectionDesc FlumeWaterSortDirection = "DESC"
)

type FlumeWaterSubscription

type FlumeWaterSubscription struct {
	ID                int       `json:"id"`
	UserID            int       `json:"user_id"`
	AlertType         string    `json:"alert_type"`
	AlertInfo         string    `json:"alert_info"`
	DeviceID          string    `json:"device_id"`
	NotificationTypes int       `json:"notification_types"`
	CreatedDatetime   time.Time `json:"created_datetime"`
	UpdatedDatetime   time.Time `json:"updated_datetime"`
}

type FlumeWaterSubscriptionParams

type FlumeWaterSubscriptionParams struct {
	*QueryParamsBase
	AlertType         string                     `url:"alert_type,omitempty"`
	NotificationTypes int                        `url:"notification_types,omitempty"`
	NotificationType  FlumeWaterNotificationType `url:"notification_type,omitempty"`
	DeviceID          string                     `url:"device_id,omitempty"`
	DeviceType        FlumeWaterDeviceType       `url:"device_type,omitempty"`
	LocationID        int                        `url:"location_id,omitempty"`
}

func NewFlumeWaterSubscriptionParams

func NewFlumeWaterSubscriptionParams() *FlumeWaterSubscriptionParams

type FlumeWaterUnit

type FlumeWaterUnit string
const (
	FlumeWaterUnitGallon      FlumeWaterUnit = "GALLONS"
	FlumeWaterUnitLiters      FlumeWaterUnit = "LITERS"
	FlumeWaterUnitCubicFeet   FlumeWaterUnit = "CUBIC_FEET"
	FlumeWaterUnitCubicMeters FlumeWaterUnit = "CUBIC_METERS"
)

type FlumeWaterUpdateUserLocationRequest

type FlumeWaterUpdateUserLocationRequest struct {
	AwayMode bool `json:"away_mode"`
}

type FlumeWaterUsageAlert

type FlumeWaterUsageAlert struct {
	ID                int                       `json:"id"`
	DeviceID          string                    `json:"device_id"`
	TriggeredDatetime time.Time                 `json:"triggered_datetime"`
	FlumeLeak         bool                      `json:"flume_leak"`
	Query             FlumeWaterUsageAlertQuery `json:"query"`
	EventRuleName     string                    `json:"event_rule_name"`
}

type FlumeWaterUsageAlertQuery

type FlumeWaterUsageAlertQuery struct {
	RequestID     string   `json:"request_id"`
	SinceDatetime string   `json:"since_datetime"`
	UntilDatetime string   `json:"until_datetime"`
	Tz            string   `json:"tz"`
	Bucket        string   `json:"bucket"`
	DeviceID      []string `json:"device_id"`
}

type FlumeWaterUsageAlertRule

type FlumeWaterUsageAlertRule struct {
	ID          string  `json:"id"`
	Name        string  `json:"name"`
	Active      bool    `json:"active"`
	FlowRate    float64 `json:"flow_rate"`
	Duration    int     `json:"duration"`
	NotifyEvery int     `json:"notify_every"`
}

type FlumeWaterUsageAlertRuleResponse

type FlumeWaterUsageAlertRuleResponse struct {
	*ResponseBase
	Data []FlumeWaterUsageAlertRule `json:"data"`
}

type FlumeWaterUsageAlertsParams

type FlumeWaterUsageAlertsParams struct {
	*QueryParamsBase
	DeviceID  string `url:"device_id,omitempty"`
	FlumeLeak bool   `url:"flume_leak,omitempty"`
}

func NewFlumeWaterUsageAlertsParams

func NewFlumeWaterUsageAlertsParams() *FlumeWaterUsageAlertsParams

type FlumeWaterUsageAlertsResponse

type FlumeWaterUsageAlertsResponse struct {
	*ResponseBase
	Data []FlumeWaterUsageAlert `json:"data"`
}

type FlumeWaterUsageProfile

type FlumeWaterUsageProfile struct {
	ID                 int    `json:"id"`
	Score              int    `json:"score"`
	Residents          string `json:"residents"`
	Bathrooms          string `json:"bathrooms"`
	Irrigation         string `json:"irrigation"`
	IrrigationFreq     string `json:"irrigation_freq"`
	IrrigationMaxCycle int    `json:"irrigation_max_cycle"`
}

type FlumeWaterUser

type FlumeWaterUser struct {
	ID             int    `json:"id"`
	EmailAddress   string `json:"email_address"`
	FirstName      string `json:"first_name"`
	LastName       string `json:"last_name"`
	Phone          string `json:"phone"`
	Status         string `json:"status"`
	Type           string `json:"type"`
	SignupDatetime string `json:"signup_datetime,omitempty"`
}

type FlumeWaterUserSubscriptionsResponse

type FlumeWaterUserSubscriptionsResponse struct {
	*ResponseBase
	Data []FlumeWaterSubscription `json:"data"`
}

type LocationsQueryParams

type LocationsQueryParams struct {
	*QueryParamsBase
	ListShared bool `url:"list_shared,omitempty"`
}

func NewLocationsQueryParams

func NewLocationsQueryParams() *LocationsQueryParams

type QueryParamsBase

type QueryParamsBase struct {
	Limit         int                     `url:"limit,omitempty"`
	Offset        int                     `url:"offset,omitempty"`
	SortField     string                  `url:"sort_field,omitempty"`
	SortDirection FlumeWaterSortDirection `url:"sort_direction,omitempty"`
}

type ResponseBase

type ResponseBase struct {
	Success     bool     `json:"success"`
	Code        int      `json:"code"`
	Message     string   `json:"message"`
	HTTPCode    int      `json:"http_code"`
	HTTPMessage string   `json:"http_message"`
	Detailed    []string `json:"detailed"`
	Count       int      `json:"count"`
	Pagination  struct {
		Next string `json:"next"`
		Prev string `json:"prev"`
	} `json:"pagination"`
}

Jump to

Keyboard shortcuts

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