syntax = "proto3"; message Energy { uint32 mAh = 1; } message TimePoint { uint64 millis_since_epoch = 1; } message Duration { uint32 millis = 1; } message Temperature { double celsius = 1; } message StatusRequest {} message SensorStatus { string name = 1; TimePoint online_since = 2; Energy battery_charge = 3; Energy battery_capacity = 4; Duration max_sampling_period = 5; Duration cur_sampling_period = 6; uint32 max_chunk_size = 7; uint32 cur_chunk_size = 8; uint32 n_chunk_capacity = 9; uint32 n_full_data_chunks = 10; uint32 n_empty_data_chunks = 11; } message DataChunkRequest {} message DataChunk { TimePoint begin = 1; Duration period = 2; repeated Temperature data = 3; } enum SetSamplingPeriodResultEnum { OK = 0; OutOfRange = 1; } message SetSamplingPeriodResult { SetSamplingPeriodResultEnum result = 1; } service Sensor { rpc get_status (StatusRequest) returns (SensorStatus) {} rpc set_sampling_period (Duration) returns (SetSamplingPeriodResult) {} rpc pop_data_chunk (DataChunkRequest) returns (DataChunk) {} }