diff --git a/CLC-qthing/FastDimmer.cpp b/CLC-qthing/FastDimmer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cd1744c56b1aa2b3df1f7a7e090dc25bcae44373
--- /dev/null
+++ b/CLC-qthing/FastDimmer.cpp
@@ -0,0 +1,76 @@
+#include "FastDimmer.hpp"
+
+#include "driver/gpio.h"
+#include "driver/ledc.h"
+
+
+
+static uint8_t channel = 0;
+
+ledc_channel_t getNextLEDChannel() {
+  return (ledc_channel_t)channel++;
+}
+
+
+static bool timerConfigured = false;
+
+static void configureTimer() {
+  if (!timerConfigured) {
+    ledc_timer_config_t ledc_timer;
+    ledc_timer.duty_resolution = LEDC_TIMER_1_BIT, // resolution of PWM duty
+    ledc_timer.freq_hz = 38000,                       // frequency of PWM signal; 2KHz is max for CN5711
+    ledc_timer.speed_mode = LEDC_HIGH_SPEED_MODE,   // timer mode
+    ledc_timer.timer_num = LEDC_TIMER_0,            // timer index
+    // Required for newer esp-idf:
+    //ledc_timer.clk_cfg = LEDC_AUTO_CLK,             // Auto select the source clock
+    ledc_timer_config(&ledc_timer);
+
+    ledc_fade_func_install(0);
+
+    timerConfigured = true;
+  }
+}
+
+
+FastDimmer::FastDimmer(uint8_t gpio) {
+
+  configureTimer();
+
+  gpio_config_t conf;
+
+  conf.intr_type = GPIO_INTR_DISABLE;
+  conf.mode = GPIO_MODE_OUTPUT;
+  conf.pin_bit_mask = 1ULL << gpio;
+  conf.pull_up_en = GPIO_PULLUP_DISABLE;
+  conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
+
+  gpio_config(&conf);
+  gpio_set_level((gpio_num_t)gpio, 0);
+
+
+  ledc_channel_config_t ledc_channel;
+  ledc_channel.channel    = this->channel;
+  ledc_channel.duty       = 0;
+  ledc_channel.gpio_num   = (gpio_num_t)gpio;
+  ledc_channel.speed_mode = LEDC_HIGH_SPEED_MODE;
+  ledc_channel.hpoint     = 0;
+  ledc_channel.timer_sel  = LEDC_TIMER_0;
+
+  ledc_channel_config(&ledc_channel);
+
+  // setBrightness(0);
+
+  ledc_set_duty(LEDC_HIGH_SPEED_MODE, this->channel, 1);
+  ledc_update_duty(LEDC_HIGH_SPEED_MODE, this->channel);
+
+}
+
+const float maxPWM = 1024.0f;
+
+void FastDimmer::setBrightness(float b) {
+
+  uint16_t pwm = (uint16_t)( b*b * maxPWM );
+
+  ledc_set_duty(LEDC_HIGH_SPEED_MODE, this->channel, pwm);
+  ledc_update_duty(LEDC_HIGH_SPEED_MODE, this->channel);
+}
diff --git a/CLC-qthing/FastDimmer.hpp b/CLC-qthing/FastDimmer.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..b080f79c6c2be2ed1da506c915fc62e9df13e93a
--- /dev/null
+++ b/CLC-qthing/FastDimmer.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <qthing.h>
+
+#include "driver/ledc.h"
+
+
+ledc_channel_t getNextLEDChannel();
+
+
+class FastDimmer {
+  public:
+    FastDimmer(uint8_t gpio);
+    void setBrightness(float b);
+  
+  private:
+    ledc_channel_t channel = getNextLEDChannel();
+};
diff --git a/CLC-qthing/SimpleUART.cpp b/CLC-qthing/SimpleUART.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..dda62a8877f492877c3dfe12b8cc86f7049c48cc
--- /dev/null
+++ b/CLC-qthing/SimpleUART.cpp
@@ -0,0 +1,20 @@
+
+
+
+/*
+
+const uart_port_t uart_num = UART_NUM_2;
+uart_config_t uart_config = {
+    .baud_rate = 115200,
+    .data_bits = UART_DATA_8_BITS,
+    .parity = UART_PARITY_DISABLE,
+    .stop_bits = UART_STOP_BITS_1,
+    .flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS,
+    .rx_flow_ctrl_thresh = 122,
+};
+// Configure UART parameters
+ESP_ERROR_CHECK(uart_param_config(uart_num, &uart_config));
+
+*/
+
+
diff --git a/CLC-qthing/SimpleUART.hpp b/CLC-qthing/SimpleUART.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..01e5ce5c9bb532a4d73afe94a25cb13156f7b3f7
--- /dev/null
+++ b/CLC-qthing/SimpleUART.hpp
@@ -0,0 +1,6 @@
+
+#include <cinttypes>
+
+
+
+
diff --git a/CLC-qthing/device_config.h b/CLC-qthing/device_config.h
new file mode 100644
index 0000000000000000000000000000000000000000..b9bf347820d4226a84c0a10de72f72607b341006
--- /dev/null
+++ b/CLC-qthing/device_config.h
@@ -0,0 +1,9 @@
+// hostname and device namespace
+#define DEVICE_NAME "CyanLight"
+
+#define NTP_SERVER "pool.ntp.org"
+
+
+#define DEVICE_IP          "192.168.0.254"
+#define DEVICE_GW          "192.168.0.1"
+#define DEVICE_NETMASK     "255.255.255.0"
diff --git a/CLC-qthing/device_main.cpp b/CLC-qthing/device_main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9b53a38e4ba7bc548fe171a47459331fe1f1b2d5
--- /dev/null
+++ b/CLC-qthing/device_main.cpp
@@ -0,0 +1,82 @@
+#include <qthing.h>
+
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+
+#include "driver/gpio.h"
+
+#include "mqtt_common.h"
+#include "esp_log.h"
+
+
+#include "FastDimmer.hpp"
+
+#include "Arduino.h"
+
+
+// #######################
+// ####### CONFIG ########
+// #######################
+
+const uint8_t senderTX = 26;
+const uint8_t senderCLK = 25;
+
+const uint8_t receiverRX = 23;
+
+// ### end cfg ###
+
+
+HardwareSerial sender(1);
+HardwareSerial receiver(2);
+
+
+void senderTask(void *ignored) {
+
+  uint16_t delay = 10;
+  vTaskDelay(delay / portTICK_PERIOD_MS);
+
+  while (true) {
+    sender.print("Hello, Infrared communication!");
+    vTaskDelay(delay / portTICK_PERIOD_MS);
+
+    sender.print(" typing…");
+    vTaskDelay(delay / portTICK_PERIOD_MS);
+
+    sender.print(" 🐾…");
+    vTaskDelay(delay / portTICK_PERIOD_MS);
+
+    sender.println(" 🕷🕸😏");
+    vTaskDelay(delay / portTICK_PERIOD_MS);
+  }
+}
+
+
+void receiverTask(void *ignored) {
+  while (true) {
+    if (receiver.available())
+      Serial.print( (char)receiver.read() );
+    else
+      vTaskDelay(2);
+  }
+}
+
+
+void device_main() {
+
+  // enable_wlan();
+
+
+  // FastDimmer pt4115(IO_PT4115);
+
+  FastDimmer baseClock(senderCLK);
+
+  Serial.begin(115200);
+
+  uint16_t baud = 4800;
+
+  sender.begin(baud, SERIAL_8N1, -1, senderTX);  // tx = 27
+  receiver.begin(baud, SERIAL_8N1, receiverRX, -1);  // rx = 26
+
+  xTaskCreate(senderTask, "sender", 8192, NULL, 6, NULL);
+  xTaskCreate(receiverTask, "receiver", 8192, NULL, 6, NULL);
+}
diff --git a/TripwireHook b/TripwireHook
index a04734c6fe90526c2a2b60c76e9cbbf9e1908225..9feca91c60c8050f8df978ac0cb11ec11b4794ed 160000
--- a/TripwireHook
+++ b/TripwireHook
@@ -1 +1 @@
-Subproject commit a04734c6fe90526c2a2b60c76e9cbbf9e1908225
+Subproject commit 9feca91c60c8050f8df978ac0cb11ec11b4794ed