lib/ex_vcom/api/default.ex

# NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
# https://openapi-generator.tech
# Do not edit the class manually.

defmodule ExVcom.Api.Default do
  @moduledoc """
  API calls for all endpoints tagged `Default`.
  """

  alias ExVcom.Connection
  import ExVcom.RequestBuilder

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SystemsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec cmms_systems_get(Tesla.Env.client(), keyword()) ::
          {:ok, ExVcom.Model.SystemsResponse.t()} | {:ok, nil} | {:error, Tesla.Env.t()}
  def cmms_systems_get(connection, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/cmms/systems")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SystemsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.CmmsWorkordersResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec cmms_workorders_get(Tesla.Env.client(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.CmmsWorkordersResponse.t()} | {:error, Tesla.Env.t()}
  def cmms_workorders_get(connection, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/cmms/workorders")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.CmmsWorkordersResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - workorder_id (integer()): 
  - form_id (integer()): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.CmmsWorkorderFormResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec cmms_workorders_workorder_id_forms_form_id_get(
          Tesla.Env.client(),
          integer(),
          integer(),
          keyword()
        ) ::
          {:ok, nil} | {:ok, ExVcom.Model.CmmsWorkorderFormResponse.t()} | {:error, Tesla.Env.t()}
  def cmms_workorders_workorder_id_forms_form_id_get(
        connection,
        workorder_id,
        form_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/cmms/workorders/#{workorder_id}/forms/#{form_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.CmmsWorkorderFormResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - workorder_id (integer()): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.CmmsWorkorderFormsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec cmms_workorders_workorder_id_forms_get(Tesla.Env.client(), integer(), keyword()) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.CmmsWorkorderFormsResponse.t()}
          | {:error, Tesla.Env.t()}
  def cmms_workorders_workorder_id_forms_get(connection, workorder_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/cmms/workorders/#{workorder_id}/forms")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.CmmsWorkorderFormsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - workorder_id (integer()): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.CmmsWorkorderResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec cmms_workorders_workorder_id_get(Tesla.Env.client(), integer(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.CmmsWorkorderResponse.t()} | {:error, Tesla.Env.t()}
  def cmms_workorders_workorder_id_get(connection, workorder_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/cmms/workorders/#{workorder_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.CmmsWorkorderResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - o_auth_login (OAuthLogin): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.OAuthCredentials.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec login_post(Tesla.Env.client(), ExVcom.Model.OAuthLogin.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.OAuthCredentials.t()} | {:error, Tesla.Env.t()}
  def login_post(connection, o_auth_login, _opts \\ []) do
    %{}
    |> method(:post)
    |> url("/login")
    |> add_param(:body, :body, o_auth_login)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.OAuthCredentials{}},
      {400, false},
      {401, false},
      {429, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SessionResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec session_get(Tesla.Env.client(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.SessionResponse.t()} | {:error, Tesla.Env.t()}
  def session_get(connection, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/session")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SessionResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - abbreviation_id (String.t): 
  - from (DateTime.t): Start date
  - to (DateTime.t): End date
  - resolution (String.t): Defaults to `day`.
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SystemMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_abbreviations_abbreviation_id_measurement_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.SystemMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_abbreviations_abbreviation_id_measurement_get(
        connection,
        abbreviation_id,
        from,
        to,
        resolution,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/abbreviations/#{abbreviation_id}/measurement")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_param(:query, :resolution, resolution)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SystemMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SystemsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_abbreviations_get(Tesla.Env.client(), keyword()) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.SystemsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_abbreviations_get(connection, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SystemsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SystemsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_get(Tesla.Env.client(), keyword()) ::
          {:ok, ExVcom.Model.SystemsResponse.t()} | {:ok, nil} | {:error, Tesla.Env.t()}
  def systems_get(connection, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SystemsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_basics_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_basics_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/basics/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span between `from` and `to` varies depending on the `resolution` as listed below.  | Resolution      | Maximum time span | |-----------------|-------------------| | interval        | 31 days           | | fifteen-minutes | 31 days           | | thirty-minutes  | 31 days           | | hour            | 31 days           | | day             | 60 days           | | month           | 1 year            | | year            | no limitation     |

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.
    - :resolution (String.t): Defaults to `interval`.
  ## Returns

  {:ok, ExVcom.Model.MeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_basics_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.MeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_basics_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/basics/abbreviations/#{abbreviation_id}/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.MeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_basics_abbreviations_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.AbbreviationsResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_basics_abbreviations_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/basics/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to 0
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_basics_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_basics_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/basics/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher).
    - :device_ids (String.t): Comma separated deviceIds
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_batteries_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_batteries_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query,
      :resolution => :query,
      :deviceIds => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/batteries/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_batteries_device_id_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_batteries_device_id_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/batteries/#{device_id}/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span between `from` and `to` varies depending on the `resolution` as listed below.  | Resolution      | Maximum time span | |-----------------|-------------------| | minute          | 1 day             | | interval        | 31 days           | | fifteen-minutes | 31 days           | | thirty-minutes  | 31 days           | | hour            | 31 days           | | day             | 60 days           | | month           | 1 year            | | year            | no limitation     |

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher).
  ## Returns

  {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_batteries_device_id_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_batteries_device_id_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/batteries/#{device_id}/abbreviations/#{abbreviation_id}/measurements"
    )
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_batteries_device_id_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_batteries_device_id_abbreviations_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/batteries/#{device_id}/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.BatteryResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_batteries_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.BatteryResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_batteries_device_id_get(connection, system_key, device_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/batteries/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.BatteryResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.DeviceResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_batteries_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.DeviceResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_batteries_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/batteries")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher)  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :resolution (String.t): Defaults to `interval`.
    - :device_ids (String.t): Comma separated deviceIds
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to 0
  ## Returns

  {:ok, ExVcom.Model.BulkMeasurementResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) ::
          {:ok, nil} | {:ok, ExVcom.Model.BulkMeasurementResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_bulk_measurements_get(connection, system_key, from, to, opts \\ []) do
    optional_params = %{
      :format => :query,
      :resolution => :query,
      :deviceIds => :query,
      :abbreviations => :query,
      :includeInterval => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.BulkMeasurementResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_calculations_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_calculations_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/calculations/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span between `from` and `to` varies depending on the `resolution` as listed below.  | Resolution      | Maximum time span | |-----------------|-------------------| | day             | 60 days           | | month           | 1 year            | | year            | no limitation     |

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.
    - :resolution (String.t): Defaults to `interval`.
  ## Returns

  {:ok, ExVcom.Model.MeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_calculations_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.MeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_calculations_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/calculations/abbreviations/#{abbreviation_id}/measurements/")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.MeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_calculations_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationsResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_calculations_abbreviations_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/calculations/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to 0
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_calculations_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_calculations_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/calculations/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - resolution (String.t): Defaults to `interval`.
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SimulationValueResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_calculations_simulation_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil} | {:ok, ExVcom.Model.SimulationValueResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_calculations_simulation_get(
        connection,
        system_key,
        from,
        to,
        resolution,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/calculations/simulation")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_param(:query, :resolution, resolution)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SimulationValueResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  Depending on your contract type different kinds of forecasts are provided.  | Category           | Description                                                                                                                                                                                      | |--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Day-Ahead          | Only day-ahead forecasts can be retrieved. The first timestamp starts at  00:00:00 of the following day. They are based on numerical weather  prediction and will update a couple times per day. | | Intraday           | Both day-ahead and intraday forecasts can be retrieved. They are also  based on numerical weather prediction and will update a couple times per  day.                                            | | Intraday Optimized | Both day-ahead and intraday forecasts can be retrieved. Satellite based  forecasts are combined with numerical weather prediction. The forecasts  are updated every 15 minutes.                  |

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :hours_into_future (integer()): Between 1 and 96.   Defaults to 48.
    - :format (String.t): Defaults to `json`.
    - :resolution (String.t): Defaults to `fifteen-minutes`.
    - :timezone (String.t): Defaults to system timezone
  ## Returns

  {:ok, ExVcom.Model.ForecastResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_forecasts_forecast_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.ForecastResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_forecasts_forecast_get(connection, system_key, opts \\ []) do
    optional_params = %{
      :hours_into_future => :query,
      :format => :query,
      :resolution => :query,
      :timezone => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/forecasts/forecast")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.ForecastResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The resolution fixed to month at current moment. 

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.MeasurementValueResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_forecasts_yield_specific_energy_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) ::
          {:ok, nil} | {:ok, ExVcom.Model.MeasurementValueResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_forecasts_yield_specific_energy_get(
        connection,
        system_key,
        from,
        to,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/forecasts/yield/specific-energy")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.MeasurementValueResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SystemResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.SystemResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SystemResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher).
    - :device_ids (String.t): Comma separated deviceIds
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_inverters_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_inverters_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query,
      :resolution => :query,
      :deviceIds => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/inverters/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_inverters_device_id_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_inverters_device_id_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/inverters/#{device_id}/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span between `from` and `to` varies depending on the `resolution` as listed below.  | Resolution      | Maximum time span | |-----------------|-------------------| | minute          | 1 day             | | interval        | 31 days           | | fifteen-minutes | 31 days           | | thirty-minutes  | 31 days           | | hour            | 31 days           | | day             | 60 days           | | month           | 1 year            | | year            | no limitation     |

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.
    - :resolution (String.t): Defaults to `interval`.
  ## Returns

  {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_inverters_device_id_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_inverters_device_id_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/inverters/#{device_id}/abbreviations/#{abbreviation_id}/measurements"
    )
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_inverters_device_id_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_inverters_device_id_abbreviations_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/inverters/#{device_id}/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.VirtualMeterDetailsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_inverters_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.VirtualMeterDetailsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_inverters_device_id_get(connection, system_key, device_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/inverters/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.VirtualMeterDetailsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.InverterResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_inverters_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.InverterResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_inverters_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/inverters")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.InverterResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher).
    - :device_ids (String.t): Comma separated deviceIds
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_meters_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_meters_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query,
      :resolution => :query,
      :deviceIds => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/meters/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_meters_device_id_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_meters_device_id_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/meters/#{device_id}/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span between `from` and `to` varies depending on the `resolution` as listed below.  | Resolution      | Maximum time span | |-----------------|-------------------| | minute          | 1 day             | | interval        | 31 days           | | fifteen-minutes | 31 days           | | thirty-minutes  | 31 days           | | hour            | 31 days           | | day             | 60 days           | | month           | 1 year            | | year            | no limitation     |

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.
    - :resolution (String.t): Defaults to `interval`.
  ## Returns

  {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_meters_device_id_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_meters_device_id_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/meters/#{device_id}/abbreviations/#{abbreviation_id}/measurements/"
    )
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_meters_device_id_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_meters_device_id_abbreviations_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/meters/#{device_id}/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.MeterResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_meters_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.MeterResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_meters_device_id_get(connection, system_key, device_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/meters/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.MeterResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.DeviceResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_meters_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.DeviceResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_meters_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/meters")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :username (String.t): Get single user information by its username
  ## Returns

  {:ok, ExVcom.Model.PictureResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_picture_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.PictureResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_picture_get(connection, system_key, opts \\ []) do
    optional_params = %{
      :username => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/picture")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.PictureResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher).
    - :device_ids (String.t): Comma separated deviceIds
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_power_plant_controllers_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_power_plant_controllers_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query,
      :resolution => :query,
      :deviceIds => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/power-plant-controllers/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_power_plant_controllers_device_id_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_power_plant_controllers_device_id_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/power-plant-controllers/#{device_id}/abbreviations/#{abbreviation_id}"
    )
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span between `from` and `to` varies depending on the `resolution` as listed below.  | Resolution      | Maximum time span | |-----------------|-------------------| | minute          | 1 day             | | interval        | 31 days           | | fifteen-minutes | 31 days           | | thirty-minutes  | 31 days           | | hour            | 31 days           | | day             | 60 days           | | month           | 1 year            | | year            | no limitation     |

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher).
  ## Returns

  {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_power_plant_controllers_device_id_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_power_plant_controllers_device_id_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/power-plant-controllers/#{device_id}/abbreviations/#{abbreviation_id}/measurements"
    )
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_power_plant_controllers_device_id_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_power_plant_controllers_device_id_abbreviations_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/power-plant-controllers/#{device_id}/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.PowerPlantControllerResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_power_plant_controllers_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.PowerPlantControllerResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_power_plant_controllers_device_id_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/power-plant-controllers/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.PowerPlantControllerResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.DeviceResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_power_plant_controllers_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.DeviceResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_power_plant_controllers_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/power-plant-controllers")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.ResponsibilitiesResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_responsibilities_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.ResponsibilitiesResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_responsibilities_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/responsibilities")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.ResponsibilitiesResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher)
    - :device_ids (String.t): Comma separated deviceIds
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_sensors_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_sensors_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query,
      :resolution => :query,
      :deviceIds => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/sensors/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_sensors_device_id_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_sensors_device_id_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/sensors/#{device_id}/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span between `from` and `to` varies depending on the `resolution` as listed below.  | Resolution      | Maximum time span | |-----------------|-------------------| | minute          | 1 day             | | interval        | 31 days           | | fifteen-minutes | 31 days           | | thirty-minutes  | 31 days           | | hour            | 31 days           | | day             | 60 days           | | month           | 1 year            | | year            | no limitation     |

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.
    - :resolution (String.t): Defaults to `interval`.
  ## Returns

  {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_sensors_device_id_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_sensors_device_id_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/sensors/#{device_id}/abbreviations/#{abbreviation_id}/measurements"
    )
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_sensors_device_id_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_sensors_device_id_abbreviations_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/sensors/#{device_id}/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SensorResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_sensors_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.SensorResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_sensors_device_id_get(connection, system_key, device_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/sensors/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SensorResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.DeviceResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_sensors_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.DeviceResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_sensors_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/sensors")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.
    - :device_ids (String.t): Comma separated deviceIds
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_statuses_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_statuses_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query,
      :resolution => :query,
      :deviceIds => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/statuses/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_statuses_device_id_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_statuses_device_id_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/statuses/#{device_id}/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`. 

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.
    - :resolution (String.t): Defaults to `interval`.
  ## Returns

  {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_statuses_device_id_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_statuses_device_id_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/statuses/#{device_id}/abbreviations/#{abbreviation_id}/measurements"
    )
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_statuses_device_id_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_statuses_device_id_abbreviations_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/statuses/#{device_id}/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.StatusResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_statuses_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.StatusResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_statuses_device_id_get(connection, system_key, device_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/statuses/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.StatusResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.DeviceResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_statuses_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.DeviceResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_statuses_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/statuses")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher).
    - :device_ids (String.t): Comma separated deviceIds
    - :active_only (integer()): Export active strings only, defaults to `0`.
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_stringboxes_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_stringboxes_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query,
      :resolution => :query,
      :deviceIds => :query,
      :activeOnly => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/stringboxes/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_stringboxes_device_id_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_stringboxes_device_id_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/stringboxes/#{device_id}/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`. 

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.
    - :resolution (String.t): Defaults to `interval`.
  ## Returns

  {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_stringboxes_device_id_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_stringboxes_device_id_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/stringboxes/#{device_id}/abbreviations/#{abbreviation_id}/measurements"
    )
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_stringboxes_device_id_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_stringboxes_device_id_abbreviations_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/stringboxes/#{device_id}/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.StringboxResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_stringboxes_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.StringboxResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_stringboxes_device_id_get(connection, system_key, device_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/stringboxes/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.StringboxResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.DeviceResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_stringboxes_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.DeviceResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_stringboxes_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/stringboxes")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TechnicalDataResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_technical_data_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.TechnicalDataResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_technical_data_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/technical-data")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TechnicalDataResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`.  The following query parameters are valid only if `format` is `csv`:  - delimiter:  `comma`ǀ`semicolon`ǀ`colon`ǀ`tab`  The delimiter, defaults to `comma` - lineBreak:  `LF`ǀ`CR`ǀ`CR/LF`  The line breaks, defaults to `LF` - decimalPoint:  `dot`ǀ`comma`  The decimal point, defaults to `dot` - emptyPlaceholder:  empty string by default, any text accepted  The place holder for empty value - precision:  accepts from 0 to 4  The decimal precision, defaults to `2`

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :format (String.t): Export format, defaults to `json`
    - :abbreviations (String.t): Comma separated abbreviations
    - :include_interval (integer()): Defaults to `0`.  Only for `interval` resolution.
    - :resolution (String.t): Defaults to `interval`.  The option `minute` resolution is only supported by meteocontrol blue'Log XM / XC (Firmware 2.0 and higher)
    - :device_ids (String.t): Comma separated deviceIds
  ## Returns

  {:ok, map()} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_trackers_bulk_measurements_get(
          Tesla.Env.client(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, Map.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_trackers_bulk_measurements_get(
        connection,
        system_key,
        from,
        to,
        opts \\ []
      ) do
    optional_params = %{
      :format => :query,
      :abbreviations => :query,
      :includeInterval => :query,
      :resolution => :query,
      :deviceIds => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/trackers/bulk/measurements")
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """


  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_trackers_device_id_abbreviations_abbreviation_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_trackers_device_id_abbreviations_abbreviation_id_get(
        connection,
        system_key,
        abbreviation_id,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/trackers/#{device_id}/abbreviations/#{abbreviation_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  The maximum time span is 24 hours between `from` and `to`. 

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - abbreviation_id (String.t): 
  - from (DateTime.t): 
  - to (DateTime.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :include_interval (integer()): Defaults to `0`.
    - :resolution (String.t): Defaults to `interval`.
  ## Returns

  {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_trackers_device_id_abbreviations_abbreviation_id_measurements_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          DateTime.t(),
          DateTime.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.DeviceMeasurementsAbbreviationsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_trackers_device_id_abbreviations_abbreviation_id_measurements_get(
        connection,
        system_key,
        abbreviation_id,
        from,
        to,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :includeInterval => :query,
      :resolution => :query
    }

    %{}
    |> method(:get)
    |> url(
      "/systems/#{system_key}/trackers/#{device_id}/abbreviations/#{abbreviation_id}/measurements"
    )
    |> add_param(:query, :from, from)
    |> add_param(:query, :to, to)
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceMeasurementsAbbreviationsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.AbbreviationResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_trackers_device_id_abbreviations_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.AbbreviationResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_trackers_device_id_abbreviations_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/trackers/#{device_id}/abbreviations")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.AbbreviationResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.SensorResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_trackers_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.SensorResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_trackers_device_id_get(connection, system_key, device_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/trackers/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.SensorResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.DeviceResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_trackers_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.DeviceResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_trackers_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/trackers")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.UserResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_users_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.UserResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_users_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/users")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.UserResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - user_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.UserDetailsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_users_user_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.UserDetailsResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_users_user_id_get(connection, system_key, user_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/users/#{user_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.UserDetailsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.VirtualMeterDetailsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_virtual_meters_device_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.VirtualMeterDetailsResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_virtual_meters_device_id_get(
        connection,
        system_key,
        device_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/virtual-meters/#{device_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.VirtualMeterDetailsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  If no time range is given the endpoint returns the latest reading.

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - device_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
    - :from (DateTime.t): 
    - :to (DateTime.t): 
    - :type (String.t): Defaults to `all`.
  ## Returns

  {:ok, ExVcom.Model.VirtualMeterReadingResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_virtual_meters_device_id_readings_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.VirtualMeterReadingResponse.t()}
          | {:error, Tesla.Env.t()}
  def systems_system_key_virtual_meters_device_id_readings_get(
        connection,
        system_key,
        device_id,
        opts \\ []
      ) do
    optional_params = %{
      :from => :query,
      :to => :query,
      :type => :query
    }

    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/virtual-meters/#{device_id}/readings")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.VirtualMeterReadingResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - system_key (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.DeviceResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec systems_system_key_virtual_meters_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.DeviceResponse.t()} | {:error, Tesla.Env.t()}
  def systems_system_key_virtual_meters_get(connection, system_key, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/systems/#{system_key}/virtual-meters")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.DeviceResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketCausesResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_causes_get(Tesla.Env.client(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.TicketCausesResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_causes_get(connection, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/tickets/causes")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TicketCausesResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  Returns all tickets.

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - opts (KeywordList): [optional] Optional parameters
    - :last_changed_at_left_square_bracketfrom_right_square_bracket (DateTime.t): 
    - :last_changed_at_left_square_bracketto_right_square_bracket (DateTime.t): 
    - :created_at_left_square_bracketfrom_right_square_bracket (DateTime.t): 
    - :created_at_left_square_bracketto_right_square_bracket (DateTime.t): 
    - :rectified_at_left_square_bracketfrom_right_square_bracket (DateTime.t): 
    - :rectified_at_left_square_bracketto_right_square_bracket (DateTime.t): 
    - :include_in_reports (String.t): Can contain comma delimited report types
    - :status (String.t): 
    - :severity (String.t): Can contain comma delimited severity types
    - :priority (String.t): Can contain comma delimited priority types
    - :assignee (String.t): The username of the person being assigned to the ticket, it can contain comma delimited names.
    - :system_key (String.t): can contain comma delimited system keys
  ## Returns

  {:ok, ExVcom.Model.TicketsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_get(Tesla.Env.client(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.TicketsResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_get(connection, opts \\ []) do
    optional_params = %{
      :"lastChangedAt[from]" => :query,
      :"lastChangedAt[to]" => :query,
      :"createdAt[from]" => :query,
      :"createdAt[to]" => :query,
      :"rectifiedAt[from]" => :query,
      :"rectifiedAt[to]" => :query,
      :includeInReports => :query,
      :status => :query,
      :severity => :query,
      :priority => :query,
      :assignee => :query,
      :systemKey => :query
    }

    %{}
    |> method(:get)
    |> url("/tickets")
    |> add_optional_params(optional_params, opts)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TicketsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  Create a ticket

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_update_payload (TicketUpdatePayload): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketCreateResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_post(Tesla.Env.client(), ExVcom.Model.TicketUpdatePayload.t(), keyword()) ::
          {:ok, ExVcom.Model.TicketCreateResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_post(connection, ticket_update_payload, _opts \\ []) do
    %{}
    |> method(:post)
    |> url("/tickets")
    |> add_param(:body, :body, ticket_update_payload)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {201, %ExVcom.Model.TicketCreateResponse{}}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - attachment_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketAttachmentDetailsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_attachments_attachment_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) ::
          {:ok, nil}
          | {:ok, ExVcom.Model.TicketAttachmentDetailsResponse.t()}
          | {:error, Tesla.Env.t()}
  def tickets_ticket_id_attachments_attachment_id_get(
        connection,
        ticket_id,
        attachment_id,
        _opts \\ []
      ) do
    %{}
    |> method(:get)
    |> url("/tickets/#{ticket_id}/attachments/#{attachment_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TicketAttachmentDetailsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  Get all attachments

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketAttachmentsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_attachments_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.TicketAttachmentsResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_attachments_get(connection, ticket_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/tickets/#{ticket_id}/attachments")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TicketAttachmentsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  Create an attachment
  Please note there’s a limit of 5 attachments per ticket.

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - ticket_attachment_create_payload (TicketAttachmentCreatePayload): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketAttachmentCreateResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_attachments_post(
          Tesla.Env.client(),
          String.t(),
          ExVcom.Model.TicketAttachmentCreatePayload.t(),
          keyword()
        ) :: {:ok, ExVcom.Model.TicketAttachmentCreateResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_attachments_post(
        connection,
        ticket_id,
        ticket_attachment_create_payload,
        _opts \\ []
      ) do
    %{}
    |> method(:post)
    |> url("/tickets/#{ticket_id}/attachments")
    |> add_param(:body, :body, ticket_attachment_create_payload)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {201, %ExVcom.Model.TicketAttachmentCreateResponse{}}
    ])
  end

  @doc """
  Delete a comment

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - comment_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, nil} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_comments_comment_id_delete(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_comments_comment_id_delete(connection, ticket_id, comment_id, _opts \\ []) do
    %{}
    |> method(:delete)
    |> url("/tickets/#{ticket_id}/comments/#{comment_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {204, false}
    ])
  end

  @doc """
  Get single comment

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - comment_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketCommentResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_comments_comment_id_get(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          keyword()
        ) :: {:ok, nil} | {:ok, ExVcom.Model.TicketCommentResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_comments_comment_id_get(connection, ticket_id, comment_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/tickets/#{ticket_id}/comments/#{comment_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TicketCommentResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  Update a comment

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - comment_id (String.t): 
  - ticket_comment_create_payload (TicketCommentCreatePayload): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, nil} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_comments_comment_id_patch(
          Tesla.Env.client(),
          String.t(),
          String.t(),
          ExVcom.Model.TicketCommentCreatePayload.t(),
          keyword()
        ) :: {:ok, nil} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_comments_comment_id_patch(
        connection,
        ticket_id,
        comment_id,
        ticket_comment_create_payload,
        _opts \\ []
      ) do
    %{}
    |> method(:patch)
    |> url("/tickets/#{ticket_id}/comments/#{comment_id}")
    |> add_param(:body, :body, ticket_comment_create_payload)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {204, false}
    ])
  end

  @doc """
  Get all comments

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketCommentsResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_comments_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.TicketCommentsResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_comments_get(connection, ticket_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/tickets/#{ticket_id}/comments")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TicketCommentsResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  Create a comment

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - ticket_comment_create_payload (TicketCommentCreatePayload): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketCommentCreateResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_comments_post(
          Tesla.Env.client(),
          String.t(),
          ExVcom.Model.TicketCommentCreatePayload.t(),
          keyword()
        ) :: {:ok, ExVcom.Model.TicketCommentCreateResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_comments_post(
        connection,
        ticket_id,
        ticket_comment_create_payload,
        _opts \\ []
      ) do
    %{}
    |> method(:post)
    |> url("/tickets/#{ticket_id}/comments")
    |> add_param(:body, :body, ticket_comment_create_payload)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {201, %ExVcom.Model.TicketCommentCreateResponse{}}
    ])
  end

  @doc """
  Delete a ticket

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, nil} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_delete(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_delete(connection, ticket_id, _opts \\ []) do
    %{}
    |> method(:delete)
    |> url("/tickets/#{ticket_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {204, false},
      {403, false}
    ])
  end

  @doc """
  Returns detailed information about a single ticket.

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.TicketResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_get(connection, ticket_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/tickets/#{ticket_id}")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TicketResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, ExVcom.Model.TicketHistoryResponse.t} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_histories_get(Tesla.Env.client(), String.t(), keyword()) ::
          {:ok, nil} | {:ok, ExVcom.Model.TicketHistoryResponse.t()} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_histories_get(connection, ticket_id, _opts \\ []) do
    %{}
    |> method(:get)
    |> url("/tickets/#{ticket_id}/histories")
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {200, %ExVcom.Model.TicketHistoryResponse{}},
      {400, false},
      {401, false},
      {403, false},
      {404, false},
      {429, false},
      {500, false}
    ])
  end

  @doc """
  Update a ticket

  ## Parameters

  - connection (ExVcom.Connection): Connection to server
  - ticket_id (String.t): 
  - ticket_update_payload (TicketUpdatePayload): 
  - opts (KeywordList): [optional] Optional parameters
  ## Returns

  {:ok, nil} on success
  {:error, Tesla.Env.t} on failure
  """
  @spec tickets_ticket_id_patch(
          Tesla.Env.client(),
          String.t(),
          ExVcom.Model.TicketUpdatePayload.t(),
          keyword()
        ) :: {:ok, nil} | {:error, Tesla.Env.t()}
  def tickets_ticket_id_patch(connection, ticket_id, ticket_update_payload, _opts \\ []) do
    %{}
    |> method(:patch)
    |> url("/tickets/#{ticket_id}")
    |> add_param(:body, :body, ticket_update_payload)
    |> Enum.into([])
    |> (&Connection.request(connection, &1)).()
    |> evaluate_response([
      {204, false}
    ])
  end
end