asyncapi: 2.0.0-rc2
info:
  title: Streetlights API
  version: 1.0.0
  description: "The Smartylighting Streetlights API allows you to remotely manage the city lights.\n\n### Check out its awesome features:\n\n* Turn a specific streetlight on/off \U0001F303\n* Dim a specific streetlight \U0001F60E\n* Receive real-time information about environmental lighting conditions \U0001F4C8\n"
  license:
    name: Apache 2.0
    url: 'https://www.apache.org/licenses/LICENSE-2.0'
servers:
  default:
    url: 'api.streetlights.smartylighting.com:{port}'
    description: Test broker
    variables:
      port:
        description: Secure connection (TLS) is available through port 8883.
        default: '1883'
        enum:
          - '1883'
          - '8883'
    protocol: mqtt
    security:
      - apiKey: []
components:
  messages:
    lightMeasured:
      summary: >-
        Inform about environmental lighting conditions for a particular
        streetlight.
      payload:
        $ref: '#/components/schemas/lightMeasuredPayload'
    turnOnOff:
      summary: Command a particular streetlight to turn the lights on or off.
      payload:
        $ref: '#/components/schemas/turnOnOffPayload'
    dimLight:
      summary: Command a particular streetlight to dim the lights.
      payload:
        $ref: '#/components/schemas/dimLightPayload'
  schemas:
    lightMeasuredPayload:
      type: object
      properties:
        lumens:
          type: integer
          minimum: 0
          description: Light intensity measured in lumens.
        sentAt:
          $ref: '#/components/schemas/sentAt'
    turnOnOffPayload:
      type: object
      properties:
        command:
          type: string
          enum:
            - 'on'
            - 'off'
          description: Whether to turn on or off the light.
        sentAt:
          $ref: '#/components/schemas/sentAt'
    dimLightPayload:
      type: object
      properties:
        percentage:
          type: integer
          description: Percentage to which the light should be dimmed to.
          minimum: 0
          maximum: 100
        sentAt:
          $ref: '#/components/schemas/sentAt'
    sentAt:
      type: string
      format: date-time
      description: Date and time when the message was sent.
  securitySchemes:
    apiKey:
      type: apiKey
      in: user
      description: Provide your API key as the user and leave the password empty.
  parameters:
    streetlightId:
      name: streetlightId
      description: The ID of the streetlight.
      schema:
        type: string
channels:
  'smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured':
    parameters:
      streetlightId:
        $ref: '#/components/parameters/streetlightId'
    publish:
      message:
        $ref: '#/components/messages/lightMeasured'
  'smartylighting/streetlights/1/0/action/{streetlightId}/turn/on':
    parameters:
      streetlightId:
        $ref: '#/components/parameters/streetlightId'
    subscribe:
      message:
        $ref: '#/components/messages/turnOnOff'
  'smartylighting/streetlights/1/0/action/{streetlightId}/turn/off':
    parameters:
      streetlightId:
        $ref: '#/components/parameters/streetlightId'
    subscribe:
      message:
        $ref: '#/components/messages/turnOnOff'
  'smartylighting/streetlights/1/0/action/{streetlightId}/dim':
    parameters:
      streetlightId:
        $ref: '#/components/parameters/streetlightId'
    subscribe:
      message:
        $ref: '#/components/messages/dimLight'
