openapi: 3.0.0
info:
  title: home-iot-api
  description: The API for the EatBacon IOT project
  version: 1.0.0
servers:
- url: https://virtserver.swaggerhub.com/datamatsoftwaredevel/datamat_cloudx/1.0.0
  description: SwaggerHub API Auto Mocking
paths:
  /devices:
    get:
      tags:
      - Device
      description: returns all registered devices
      operationId: getDevices
      parameters:
      - name: skip
        in: query
        description: number of records to skip
        required: false
        schema:
          type: integer
          format: int32
      - name: limit
        in: query
        description: max number of records to return
        required: false
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: All the devices
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                  format: uri
                  example: http://10.0.0.225:8080
    post:
      tags:
      - Device
      operationId: register
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceRegistrationInfo'
      responses:
        "200":
          description: successfully registered device
  /lighting/dimmers/{deviceId}/{value}:
    post:
      tags:
      - Z-Wave
      operationId: setDimmer
      parameters:
      - name: deviceId
        in: path
        required: true
        schema:
          type: string
      - name: value
        in: path
        required: true
        schema:
          maximum: 100
          minimum: 0
          type: integer
          format: int32
      responses:
        "200":
          description: response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
      x-swagger-router-controller: ZWave
  /lighting/dimmers/{deviceId}/{value}/timer/{timeunit}:
    post:
      tags:
      - Z-Wave
      description: sets a dimmer to a specific value on a timer
      operationId: setDimmerTimer
      parameters:
      - name: deviceId
        in: path
        required: true
        schema:
          type: string
      - name: value
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: timeunit
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: units
        in: query
        required: false
        schema:
          type: string
          default: milliseconds
          enum:
          - seconds
          - minutes
          - milliseconds
      responses:
        "200":
          description: response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
      x-swagger-router-controller: ZWave
  /lighting/switches/{deviceId}:
    get:
      tags:
      - Z-Wave
      operationId: getSwitchState
      parameters:
      - name: deviceId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceState'
      x-swagger-router-controller: ZWave
  /lighting/switches/{deviceId}/{value}:
    post:
      tags:
      - Z-Wave
      operationId: setSwitch
      parameters:
      - name: deviceId
        in: path
        required: true
        schema:
          type: string
      - name: value
        in: path
        required: true
        schema:
          type: string
          enum:
          - "true"
          - "false"
      responses:
        "200":
          description: response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
      x-swagger-router-controller: ZWave
  /lighting/switches/{deviceId}/{value}/timer/{minutes}:
    post:
      tags:
      - Z-Wave
      description: sets a switch to a specific value on a timer
      operationId: setSwitchTimer
      parameters:
      - name: deviceId
        in: path
        required: true
        schema:
          type: string
      - name: value
        in: path
        required: true
        schema:
          type: string
          enum:
          - "true"
          - "false"
      - name: minutes
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
      x-swagger-router-controller: ZWave
  /lightingSummary:
    get:
      tags:
      - Z-Wave
      operationId: getLightingSummary
      responses:
        "200":
          description: ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LightingSummary'
      x-swagger-router-controller: ZWave
  /temperature:
    get:
      tags:
      - Environment
      operationId: temperatureSummary
      responses:
        "200":
          description: ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemperatureSummary'
      x-swagger-router-controller: Environment
  /temperature/forecast/{days}:
    get:
      tags:
      - Environment
      operationId: getForecast
      parameters:
      - name: days
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        "200":
          description: the forecast
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForecastResponse'
      x-swagger-router-controller: Environment
  /temperature/{zoneId}:
    get:
      tags:
      - Environment
      operationId: getZoneTemperature
      parameters:
      - name: zoneId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: Zone temperature
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemperatueZoneStatus'
      x-swagger-router-controller: Environment
  /temperature/{zoneId}/heater:
    get:
      tags:
      - Environment
      description: gets the state of the heater
      operationId: getHeaterState
      parameters:
      - name: zoneId
        in: path
        required: true
        schema:
          type: string
      responses:
        "200":
          description: heater state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HeaterState'
      x-swagger-router-controller: Environment
  /temperature/{zoneId}/heater/{state}:
    post:
      tags:
      - Environment
      description: turns the heater on or off
      operationId: setHeaterState
      parameters:
      - name: zoneId
        in: path
        required: true
        schema:
          type: string
      - name: state
        in: path
        required: true
        schema:
          type: string
          enum:
          - "false"
          - "true"
      responses:
        "200":
          description: Status of the operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
      x-swagger-router-controller: Environment
  /zones:
    get:
      tags:
      - Zones
      operationId: getZones
      responses:
        "200":
          description: ok
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
      x-swagger-router-controller: Zones
  /zones/{zoneId}/quiet:
    get:
      tags:
      - Zones
      operationId: quietZone
      parameters:
      - name: zoneId
        in: path
        required: true
        schema:
          type: string
          enum:
          - basement
          - first-floor
          - second-floor
      responses:
        "200":
          description: ok
      x-swagger-router-controller: Zones
components:
  schemas:
    LightingSummary:
      type: object
      properties:
        zones:
          type: array
          items:
            $ref: '#/components/schemas/LightingZone'
        zoneStatus:
          type: array
          items:
            $ref: '#/components/schemas/LightingZoneStatus'
      description: ok
    LightingZone:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        deviceId:
          type: integer
          format: int32
        deviceType:
          type: string
          enum:
          - dimmer
          - switch
        zone:
          type: string
    LightingZoneStatus:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        lastUpdate:
          type: string
          format: date-time
        level:
          type: integer
          format: int32
      description: the status of the lighting zone.
    TemperatureSummary:
      type: object
      properties:
        zones:
          type: array
          items:
            $ref: '#/components/schemas/TemperatureZone'
        zoneStatus:
          type: array
          items:
            $ref: '#/components/schemas/TemperatueZoneStatus'
      description: ok
    TemperatureZone:
      required:
      - id
      - name
      type: object
      properties:
        id:
          type: integer
          description: the unique identifier for the zone
          format: int32
        name:
          type: string
        inputPosition:
          type: integer
          format: int32
        outputPosition:
          type: integer
          format: int32
        zone:
          type: string
      description: a single temperature zone
    TemperatueZoneStatus:
      required:
      - id
      - timestamp
      - value
      type: object
      properties:
        id:
          type: string
          description: the unique identifier for the zone
        name:
          type: string
          description: the name of the zone
        value:
          type: number
          description: the temperature in the zone
          format: double
        units:
          type: string
          description: the temperature units
          default: fahrenheit
          enum:
          - celsius
          - fahrenheit
        timestamp:
          type: string
          description: the timestamp when the temperature was measured
          format: date-time
      description: status of a single zone
    ApiResponse:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
          example: everything is ok
    HeaterState:
      type: object
      properties:
        id:
          type: string
        state:
          type: string
    DeviceState:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        lastUpdate:
          type: string
          format: date-time
        level:
          type: integer
          format: int32
    ForecastResponse:
      type: object
      properties:
        city:
          $ref: '#/components/schemas/City'
        values:
          type: array
          items:
            $ref: '#/components/schemas/Forecast'
    Forecast:
      type: object
      properties:
        date:
          type: string
          format: date-time
        pressure:
          type: number
          format: double
        humidity:
          type: integer
          format: int32
        windSpeed:
          type: number
          format: double
        clouds:
          type: integer
          format: int32
        temperature:
          $ref: '#/components/schemas/ForecastTemperature'
        weather:
          $ref: '#/components/schemas/WeatherForecast'
    City:
      type: object
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        lat:
          type: number
          format: double
        lon:
          type: number
          format: double
        country:
          type: string
    ForecastTemperature:
      type: object
      properties:
        low:
          type: number
          format: double
        high:
          type: number
          format: double
        morning:
          type: number
          format: double
        day:
          type: number
          format: double
        evening:
          type: number
          format: double
        night:
          type: number
          format: double
    WeatherForecast:
      type: object
      properties:
        summary:
          type: string
        description:
          type: string
        icon:
          type: string
    DeviceRegistrationInfo:
      type: object
      properties:
        uri:
          type: string
          format: uri
          example: http://10.0.0.220:8080
        id:
          type: string
          format: uuid
          example: 0729a580-2240-11e6-9eb5-0002a5d5c51b
