-
Notifications
You must be signed in to change notification settings - Fork 8
/
cooling.proto
145 lines (127 loc) · 4.97 KB
/
cooling.proto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// Copyright (C) 2023 Braiins Systems s.r.o.
//
// This file is part of Braiins Open-Source Initiative (BOSI).
//
// BOSI is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
//
// Please, keep in mind that we may also license BOSI or any part thereof
// under a proprietary license. For more information on the terms and conditions
// of such proprietary license or if you have any other questions, please
// contact us at opensource@braiins.com.
syntax = "proto3";
package braiins.bos.v1;
import "bos/v1/common.proto";
import "bos/v1/constraints.proto";
import "bos/v1/units.proto";
option go_package = "github.com/braiins/bos-plus-api/braiins/bos/v1;bos_proto_v1";
// The temperature control modes.
// Miner software tries to regulate the fan speed so that miner temperature is approximately at the target temperature.
// The allowed temperature range is 0-200 degree Celsius.
message CoolingAutoMode {
// Temperature that the miner will try to maintain
braiins.bos.v1.Temperature target_temperature = 1;
// Temperature threshold at which the fans start to run at 100%.
braiins.bos.v1.Temperature hot_temperature = 2;
// Temperature threshold at which BOSMiner shuts down in order to prevent overheating and damaging the miner.
braiins.bos.v1.Temperature dangerous_temperature = 3;
}
// Fans are kept at a fixed, user-defined speed, no matter the temperature.
message CoolingManualMode {
// User defined fan speed expressed as a ratio between 0.0 and 1.0
// where 0.0 means completely turned off and
// 1.0 means running at full speed possible
optional double fan_speed_ratio = 1;
// Temperature threshold at which the fans start to run at 100%.
braiins.bos.v1.Temperature hot_temperature = 2;
// Temperature threshold at which BOSMiner shuts down in order to prevent overheating and damaging the miner.
braiins.bos.v1.Temperature dangerous_temperature = 3;
}
// Disable temperature control. May be dangerous.
message CoolingDisabledMode {
// User defined fan speed expressed as a ratio between 0.0 and 1.0
// where 0.0 means completely turned off and
// 1.0 means running at full speed possible
optional double fan_speed_ratio = 1;
}
message CoolingConfiguration {
optional uint32 minimum_required_fans = 1;
oneof mode {
CoolingAutoMode auto = 2;
CoolingManualMode manual = 3;
CoolingDisabledMode disabled = 4;
}
}
enum CoolingMode {
COOLING_MODE_UNSPECIFIED = 0;
COOLING_MODE_AUTO = 1;
COOLING_MODE_MANUAL = 2;
COOLING_MODE_DISABLED = 3;
}
message CoolingConstraints {
CoolingMode default_cooling_mode = 1;
braiins.bos.v1.TemperatureConstraints target_temperature = 2;
braiins.bos.v1.TemperatureConstraints hot_temperature = 3;
braiins.bos.v1.TemperatureConstraints dangerous_temperature = 4;
braiins.bos.v1.DoubleConstraints fan_speed_ratio = 5;
braiins.bos.v1.UInt32Constraints minimum_required_fans = 6;
}
// Structure which contain info about one specific miner fan.
message FanState {
// Fan positions/ID
optional uint32 position = 1;
// Actual fan RPM (Revolutions/Rotation Per Minute)
uint32 rpm = 2;
// Actual fan speed ratio(PWM) in range 0.0 - 1.0
optional double target_speed_ratio = 3;
}
enum SensorLocation {
SENSOR_LOCATION_UNSPECIFIED = 0;
SENSOR_LOCATION_CHIP = 1;
SENSOR_LOCATION_PCB = 2;
}
message TemperatureSensor {
// Sensor id
optional uint32 id = 1;
// Sensor location
SensorLocation location = 2;
// Temperature
braiins.bos.v1.Temperature temperature = 3;
}
// Request to get current temperature and fans measurements
message GetCoolingStateRequest {}
// Response to get current fan states and
// temperature measurements
message GetCoolingStateResponse {
// All Fans state
repeated braiins.bos.v1.FanState fans = 1;
// Sensor with current highest temperature
braiins.bos.v1.TemperatureSensor highest_temperature = 2;
}
// Request to set immersion mode
message SetImmersionModeRequest {
braiins.bos.v1.SaveAction save_action = 1;
// Flag to enable or disable immersion mode
bool enable_immersion_mode = 2;
}
// Response for set immersion mode action.
message SetImmersionModeResponse {
// The resulting immersion mode
bool immersion_mode = 1;
}
service CoolingService {
// Method to get current temperature measurements and fans states
rpc GetCoolingState(GetCoolingStateRequest) returns (GetCoolingStateResponse);
// Method to set/toggle immersion mode
rpc SetImmersionMode(SetImmersionModeRequest) returns (SetImmersionModeResponse);
}