diff --git a/docker/Dockerfile b/docker/Dockerfile
index 12d5c52..b3d5835 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -17,6 +17,9 @@
 
 RUN apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
 
+# TODO - is this needed?
+RUN pip3 install paho-mqtt
+
 WORKDIR /var/person-detection-app
 
 COPY . .
diff --git a/person_detection/mqtt.py b/person_detection/mqtt.py
new file mode 100644
index 0000000..89bed3f
--- /dev/null
+++ b/person_detection/mqtt.py
@@ -0,0 +1,53 @@
+import paho.mqtt.client as mqtt
+import time
+import os
+import sys
+import threading
+import logging as log
+
+mqttBroker ="localhost"
+
+resolution = {}
+timer = {}
+timestamp = {}
+
+def init(device):
+    set_resolution(device, "low")
+
+
+def person_detected(device, num):
+    timestamp[device] = time.time()
+    if device in resolution and resolution[device] == "high":
+        return
+    set_resolution(device, "high")
+
+
+def start_timer(device):
+    # log.info("Start timer for device {}".format(device))
+    timer[device] = threading.Timer(10.0, timer_expiry, device)
+    timer[device].start()
+
+
+def remove_timer(device):
+    del timer[device]
+
+
+def set_resolution(device, level):
+    log.info("Setting camera {} resolution to {}".format(device, level))
+    resolution[device] = level
+    if level == "high" and device not in timer:
+        start_timer(device)
+    client = mqtt.Client()
+    client.connect(mqttBroker)
+    client.publish("camera/" + str(5000 + int(device)), level)
+
+
+def timer_expiry(device):
+    now = time.time()
+    diff = now - timestamp[device]
+    # log.info("timer_expiry() - now:{}, timestamp:{}".format(now, timestamp[device]))
+    if diff > 5.0:
+        set_resolution(device, "low")
+        remove_timer(device)
+    else:
+        start_timer(device)
diff --git a/person_detection/person_detection.py b/person_detection/person_detection.py
index aa54601..15c4e82 100644
--- a/person_detection/person_detection.py
+++ b/person_detection/person_detection.py
@@ -17,6 +17,8 @@
 
 from base_camera import BaseCamera
 
+import mqtt
+
 Shape = namedtuple('Shape', ['n','c','h','w'])
 
 class Camera(BaseCamera):
@@ -36,6 +38,8 @@
 
         self.device = device
 
+        mqtt.init(device)
+
         super(Camera, self).__init__(device, args.idle)
 
     def __del__(self):
@@ -145,6 +149,9 @@
                 cv2.putText(frame, "camera: {}".format(self.device), (10, int(initial_h - 20)),
                         cv2.FONT_HERSHEY_COMPLEX, 0.6, black, 1)
 
+                if obj_count > 0:
+                    mqtt.person_detected(self.device, obj_count)
+
             yield cv2.imencode('.jpg', frame)[1].tobytes()
 
             if self.is_async_mode:
diff --git a/requirements.txt b/requirements.txt
index c91b2ad..4258352 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,6 +7,7 @@
 Jinja2==3.0.1
 MarkupSafe==2.0.1
 numpy==1.19.5
+paho-mqtt==1.6.1
 typing-extensions==3.10.0.2
 Werkzeug==2.0.1
 zipp==3.6.0
