forked from openhab/openhab-addons
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[fpp] Initial contribution (openhab#16298)
* working on FPP Signed-off-by: Scott Hanson <scooter_seh@yahoo.com>
- Loading branch information
1 parent
ab2dade
commit 163f517
Showing
19 changed files
with
1,162 additions
and
0 deletions.
There are no files selected for viewing
Validating CODEOWNERS rules …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
# FPP Binding | ||
|
||
Binding to control Falcon Player (FPP) Devices using MQTT and HTTP. Status messages are recieved over MQTT and Commands are HTTP Commands. | ||
|
||
## Discovery | ||
|
||
Autodiscovering is not supported. We have to define the things manually. | ||
|
||
## Supported Things | ||
|
||
The binding supports one Thing `player` that represents the Falcon Player. | ||
## Thing Configuration | ||
|
||
| Parameter | Description | Required | Default | | ||
|--------------|-----------------------------------------|----------|---------| | ||
| `playerIP` | IP Address or Host Name of FPP Devive | Y | | | ||
| `playerMQTT` | MQTT Topic of FPP Devive Status Updates | Y | | | ||
|
||
## Channels | ||
|
||
| Channel | Type | Description | | ||
|----------------------------------------|--------------------|-------------------------------------------| | ||
| `player` | Player | Play/Stop Current Playlist. | | ||
| `volume` | Dimmer | Playback Audio Volume. | | ||
| `status` | String | Playback Status. | | ||
| `mode` | String | Playback Mode. | | ||
| `uptime` | Number:Time | Device Uptime. | | ||
| `testing-enabled` | Switch | Enabled/Disable Sending Testing Data. | | ||
| `current-sequence` | String (read only) | Currently Playing Sequence File. | | ||
| `current-song` | String (read only) | Currently Playing Audio/Media File. | | ||
| `current-playlist` | String (read only) | Currently Playing Playlist. | | ||
| `seconds-played` | Number:Time | Sequence Playback time in secs. | | ||
| `seconds-remaining` | Number:Time | Sequence Playback time remaining in secs. | | ||
| `last-playlist` | String | Lasted Played Playlist. | | ||
| `bridging-enabled` | Switch | Is Recieving Bridge Data. | | ||
| `multisync-enabled` | Switch | Multisync Mode Enabled. | | ||
| `scheduler-current-playlist` | String (read only) | Scheduler Current Playlist. | | ||
| `scheduler-current-playlist-start` | String (read only) | Scheduler Current Playlist Start Time. | | ||
| `scheduler-current-playlist-end` | String (read only) | Scheduler Current Playlist End Time. | | ||
| `scheduler-current-playlist-stop-type` | String (read only) | Scheduler Current Playlist End Type. | | ||
| `scheduler-next-playlist` | String (read only) | Next Scheduled Playlist. | | ||
| `scheduler-next-playlist-start` | String (read only) | Next Scheduled Start Time. | | ||
|
||
|
||
## Full Example | ||
|
||
To use these examples for textual configuration, you must already have a configured MQTT `broker` thing, and know its unique ID. | ||
This UID will be used in the things file and will replace the text `myBroker`. | ||
The first line in the things file will create a `broker` thing and this can be removed if you have already setup a broker in another file or via the UI already. | ||
|
||
### fpp.things | ||
|
||
```java | ||
Bridge mqtt:broker:myBroker [ host="localhost", secure=false, password="*******", qos=1, username="user"] | ||
Thing mqtt:player:myBroker:mainPlayer "Main Player" (mqtt:broker:myBroker) @ "MQTT" | ||
``` | ||
|
||
### fpp.items | ||
|
||
```java | ||
Player FPP_Player "FPP Player" {channel="mqtt:player:myBroker:mainPlayer:player"} | ||
Dimmer Audio_Volume "Audio Volume" {channel="mqtt:player:myBroker:mainPlayer:volume"} | ||
String Current_Sequence "Current Sequence" {channel="mqtt:player:myBroker:mainPlayer:current-sequence"} | ||
String Current_Song "Current Song" {channel="mqtt:player:myBroker:mainPlayer:current-song"} | ||
String Current_Playlist "Current Playlist" {channel="mqtt:player:myBroker:mainPlayer:current-playlist"} | ||
String Status "FPP Status" {channel="mqtt:player:myBroker:mainPlayer:status"} | ||
String Mode "FPP Mode" {channel="mqtt:player:myBroker:mainPlayer:mode"} | ||
String Last_Playlist "Last Playlist" {channel="mqtt:player:myBroker:mainPlayer:last-playlist"} | ||
Number:Time Seconds_Played "Seconds Played [%d %unit%]" {channel="mqtt:player:myBroker:mainPlayer:seconds-played"} | ||
Number:Time Seconds_Remaining "Seconds Remaining [%d %unit%]" {channel="mqtt:player:myBroker:mainPlayer:seconds-remaining"} | ||
Switch Testing "Testing Mode" {channel="mqtt:player:myBroker:mainPlayer:testing-enabled"} | ||
Switch Multisync "Multisync" {channel="mqtt:player:myBroker:mainPlayer:multisync-enabled"} | ||
``` | ||
|
||
### fpp.sitemap | ||
|
||
```perl | ||
Text label="Main Player" | ||
{ | ||
Player item=FPP_Player | ||
Switch item=Testing | ||
Slider item=Audio_Volume | ||
Text item=Current_Sequence | ||
Text item=Current_Song | ||
Text item=Current_Playlist | ||
Text item=Status | ||
Text item=Mode | ||
Selection item=Last_Playlist | ||
Switch item=Testing | ||
Switch item=Multisync | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
|
||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<parent> | ||
<groupId>org.openhab.addons.bundles</groupId> | ||
<artifactId>org.openhab.addons.reactor.bundles</artifactId> | ||
<version>4.3.0-SNAPSHOT</version> | ||
</parent> | ||
|
||
<artifactId>org.openhab.binding.mqtt.fpp</artifactId> | ||
<name>openHAB Add-ons :: Bundles :: MQTT FPP</name> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>org.openhab.addons.bundles</groupId> | ||
<artifactId>org.openhab.binding.mqtt</artifactId> | ||
<version>${project.version}</version> | ||
<scope>provided</scope> | ||
</dependency> | ||
</dependencies> | ||
</project> |
12 changes: 12 additions & 0 deletions
12
bundles/org.openhab.binding.mqtt.fpp/src/main/feature/feature.xml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<features name="org.openhab.binding.mqtt.fpp-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.4.0"> | ||
<repository>mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features</repository> | ||
|
||
<feature name="openhab-binding-mqtt-fpp" description="MQTT Binding FPP" version="${project.version}"> | ||
<feature>openhab-runtime-base</feature> | ||
<feature>openhab-transport-mqtt</feature> | ||
<bundle start-level="80">mvn:org.openhab.addons.bundles/org.openhab.binding.mqtt/${project.version}</bundle> | ||
<bundle start-level="81">mvn:org.openhab.addons.bundles/org.openhab.binding.mqtt.fpp/${project.version}</bundle> | ||
</feature> | ||
|
||
</features> |
26 changes: 26 additions & 0 deletions
26
...b.binding.mqtt.fpp/src/main/java/org/openhab/binding/mqtt/fpp/internal/ConfigOptions.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/** | ||
* Copyright (c) 2010-2024 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.mqtt.fpp.internal; | ||
|
||
import org.eclipse.jdt.annotation.NonNullByDefault; | ||
|
||
/** | ||
* The {@link ConfigOptions} Holds the config for the settings. | ||
* | ||
* @author Scott Hanson - Initial contribution | ||
*/ | ||
@NonNullByDefault | ||
public class ConfigOptions { | ||
public String playerAddress = ""; | ||
public String playerMQTTTopic = ""; | ||
} |
73 changes: 73 additions & 0 deletions
73
...ing.mqtt.fpp/src/main/java/org/openhab/binding/mqtt/fpp/internal/FPPBindingConstants.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/** | ||
* Copyright (c) 2010-2024 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.mqtt.fpp.internal; | ||
|
||
import static org.openhab.binding.mqtt.MqttBindingConstants.BINDING_ID; | ||
|
||
import java.util.Set; | ||
|
||
import org.eclipse.jdt.annotation.NonNullByDefault; | ||
import org.openhab.core.thing.ThingTypeUID; | ||
|
||
/** | ||
* The {@link FPPBindingConstants} class defines common constants, which are | ||
* used across the whole binding. | ||
* | ||
* @author Scott Hanson - Initial contribution | ||
*/ | ||
@NonNullByDefault | ||
public class FPPBindingConstants { | ||
// falcon/player/FPP/fppd_status | ||
public static final String STATUS_TOPIC = "fppd_status"; | ||
public static final String VERSION_TOPIC = "version"; | ||
public static final String PLAYLIST_TOPIC = "playlist"; | ||
public static final String MQTT_PREFIX = "falcon/player/"; | ||
|
||
// List of all Thing Type UIDs | ||
public static final ThingTypeUID THING_TYPE_PLAYER = new ThingTypeUID(BINDING_ID, "player"); | ||
|
||
public static final Set<ThingTypeUID> SUPPORTED_THING_TYPES = Set.of(THING_TYPE_PLAYER); | ||
|
||
// Channels | ||
public static final String CHANNEL_PLAYER = "player"; | ||
public static final String CHANNEL_STATUS = "status"; | ||
public static final String CHANNEL_VOLUME = "volume"; | ||
public static final String CHANNEL_MODE = "mode"; | ||
public static final String CHANNEL_CURRENT_SEQUENCE = "current-sequence"; | ||
public static final String CHANNEL_CURRENT_SONG = "current-song"; | ||
public static final String CHANNEL_CURRENT_PLAYLIST = "current-playlist"; | ||
public static final String CHANNEL_SEC_PLAYED = "seconds-played"; | ||
public static final String CHANNEL_SEC_REMAINING = "seconds-remaining"; | ||
public static final String CHANNEL_UPTIME = "uptime"; | ||
public static final String CHANNEL_BRIDGING = "bridging-enabled"; | ||
public static final String CHANNEL_MULTISYNC = "multisync-enabled"; | ||
public static final String CHANNEL_TESTING = "testing-enabled"; | ||
public static final String CHANNEL_LAST_PLAYLIST = "last-playlist"; | ||
|
||
public static final String CHANNEL_SCHEDULER_STATUS = "scheduler-status"; | ||
public static final String CHANNEL_SCHEDULER_CURRENT_PLAYLIST = "scheduler-current-playlist"; | ||
public static final String CHANNEL_SCHEDULER_CURRENT_PLAYLIST_START = "scheduler-current-playlist-start"; | ||
public static final String CHANNEL_SCHEDULER_CURRENT_PLAYLIST_END = "scheduler-current-playlist-end"; | ||
public static final String CHANNEL_SCHEDULER_CURRENT_PLAYLIST_STOP_TYPE = "scheduler-current-playlist-stop-type"; | ||
public static final String CHANNEL_SCHEDULER_NEXT_PLAYLIST = "scheduler-next-playlist"; | ||
public static final String CHANNEL_SCHEDULER_NEXT_PLAYLIST_START = "scheduler-next-playlist-start"; | ||
|
||
public static final String PROPERTY_UUID = "uuid"; | ||
public static final String PROPERTY_SOFTWARE_VERSION = "Software Version"; | ||
|
||
// Status | ||
public static final String CONNECTED = "connected"; | ||
public static final String CHANNEL_STATUS_NAME = "status-name"; | ||
|
||
public static final String TESTING = "testing"; | ||
} |
59 changes: 59 additions & 0 deletions
59
...nding.mqtt.fpp/src/main/java/org/openhab/binding/mqtt/fpp/internal/FPPHandlerFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
/** | ||
* Copyright (c) 2010-2024 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.mqtt.fpp.internal; | ||
|
||
import static org.openhab.binding.mqtt.fpp.internal.FPPBindingConstants.SUPPORTED_THING_TYPES; | ||
|
||
import org.eclipse.jdt.annotation.NonNullByDefault; | ||
import org.eclipse.jdt.annotation.Nullable; | ||
import org.openhab.binding.mqtt.fpp.internal.handler.FPPPlayerHandler; | ||
import org.openhab.core.thing.Thing; | ||
import org.openhab.core.thing.ThingRegistry; | ||
import org.openhab.core.thing.ThingTypeUID; | ||
import org.openhab.core.thing.binding.BaseThingHandlerFactory; | ||
import org.openhab.core.thing.binding.ThingHandler; | ||
import org.openhab.core.thing.binding.ThingHandlerFactory; | ||
import org.osgi.service.component.annotations.Activate; | ||
import org.osgi.service.component.annotations.Component; | ||
import org.osgi.service.component.annotations.Reference; | ||
|
||
/** | ||
* The {@link FPPHandlerFactory} is responsible for creating things and thing | ||
* handlers. | ||
* | ||
* @author Scott Hanson - Initial contribution | ||
*/ | ||
@Component(service = ThingHandlerFactory.class) | ||
@NonNullByDefault | ||
public class FPPHandlerFactory extends BaseThingHandlerFactory { | ||
private final ThingRegistry thingRegistry; | ||
|
||
@Activate | ||
public FPPHandlerFactory(final @Reference ThingRegistry thingRegistry) { | ||
this.thingRegistry = thingRegistry; | ||
} | ||
|
||
@Override | ||
public boolean supportsThingType(ThingTypeUID thingTypeUID) { | ||
return SUPPORTED_THING_TYPES.contains(thingTypeUID); | ||
} | ||
|
||
@Override | ||
protected @Nullable ThingHandler createHandler(Thing thing) { | ||
ThingTypeUID thingTypeUID = thing.getThingTypeUID(); | ||
if (SUPPORTED_THING_TYPES.contains(thingTypeUID)) { | ||
return new FPPPlayerHandler(thing, thingRegistry); | ||
} | ||
return null; | ||
} | ||
} |
Oops, something went wrong.