diff --git a/libsrc/leddevice/CMakeLists.txt b/libsrc/leddevice/CMakeLists.txt
index 4ff82221..a0b1c329 100755
--- a/libsrc/leddevice/CMakeLists.txt
+++ b/libsrc/leddevice/CMakeLists.txt
@@ -35,6 +35,7 @@ SET(Leddevice_HEADERS
 	${CURRENT_SOURCE_DIR}/LedDeviceSedu.h
 	${CURRENT_SOURCE_DIR}/LedDeviceFile.h
 	${CURRENT_SOURCE_DIR}/LedDeviceUdpRaw.h
+    ${CURRENT_SOURCE_DIR}/LedDeviceUdpH801.h
 	${CURRENT_SOURCE_DIR}/LedDeviceUdpE131.h
 	${CURRENT_SOURCE_DIR}/ProviderUdp.h
 	${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.h
@@ -62,6 +63,7 @@ SET(Leddevice_SOURCES
 	${CURRENT_SOURCE_DIR}/LedDeviceFile.cpp
 	${CURRENT_SOURCE_DIR}/LedDeviceFadeCandy.cpp
 	${CURRENT_SOURCE_DIR}/LedDeviceUdpRaw.cpp
+    ${CURRENT_SOURCE_DIR}/LedDeviceUdpH801.cpp
 	${CURRENT_SOURCE_DIR}/LedDeviceUdpE131.cpp
 	${CURRENT_SOURCE_DIR}/ProviderUdp.cpp
 	${CURRENT_SOURCE_DIR}/LedDeviceHyperionUsbasp.cpp
diff --git a/libsrc/leddevice/LedDeviceFactory.cpp b/libsrc/leddevice/LedDeviceFactory.cpp
index 5a6984e6..586c8b81 100755
--- a/libsrc/leddevice/LedDeviceFactory.cpp
+++ b/libsrc/leddevice/LedDeviceFactory.cpp
@@ -46,6 +46,7 @@
 #include "LedDeviceAtmo.h"
 #include "LedDeviceAdalightApa102.h"
 #include "LedDeviceAtmoOrb.h"
+#include "LedDeviceUdpH801.h"
 
 #ifdef ENABLE_WS2812BPWM
 	#include "LedDeviceWS2812b.h"
@@ -101,7 +102,8 @@ LedDevice * LedDeviceFactory::construct(const Json::Value & deviceConfig)
 	#endif
 	LedDevice::addToDeviceMap("philipshue", LedDevicePhilipsHue::construct);
 	LedDevice::addToDeviceMap("atmoorb", LedDeviceAtmoOrb::construct);
-	
+	LedDevice::addToDeviceMap("h801", LedDeviceUdpH801::construct);
+
 	// direct usb
 	LedDevice::addToDeviceMap("hyperion-usbasp", LedDeviceHyperionUsbasp::construct);
 	LedDevice::addToDeviceMap("rawhid", LedDeviceRawHID::construct);
diff --git a/libsrc/leddevice/LedDeviceSchemas.qrc b/libsrc/leddevice/LedDeviceSchemas.qrc
index e35a8789..ce04eb2d 100644
--- a/libsrc/leddevice/LedDeviceSchemas.qrc
+++ b/libsrc/leddevice/LedDeviceSchemas.qrc
@@ -27,5 +27,6 @@
 		schemas/schema-ws2801.json
 		schemas/schema-ws2812spi.json
 		schemas/schema-ws281x.json
+		schemas/schema-h801.json
 	
 
diff --git a/libsrc/leddevice/LedDeviceTpm2net.cpp b/libsrc/leddevice/LedDeviceTpm2net.cpp
index 9f38be58..b6f7881c 100644
--- a/libsrc/leddevice/LedDeviceTpm2net.cpp
+++ b/libsrc/leddevice/LedDeviceTpm2net.cpp
@@ -25,6 +25,7 @@ bool LedDeviceTpm2net::setConfig(const Json::Value &deviceConfig)
 {
 	ProviderUdp::setConfig(deviceConfig,50200,104000);
 	_tpm2_max  = deviceConfig.get("max-packet",170).asInt();
+
 	return true;
 }
 
diff --git a/libsrc/leddevice/LedDeviceUdpH801.cpp b/libsrc/leddevice/LedDeviceUdpH801.cpp
new file mode 100644
index 00000000..f008d45d
--- /dev/null
+++ b/libsrc/leddevice/LedDeviceUdpH801.cpp
@@ -0,0 +1,65 @@
+// STL includes
+#include 
+#include 
+#include 
+
+#include 
+
+// hyperion local includes
+#include "LedDeviceUdpH801.h"
+
+LedDeviceUdpH801::LedDeviceUdpH801(const Json::Value &deviceConfig)
+	: ProviderUdp()
+{
+	setConfig(deviceConfig);
+}
+
+bool LedDeviceUdpH801::setConfig(const Json::Value &deviceConfig)
+{
+	/* The H801 port is fixed */
+	ProviderUdp::setConfig(deviceConfig, 30977, "255.255.255.255");
+
+	/* 10ms seems to be a safe default for the wait time */
+	_LatchTime_ns = deviceConfig.get("latchtime", 10000000).asInt();
+
+	_ids.clear();
+	for (Json::Value::ArrayIndex i = 0; i < deviceConfig["lightIds"].size(); i++) {
+		QString id(deviceConfig["lightIds"][i].asCString());
+		_ids.push_back(id.toInt(nullptr, 16));
+	}
+
+	_message = QByteArray(_prefix_size + _colors + _id_size * _ids.size() + _suffix_size, 0x00);
+	_message[0] = 0xFB;
+	_message[1] = 0xEB;
+
+	for (int i = 0; i < _ids.length(); i++) {
+		_message[_prefix_size + _colors + i * _id_size + 0] = (_ids[i] >> 0x00) & 0xFF;
+		_message[_prefix_size + _colors + i * _id_size + 1] = (_ids[i] >> 0x08) & 0xFF;
+		_message[_prefix_size + _colors + i * _id_size + 2] = (_ids[i] >> 0x10) & 0xFF;
+	}
+
+	Debug(_log, "H801 using %s:%d", _address.toString().toStdString().c_str(), _port);
+
+	return true;
+}
+
+LedDevice* LedDeviceUdpH801::construct(const Json::Value &deviceConfig)
+{
+	return new LedDeviceUdpH801(deviceConfig);
+}
+
+int LedDeviceUdpH801::write(const std::vector &ledValues)
+{
+	ColorRgb color = ledValues[0];
+	_message[_prefix_size + 0] = color.red;
+	_message[_prefix_size + 1] = color.green;
+	_message[_prefix_size + 2] = color.blue;
+
+	return writeBytes(_message.size(), reinterpret_cast(_message.data()));
+}
+
+int LedDeviceUdpH801::switchOff()
+{
+	return write(std::vector(_ledCount, ColorRgb{0, 0, 0}));
+}
+
diff --git a/libsrc/leddevice/LedDeviceUdpH801.h b/libsrc/leddevice/LedDeviceUdpH801.h
new file mode 100644
index 00000000..c5f4c87a
--- /dev/null
+++ b/libsrc/leddevice/LedDeviceUdpH801.h
@@ -0,0 +1,54 @@
+#pragma once
+
+#include 
+#include 
+#include 
+
+// STL includes
+#include 
+
+// hyperion includes
+#include "ProviderUdp.h"
+
+///
+/// Implementation of the LedDevice interface for sending led colors via udp.
+///
+class LedDeviceUdpH801: public ProviderUdp
+{
+protected:
+	QList _ids;
+	QByteArray _message;
+	const int _prefix_size = 2;
+	const int _colors = 5;
+	const int _id_size = 3;
+	const int _suffix_size = 1;
+
+public:
+	///
+	/// Constructs specific LedDevice
+	///
+	/// @param deviceConfig json device config
+	///
+	LedDeviceUdpH801(const Json::Value &deviceConfig);
+
+	///
+	/// Sets configuration
+	///
+	/// @param deviceConfig the json device config
+	/// @return true if success
+	bool setConfig(const Json::Value &deviceConfig);
+
+	/// constructs leddevice
+	static LedDevice* construct(const Json::Value &deviceConfig);
+
+	///
+	/// Writes the led color values to the led-device
+	///
+	/// @param ledValues The color-value per led
+	/// @return Zero on succes else negative
+	///
+	virtual int write(const std::vector &ledValues);
+
+	/// Switch the leds off
+	virtual int switchOff();
+};
diff --git a/libsrc/leddevice/ProviderUdp.cpp b/libsrc/leddevice/ProviderUdp.cpp
index caadf2e2..c160fc70 100644
--- a/libsrc/leddevice/ProviderUdp.cpp
+++ b/libsrc/leddevice/ProviderUdp.cpp
@@ -28,7 +28,11 @@ ProviderUdp::~ProviderUdp()
 	_udpSocket->close();
 }
 
+<<<<<<< HEAD
 bool ProviderUdp::setConfig(const Json::Value &deviceConfig, int defaultLatchTime, int defaultPort, std::string defaultHost)
+=======
+bool ProviderUdp::setConfig(const Json::Value &deviceConfig, int defaultPort, std::string defaultHost)
+>>>>>>> ad785b9eba371bca0829b8dc7df80c30afdc052a
 {
 	QString host = QString::fromStdString(deviceConfig.get("host",defaultHost).asString());
 	
@@ -48,7 +52,11 @@ bool ProviderUdp::setConfig(const Json::Value &deviceConfig, int defaultLatchTim
 		Debug( _log, "Successfully parsed %s as a hostname.", deviceConfig["host"].asString().c_str());
 		_address = info.addresses().first();
 	}
+<<<<<<< HEAD
 	
+=======
+
+>>>>>>> ad785b9eba371bca0829b8dc7df80c30afdc052a
 	_port = deviceConfig.get("port", defaultPort).asUInt();
 	if ( _port<=0 || _port > 65535)
 	{
diff --git a/libsrc/leddevice/ProviderUdp.h b/libsrc/leddevice/ProviderUdp.h
index 0ef35734..d3febf4b 100644
--- a/libsrc/leddevice/ProviderUdp.h
+++ b/libsrc/leddevice/ProviderUdp.h
@@ -19,6 +19,11 @@ public:
 	///
 	ProviderUdp();
 
+	///
+	/// Constructs specific LedDevice
+	///
+	ProviderUdp();
+
 	///
 	/// Destructor of the LedDevice; closes the output device if it is open
 	///
diff --git a/libsrc/leddevice/schemas/schema-h801.json b/libsrc/leddevice/schemas/schema-h801.json
new file mode 100644
index 00000000..95c574ee
--- /dev/null
+++ b/libsrc/leddevice/schemas/schema-h801.json
@@ -0,0 +1,27 @@
+{
+	"type":"object",
+	"required":true,
+	"properties":{
+		"host" : {
+			"type": "string",
+			"title":"Target IP",
+		    "default": "255.255.255.255",
+			"propertyOrder" : 1
+		},
+		"port" : {
+			"type": "integer",
+			"title":"Port",
+			"default": 30977,
+			"propertyOrder" : 2
+		},
+		"lightIds": {
+			"type": "array",
+			"title":"Light ids",
+			"items" : {
+				"type" : "string"
+			},
+			"propertyOrder" : 3
+		}
+	},
+	"additionalProperties": true
+}