Bir ofis doluluk sensörü ağı, hangi odaların ve masaların gerçekte ne zaman kullanıldığını söyler. Bu kullanım senaryosunda PIR, mmWave ve CO2 tabanlı algılamayı karşılaştıracak, doluluğu temiz bir topic tasarımıyla MQTT üzerinden yayınlayacak ve veriyi bir ConnectMQ broker üzerinde alan kullanım raporları ve talebe dayalı HVAC kontrolü için kullanacaksınız.
Doluluk Neden Ölçülür
Hibrit çalışma, ofis kullanımını öngörülemez hâle getirdi. Takvimde rezerve edilen toplantı odaları boş kalırken küçük odaklanma odaları hep dolu. Personelin yalnızca bir kısmının geldiği günlerde bile katlar tam programla ısıtılıp soğutuluyor. Doluluk verisi pratik soruları yanıtlar: hangi odalar gereğinden büyük, bir kat cuma günleri kapatılabilir mi, boş bölgelerde havalandırma azaltılabilir mi?
Rezervasyon sistemleri ve kart verileri resmin bir kısmını verir, ancak bir odadaki gerçek varlığı değil, niyeti ve girişi kaydederler. Sensörler bu boşluğu doldurur; MQTT de verilerini birçok binadan toplamanın doğal bir yoludur.
Doğru Algılama Teknolojisini Seçmek
Her teknolojinin kendine özgü bir hata biçimi vardır ve en iyi kurulumlar ikisini birleştirir.
| Teknoloji | Nasıl çalışır | Güçlü yanları | Zayıf yanları | En uygun olduğu yer |
|---|---|---|---|---|
| PIR | Hareket eden ısı kaynaklarını algılar | Ucuz, düşük güç, olgun | Hareketsiz oturan kişileri kaçırır; odaklanılan çalışmalarda odalar boş görünür | Koridorlar, tuvaletler, aydınlatma kontrolü |
| mmWave radar | Nefes alma dahil çok küçük hareketleri algılar | Hareketsiz kişileri algılar, ince kapakların arkasından çalışır | Ayarlanmazsa duvarların ötesini görüp komşuları algılayabilir; şebeke gücü veya büyük pil gerekir | Toplantı odaları, odaklanma odaları, masalar |
| CO2 | Artan CO2 yoğunluğu nefes alan insanlara işaret eder | Aynı anda kabaca kişi sayısı ve hava kalitesi verir | Yavaş (dakikalar), havalandırma oranına bağlı | Havalandırma kontrolü, büyük odalar |
| Masa sensörleri | Masa altında PIR veya termal | Masa düzeyinde kullanım | Bakımı yapılacak çok sayıda cihaz | Paylaşımlı masa (hot-desking) analitiği |
| Termal dizi / kişi sayaçları | Düşük çözünürlüklü ısı görüntüsü veya kapı girişinde sayım | Görüntü olmadan kişi sayar | Daha yüksek maliyet, dikkatli yerleşim | Büyük açık alanlar, girişler |
Toplantı odaları için yaygın ve sağlam bir kombinasyon, varlık için mmWave artı doğrulama ve havalandırma için CO2'dir. Tek başına PIR, insanlar neredeyse hiç kıpırdamadığı için uzun görüntülü görüşmelerde odayı boş olarak raporlama eğilimindedir.
Önce gizlilik
Doluluk verisi insanlarla ilgilidir. Görüntü yakalamayan sensörler kullanın, kimlik yerine varlık veya sayı yayınlayın ve topic'lere asla ad veya kart kimliği koymayın. Masa verisini geniş çapta paylaşmadan önce toplulaştırın ve kurulumdan önce yerel mevzuatı ve çalışan temsilcileriyle yapılan anlaşmaları kontrol edin.
MQTT Topic ve Payload Tasarımı
Wildcard'ların gerçek soruları yanıtlaması için topic'leri fiziksel hiyerarşiye göre modelleyin:
acme/ist01/hq/f03/meeting-301/occupancy presence state (retained)
acme/ist01/hq/f03/meeting-301/co2 CO2 ppm
acme/ist01/hq/f03/desk-3-14/occupancy desk presence (retained)
Bir varlık mesajı durumu, kaynağı ve son değiştiği zamanı taşımalıdır:
{
"ts": "2026-10-16T09:41:07Z",
"occupied": true,
"source": "mmwave",
"since": "2026-10-16T09:12:30Z",
"count_estimate": null
}
Doluluğu retained olarak yayınlayın; böylece gün ortasında bağlanan bir panel mevcut durumu hemen gösterir. Değişiklikte ve birkaç dakikada bir kalp atışıyla yayınlayın; bu, trafiği çok küçük tutar ve yine de ölü bir sensörü tespit etmenizi sağlar. Klasör tarzı hiyerarşiyle acme/ist01/hq/f03/+/occupancy üçüncü kattaki her odayı ve masayı döndürür; ConnectMQ cihazlar görünümü de aynı topic'leri saha ve alana göre gruplayabilir.
Basit bir mmWave Sensör Düğümü
LD2410 ailesi gibi popüler düşük maliyetli mmWave modülleri, varlık algılandığında yüksek seviyeye geçen bir dijital çıkış pini sunar. Bir ESP32 bu pindeki sıçramaları bastırıp (debounce) değişiklikleri yayınlayabilir. Taslak, test için PubSubClient'ı ve herkese açık broker'ı kullanır.
#include <WiFi.h>
#include <PubSubClient.h>
const char* WIFI_SSID = "YOUR_WIFI";
const char* WIFI_PASS = "YOUR_WIFI_PASSWORD";
const char* BROKER = "broker.connectmq.com";
const int PORT = 1883;
const char* TOPIC = "connectmq/demo/occ-5t2w/f03/meeting-301/occupancy";
const int PRESENCE_PIN = 27; // LD2410 OUT pini
const unsigned long HOLD_MS = 60000; // son algılamadan sonra 60 sn "dolu" kal
const unsigned long HEARTBEAT_MS = 300000;
WiFiClient net;
PubSubClient mqtt(net);
bool occupied = false;
unsigned long lastSeen = 0, lastPublish = 0;
void publishState() {
char msg[96];
snprintf(msg, sizeof(msg), "{\"occupied\":%s,\"source\":\"mmwave\",\"uptime_s\":%lu}",
occupied ? "true" : "false", millis() / 1000);
mqtt.publish(TOPIC, msg, true); // retained
lastPublish = millis();
}
void connectMqtt() {
while (!mqtt.connected()) {
String id = "occ-" + String((uint32_t)ESP.getEfuseMac(), HEX);
if (mqtt.connect(id.c_str())) {
publishState();
} else {
delay(2000);
}
}
}
void setup() {
pinMode(PRESENCE_PIN, INPUT);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(250);
mqtt.setServer(BROKER, PORT);
}
void loop() {
if (!mqtt.connected()) connectMqtt();
mqtt.loop();
if (digitalRead(PRESENCE_PIN) == HIGH) lastSeen = millis();
bool now = (millis() - lastSeen) < HOLD_MS && lastSeen != 0;
if (now != occupied) {
occupied = now;
publishState();
} else if (millis() - lastPublish > HEARTBEAT_MS) {
publishState();
}
delay(100);
}
Tutma süresi (hold time) en önemli ayar parametresidir. Çok kısa olursa oda dolu ile boş arasında gidip gelir; çok uzun olursa insanlar çıktıktan sonra oda meşgul görünür. Toplantı odaları için altmış saniye ile birkaç dakika arası iyi çalışır. Radarın koridoru görmemesi için algılama menzilini tedarikçinin aracıyla ayarlayın.
Ham Varlıktan Kullanım Oranına
Ham açık/kapalı mesajları ancak toplulaştırıldığında faydalı hâle gelir. Küçük bir abone, oda ve gün başına odanın dolu olduğu çalışma saatlerinin payını hesaplayabilir. Minimal bir Python sürümü:
import json
import time
import uuid
from collections import defaultdict
import paho.mqtt.client as mqtt
PREFIX = "connectmq/demo/occ-5t2w"
occupied_since = {}
occupied_seconds = defaultdict(float)
def on_connect(client, userdata, flags, reason_code, properties):
client.subscribe(f"{PREFIX}/+/+/occupancy", qos=1)
def on_message(client, userdata, msg):
room = "/".join(msg.topic.split("/")[-3:-1])
data = json.loads(msg.payload)
now = time.time()
if data["occupied"] and room not in occupied_since:
occupied_since[room] = now
elif not data["occupied"] and room in occupied_since:
occupied_seconds[room] += now - occupied_since.pop(room)
hours = occupied_seconds[room] / 3600
client.publish(f"{PREFIX}/{room}/utilization",
json.dumps({"occupied_hours_today": round(hours, 2)}), retain=True)
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"occ-agg-{uuid.uuid4().hex[:6]}")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, 60)
client.loop_forever()
Üretimde, haftalık zirveleri raporlayabilmek ve odaları büyüklüğe göre karşılaştırabilmek için geçişleri bir veritabanında saklayın.
Doluluğu HVAC Kontrolü için Kullanmak
Doluluk verisi, havalandırmayı ve sıcaklık geri çekmelerini (setback) yönettiğinde en hızlı geri dönüşü sağlar:
- Bir bölge belirli bir süre boş kaldığında, bir gateway sıcaklık ölü bandını genişletebilir veya hava debisini azaltabilir.
- CO2 hedefinizin üzerine çıktığında, varlık durumundan bağımsız olarak havalandırmayı artırın.
- Programlanmış doluluktan önce mekânı her zamanki gibi önceden şartlandırın; doluluk programı yalnızca kırpar, asla yerini almaz.
- Yerel kontrolü her zaman güvenli tutun: doluluk verisi gelmeyi keserse HVAC kontrolörü kendi programına geri dönmelidir.
BMS'e geri yazma yolu BACnet'ten MQTT'ye yazısında anlatılanla aynıdır; hikâyenin HVAC tarafı da IoT sensörleriyle HVAC izleme yazısında ele alınıyor. CO2 ölçümü aynı zamanda bir hava kalitesi sinyalidir; iç ortam hava kalitesi ölçer projemize bakın.
Sensör Doğruluğunu Doğrulamak
Herhangi biri doluluk verisi üzerine bir rapor kurmadan önce sensörlerin doğruyu söylediğini kontrol edin. Basit bir doğrulama haftası iyi işler. Birkaç oda seçin ve bir meslektaşınızdan belirli saatlerde gerçek kullanımı not etmesini isteyin ya da sensör verisini takvim rezervasyonlarıyla karşılaştırıp uyuşmazlıkları arayın. Tipik bulgular; koridordaki hareketi gördüğü için odayı dolu raporlayan mmWave sensörleri, uzun görüşmeler sırasında odaları boş raporlayan PIR sensörleri ve insanlar geldikten sonra on dakika veya daha fazla gecikmeli tepki veren CO2 sensörleridir.
Her bulguyu kaynağında düzeltin: radarın algılama menzilini azaltın, bir PIR'ı kapıya değil oturma alanına bakacak şekilde taşıyın ya da CO2'yi yalnızca doğrulama sinyali olarak kullanın. Yeni kurulumların bilinen iyi bir yapılandırmadan başlaması için son ayarları oda tipi başına kaydedin. Doğrulama, odaları ölçülen insanlarla güven de oluşturur; bu da teknik doğruluk kadar önemlidir.
Kurulum Kontrol Listesi
- Odaları inceleyin ve oda tipine göre teknolojiye karar verin.
- mmWave sensörlerini kapılardan ve pencerelerden uzakta, odanın içine bakacak şekilde monte edin.
- Her sensöre özel bir broker üzerinde benzersiz bir client ID ve kimlik bilgileri verin.
- Topic gezginini izlerken odaya girip çıkarak her odayı devreye alın.
- Kullanım oranı hakkında sonuç çıkarmadan önce iki hafta çalıştırın.
Bir demo önekiyle herkese açık MQTT test broker'ında test etmek uygundur; ancak gerçek doluluk verisi insanların binada ne zaman olduğunu ortaya koyar, bu yüzden TLS üzerinden özel bir broker'a aittir. ConnectMQ'nun yönetilen MQTT broker'ı her sensöre kendi kimlik bilgilerini verir ve birkaç düzine sensör bir pilota rahatça sığar. Daha fazla bina projesi için IoT otomasyon rehberine bakın.
Doluluk Sensörlerinizi ConnectMQ'da Çalıştırın
app.connectmq.com adresinden kaydolun ve kredi kartı gerekmeden ücretsiz bir Serverless broker oluşturun. İlk sensörlerinizi bağlayın, varlığın topic gezgininde canlı olarak değiştiğini izleyin ve yoğun odalarda CO2 için eşik uyarı kuralları ekleyin. ConnectMQ broker'ı üstlenir; böylece siz mekâna odaklanabilirsiniz.
Sık Sorulan Sorular
Toplantı odaları için en doğru ofis doluluk sensörü hangisidir?
mmWave radar, hareketsiz oturan kişileri algıladığı için genellikle en iyi tekil seçimdir. CO2 ile birleştirmek doğrulama ekler ve havalandırma kontrolünü destekler.
Doluluk sensörleri kişisel veri toplar mı?
PIR, mmWave ve CO2 sensörleri görüntü veya kimlik yakalamaz, ancak doluluk örüntüleri yine de hassastır. Yalnızca varlık veya sayı yayınlayın ve veriyi özel bir broker'da tutun.
Tutma süresi ne kadar olmalı?
Küçük odalar için 60 saniyeyle, büyük odalar için birkaç dakikaya kadar bir değerle başlayın; ardından bir hafta gerçek veriyi izledikten sonra ayarlayın.
Doluluk verisi HVAC enerji kullanımını azaltabilir mi?
Evet, boş bölgelerde sıcaklık ve havalandırmayı geri çekerek. Konforun asla sensör ağına bağlı olmaması için kontrolörün programını yedek olarak tutun.



