2024-11-28 21:44:31 +00:00
|
|
|
package tiko
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
"errors"
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
|
|
|
)
|
|
|
|
|
|
|
|
type RoomMode string
|
|
|
|
|
|
|
|
const (
|
|
|
|
RoomModeBoost = RoomMode("boost")
|
|
|
|
RoomModeFalse = RoomMode("false")
|
|
|
|
RoomModeAway = RoomMode("absence")
|
|
|
|
RoomModeFrost = RoomMode("frost")
|
|
|
|
RoomModeDisable = RoomMode("disableHeating")
|
|
|
|
)
|
|
|
|
|
|
|
|
type Room struct {
|
|
|
|
ID int64 `json:"id"`
|
|
|
|
Name string `json:"name"`
|
|
|
|
Type int `json:"type"`
|
|
|
|
Color string `json:"color"`
|
|
|
|
Heaters int `json:"heaters"`
|
|
|
|
CurrentTemperature float64 `json:"currentTemperatureDegrees"`
|
|
|
|
TargetTemperature float64 `json:"targetTemperatureDegrees"`
|
2024-12-10 07:38:03 +00:00
|
|
|
Humidity float64 `json:"humidity"`
|
2024-11-28 21:44:31 +00:00
|
|
|
Sensors int `json:"sensors"`
|
|
|
|
Mode struct {
|
|
|
|
Boost bool `json:"boost"`
|
|
|
|
Absence bool `json:"absence"`
|
|
|
|
Frost bool `json:"frost"`
|
|
|
|
DisableHeating bool `json:"disableHeating"`
|
|
|
|
TypeName string `json:"__typename"`
|
|
|
|
} `json:"mode"`
|
|
|
|
Status struct {
|
|
|
|
Disconnected bool `json:"disconnected"`
|
|
|
|
// HeaterDisconnected bool `json:"heaterDisconnected"`
|
|
|
|
HeatingOperating bool `json:"heatingOperating"`
|
|
|
|
SensorBatteryLow bool `json:"sensorBatteryLow"`
|
|
|
|
SensorDisconnected bool `json:"sensorDisconnected"`
|
|
|
|
// TemporaryAdjustment bool `json:"temporaryAdjustment"`
|
|
|
|
HeatersRegulated bool `json:"heatersRegulated"`
|
|
|
|
HeaterCalibrationState [][2]interface{} `json:"heaterCalibrationState"`
|
|
|
|
TypeName string `json:"__typename"`
|
|
|
|
} `json:"status"`
|
|
|
|
TypeName string `json:"__typename"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type PropertyRoom struct {
|
|
|
|
Room Room `json:"room"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type PropertyRoomResp struct {
|
|
|
|
Property PropertyRoom `json:"property"`
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) GetRoom(propertyID, roomID int64) (*Room, error) {
|
|
|
|
if err := c.Init(); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Créer les données de la requête
|
|
|
|
requestData := map[string]interface{}{
|
|
|
|
"operationName": "GET_PROPERTY_MODE_AND_ROOM",
|
|
|
|
"variables": map[string]int64{
|
|
|
|
"propertyId": propertyID,
|
|
|
|
"roomId": roomID,
|
|
|
|
},
|
|
|
|
"query": "query GET_PROPERTY_MODE_AND_ROOM($propertyId: Int!, $roomId: Int!) { property(id: $propertyId) { id mode room(id: $roomId) { id name type color heaters currentTemperatureDegrees targetTemperatureDegrees humidity sensors mode { boost absence frost disableHeating __typename } status { disconnected heaterDisconnected heatingOperating sensorBatteryLow sensorDisconnected temporaryAdjustment heatersRegulated heaterCalibrationState __typename } __typename } __typename } }",
|
|
|
|
}
|
|
|
|
|
|
|
|
// Convertir les données en JSON
|
|
|
|
requestDataJSON, err := json.Marshal(requestData)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Créer la requête HTTP
|
|
|
|
req, err := http.NewRequest(http.MethodPost, graphqlAPIURL, bytes.NewBuffer(requestDataJSON))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
resp, err := Do[ApiResp[PropertyRoomResp]](c, req)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return &resp.Data.Property.Room, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) SetRoomMode(propertyID, roomID int64, mode RoomMode) (*Room, error) {
|
|
|
|
if err := c.Init(); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Créer les données de la requête
|
|
|
|
requestData := map[string]interface{}{
|
|
|
|
"operationName": "SET_ROOM_MODE",
|
|
|
|
"variables": map[string]interface{}{
|
|
|
|
"propertyId": propertyID,
|
|
|
|
"roomId": roomID,
|
|
|
|
"mode": mode,
|
|
|
|
},
|
|
|
|
"query": "mutation SET_ROOM_MODE($propertyId: Int!, $roomId: Int!, $mode: String!) { setRoomMode(input: {propertyId: $propertyId, roomId: $roomId, mode: $mode}) { id mode { boost absence frost disableHeating __typename } __typename } }",
|
|
|
|
}
|
|
|
|
|
|
|
|
// Convertir les données en JSON
|
|
|
|
requestDataJSON, err := json.Marshal(requestData)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Créer la requête HTTP
|
|
|
|
req, err := http.NewRequest(http.MethodPost, graphqlAPIURL, bytes.NewBuffer(requestDataJSON))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
resp, err := Do[map[string]interface{}](c, req)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
fmt.Println("SetRoomMode Resp", resp)
|
|
|
|
|
|
|
|
return c.GetRoom(propertyID, roomID)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (c *Client) SetRoomTemperature(propertyID, roomID int64, temp float32) (*Room, error) {
|
|
|
|
if err := c.Init(); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if temp <= 7 || temp >= 25 {
|
|
|
|
return nil, errors.New("temp is out of bounds")
|
|
|
|
}
|
|
|
|
|
|
|
|
// Créer les données de la requête
|
|
|
|
requestData := map[string]interface{}{
|
|
|
|
"operationName": "SET_PROPERTY_ROOM_ADJUST_TEMPERATURE",
|
|
|
|
"variables": map[string]interface{}{
|
|
|
|
"propertyId": propertyID,
|
|
|
|
"roomId": roomID,
|
|
|
|
"temperature": temp,
|
|
|
|
},
|
|
|
|
"query": "mutation SET_PROPERTY_ROOM_ADJUST_TEMPERATURE($propertyId: Int!, $roomId: Int!, $temperature: Float!) { setRoomAdjustTemperature(input: {propertyId: $propertyId, roomId: $roomId, temperature: $temperature}) { id adjustTemperature { active endDateTime temperature __typename } __typename } }",
|
|
|
|
}
|
|
|
|
|
|
|
|
// Convertir les données en JSON
|
|
|
|
requestDataJSON, err := json.Marshal(requestData)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// Créer la requête HTTP
|
|
|
|
req, err := http.NewRequest(http.MethodPost, graphqlAPIURL, bytes.NewBuffer(requestDataJSON))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
resp, err := Do[map[string]interface{}](c, req)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Println("SetRoomTemperature Resp", resp)
|
|
|
|
|
|
|
|
return c.GetRoom(propertyID, roomID)
|
|
|
|
}
|