static void
sensor_data_output_json(const sensor_data_t* data,
                        size_t num_data,
                        const bool* need_output,
                        char* buffer, size_t size)
{
    int offset =
        output_json_sensors_start(buffer, size);
    bool first = true;
    for (size_t i = 0; i < num_data; i++) {
        if (need_output[i]) {
            offset = output_json_one_sensor(
                first, &data[i], buffer, size,
                offset);
            first = false;
        }
    }
    output_json_sensors_end(buffer, size, offset);
}

static void get_sensors_report(char* buffer,
                             size_t buffer_size)
{
    // センサ取得のインターバル制御用
    static size_t iteration = 1;

    sensor_data_t data[MAX_SENSORS] = {0};
    bool need_output[MAX_SENSORS] = {0};
    for (size_t sensor_id = 0;
         sensor_id < MAX_SENSORS; sensor_id++) {
        get_sensor_data(iteration, sensor_id,
                        &data[sensor_id],
                        &need_output[sensor_id]);
    }

    sensor_data_output_json(data, MAX_SENSORS,
                            need_output, buffer,
                            buffer_size);
    iteration++;
}
