diff --git a/CODEOWNERS b/CODEOWNERS
index e0793751e811b..1650ed102365f 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -20,6 +20,7 @@
/bundles/org.openhab.binding.amazondashbutton/ @OLibutzki
/bundles/org.openhab.binding.amazonechocontrol/ @mgeramb
/bundles/org.openhab.binding.ambientweather/ @mhilbush
+/bundles/org.openhab.binding.amplipi/ @kaikreuzer
/bundles/org.openhab.binding.androiddebugbridge/ @GiviMAD
/bundles/org.openhab.binding.astro/ @gerrieg
/bundles/org.openhab.binding.atlona/ @tmrobert8
diff --git a/bom/openhab-addons/pom.xml b/bom/openhab-addons/pom.xml
index 4deeacaa4e8f5..58f7427db9212 100644
--- a/bom/openhab-addons/pom.xml
+++ b/bom/openhab-addons/pom.xml
@@ -91,6 +91,11 @@
org.openhab.binding.ambientweather
${project.version}
+
+ org.openhab.addons.bundles
+ org.openhab.binding.amplipi
+ ${project.version}
+
org.openhab.addons.bundles
org.openhab.binding.androiddebugbridge
diff --git a/bundles/org.openhab.binding.amplipi/NOTICE b/bundles/org.openhab.binding.amplipi/NOTICE
new file mode 100644
index 0000000000000..38d625e349232
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/NOTICE
@@ -0,0 +1,13 @@
+This content is produced and maintained by the openHAB project.
+
+* Project home: https://www.openhab.org
+
+== Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Public License 2.0 which is available at
+https://www.eclipse.org/legal/epl-2.0/.
+
+== Source Code
+
+https://github.com/openhab/openhab-addons
diff --git a/bundles/org.openhab.binding.amplipi/README.md b/bundles/org.openhab.binding.amplipi/README.md
new file mode 100644
index 0000000000000..ec341b008bdc0
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/README.md
@@ -0,0 +1,91 @@
+# AmpliPi Binding
+
+This binding supports the multi room audio system [AmpliPi](http://www.amplipi.com/) from [MicroNova](http://www.micro-nova.com/).
+
+
+## Supported Things
+
+The AmpliPi itself is modeled as a Bridge of type `controller`.
+Every available zone as well as group is managed as an individual Thing of type `zone` resp. `group`.
+
+## Discovery
+
+Once the AmpliPi announces itself through mDNS (still a pending feature), it will be automatically discovered on the network.
+
+As soon as the AmpliPi is online, its zones and groups are automatically retrieved and added as Things to the Inbox.
+
+## Thing Configuration
+
+The `controller` Bridge has two configuration parameters:
+
+| Parameter | Required | Description |
+|-----------------|----------|----------------------------------------------------------------------------------------------------|
+| hostname | yes | The hostname or IP address of the AmpliPi on the network |
+| refreshInterval | no | The time to wait between two polling requests for receiving state updates. Defaults to 10 seconds. |
+
+Both the `zone` and `group` Things only require a single configuration parameter `id`, which corresponds to their id on the AmpliPi.
+
+## Channels
+
+These are the channels of the `controller` Bridge:
+
+| Channel | Type | Description |
+|----------|--------|------------------------------------------------------------------------------------------------------|
+| preset | Number | Allows setting a pre-configured preset. The available options are dynamically read from the AmpliPi. |
+| input1 | String | The selected input of source 1 |
+| input2 | String | The selected input of source 2 |
+| input3 | String | The selected input of source 3 |
+| input4 | String | The selected input of source 4 |
+
+The `zone` and `group` Things have the following channels:
+
+| Channel | Type | Description |
+|----------|--------|----------------------------------------------------|
+| volume | Dimmer | The volume of the zone/group |
+| mute | Switch | Mutes the zone/group |
+| source | Number | The source (1-4) that this zone/group is playing |
+
+
+## Full Example
+
+amplipi.things:
+
+```
+Bridge amplipi:controller:1 "My AmpliPi" [ hostname="amplipi.local" ] {
+ zone zone2 "Living Room" [ id=1 ]
+}
+```
+
+amplipi.items:
+
+```
+Number Preset "Preset" { channel="amplipi:controller:1:preset" }
+String Input1 "Input 1" { channel="amplipi:controller:1:input1" }
+String Input2 "Input 2" { channel="amplipi:controller:1:input2" }
+String Input3 "Input 3" { channel="amplipi:controller:1:input3" }
+String Input4 "Input 4" { channel="amplipi:controller:1:input4" }
+
+Dimmer VolumeZ2 "Volume Zone2" { channel="amplipi:zone:1:zone2:volume" }
+Switch MuteZ2 "Mute Zone2" { channel="amplipi:zone:1:zone2::mute" }
+Number SourceZ2 "Source Zone2" { channel="amplipi:zone:1:zone2::source" }
+```
+
+amplipi.sitemap:
+
+```
+sitemap amplipi label="Main Menu"
+{
+ Frame label="AmpliPi" {
+ Selection item=Preset
+ Selection item=Input1
+ Selection item=Input2
+ Selection item=Input3
+ Selection item=Input4
+ }
+ Frame label="Living Room Zone" {
+ Slider item=VolumeZ2 label="Volume Zone 1 [%.1f %%]"
+ Switch item=MuteZ2
+ Selection item=SourceZ2
+ }
+}
+```
diff --git a/bundles/org.openhab.binding.amplipi/amplipi-api.yml b/bundles/org.openhab.binding.amplipi/amplipi-api.yml
new file mode 100644
index 0000000000000..fe1731dfac0ba
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/amplipi-api.yml
@@ -0,0 +1,4439 @@
+openapi: 3.0.2
+info:
+ title: AmpliPi
+ description: | # The links in the description below are tested to work with redoc and may not be portable
+ This is the AmpliPi home audio system's control server.
+
+ # Configuration
+
+ This web interface allows you to control and configure your AmpliPi device.
+ At the moment the API is the only way to configure the AmpliPi.
+
+ ## Try it out!
+
+ __Using this web interface to test API commands:__
+
+ 1. Go to an API request
+ 1. Pick one of the examples
+ 2. Edit it
+ 3. Press try button, it will send an API command/request to the AmpliPi
+
+ __Try using the get status:__
+
+ 1. Go to [Status -> Get Status](#get-/api/)
+ 2. Click the Try button, you will see a response below with the full status/config of the AmpliPi controller
+
+ __Try creating a new group:__
+
+ 1. Go to [Group -> Create Group](#post-/api/group)
+ 2. Click Example
+ 3. Edit the zones and group name
+ 4. Click the try button, you will see a response with the newly created group
+
+ __Here are some other things that you might want to change:__
+
+ - [Stream -> Create new stream](#post-/api/stream)
+ - [Zone -> Update Zone](#patch-/api/zones/-zid-) (to change the zone name)
+ - [Preset -> Create preset](#post-/api/preset) (Have a look at the model to see what can be added here)
+
+ # More Info
+
+ Check out all of the different things you can do with this API:
+
+ - [Status](#tag--status)
+ - [Source](#tag--source)
+ - [Zone](#tag--zone)
+ - [Group](#tag--group)
+ - [Stream](#tag--stream)
+ - [Preset](#tag--preset)
+
+ # OpenAPI
+
+ This API is documented using the OpenAPI specification
+
+ version: '1.0'
+ contact:
+ email: info@micro-nova.com
+ name: Micronova
+ url: http://micro-nova.com
+ license:
+ name: GPL
+ url: /license
+servers:
+- url: ''
+ description: AmpliPi Controller
+paths:
+ /api:
+ get:
+ tags:
+ - status
+ summary: Get Status
+ description: 'Get the system status and configuration '
+ operationId: get_status_api_get
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ /api/:
+ get:
+ tags:
+ - status
+ summary: Get Status
+ description: 'Get the system status and configuration '
+ operationId: get_status_api__get
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ /api/sources:
+ get:
+ tags:
+ - source
+ summary: Get Sources
+ description: 'Get all sources '
+ operationId: get_sources_api_sources_get
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ title: Response Get Sources Api Sources Get
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ $ref: '#/components/schemas/Source'
+ /api/sources/{sid}:
+ get:
+ tags:
+ - source
+ summary: Get Source
+ description: 'Get Source with id=**sid** '
+ operationId: get_source_api_sources__sid__get
+ parameters:
+ - description: Source ID
+ required: true
+ schema:
+ title: Sid
+ maximum: 3.0
+ minimum: 0.0
+ type: integer
+ description: Source ID
+ name: sid
+ in: path
+ examples:
+ '1':
+ value: 0
+ summary: '1'
+ '2':
+ value: 1
+ summary: '2'
+ '3':
+ value: 2
+ summary: '3'
+ '4':
+ value: 3
+ summary: '4'
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Source'
+ examples:
+ stream connected:
+ value:
+ id: 1
+ name: '1'
+ input: stream=1009
+ nothing connected:
+ value:
+ id: 2
+ name: '2'
+ input: ''
+ rca connected:
+ value:
+ id: 3
+ name: '3'
+ input: local
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ patch:
+ tags:
+ - source
+ summary: Set Source
+ description: 'Update a source''s configuration (source=**sid**) '
+ operationId: set_source_api_sources__sid__patch
+ parameters:
+ - description: Source ID
+ required: true
+ schema:
+ title: Sid
+ maximum: 3.0
+ minimum: 0.0
+ type: integer
+ description: Source ID
+ name: sid
+ in: path
+ examples:
+ '1':
+ value: 0
+ summary: '1'
+ '2':
+ value: 1
+ summary: '2'
+ '3':
+ value: 2
+ summary: '3'
+ '4':
+ value: 3
+ summary: '4'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/SourceUpdate'
+ examples:
+ Update Input to RCA input:
+ value:
+ input: local
+ Update name:
+ value:
+ name: J2
+ Update Input to Matt and Kim Radio:
+ value:
+ input: stream=10001
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/zones:
+ get:
+ tags:
+ - zone
+ summary: Get Zones
+ description: 'Get all zones '
+ operationId: get_zones_api_zones_get
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ title: Response Get Zones Api Zones Get
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ $ref: '#/components/schemas/Zone'
+ /api/zones/{zid}:
+ get:
+ tags:
+ - zone
+ summary: Get Zone
+ description: 'Get Zone with id=**zid** '
+ operationId: get_zone_api_zones__zid__get
+ parameters:
+ - description: Zone ID
+ required: true
+ schema:
+ title: Zid
+ maximum: 35.0
+ minimum: 0.0
+ type: integer
+ description: Zone ID
+ name: zid
+ in: path
+ examples:
+ Local:
+ value: 0
+ summary: Local
+ Office:
+ value: 1
+ summary: Office
+ Laundry Room:
+ value: 2
+ summary: Laundry Room
+ Dining Room:
+ value: 3
+ summary: Dining Room
+ BROKEN:
+ value: 4
+ summary: BROKEN
+ Guest Bedroom:
+ value: 5
+ summary: Guest Bedroom
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Zone'
+ examples:
+ Living Room:
+ value:
+ name: Living Room
+ source_id: 1
+ mute: false
+ vol: -25
+ disabled: false
+ Dining Room:
+ value:
+ name: Dining Room
+ source_id: 2
+ mute: true
+ vol: -65
+ disabled: false
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ patch:
+ tags:
+ - zone
+ summary: Set Zone
+ description: 'Update a zone''s configuration (zone=**zid**) '
+ operationId: set_zone_api_zones__zid__patch
+ parameters:
+ - description: Zone ID
+ required: true
+ schema:
+ title: Zid
+ maximum: 35.0
+ minimum: 0.0
+ type: integer
+ description: Zone ID
+ name: zid
+ in: path
+ examples:
+ Local:
+ value: 0
+ summary: Local
+ Office:
+ value: 1
+ summary: Office
+ Laundry Room:
+ value: 2
+ summary: Laundry Room
+ Dining Room:
+ value: 3
+ summary: Dining Room
+ BROKEN:
+ value: 4
+ summary: BROKEN
+ Guest Bedroom:
+ value: 5
+ summary: Guest Bedroom
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ZoneUpdate'
+ examples:
+ Change Name:
+ value:
+ name: Bedroom
+ Change audio source:
+ value:
+ source-id: 3
+ Increase Volume:
+ value:
+ vol: -45
+ Mute:
+ value:
+ mute: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/group:
+ post:
+ tags:
+ - group
+ summary: Create Group
+ description: 'Create a new grouping of zones '
+ operationId: create_group_api_group_post
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Group'
+ examples:
+ Upstairs Group:
+ value:
+ name: Upstairs
+ zones:
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ Downstairs Group:
+ value:
+ name: Downstairs
+ zones:
+ - 6
+ - 7
+ - 8
+ - 9
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Group'
+ examples:
+ Upstairs Group:
+ value:
+ id: 101
+ name: Upstairs
+ zones:
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ vol_delta: -65
+ Downstairs Group:
+ value:
+ id: 102
+ name: Downstairs
+ zones:
+ - 6
+ - 7
+ - 8
+ - 9
+ vol_delta: -30
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/groups:
+ get:
+ tags:
+ - group
+ summary: Get Groups
+ description: 'Get all groups '
+ operationId: get_groups_api_groups_get
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ title: Response Get Groups Api Groups Get
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ $ref: '#/components/schemas/Group'
+ /api/groups/{gid}:
+ get:
+ tags:
+ - group
+ summary: Get Group
+ description: 'Get Group with id=**gid** '
+ operationId: get_group_api_groups__gid__get
+ parameters:
+ - description: Stream ID
+ required: true
+ schema:
+ title: Gid
+ minimum: 0.0
+ type: integer
+ description: Stream ID
+ name: gid
+ in: path
+ examples:
+ Whole House:
+ value: 0
+ summary: Whole House
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Group'
+ examples:
+ Upstairs Group:
+ value:
+ id: 101
+ name: Upstairs
+ zones:
+ - 1
+ - 2
+ - 3
+ - 4
+ - 5
+ vol_delta: -65
+ Downstairs Group:
+ value:
+ id: 102
+ name: Downstairs
+ zones:
+ - 6
+ - 7
+ - 8
+ - 9
+ vol_delta: -30
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ delete:
+ tags:
+ - group
+ summary: Delete Group
+ description: 'Delete a group (group=**gid**) '
+ operationId: delete_group_api_groups__gid__delete
+ parameters:
+ - description: Stream ID
+ required: true
+ schema:
+ title: Gid
+ minimum: 0.0
+ type: integer
+ description: Stream ID
+ name: gid
+ in: path
+ examples:
+ Whole House:
+ value: 0
+ summary: Whole House
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ patch:
+ tags:
+ - group
+ summary: Set Group
+ description: 'Update a groups''s configuration (group=**gid**) '
+ operationId: set_group_api_groups__gid__patch
+ parameters:
+ - description: Stream ID
+ required: true
+ schema:
+ title: Gid
+ minimum: 0.0
+ type: integer
+ description: Stream ID
+ name: gid
+ in: path
+ examples:
+ Whole House:
+ value: 0
+ summary: Whole House
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/GroupUpdate'
+ examples:
+ Change Name:
+ value:
+ name: Upstairs
+ Change audio source:
+ value:
+ source-id: 3
+ Increase Volume:
+ value:
+ vol_delta: -45
+ Mute:
+ value:
+ mute: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/stream:
+ post:
+ tags:
+ - stream
+ summary: Create Stream
+ description: 'Create a new audio stream '
+ operationId: create_stream_api_stream_post
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Stream'
+ examples:
+ Add Beatles Internet Radio Station:
+ value:
+ logo: http://www.beatlesradio.com/content/images/thumbs/0000587.gif
+ name: Beatles Radio
+ type: internetradio
+ url: http://www.beatlesradio.com:8000/stream/1/
+ Add Classical KING Internet Radio Station:
+ value:
+ logo: https://i.iheart.com/v3/re/assets/images/7bcfd87a-de3e-47d0-b896-be0ed38c9d74.png
+ name: Classical KING FM 98.1
+ type: internetradio
+ url: http://classicalking.streamguys1.com/king-fm-aac-iheart
+ Add Generic DLNA:
+ value:
+ name: Replace this text with a name you like!
+ type: dlna
+ Add Groove Salad Internet Radio Station:
+ value:
+ logo: https://somafm.com/img3/groovesalad-200.jpg
+ name: Groove Salad
+ type: internetradio
+ url: http://ice2.somafm.com/groovesalad-16-aac
+ Add KEXP Internet Radio Station:
+ value:
+ logo: https://i.iheart.com/v3/re/new_assets/cc4e0a17-5233-4e4b-9b6b-7799904f78ea
+ name: KEXP 90.3
+ type: internetradio
+ url: http://live-aacplus-64.kexp.org/kexp64.aac
+ Add Matt and Kim Pandora Station:
+ value:
+ name: Matt and Kim Radio
+ password: s79sDDkjf
+ station: '4473713754798410236'
+ type: pandora
+ user: test@micro-nova.com
+ Add MicroNova Spotify:
+ value:
+ name: MicroNova Spotify
+ type: spotify
+ Add Micronova Airplay:
+ value:
+ name: Micronova AP
+ type: shairport
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Stream'
+ examples:
+ Regina Spektor Radio (playing):
+ value:
+ id: 90890
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ Matt and Kim Radio (disconnected):
+ value:
+ id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ Shairport (connected):
+ value:
+ id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ Shairport (disconnected):
+ value:
+ id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/streams:
+ get:
+ tags:
+ - stream
+ summary: Get Streams
+ description: 'Get all streams '
+ operationId: get_streams_api_streams_get
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ title: Response Get Streams Api Streams Get
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ $ref: '#/components/schemas/Stream'
+ /api/streams/{sid}:
+ get:
+ tags:
+ - stream
+ summary: Get Stream
+ description: 'Get Stream with id=**sid** '
+ operationId: get_stream_api_streams__sid__get
+ parameters:
+ - description: Stream ID
+ required: true
+ schema:
+ title: Sid
+ minimum: 0.0
+ type: integer
+ description: Stream ID
+ name: sid
+ in: path
+ examples:
+ Regina Spektor Radio:
+ value: 90890
+ summary: Regina Spektor Radio
+ Matt and Kim Radio:
+ value: 90891
+ summary: Matt and Kim Radio
+ Pink Radio:
+ value: 90892
+ summary: Pink Radio
+ Jason's iPhone:
+ value: 44590
+ summary: Jason's iPhone
+ Marc's iPhone:
+ value: 4893
+ summary: Marc's iPhone
+ Rnay:
+ value: 4894
+ summary: Rnay
+ Jeremy's Spotify:
+ value: 4895
+ summary: Jeremy's Spotify
+ Lincoln's Spotify:
+ value: 4896
+ summary: Lincoln's Spotify
+ Indie Pop Rocks:
+ value: 90893
+ summary: Indie Pop Rocks
+ Groove Salad:
+ value: 90894
+ summary: Groove Salad
+ SP_TEST:
+ value: 90895
+ summary: SP_TEST
+ Trial_DLNA:
+ value: 90896
+ summary: Trial_DLNA
+ T2:
+ value: 90897
+ summary: T2
+ T3:
+ value: 90898
+ summary: T3
+ T2.5:
+ value: 90899
+ summary: T2.5
+ Jeremy's DLNA:
+ value: 90900
+ summary: Jeremy's DLNA
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Stream'
+ examples:
+ Regina Spektor Radio (playing):
+ value:
+ id: 90890
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ Matt and Kim Radio (disconnected):
+ value:
+ id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ Shairport (connected):
+ value:
+ id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ Shairport (disconnected):
+ value:
+ id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ delete:
+ tags:
+ - stream
+ summary: Delete Stream
+ description: 'Delete a stream '
+ operationId: delete_stream_api_streams__sid__delete
+ parameters:
+ - description: Stream ID
+ required: true
+ schema:
+ title: Sid
+ minimum: 0.0
+ type: integer
+ description: Stream ID
+ name: sid
+ in: path
+ examples:
+ Regina Spektor Radio:
+ value: 90890
+ summary: Regina Spektor Radio
+ Matt and Kim Radio:
+ value: 90891
+ summary: Matt and Kim Radio
+ Pink Radio:
+ value: 90892
+ summary: Pink Radio
+ Jason's iPhone:
+ value: 44590
+ summary: Jason's iPhone
+ Marc's iPhone:
+ value: 4893
+ summary: Marc's iPhone
+ Rnay:
+ value: 4894
+ summary: Rnay
+ Jeremy's Spotify:
+ value: 4895
+ summary: Jeremy's Spotify
+ Lincoln's Spotify:
+ value: 4896
+ summary: Lincoln's Spotify
+ Indie Pop Rocks:
+ value: 90893
+ summary: Indie Pop Rocks
+ Groove Salad:
+ value: 90894
+ summary: Groove Salad
+ SP_TEST:
+ value: 90895
+ summary: SP_TEST
+ Trial_DLNA:
+ value: 90896
+ summary: Trial_DLNA
+ T2:
+ value: 90897
+ summary: T2
+ T3:
+ value: 90898
+ summary: T3
+ T2.5:
+ value: 90899
+ summary: T2.5
+ Jeremy's DLNA:
+ value: 90900
+ summary: Jeremy's DLNA
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ patch:
+ tags:
+ - stream
+ summary: Set Stream
+ description: 'Update a stream''s configuration (stream=**sid**) '
+ operationId: set_stream_api_streams__sid__patch
+ parameters:
+ - description: Stream ID
+ required: true
+ schema:
+ title: Sid
+ minimum: 0.0
+ type: integer
+ description: Stream ID
+ name: sid
+ in: path
+ examples:
+ Regina Spektor Radio:
+ value: 90890
+ summary: Regina Spektor Radio
+ Matt and Kim Radio:
+ value: 90891
+ summary: Matt and Kim Radio
+ Pink Radio:
+ value: 90892
+ summary: Pink Radio
+ Jason's iPhone:
+ value: 44590
+ summary: Jason's iPhone
+ Marc's iPhone:
+ value: 4893
+ summary: Marc's iPhone
+ Rnay:
+ value: 4894
+ summary: Rnay
+ Jeremy's Spotify:
+ value: 4895
+ summary: Jeremy's Spotify
+ Lincoln's Spotify:
+ value: 4896
+ summary: Lincoln's Spotify
+ Indie Pop Rocks:
+ value: 90893
+ summary: Indie Pop Rocks
+ Groove Salad:
+ value: 90894
+ summary: Groove Salad
+ SP_TEST:
+ value: 90895
+ summary: SP_TEST
+ Trial_DLNA:
+ value: 90896
+ summary: Trial_DLNA
+ T2:
+ value: 90897
+ summary: T2
+ T3:
+ value: 90898
+ summary: T3
+ T2.5:
+ value: 90899
+ summary: T2.5
+ Jeremy's DLNA:
+ value: 90900
+ summary: Jeremy's DLNA
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/StreamUpdate'
+ examples:
+ Change account info:
+ value:
+ password: sd9sk3k30
+ user: test@micro-nova.com
+ Change name:
+ value:
+ name: Matt and Kim Radio
+ Change pandora radio station:
+ value:
+ station: 0982034049300
+ Upgrade groove salad stream quality:
+ value:
+ url: http://ice2.somafm.com/groovesalad-64-aac
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/streams/{sid}/station={station}:
+ post:
+ tags:
+ - stream
+ summary: Change Station
+ description: 'Change station on a pandora stream (stream=**sid**) '
+ operationId: change_station_api_streams__sid__station__station__post
+ parameters:
+ - description: Stream ID
+ required: true
+ schema:
+ title: Sid
+ minimum: 0.0
+ type: integer
+ description: Stream ID
+ name: sid
+ in: path
+ - description: Number found on the end of a pandora url while playing the station,
+ ie 4610303469018478727 in https://www.pandora.com/station/play/4610303469018478727
+ required: true
+ schema:
+ title: Pandora Station ID
+ minimum: 0.0
+ type: integer
+ description: Number found on the end of a pandora url while playing the
+ station, ie 4610303469018478727 in https://www.pandora.com/station/play/4610303469018478727
+ name: station
+ in: path
+ examples:
+ Regina Spektor Radio:
+ value: 90890
+ summary: Regina Spektor Radio
+ Matt and Kim Radio:
+ value: 90891
+ summary: Matt and Kim Radio
+ Pink Radio:
+ value: 90892
+ summary: Pink Radio
+ Jason's iPhone:
+ value: 44590
+ summary: Jason's iPhone
+ Marc's iPhone:
+ value: 4893
+ summary: Marc's iPhone
+ Rnay:
+ value: 4894
+ summary: Rnay
+ Jeremy's Spotify:
+ value: 4895
+ summary: Jeremy's Spotify
+ Lincoln's Spotify:
+ value: 4896
+ summary: Lincoln's Spotify
+ Indie Pop Rocks:
+ value: 90893
+ summary: Indie Pop Rocks
+ Groove Salad:
+ value: 90894
+ summary: Groove Salad
+ SP_TEST:
+ value: 90895
+ summary: SP_TEST
+ Trial_DLNA:
+ value: 90896
+ summary: Trial_DLNA
+ T2:
+ value: 90897
+ summary: T2
+ T3:
+ value: 90898
+ summary: T3
+ T2.5:
+ value: 90899
+ summary: T2.5
+ Jeremy's DLNA:
+ value: 90900
+ summary: Jeremy's DLNA
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/streams/{sid}/{cmd}:
+ post:
+ tags:
+ - stream
+ summary: Exec Command
+ description: "Execute a comamnds on a stream (stream=**sid**).\n\n Command\
+ \ options:\n * Play Stream: **play**\n * Pause Stream: **pause**\n * Skip\
+ \ to next song: **next**\n * Stop Stream: **stop**\n * Like/Love Current\
+ \ Song: **love**\n * Ban Current Song (pandora only): **ban**\n * Shelve\
+ \ Current Song (pandora only): **shelve**\n\nCurrently only available with\
+ \ Pandora streams"
+ operationId: exec_command_api_streams__sid___cmd__post
+ parameters:
+ - description: Stream ID
+ required: true
+ schema:
+ title: Sid
+ minimum: 0.0
+ type: integer
+ description: Stream ID
+ name: sid
+ in: path
+ - required: true
+ schema:
+ $ref: '#/components/schemas/StreamCommand'
+ name: cmd
+ in: path
+ examples:
+ Regina Spektor Radio:
+ value: 90890
+ summary: Regina Spektor Radio
+ Matt and Kim Radio:
+ value: 90891
+ summary: Matt and Kim Radio
+ Pink Radio:
+ value: 90892
+ summary: Pink Radio
+ Jason's iPhone:
+ value: 44590
+ summary: Jason's iPhone
+ Marc's iPhone:
+ value: 4893
+ summary: Marc's iPhone
+ Rnay:
+ value: 4894
+ summary: Rnay
+ Jeremy's Spotify:
+ value: 4895
+ summary: Jeremy's Spotify
+ Lincoln's Spotify:
+ value: 4896
+ summary: Lincoln's Spotify
+ Indie Pop Rocks:
+ value: 90893
+ summary: Indie Pop Rocks
+ Groove Salad:
+ value: 90894
+ summary: Groove Salad
+ SP_TEST:
+ value: 90895
+ summary: SP_TEST
+ Trial_DLNA:
+ value: 90896
+ summary: Trial_DLNA
+ T2:
+ value: 90897
+ summary: T2
+ T3:
+ value: 90898
+ summary: T3
+ T2.5:
+ value: 90899
+ summary: T2.5
+ Jeremy's DLNA:
+ value: 90900
+ summary: Jeremy's DLNA
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/preset:
+ post:
+ tags:
+ - preset
+ summary: Create Preset
+ description: 'Create a new preset configuration '
+ operationId: create_preset_api_preset_post
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Preset'
+ examples:
+ Add Mute All:
+ value:
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ required: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Preset'
+ examples:
+ Mute All:
+ value:
+ id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/presets:
+ get:
+ tags:
+ - preset
+ summary: Get Presets
+ description: 'Get all presets '
+ operationId: get_presets_api_presets_get
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ title: Response Get Presets Api Presets Get
+ type: object
+ additionalProperties:
+ type: array
+ items:
+ $ref: '#/components/schemas/Preset'
+ /api/presets/{pid}:
+ get:
+ tags:
+ - preset
+ summary: Get Preset
+ description: 'Get Preset with id=**pid** '
+ operationId: get_preset_api_presets__pid__get
+ parameters:
+ - description: Preset ID
+ required: true
+ schema:
+ title: Pid
+ minimum: 0.0
+ type: integer
+ description: Preset ID
+ name: pid
+ in: path
+ examples:
+ Mute All:
+ value: 10000
+ summary: Mute All
+ Restore last config:
+ value: 9999
+ summary: Restore last config
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Preset'
+ examples:
+ Mute All:
+ value:
+ id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ delete:
+ tags:
+ - preset
+ summary: Delete Preset
+ description: 'Delete a preset '
+ operationId: delete_preset_api_presets__pid__delete
+ parameters:
+ - description: Preset ID
+ required: true
+ schema:
+ title: Pid
+ minimum: 0.0
+ type: integer
+ description: Preset ID
+ name: pid
+ in: path
+ examples:
+ Mute All:
+ value: 10000
+ summary: Mute All
+ Restore last config:
+ value: 9999
+ summary: Restore last config
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ patch:
+ tags:
+ - preset
+ summary: Set Preset
+ description: 'Update a preset''s configuration (preset=**pid**) '
+ operationId: set_preset_api_presets__pid__patch
+ parameters:
+ - description: Preset ID
+ required: true
+ schema:
+ title: Pid
+ minimum: 0.0
+ type: integer
+ description: Preset ID
+ name: pid
+ in: path
+ examples:
+ Mute All:
+ value: 10000
+ summary: Mute All
+ Restore last config:
+ value: 9999
+ summary: Restore last config
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PresetUpdate'
+ examples:
+ Only mute some:
+ value:
+ name: Mute Some
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 5
+ mute: true
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+ /api/presets/{pid}/load:
+ post:
+ tags:
+ - preset
+ summary: Load Preset
+ description: 'Load a preset configuration '
+ operationId: load_preset_api_presets__pid__load_post
+ parameters:
+ - description: Preset ID
+ required: true
+ schema:
+ title: Pid
+ minimum: 0.0
+ type: integer
+ description: Preset ID
+ name: pid
+ in: path
+ examples:
+ Mute All:
+ value: 10000
+ summary: Mute All
+ Restore last config:
+ value: 9999
+ summary: Restore last config
+ responses:
+ '200':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Status'
+ examples:
+ Status of Jason's AmpliPi:
+ value:
+ groups:
+ - id: 0
+ mute: false
+ name: Whole House
+ source_id: null
+ vol_delta: -44
+ zones:
+ - 0
+ - 1
+ - 2
+ - 3
+ - 5
+ - 6
+ - 7
+ - 8
+ - 9
+ - 10
+ - 11
+ - id: 1
+ mute: true
+ name: KitchLivDining
+ source_id: 0
+ vol_delta: -49
+ zones:
+ - 3
+ - 9
+ - 10
+ - 11
+ presets:
+ - id: 10000
+ name: Mute All
+ state:
+ zones:
+ - id: 0
+ mute: true
+ - id: 1
+ mute: true
+ - id: 2
+ mute: true
+ - id: 3
+ mute: true
+ - id: 4
+ mute: true
+ - id: 5
+ mute: true
+ sources:
+ - id: 0
+ input: stream=90890
+ name: J1
+ - id: 1
+ input: stream=44590
+ name: J2
+ - id: 2
+ input: local
+ name: Marc
+ - id: 3
+ input: local
+ name: Source 4
+ streams:
+ - id: 90890
+ info:
+ album: Far (Deluxe Version)
+ artist: Regina Spektor
+ img_url: http://mediaserver-cont-dc6-1-v4v6.pandora.com/images/public/int/2/1/5/4/093624974512_500W_500H.jpg
+ station: Regina Spektor Radio
+ track: Eet
+ name: Regina Spektor Radio
+ password: ''
+ station: '4473713754798410236'
+ status: playing
+ type: pandora
+ user: example1@micro-nova.com
+ - id: 90891
+ info:
+ details: No info available
+ name: Matt and Kim Radio
+ password: ''
+ station: '4610303469018478727'
+ status: disconnected
+ type: pandora
+ user: example2@micro-nova.com
+ - id: 90892
+ info:
+ details: No info available
+ name: Pink Radio
+ password: ''
+ station: '4326539910057675260'
+ status: disconnected
+ type: pandora
+ user: example3@micro-nova.com
+ - id: 44590
+ info:
+ details: No info available
+ name: Jason's iPhone
+ status: connected
+ type: shairport
+ - id: 4894
+ info:
+ details: No info available
+ name: Rnay
+ status: disconnected
+ type: shairport
+ info:
+ version: 0.0.1
+ zones:
+ - disabled: false
+ id: 0
+ mute: false
+ name: Local
+ source_id: 1
+ vol: -35
+ - disabled: false
+ id: 1
+ mute: false
+ name: Office
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 2
+ mute: true
+ name: Laundry Room
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 3
+ mute: true
+ name: Dining Room
+ source_id: 0
+ vol: -44
+ - disabled: true
+ id: 4
+ mute: true
+ name: BROKEN
+ source_id: 0
+ vol: -50
+ - disabled: false
+ id: 5
+ mute: true
+ name: Guest Bedroom
+ source_id: 0
+ vol: -48
+ - disabled: false
+ id: 6
+ mute: true
+ name: Main Bedroom
+ source_id: 0
+ vol: -40
+ - disabled: false
+ id: 7
+ mute: true
+ name: Main Bathroom
+ source_id: 0
+ vol: -44
+ - disabled: false
+ id: 8
+ mute: true
+ name: Master Bathroom
+ source_id: 0
+ vol: -41
+ - disabled: false
+ id: 9
+ mute: true
+ name: Kitchen High
+ source_id: 0
+ vol: -53
+ - disabled: false
+ id: 10
+ mute: true
+ name: kitchen Low
+ source_id: 0
+ vol: -52
+ - disabled: false
+ id: 11
+ mute: true
+ name: Living Room
+ source_id: 0
+ vol: -46
+ '422':
+ description: Validation Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/HTTPValidationError'
+components:
+ schemas:
+ Command:
+ title: Command
+ required:
+ - stream_id
+ - cmd
+ type: object
+ properties:
+ stream_id:
+ title: Stream Id
+ type: integer
+ description: Stream to execute the command on
+ cmd:
+ title: Cmd
+ type: string
+ description: Command to execute
+ description: 'A command to execute on a stream '
+ Group:
+ title: Group
+ required:
+ - name
+ - zones
+ type: object
+ properties:
+ id:
+ title: Id
+ type: integer
+ description: Unique identifier
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ source_id:
+ title: Source Id
+ maximum: 3.0
+ minimum: 0.0
+ type: integer
+ description: id of the connected source
+ default: 0
+ zones:
+ title: Zones
+ uniqueItems: true
+ type: array
+ items:
+ type: integer
+ description: Set of zones belonging to a group
+ mute:
+ title: Mute
+ type: boolean
+ description: Set to true if output is all zones muted
+ default: true
+ vol_delta:
+ title: Vol Delta
+ maximum: 0.0
+ minimum: -79.0
+ type: integer
+ description: Average utput volume in dB
+ default: -79
+ description: 'A group of zones that can share the same audio input and be controlled
+ as a group ie. Updstairs.
+
+
+ Volume, mute, and source_id fields are aggregates of the member zones.'
+ GroupUpdate:
+ title: GroupUpdate
+ type: object
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ source_id:
+ title: Source Id
+ maximum: 3.0
+ minimum: 0.0
+ type: integer
+ description: id of the connected source
+ default: 0
+ zones:
+ title: Zones
+ type: array
+ items:
+ type: integer
+ description: Set of zones belonging to a group
+ mute:
+ title: Mute
+ type: boolean
+ description: Set to true if output is all zones muted
+ default: true
+ vol_delta:
+ title: Vol Delta
+ maximum: 0.0
+ minimum: -79.0
+ type: integer
+ description: Average utput volume in dB
+ default: -79
+ description: 'Reconfiguration of a Group '
+ GroupUpdate2:
+ title: GroupUpdate2
+ required:
+ - id
+ type: object
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ source_id:
+ title: Source Id
+ maximum: 3.0
+ minimum: 0.0
+ type: integer
+ description: id of the connected source
+ default: 0
+ zones:
+ title: Zones
+ type: array
+ items:
+ type: integer
+ description: Set of zones belonging to a group
+ mute:
+ title: Mute
+ type: boolean
+ description: Set to true if output is all zones muted
+ default: true
+ vol_delta:
+ title: Vol Delta
+ maximum: 0.0
+ minimum: -79.0
+ type: integer
+ description: Average utput volume in dB
+ default: -79
+ id:
+ title: Id
+ type: integer
+ description: 'Reconfiguration of a specific Group '
+ HTTPValidationError:
+ title: HTTPValidationError
+ type: object
+ properties:
+ detail:
+ title: Detail
+ type: array
+ items:
+ $ref: '#/components/schemas/ValidationError'
+ Info:
+ title: Info
+ type: object
+ properties:
+ config_file:
+ title: Config File
+ type: string
+ default: Uknown
+ version:
+ title: Version
+ type: string
+ default: Unknown
+ mock_ctrl:
+ title: Mock Ctrl
+ type: boolean
+ default: false
+ mock_streams:
+ title: Mock Streams
+ type: boolean
+ default: false
+ description: 'Information about the settings used by the controller '
+ Preset:
+ title: Preset
+ required:
+ - name
+ - state
+ type: object
+ properties:
+ id:
+ title: Id
+ type: integer
+ description: Unique identifier
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ state:
+ $ref: '#/components/schemas/PresetState'
+ commands:
+ title: Commands
+ type: array
+ items:
+ $ref: '#/components/schemas/Command'
+ default: []
+ last_used:
+ title: Last Used
+ type: integer
+ description: 'A partial controller configuration the can be loaded on demand.
+
+ In addition to most of the configuration found in Status, this can contain
+ commands as well that configure the state of different streaming services.'
+ PresetState:
+ title: PresetState
+ type: object
+ properties:
+ sources:
+ title: Sources
+ type: array
+ items:
+ $ref: '#/components/schemas/SourceUpdate2'
+ zones:
+ title: Zones
+ type: array
+ items:
+ $ref: '#/components/schemas/ZoneUpdate2'
+ groups:
+ title: Groups
+ type: array
+ items:
+ $ref: '#/components/schemas/GroupUpdate2'
+ description: 'A set of partial configuration changes to make to sources, zones,
+ and groups '
+ PresetUpdate:
+ title: PresetUpdate
+ type: object
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ state:
+ $ref: '#/components/schemas/PresetState'
+ commands:
+ title: Commands
+ type: array
+ items:
+ $ref: '#/components/schemas/Command'
+ description: 'Changes to a current preset
+
+
+ The contents of state and commands will be completely replaced if populated.
+
+ Merging old and new updates seems too complicated and error prone.'
+ Source:
+ title: Source
+ required:
+ - name
+ type: object
+ properties:
+ id:
+ title: Id
+ type: integer
+ description: Unique identifier
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ input:
+ title: Input
+ type: string
+ description: "Connected audio source\n\n * Digital Stream ('stream=SID')\
+ \ where SID is the ID of the connected stream\n * Analog RCA Input ('local')\
+ \ connects to the RCA inputs associated\n * Nothing ('') behind the scenes\
+ \ this is muxed to a digital output\n "
+ default: ''
+ description: 'An audio source '
+ SourceUpdate:
+ title: SourceUpdate
+ type: object
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ input:
+ title: Input
+ type: string
+ description: 'Partial reconfiguration of an audio Source '
+ SourceUpdate2:
+ title: SourceUpdate2
+ required:
+ - id
+ type: object
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ input:
+ title: Input
+ type: string
+ id:
+ title: Id
+ maximum: 4.0
+ minimum: 0.0
+ type: integer
+ description: 'Partial reconfiguration of a specific audio Source '
+ Status:
+ title: Status
+ type: object
+ properties:
+ sources:
+ title: Sources
+ type: array
+ items:
+ $ref: '#/components/schemas/Source'
+ default:
+ - id: 0
+ name: '0'
+ input: ''
+ - id: 1
+ name: '1'
+ input: ''
+ - id: 2
+ name: '2'
+ input: ''
+ - id: 3
+ name: '3'
+ input: ''
+ zones:
+ title: Zones
+ type: array
+ items:
+ $ref: '#/components/schemas/Zone'
+ default:
+ - id: 0
+ name: Zone 0
+ source_id: 0
+ mute: true
+ vol: -79
+ disabled: false
+ - id: 1
+ name: Zone 1
+ source_id: 0
+ mute: true
+ vol: -79
+ disabled: false
+ - id: 2
+ name: Zone 2
+ source_id: 0
+ mute: true
+ vol: -79
+ disabled: false
+ - id: 3
+ name: Zone 3
+ source_id: 0
+ mute: true
+ vol: -79
+ disabled: false
+ - id: 4
+ name: Zone 4
+ source_id: 0
+ mute: true
+ vol: -79
+ disabled: false
+ - id: 5
+ name: Zone 5
+ source_id: 0
+ mute: true
+ vol: -79
+ disabled: false
+ groups:
+ title: Groups
+ type: array
+ items:
+ $ref: '#/components/schemas/Group'
+ default: []
+ streams:
+ title: Streams
+ type: array
+ items:
+ $ref: '#/components/schemas/Stream'
+ default: []
+ presets:
+ title: Presets
+ type: array
+ items:
+ $ref: '#/components/schemas/Preset'
+ default: []
+ info:
+ $ref: '#/components/schemas/Info'
+ description: 'Full Controller Configuration and Status '
+ Stream:
+ title: Stream
+ required:
+ - name
+ - type
+ type: object
+ properties:
+ id:
+ title: Id
+ type: integer
+ description: Unique identifier
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ type:
+ title: Type
+ type: string
+ description: "stream type\n\n * pandora\n * shairport\n * dlna\n * internetradio\n\
+ \ * spotify\n "
+ user:
+ title: User
+ type: string
+ description: User login
+ password:
+ title: Password
+ type: string
+ description: Password
+ station:
+ title: Station
+ type: string
+ description: Radio station identifier
+ url:
+ title: Url
+ type: string
+ description: Stream url, used for internetradio
+ logo:
+ title: Logo
+ type: string
+ description: Icon/Logo url, used for internetradio
+ info:
+ title: Info
+ type: object
+ description: Additional info about the current audio playing from the stream
+ (generated during playback
+ status:
+ title: Status
+ type: string
+ description: State of the stream
+ description: 'Digital stream such as Pandora, Airplay or Spotify '
+ StreamCommand:
+ title: StreamCommand
+ enum:
+ - play
+ - pause
+ - next
+ - stop
+ - like
+ - ban
+ - shelve
+ type: string
+ description: An enumeration.
+ StreamUpdate:
+ title: StreamUpdate
+ type: object
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ user:
+ title: User
+ type: string
+ password:
+ title: Password
+ type: string
+ station:
+ title: Station
+ type: string
+ url:
+ title: Url
+ type: string
+ logo:
+ title: Logo
+ type: string
+ description: 'Reconfiguration of a Stream '
+ ValidationError:
+ title: ValidationError
+ required:
+ - loc
+ - msg
+ - type
+ type: object
+ properties:
+ loc:
+ title: Location
+ type: array
+ items:
+ type: string
+ msg:
+ title: Message
+ type: string
+ type:
+ title: Error Type
+ type: string
+ Zone:
+ title: Zone
+ required:
+ - name
+ type: object
+ properties:
+ id:
+ title: Id
+ type: integer
+ description: Unique identifier
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ source_id:
+ title: Source Id
+ maximum: 3.0
+ minimum: 0.0
+ type: integer
+ description: id of the connected source
+ default: 0
+ mute:
+ title: Mute
+ type: boolean
+ description: Set to true if output is muted
+ default: true
+ vol:
+ title: Vol
+ maximum: 0.0
+ minimum: -79.0
+ type: integer
+ description: Output volume in dB
+ default: -79
+ disabled:
+ title: Disabled
+ type: boolean
+ description: Set to true if not connected to a speaker
+ default: false
+ description: 'Audio output to a stereo pair of speakers, typically belonging
+ to a room '
+ ZoneUpdate:
+ title: ZoneUpdate
+ type: object
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ source_id:
+ title: Source Id
+ maximum: 3.0
+ minimum: 0.0
+ type: integer
+ description: id of the connected source
+ default: 0
+ mute:
+ title: Mute
+ type: boolean
+ description: Set to true if output is muted
+ default: true
+ vol:
+ title: Vol
+ maximum: 0.0
+ minimum: -79.0
+ type: integer
+ description: Output volume in dB
+ default: -79
+ disabled:
+ title: Disabled
+ type: boolean
+ description: Set to true if not connected to a speaker
+ default: false
+ description: 'Reconfiguration of a Zone '
+ ZoneUpdate2:
+ title: ZoneUpdate2
+ required:
+ - id
+ type: object
+ properties:
+ name:
+ title: Name
+ type: string
+ description: Friendly name
+ source_id:
+ title: Source Id
+ maximum: 3.0
+ minimum: 0.0
+ type: integer
+ description: id of the connected source
+ default: 0
+ mute:
+ title: Mute
+ type: boolean
+ description: Set to true if output is muted
+ default: true
+ vol:
+ title: Vol
+ maximum: 0.0
+ minimum: -79.0
+ type: integer
+ description: Output volume in dB
+ default: -79
+ disabled:
+ title: Disabled
+ type: boolean
+ description: Set to true if not connected to a speaker
+ default: false
+ id:
+ title: Id
+ maximum: 35.0
+ minimum: 0.0
+ type: integer
+ description: 'Reconfiguration of a specific Zone '
+tags:
+- name: status
+ description: The status and configuration of the entire system, including source,
+ zones, groups, and streams.
+- name: source
+ description: Audio source. Can accept sudio input from a local (RCA) connection
+ or any stream. Sources can be connected to one or multiple zones, or connected
+ to nothing at all.
+- name: zone
+ description: Stereo output to a set of speakers, typically a room. Individually
+ controllable with its own volume control. Can be connected to one of the 4 audio
+ sources.
+- name: group
+ description: Group of zones. Grouping allows a set of zones to be controlled together.
+ A zone can belong to multiple groups, allowing for different levels of abstraction,
+ ie. Guest Bedroom can belong to both the 'Upstairs' and 'Whole House' groups.,
+- name: stream
+ description: Digital stream that can be connected to a source, ie. Pandora, Airplay,
+ Spotify, Internet Radio, DLNA.
+- name: preset
+ description: A partial system configuration. Used to load specific configurations,
+ such as "Home Theater" mode where the living room speakers are connected to the
+ TV's audio output.
diff --git a/bundles/org.openhab.binding.amplipi/pom.xml b/bundles/org.openhab.binding.amplipi/pom.xml
new file mode 100644
index 0000000000000..55ec0c7caa2ee
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/pom.xml
@@ -0,0 +1,69 @@
+
+
+
+ 4.0.0
+
+
+ org.openhab.addons.bundles
+ org.openhab.addons.reactor.bundles
+ 3.2.0-SNAPSHOT
+
+
+ org.openhab.binding.amplipi
+
+ openHAB Add-ons :: Bundles :: AmpliPi Binding
+
+
+ 3.4.3
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+
+
+
+
+
+
+
+ org.openapitools
+ openapi-generator-maven-plugin
+ 5.1.0
+
+
+
+ generate
+
+
+ ${project.basedir}/amplipi-api.yml
+ jaxrs-cxf-client
+
+ org.openhab.binding.amplipi.internal.model
+ true
+ false
+ false
+ false
+ false
+ false
+ true
+
+
+
+
+
+
+
+
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Command.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Command.java
new file mode 100644
index 0000000000000..1dd1464f48b1c
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Command.java
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import com.google.gson.annotations.SerializedName;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * A command to execute on a stream
+ **/
+@Schema(description = "A command to execute on a stream ")
+public class Command {
+
+ @Schema(required = true)
+ @SerializedName("stream_id")
+ /**
+ * Stream to execute the command on
+ **/
+ private Integer streamId;
+
+ @Schema(required = true)
+ /**
+ * Command to execute
+ **/
+ private String cmd;
+
+ /**
+ * Stream to execute the command on
+ *
+ * @return streamId
+ **/
+ public Integer getStreamId() {
+ return streamId;
+ }
+
+ public void setStreamId(Integer streamId) {
+ this.streamId = streamId;
+ }
+
+ public Command streamId(Integer streamId) {
+ this.streamId = streamId;
+ return this;
+ }
+
+ /**
+ * Command to execute
+ *
+ * @return cmd
+ **/
+ public String getCmd() {
+ return cmd;
+ }
+
+ public void setCmd(String cmd) {
+ this.cmd = cmd;
+ }
+
+ public Command cmd(String cmd) {
+ this.cmd = cmd;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Command {\n");
+
+ sb.append(" streamId: ").append(toIndentedString(streamId)).append("\n");
+ sb.append(" cmd: ").append(toIndentedString(cmd)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Group.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Group.java
new file mode 100644
index 0000000000000..7d2b4bd364837
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Group.java
@@ -0,0 +1,209 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import com.google.gson.annotations.SerializedName;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * A group of zones that can share the same audio input and be controlled as a group ie. Updstairs. Volume, mute, and
+ * source_id fields are aggregates of the member zones.
+ **/
+@Schema(description = "A group of zones that can share the same audio input and be controlled as a group ie. Updstairs. Volume, mute, and source_id fields are aggregates of the member zones.")
+public class Group {
+
+ @Schema
+ /**
+ * Unique identifier
+ **/
+ private Integer id;
+
+ @Schema(required = true)
+ /**
+ * Friendly name
+ **/
+ private String name;
+
+ @Schema
+ @SerializedName("source_id")
+ /**
+ * id of the connected source
+ **/
+ private Integer sourceId = 0;
+
+ @Schema(required = true)
+ /**
+ * Set of zones belonging to a group
+ **/
+ private Set zones = new LinkedHashSet();
+
+ @Schema
+ /**
+ * Set to true if output is all zones muted
+ **/
+ private Boolean mute = true;
+
+ @Schema
+ @SerializedName("vol_delta")
+ /**
+ * Average utput volume in dB
+ **/
+ private Integer volDelta = -79;
+
+ /**
+ * Unique identifier
+ *
+ * @return id
+ **/
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Group id(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ /**
+ * Friendly name
+ *
+ * @return name
+ **/
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Group name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * id of the connected source
+ * minimum: 0
+ * maximum: 3
+ *
+ * @return sourceId
+ **/
+ public Integer getSourceId() {
+ return sourceId;
+ }
+
+ public void setSourceId(Integer sourceId) {
+ this.sourceId = sourceId;
+ }
+
+ public Group sourceId(Integer sourceId) {
+ this.sourceId = sourceId;
+ return this;
+ }
+
+ /**
+ * Set of zones belonging to a group
+ *
+ * @return zones
+ **/
+ public Set getZones() {
+ return zones;
+ }
+
+ public void setZones(Set zones) {
+ this.zones = zones;
+ }
+
+ public Group zones(Set zones) {
+ this.zones = zones;
+ return this;
+ }
+
+ public Group addZonesItem(Integer zonesItem) {
+ this.zones.add(zonesItem);
+ return this;
+ }
+
+ /**
+ * Set to true if output is all zones muted
+ *
+ * @return mute
+ **/
+ public Boolean getMute() {
+ return mute;
+ }
+
+ public void setMute(Boolean mute) {
+ this.mute = mute;
+ }
+
+ public Group mute(Boolean mute) {
+ this.mute = mute;
+ return this;
+ }
+
+ /**
+ * Average utput volume in dB
+ * minimum: -79
+ * maximum: 0
+ *
+ * @return volDelta
+ **/
+ public Integer getVolDelta() {
+ return volDelta;
+ }
+
+ public void setVolDelta(Integer volDelta) {
+ this.volDelta = volDelta;
+ }
+
+ public Group volDelta(Integer volDelta) {
+ this.volDelta = volDelta;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Group {\n");
+
+ sb.append(" id: ").append(toIndentedString(id)).append("\n");
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" sourceId: ").append(toIndentedString(sourceId)).append("\n");
+ sb.append(" zones: ").append(toIndentedString(zones)).append("\n");
+ sb.append(" mute: ").append(toIndentedString(mute)).append("\n");
+ sb.append(" volDelta: ").append(toIndentedString(volDelta)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/GroupUpdate.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/GroupUpdate.java
new file mode 100644
index 0000000000000..ceaee3148d00d
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/GroupUpdate.java
@@ -0,0 +1,182 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import java.util.List;
+
+import com.google.gson.annotations.SerializedName;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * Reconfiguration of a Group
+ **/
+@Schema(description = "Reconfiguration of a Group ")
+public class GroupUpdate {
+
+ @Schema
+ /**
+ * Friendly name
+ **/
+ private String name;
+
+ @Schema
+ @SerializedName("source_id")
+ /**
+ * id of the connected source
+ **/
+ private Integer sourceId;
+
+ @Schema
+ /**
+ * Set of zones belonging to a group
+ **/
+ private List zones;
+
+ @Schema
+ /**
+ * Set to true if output is all zones muted
+ **/
+ private Boolean mute;
+
+ @Schema
+ @SerializedName("vol_delta")
+ /**
+ * Average utput volume in dB
+ **/
+ private Integer volDelta;
+
+ /**
+ * Friendly name
+ *
+ * @return name
+ **/
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public GroupUpdate name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * id of the connected source
+ * minimum: 0
+ * maximum: 3
+ *
+ * @return sourceId
+ **/
+ public Integer getSourceId() {
+ return sourceId;
+ }
+
+ public void setSourceId(Integer sourceId) {
+ this.sourceId = sourceId;
+ }
+
+ public GroupUpdate sourceId(Integer sourceId) {
+ this.sourceId = sourceId;
+ return this;
+ }
+
+ /**
+ * Set of zones belonging to a group
+ *
+ * @return zones
+ **/
+ public List getZones() {
+ return zones;
+ }
+
+ public void setZones(List zones) {
+ this.zones = zones;
+ }
+
+ public GroupUpdate zones(List zones) {
+ this.zones = zones;
+ return this;
+ }
+
+ public GroupUpdate addZonesItem(Integer zonesItem) {
+ this.zones.add(zonesItem);
+ return this;
+ }
+
+ /**
+ * Set to true if output is all zones muted
+ *
+ * @return mute
+ **/
+ public Boolean getMute() {
+ return mute;
+ }
+
+ public void setMute(Boolean mute) {
+ this.mute = mute;
+ }
+
+ public GroupUpdate mute(Boolean mute) {
+ this.mute = mute;
+ return this;
+ }
+
+ /**
+ * Average utput volume in dB
+ * minimum: -79
+ * maximum: 0
+ *
+ * @return volDelta
+ **/
+ public Integer getVolDelta() {
+ return volDelta;
+ }
+
+ public void setVolDelta(Integer volDelta) {
+ this.volDelta = volDelta;
+ }
+
+ public GroupUpdate volDelta(Integer volDelta) {
+ this.volDelta = volDelta;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class GroupUpdate {\n");
+
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" sourceId: ").append(toIndentedString(sourceId)).append("\n");
+ sb.append(" zones: ").append(toIndentedString(zones)).append("\n");
+ sb.append(" mute: ").append(toIndentedString(mute)).append("\n");
+ sb.append(" volDelta: ").append(toIndentedString(volDelta)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/GroupUpdate2.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/GroupUpdate2.java
new file mode 100644
index 0000000000000..cfb099fa6ea34
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/GroupUpdate2.java
@@ -0,0 +1,204 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import java.util.List;
+
+import com.google.gson.annotations.SerializedName;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * Reconfiguration of a specific Group
+ **/
+@Schema(description = "Reconfiguration of a specific Group ")
+public class GroupUpdate2 {
+
+ @Schema
+ /**
+ * Friendly name
+ **/
+ private String name;
+
+ @Schema
+ /**
+ * id of the connected source
+ **/
+ @SerializedName("source_id")
+ private Integer sourceId = 0;
+
+ @Schema
+ /**
+ * Set of zones belonging to a group
+ **/
+ private List zones = null;
+
+ @Schema
+ /**
+ * Set to true if output is all zones muted
+ **/
+ private Boolean mute = true;
+
+ @Schema
+ @SerializedName("vol_delta")
+ /**
+ * Average output volume in dB
+ **/
+ private Integer volDelta = -79;
+
+ @Schema(required = true)
+ private Integer id;
+
+ /**
+ * Friendly name
+ *
+ * @return name
+ **/
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public GroupUpdate2 name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * id of the connected source
+ * minimum: 0
+ * maximum: 3
+ *
+ * @return sourceId
+ **/
+ public Integer getSourceId() {
+ return sourceId;
+ }
+
+ public void setSourceId(Integer sourceId) {
+ this.sourceId = sourceId;
+ }
+
+ public GroupUpdate2 sourceId(Integer sourceId) {
+ this.sourceId = sourceId;
+ return this;
+ }
+
+ /**
+ * Set of zones belonging to a group
+ *
+ * @return zones
+ **/
+ public List getZones() {
+ return zones;
+ }
+
+ public void setZones(List zones) {
+ this.zones = zones;
+ }
+
+ public GroupUpdate2 zones(List zones) {
+ this.zones = zones;
+ return this;
+ }
+
+ public GroupUpdate2 addZonesItem(Integer zonesItem) {
+ this.zones.add(zonesItem);
+ return this;
+ }
+
+ /**
+ * Set to true if output is all zones muted
+ *
+ * @return mute
+ **/
+ public Boolean getMute() {
+ return mute;
+ }
+
+ public void setMute(Boolean mute) {
+ this.mute = mute;
+ }
+
+ public GroupUpdate2 mute(Boolean mute) {
+ this.mute = mute;
+ return this;
+ }
+
+ /**
+ * Average output volume in dB
+ * minimum: -79
+ * maximum: 0
+ *
+ * @return volDelta
+ **/
+ public Integer getVolDelta() {
+ return volDelta;
+ }
+
+ public void setVolDelta(Integer volDelta) {
+ this.volDelta = volDelta;
+ }
+
+ public GroupUpdate2 volDelta(Integer volDelta) {
+ this.volDelta = volDelta;
+ return this;
+ }
+
+ /**
+ * Get id
+ *
+ * @return id
+ **/
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public GroupUpdate2 id(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class GroupUpdate2 {\n");
+
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" sourceId: ").append(toIndentedString(sourceId)).append("\n");
+ sb.append(" zones: ").append(toIndentedString(zones)).append("\n");
+ sb.append(" mute: ").append(toIndentedString(mute)).append("\n");
+ sb.append(" volDelta: ").append(toIndentedString(volDelta)).append("\n");
+ sb.append(" id: ").append(toIndentedString(id)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/HTTPValidationError.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/HTTPValidationError.java
new file mode 100644
index 0000000000000..af500c9d0ae35
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/HTTPValidationError.java
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import java.util.List;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+public class HTTPValidationError {
+
+ @Schema
+ private List detail = null;
+
+ /**
+ * Get detail
+ *
+ * @return detail
+ **/
+ public List getDetail() {
+ return detail;
+ }
+
+ public void setDetail(List detail) {
+ this.detail = detail;
+ }
+
+ public HTTPValidationError detail(List detail) {
+ this.detail = detail;
+ return this;
+ }
+
+ public HTTPValidationError addDetailItem(ValidationError detailItem) {
+ this.detail.add(detailItem);
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class HTTPValidationError {\n");
+
+ sb.append(" detail: ").append(toIndentedString(detail)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Info.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Info.java
new file mode 100644
index 0000000000000..33da56fb9825b
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Info.java
@@ -0,0 +1,135 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import com.google.gson.annotations.SerializedName;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * Information about the settings used by the controller
+ **/
+@Schema(description = "Information about the settings used by the controller ")
+public class Info {
+
+ @Schema
+ @SerializedName("config_file")
+ private String configFile = "Unknown";
+
+ @Schema
+ private String version = "Unknown";
+
+ @Schema
+ @SerializedName("mock_ctrl")
+ private Boolean mockCtrl = false;
+
+ @Schema
+ @SerializedName("mock_streams")
+ private Boolean mockStreams = false;
+
+ /**
+ * Get configFile
+ *
+ * @return configFile
+ **/
+ public String getConfigFile() {
+ return configFile;
+ }
+
+ public void setConfigFile(String configFile) {
+ this.configFile = configFile;
+ }
+
+ public Info configFile(String configFile) {
+ this.configFile = configFile;
+ return this;
+ }
+
+ /**
+ * Get version
+ *
+ * @return version
+ **/
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public Info version(String version) {
+ this.version = version;
+ return this;
+ }
+
+ /**
+ * Get mockCtrl
+ *
+ * @return mockCtrl
+ **/
+ public Boolean getMockCtrl() {
+ return mockCtrl;
+ }
+
+ public void setMockCtrl(Boolean mockCtrl) {
+ this.mockCtrl = mockCtrl;
+ }
+
+ public Info mockCtrl(Boolean mockCtrl) {
+ this.mockCtrl = mockCtrl;
+ return this;
+ }
+
+ /**
+ * Get mockStreams
+ *
+ * @return mockStreams
+ **/
+ public Boolean getMockStreams() {
+ return mockStreams;
+ }
+
+ public void setMockStreams(Boolean mockStreams) {
+ this.mockStreams = mockStreams;
+ }
+
+ public Info mockStreams(Boolean mockStreams) {
+ this.mockStreams = mockStreams;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Info {\n");
+
+ sb.append(" configFile: ").append(toIndentedString(configFile)).append("\n");
+ sb.append(" version: ").append(toIndentedString(version)).append("\n");
+ sb.append(" mockCtrl: ").append(toIndentedString(mockCtrl)).append("\n");
+ sb.append(" mockStreams: ").append(toIndentedString(mockStreams)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Preset.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Preset.java
new file mode 100644
index 0000000000000..cd124ba632e40
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Preset.java
@@ -0,0 +1,169 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import java.util.List;
+
+import com.google.gson.annotations.SerializedName;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * A partial controller configuration the can be loaded on demand. In addition to most of the configuration found in
+ * Status, this can contain commands as well that configure the state of different streaming services.
+ **/
+@Schema(description = "A partial controller configuration the can be loaded on demand. In addition to most of the configuration found in Status, this can contain commands as well that configure the state of different streaming services.")
+public class Preset {
+
+ @Schema
+ /**
+ * Unique identifier
+ **/
+ private Integer id;
+
+ @Schema(required = true)
+ /**
+ * Friendly name
+ **/
+ private String name;
+
+ @Schema(required = true)
+ private PresetState state;
+
+ @Schema
+ private List commands = null;
+
+ @Schema
+ @SerializedName("last_used")
+ private Integer lastUsed;
+
+ /**
+ * Unique identifier
+ *
+ * @return id
+ **/
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Preset id(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ /**
+ * Friendly name
+ *
+ * @return name
+ **/
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Preset name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get state
+ *
+ * @return state
+ **/
+ public PresetState getState() {
+ return state;
+ }
+
+ public void setState(PresetState state) {
+ this.state = state;
+ }
+
+ public Preset state(PresetState state) {
+ this.state = state;
+ return this;
+ }
+
+ /**
+ * Get commands
+ *
+ * @return commands
+ **/
+ public List getCommands() {
+ return commands;
+ }
+
+ public void setCommands(List commands) {
+ this.commands = commands;
+ }
+
+ public Preset commands(List commands) {
+ this.commands = commands;
+ return this;
+ }
+
+ public Preset addCommandsItem(Command commandsItem) {
+ this.commands.add(commandsItem);
+ return this;
+ }
+
+ /**
+ * Get lastUsed
+ *
+ * @return lastUsed
+ **/
+ public Integer getLastUsed() {
+ return lastUsed;
+ }
+
+ public void setLastUsed(Integer lastUsed) {
+ this.lastUsed = lastUsed;
+ }
+
+ public Preset lastUsed(Integer lastUsed) {
+ this.lastUsed = lastUsed;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Preset {\n");
+
+ sb.append(" id: ").append(toIndentedString(id)).append("\n");
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" state: ").append(toIndentedString(state)).append("\n");
+ sb.append(" commands: ").append(toIndentedString(commands)).append("\n");
+ sb.append(" lastUsed: ").append(toIndentedString(lastUsed)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/PresetState.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/PresetState.java
new file mode 100644
index 0000000000000..3c95f3f926d76
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/PresetState.java
@@ -0,0 +1,125 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import java.util.List;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * A set of partial configuration changes to make to sources, zones, and groups
+ **/
+@Schema(description = "A set of partial configuration changes to make to sources, zones, and groups ")
+public class PresetState {
+
+ @Schema
+ private List sources = null;
+
+ @Schema
+ private List zones = null;
+
+ @Schema
+ private List groups = null;
+
+ /**
+ * Get sources
+ *
+ * @return sources
+ **/
+ public List getSources() {
+ return sources;
+ }
+
+ public void setSources(List sources) {
+ this.sources = sources;
+ }
+
+ public PresetState sources(List sources) {
+ this.sources = sources;
+ return this;
+ }
+
+ public PresetState addSourcesItem(SourceUpdate2 sourcesItem) {
+ this.sources.add(sourcesItem);
+ return this;
+ }
+
+ /**
+ * Get zones
+ *
+ * @return zones
+ **/
+ public List getZones() {
+ return zones;
+ }
+
+ public void setZones(List zones) {
+ this.zones = zones;
+ }
+
+ public PresetState zones(List zones) {
+ this.zones = zones;
+ return this;
+ }
+
+ public PresetState addZonesItem(ZoneUpdate2 zonesItem) {
+ this.zones.add(zonesItem);
+ return this;
+ }
+
+ /**
+ * Get groups
+ *
+ * @return groups
+ **/
+ public List getGroups() {
+ return groups;
+ }
+
+ public void setGroups(List groups) {
+ this.groups = groups;
+ }
+
+ public PresetState groups(List groups) {
+ this.groups = groups;
+ return this;
+ }
+
+ public PresetState addGroupsItem(GroupUpdate2 groupsItem) {
+ this.groups.add(groupsItem);
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class PresetState {\n");
+
+ sb.append(" sources: ").append(toIndentedString(sources)).append("\n");
+ sb.append(" zones: ").append(toIndentedString(zones)).append("\n");
+ sb.append(" groups: ").append(toIndentedString(groups)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/PresetUpdate.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/PresetUpdate.java
new file mode 100644
index 0000000000000..f83270c2d6560
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/PresetUpdate.java
@@ -0,0 +1,119 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import java.util.List;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * Changes to a current preset The contents of state and commands will be completely replaced if populated. Merging old
+ * and new updates seems too complicated and error prone.
+ **/
+@Schema(description = "Changes to a current preset The contents of state and commands will be completely replaced if populated. Merging old and new updates seems too complicated and error prone.")
+public class PresetUpdate {
+
+ @Schema
+ /**
+ * Friendly name
+ **/
+ private String name;
+
+ @Schema
+ private PresetState state;
+
+ @Schema
+ private List commands = null;
+
+ /**
+ * Friendly name
+ *
+ * @return name
+ **/
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public PresetUpdate name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get state
+ *
+ * @return state
+ **/
+ public PresetState getState() {
+ return state;
+ }
+
+ public void setState(PresetState state) {
+ this.state = state;
+ }
+
+ public PresetUpdate state(PresetState state) {
+ this.state = state;
+ return this;
+ }
+
+ /**
+ * Get commands
+ *
+ * @return commands
+ **/
+ public List getCommands() {
+ return commands;
+ }
+
+ public void setCommands(List commands) {
+ this.commands = commands;
+ }
+
+ public PresetUpdate commands(List commands) {
+ this.commands = commands;
+ return this;
+ }
+
+ public PresetUpdate addCommandsItem(Command commandsItem) {
+ this.commands.add(commandsItem);
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class PresetUpdate {\n");
+
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" state: ").append(toIndentedString(state)).append("\n");
+ sb.append(" commands: ").append(toIndentedString(commands)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Source.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Source.java
new file mode 100644
index 0000000000000..6b009c734c002
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Source.java
@@ -0,0 +1,121 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * An audio source
+ **/
+@Schema(description = "An audio source ")
+public class Source {
+
+ @Schema
+ /**
+ * Unique identifier
+ **/
+ private Integer id;
+
+ @Schema(required = true)
+ /**
+ * Friendly name
+ **/
+ private String name;
+
+ @Schema
+ /**
+ * Connected audio source * Digital Stream ('stream=SID') where SID is the ID of the connected stream * Analog RCA
+ * Input ('local') connects to the RCA inputs associated * Nothing ('') behind the scenes this is muxed to a digital
+ * output
+ **/
+ private String input = "";
+
+ /**
+ * Unique identifier
+ *
+ * @return id
+ **/
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public Source id(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ /**
+ * Friendly name
+ *
+ * @return name
+ **/
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Source name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Connected audio source * Digital Stream ('stream=SID') where SID is the ID of the connected stream *
+ * Analog RCA Input ('local') connects to the RCA inputs associated * Nothing ('') behind the scenes
+ * this is muxed to a digital output
+ *
+ * @return input
+ **/
+ public String getInput() {
+ return input;
+ }
+
+ public void setInput(String input) {
+ this.input = input;
+ }
+
+ public Source input(String input) {
+ this.input = input;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Source {\n");
+
+ sb.append(" id: ").append(toIndentedString(id)).append("\n");
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" input: ").append(toIndentedString(input)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/SourceUpdate.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/SourceUpdate.java
new file mode 100644
index 0000000000000..06857cd97acb2
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/SourceUpdate.java
@@ -0,0 +1,89 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * Partial reconfiguration of an audio Source
+ **/
+@Schema(description = "Partial reconfiguration of an audio Source ")
+public class SourceUpdate {
+
+ @Schema
+ /**
+ * Friendly name
+ **/
+ private String name;
+
+ @Schema
+ private String input;
+
+ /**
+ * Friendly name
+ *
+ * @return name
+ **/
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public SourceUpdate name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get input
+ *
+ * @return input
+ **/
+ public String getInput() {
+ return input;
+ }
+
+ public void setInput(String input) {
+ this.input = input;
+ }
+
+ public SourceUpdate input(String input) {
+ this.input = input;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class SourceUpdate {\n");
+
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" input: ").append(toIndentedString(input)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/SourceUpdate2.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/SourceUpdate2.java
new file mode 100644
index 0000000000000..ef7d99f64001c
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/SourceUpdate2.java
@@ -0,0 +1,113 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * Partial reconfiguration of a specific audio Source
+ **/
+@Schema(description = "Partial reconfiguration of a specific audio Source ")
+public class SourceUpdate2 {
+
+ @Schema
+ /**
+ * Friendly name
+ **/
+ private String name;
+
+ @Schema
+ private String input;
+
+ @Schema(required = true)
+ private Integer id;
+
+ /**
+ * Friendly name
+ *
+ * @return name
+ **/
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public SourceUpdate2 name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ /**
+ * Get input
+ *
+ * @return input
+ **/
+ public String getInput() {
+ return input;
+ }
+
+ public void setInput(String input) {
+ this.input = input;
+ }
+
+ public SourceUpdate2 input(String input) {
+ this.input = input;
+ return this;
+ }
+
+ /**
+ * Get id
+ * minimum: 0
+ * maximum: 4
+ *
+ * @return id
+ **/
+ public Integer getId() {
+ return id;
+ }
+
+ public void setId(Integer id) {
+ this.id = id;
+ }
+
+ public SourceUpdate2 id(Integer id) {
+ this.id = id;
+ return this;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("class SourceUpdate2 {\n");
+
+ sb.append(" name: ").append(toIndentedString(name)).append("\n");
+ sb.append(" input: ").append(toIndentedString(input)).append("\n");
+ sb.append(" id: ").append(toIndentedString(id)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private static String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n ");
+ }
+}
diff --git a/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Status.java b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Status.java
new file mode 100644
index 0000000000000..d4e8c416e2efe
--- /dev/null
+++ b/bundles/org.openhab.binding.amplipi/src/gen/java/org/openhab/binding/amplipi/internal/model/Status.java
@@ -0,0 +1,201 @@
+/**
+ * Copyright (c) 2010-2021 Contributors to the openHAB project
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ */
+package org.openhab.binding.amplipi.internal.model;
+
+import java.util.List;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * Full Controller Configuration and Status
+ **/
+@Schema(description = "Full Controller Configuration and Status ")
+public class Status {
+
+ @Schema
+ private List