IoT ve Yapay Zekâ

Yapay Zekâ ve IoT: Edge Modellerinden LLM Ajanlarına AIoT İçin Eksiksiz Rehber

Yapay zekâ ile IoT'yi birleştirmek için pratik bir rehber: modeller nerede çalışmalı, sensör verisi onlara nasıl ulaşır, anomaliler gerçek zamanlı nasıl tespit edilir ve LLM ajanlarının cihazlar üzerinde güvenle işlem yapmasına nasıl izin verilir.

Sensörlerin MQTT verilerini edge ve bulut yapay zekâ modellerine aktardığını ve modellerin cihazlara geri komut gönderdiğini gösteren yapay zekâ ve IoT çizimi
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Yapay zekâ ve IoT birbirini tamamlar: IoT cihazları fiziksel dünya hakkında sürekli veri akışları üretir, yapay zekâ ise bu akışları tespitlere, tahminlere ve kararlara dönüştürür. Bu rehber yapay zekâ modellerinin nerede çalışması gerektiğini, verilerin ve komutların cihazlar ile modeller arasında nasıl aktığını ve MQTT kullanarak gerçek zamanlı bir anomali dedektörü ile yapay zekâ ajanları için güvenli bir komut yolunun nasıl kurulacağını açıklar.

AIoT Ne Anlama Gelir?

Nesnelerin Yapay Zekâsı'nın (Artificial Intelligence of Things) kısaltması olan AIoT, bağlantılı cihazların ve makine öğrenmesinin tek bir döngü olarak çalıştığı sistemleri tanımlar. Sensörler ölçer, modeller yorumlar ve sonuçlar aksiyonları tetikler: bir uyarı, bir bakım kaydı, değiştirilmiş bir setpoint veya durdurulmuş bir konveyör.

Ölçek büyüdüğünde iki yarının hiçbiri tek başına pek kullanışlı değildir. Binlerce sensör insanların izleyebileceğinden fazla veri üretir; bu yüzden analitik olmadan verilerin çoğuna hiç bakılmaz. Canlı verisi olmayan bir model ise yalnızca geçmiş hakkında bir rapordur. İkisini birleştirmek şunları mümkün kılar:

  • Olağandışı davranışı aylık bir incelemede keşfetmek yerine gerçekleştiği anda tespit etmek.
  • Arızaları, talebi veya enerji tüketimini harekete geçmeye yetecek kadar erken tahmin etmek.
  • Kamera ve ses akışlarındaki nesneleri, insanları ve kusurları tanımak.
  • İnsanların ekipmanları hakkında doğal dilde soru sormasına izin vererek açıklamak ve etkileşim kurmak.

Zor olan nadiren modelin kendisidir. Zor olan, temiz ve bağlamlandırılmış veriyi modele güvenilir şekilde ulaştırmak ve modelin çıktısını doğru yere geri götürmektir. Bu bir mimari sorunudur ve bu rehberin odağı da budur.

Yapay Zekâ Nerede Çalışır: Cihaz, Edge veya Bulut

Her yapay zekâ ve IoT projesindeki ilk tasarım kararı, çıkarımın (inference) nerede yapılacağıdır. Her konumun belirgin güçlü yanları vardır.

Konum Tipik donanım En uygun olduğu alan Sınırlamalar
Cihaz üzerinde (TinyML) ESP32-S3, Arm Cortex-M Anahtar kelime algılama, basit titreşim sınıflandırma, hareket algılama Çok küçük modeller, sınırlı bellek, güncellemesi zor
Edge gateway Raspberry Pi, Jetson, endüstriyel PC, Coral hızlandırıcı Bilgisayarlı görü, çok sensörlü modeller, düşük gecikmeli yerel kararlar Sahada yönetilmesi gereken donanım
Bulut veya veri merkezi GPU sunucuları, yönetilen ML servisleri Eğitim, filo çapında analitik, tahminleme, LLM'ler Ağ gecikmesi ve bağımlılığı, veri aktarımı

Pratikte çoğu sistem üçünü birden kullanır. Bir cihaz filtreler ve sıkıştırır, bir edge node zamana duyarlı modeli çalıştırır, bulut ise modelleri eğitir ve filoyu analiz eder. Edge AI ve bulut AI karşılaştırması duruma göre karar vermenize yardımcı olur; edge AI nedir ve TinyML nedir yazıları edge seçeneklerini ayrıntılı olarak açıklar.

Yararlı bir kural, hesaplamayı modelin izin verdiği ölçüde sensöre yaklaştırmak ve yukarıya yalnızca üst sistemlerin ihtiyaç duyduğu şeyi göndermektir. Birkaç kilohertz'de örnekleme yapan bir ivmeölçer sürekli aktarılamayacak kadar çok veri üretir; ancak bir mikrodenetleyici her saniye RMS, tepe değeri ve birkaç frekans bandını hesaplayıp bu özellikleri küçük bir JSON mesajında yayımlayabilir. Cihaz üzerinde çıkarımı kendiniz denemek isterseniz ESP32'de TinyML eksiksiz bir örneği adım adım anlatır; model bir mikrodenetleyiciye sığmaz hâle geldiğinde ise edge AI donanım karşılaştırması bir gateway seçmenize yardımcı olur.

Yapay Zekâ ve IoT İçin Veri ve Komut Kanalı Olarak MQTT

Dağılım nasıl olursa olsun cihazlar, edge node'lar ve bulut servisleri veri alışverişi yapmalıdır. MQTT bu role doğal olarak uyar:

  • Ayrıştırma. Bir model ihtiyaç duyduğu topic'lere abone olur. İkinci bir model eklemek veya birini değiştirmek cihazlara dokunmaz.
  • Çift yönlü. Aynı broker telemetriyi yukarı, komutları veya model sonuçlarını aşağı taşır.
  • Verimli. Küçük başlıklar ve kalıcı bağlantılar kısıtlı cihazlara ve hücresel bağlantılara uyar.
  • Veri olarak sonuçlar. Bir model, anomali skoru veya tespit edilen bir nesne gibi çıktılarını dashboard'ların, uyarı sistemlerinin ve diğer modellerin tüketebileceği yeni topic'ler olarak yayımlar.

Tipik bir topic düzeni ham veriyi, model çıktılarını ve komutları ayırır:

plant1/line2/pump3/telemetry          raw sensor readings (JSON)
plant1/line2/pump3/ai/anomaly         model output: score, label, model version
plant1/line2/pump3/ai/forecast        predicted values
plant1/line2/pump3/command/set        validated commands to the device

Model çıktılarını kendi topic'lerine yayımlamak hak ettiği değeri görmeyen bir kalıptır. Yapay zekâ sonuçlarını diğer her sinyal gibi gözlemlenebilir kılar; bu da biri bir uyarının neden tetiklendiğini sorduğunda önemlidir. Ayrıca iki model sürümünü yan yana çalıştırıp karşılaştırmanıza olanak tanır.

Broker'ın veri taşıdığını, model çalıştırmadığını unutmayın. ConnectMQ, yerleşik yapay zekâ özellikleri olmayan yönetilen bir MQTT broker'dır ve dürüst, modüler kalıp da budur: modelleriniz broker'a sıradan MQTT client'ları olarak bağlanan Python servislerinde, edge cihazlarında veya ML platformlarında çalışır.

IoT Verilerini Yapay Zekâya Hazırlamak

Modeller ancak gördükleri veri kadar iyidir ve ham IoT verisi dağınıktır. Herhangi bir eğitim veya çıkarımdan önce her akışın birkaç temel standardı karşıladığından emin olun. Bunları erkenden doğru yapmak, sonradan haftalarca temizlik yapmaktan kurtarır.

Kaynakta zaman damgası. Her okumayı alındığı yerde değil, ölçüldüğü yerde damgalayın. Ağ gecikmeleri, yeniden denemeler ve edge tamponlama mesajların sırasını değiştirir; varış zamanını kullanan bir model aslında ağ kaynaklı olan kalıpları öğrenir. Cihaz saatlerini NTP ile senkronize edin ve zaman damgasını payload'a ekleyin.

Açık birimler ve varlık bağlamı. 71.2 değeri altı ay sonra bir model için hiçbir şey ifade etmez. Birimleri payload'a veya belgelenmiş bir şemaya koyun ve topic yolunun varlığı açıkça tanımlamasını sağlayın. Saha, alan, hat ve varlık gibi hiyerarşik bir namespace, eğitim setleri oluştururken verileri makine tipine veya konuma göre gruplamanıza olanak tanır.

Tutarlı örnekleme. Birçok model düzenli aralıklar varsayar. Cihazların periyodik olarak mı, değişiklikte mi yoksa her ikisinde de mi rapor vereceğine karar verin ve bunu belgeleyin. Cihazlar değişiklikte rapor verdiğinde, güncel değeri içeren periyodik bir heartbeat "değişiklik yok" ile "veri yok"u ayırt etmeye yardımcı olur.

Çalışma bağlamı. Devreye girerken yüksek akım çeken bir pompa normaldir; aynı akım kararlı durumda ise normal değildir. Modellerin bunlara göre koşullanabilmesi için makine durumunu, ürün tipini veya parti ID'sini sensör okumalarıyla birlikte yayımlayın.

Etiketler ve olaylar. Denetimli modeller önemsediğiniz sonuçların örneklerine ihtiyaç duyar. Bakım işlemlerini, operatör notlarını ve doğrulanmış arızaları kendi topic'lerinde zaman damgalı olaylar olarak kaydedin; böylece daha sonra sensör geçmişiyle birleştirilebilirler. Zaman serisi sensör verilerini etiketleme rehberi pratik iş akışlarını ele alır.

Tüm veri hattını gerçek ekipmanı bağlamadan önce simüle edilmiş değerlerle bir public MQTT test broker'ında prova edebilirsiniz; aşağıdaki uygulamalı örnek tam olarak bunu yapar.

Temel AIoT Kullanım Senaryoları

Anomali tespiti

Anomali tespiti, normal davranıştan farklı okumaları veya kalıpları işaretler: her zamankinden daha sıcak çalışan bir rulman, olağandışı bir titreşim spektrumu, bir gecede değişen bir enerji profili. Etiketlenmiş arıza verisi gerektirmediği için en yaygın ilk yapay zekâ projesidir. Yöntemler kayan istatistiklerden Isolation Forest'lara ve autoencoder'lara kadar uzanır. IoT anomali tespiti rehberi ile başlayın.

Kestirimci bakım

Kestirimci bakım, bakımın planlanabilmesi için ekipmanın ne zaman arızalanacağını tahmin eder. İdeal olarak arızaları da içeren bir geçmişe ve çalışma koşulları hakkında iyi bir bağlama ihtiyaç duyar. Makine öğrenmesi ile kestirimci bakım yazısı özellikleri, modelleri ve önce toplamanız gereken verileri ele alır.

Tahminleme

Tahminleme, enerji yükü, tank seviyeleri veya üretim talebi gibi gelecekteki değerleri öngörür. Klasik zaman serisi yöntemleri genellikle iyi performans gösterir ve derin modellere göre açıklanması daha kolaydır.

Bilgisayarlı görü

Nesne tespiti modelleri olan kameralar parçaları sayar, kusurları kontrol eder, yasak bölgelerdeki insanları tespit eder veya göstergeleri okur. Videoyu buluta aktarmak pahalı olduğu için görü genellikle edge'de çalışır ve MQTT ile YOLO nesne tespiti yazısında gösterildiği gibi MQTT üzerinden yalnızca tespitler taşınır.

LLM ajanları ve doğal dil arayüzleri

Büyük dil modelleri sensör verilerini özetleyebilir, ekipman hakkındaki soruları yanıtlayabilir ve tool calling ile cihazlarla etkileşime girebilir. Bu güçlüdür; aynı zamanda hataların fiziksel sonuçlar doğurduğu alandır. IoT cihazları için LLM ajanı rehberi mimariyi ele alır; aşağıdaki bölüm ise bir ajan ile gerçek donanım arasında bulunması gereken güvenlik katmanını gösterir.

Uygulamalı: MQTT Üzerinden Gerçek Zamanlı Anomali Tespiti

Bu örnek Python'da akış tabanlı bir anomali dedektörü oluşturur. Bir simülatör ara sıra arızalar içeren titreşim okumaları yayımlar; bir dedektör abone olur, her okumayı kayan bir z-skoru ile puanlar ve anomali olaylarını ayrı bir topic'e yayımlar. Her ikisi de benzersiz, boş olmayan bir client ID ile anonim client'ları kabul eden broker.connectmq.com'un ücretsiz public alanında çalışır. Oradaki veriler herkes tarafından okunabilir; bu yüzden simüle edilmiş veri kullanın.

pip install "paho-mqtt>=2.0"

Sensör simülatörü

# sensor_sim.py
import json
import random
import sys
import time

import paho.mqtt.client as mqtt

RUN_ID = sys.argv[1]  # kısa ve benzersiz herhangi bir dize, ör. a7f3k2
TOPIC = f"connectmq/demo/{RUN_ID}/line2/pump3/telemetry"

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"pump3-sim-{RUN_ID}")
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_start()

while True:
    vibration = random.gauss(2.0, 0.15)  # mm/s cinsinden normal RMS hız
    if random.random() < 0.03:
        vibration += random.uniform(1.0, 2.5)  # enjekte edilen arıza sıçraması
    payload = {"ts": int(time.time() * 1000), "vibrationMmS": round(vibration, 3)}
    client.publish(TOPIC, json.dumps(payload), qos=0)
    time.sleep(0.5)

Akış tabanlı dedektör

# detector.py
import json
import math
import sys
from collections import deque

import paho.mqtt.client as mqtt

RUN_ID = sys.argv[1]
BASE = f"connectmq/demo/{RUN_ID}/line2/pump3"
WINDOW, THRESHOLD, MODEL_VERSION = 120, 4.0, "zscore-v1"
history = deque(maxlen=WINDOW)


def on_connect(client, userdata, flags, reason_code, properties):
    client.subscribe(f"{BASE}/telemetry", qos=0)
    print("detector listening:", reason_code)


def on_message(client, userdata, msg):
    reading = json.loads(msg.payload)
    value = reading["vibrationMmS"]

    if len(history) >= 30:  # minimal bir temel çizgi için bekle
        mean = sum(history) / len(history)
        std = math.sqrt(sum((x - mean) ** 2 for x in history) / len(history)) or 1e-6
        score = (value - mean) / std
        if abs(score) > THRESHOLD:
            event = {
                "ts": reading["ts"],
                "value": value,
                "score": round(score, 2),
                "baselineMean": round(mean, 3),
                "model": MODEL_VERSION,
            }
            client.publish(f"{BASE}/ai/anomaly", json.dumps(event), qos=1)
            print("ANOMALY", event)
            return  # anomalileri temel çizginin dışında tut

    history.append(value)


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"detector-{RUN_ID}")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_forever()

Bir terminalde python sensor_sim.py a7f3k2, diğerinde python detector.py a7f3k2 çalıştırın; a7f3k2 yerine kendi rastgele dizenizi kullanın. Sonuçları şu komutla izleyin:

mosquitto_sub -h broker.connectmq.com -p 1883 -i viewer-a7f3k2 -t "connectmq/demo/a7f3k2/line2/pump3/ai/#" -v

Üç ayrıntı bunu bir oyuncaktan fazlası yapar. Anormal değerler temel çizgiden hariç tutulur; böylece bir arıza dedektöre arızaların normal olduğunu öğretmez. Her olay model sürümünü taşır; böylece onu hangi dedektörün ürettiğini bilebilirsiniz. Ve çıktı normal bir MQTT topic'idir; böylece bir dashboard, bir uyarı servisi veya bir bakım sistemi dedektörde değişiklik yapmadan abone olabilir. Birden fazla özellik üzerinde Isolation Forest kullanan bir sürüm için Python ile gerçek zamanlı anomali tespiti yazısına bakın.

Yapay Zekâ Ajanlarının Cihazlar Üzerinde Güvenle İşlem Yapmasını Sağlamak

Bir LLM ajanı veya herhangi bir model fiziksel ekipmana komut gönderdiğinde en önemli bileşen model değildir. Model ile cihaz arasındaki kapıdır. Bir modelin doğrudan komut topic'lerine yayın yapmasına asla izin vermeyin. Bunun yerine önerilerini bir izin listesi (allowlist), limitler ve hız kontrolleri uygulayan bir doğrulayıcıdan geçirin:

# command_gate.py - yapay zekânın önerdiği komutları cihazlara ulaşmadan önce doğrular
import json
import time
import uuid

import paho.mqtt.client as mqtt

PREFIX = "connectmq/demo/a7f3k2"
POLICY = {
    "line2/pump3": {"setpointRpm": (800, 1600)},
    "line2/fan1": {"speedPct": (0, 80)},
}
MIN_INTERVAL_S = 10
last_sent = {}


def validate(proposal):
    asset, param, value = proposal["asset"], proposal["param"], proposal["value"]
    if asset not in POLICY or param not in POLICY[asset]:
        return f"{asset}/{param} is not on the allowlist"
    lo, hi = POLICY[asset][param]
    if not isinstance(value, (int, float)) or not lo <= value <= hi:
        return f"value {value} outside [{lo}, {hi}]"
    if time.time() - last_sent.get(asset, 0) < MIN_INTERVAL_S:
        return "rate limit: too many commands for this asset"
    return None


def on_connect(client, userdata, flags, reason_code, properties):
    client.subscribe(f"{PREFIX}/ai/proposals", qos=1)


def on_message(client, userdata, msg):
    try:
        proposal = json.loads(msg.payload)
        error = validate(proposal)
    except (ValueError, KeyError) as exc:
        proposal, error = {"raw": msg.payload.decode(errors="replace")}, f"malformed: {exc}"
    audit = {"ts": int(time.time() * 1000), "proposal": proposal, "accepted": error is None, "reason": error}
    client.publish(f"{PREFIX}/ai/audit", json.dumps(audit), qos=1)
    if error is None:
        topic = f"{PREFIX}/{proposal['asset']}/command/set"
        client.publish(topic, json.dumps({proposal["param"]: proposal["value"]}), qos=1)
        last_sent[proposal["asset"]] = time.time()


client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=f"gate-{uuid.uuid4().hex[:8]}")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=30)
client.loop_forever()

Ajan, hangi LLM'i veya framework'ü kullanırsa kullansın, {"asset": "line2/pump3", "param": "setpointRpm", "value": 1450} gibi önerileri ai/proposals topic'ine yayımlar. Cihaz komut topic'lerine yalnızca kapı yayın yapar ve her karar bir denetim (audit) topic'ine yazılır. Production'da kapı kendi broker kimlik bilgileriyle çalışır ve cihazlar yalnızca ondan gelen komutları kabul eder. Güvenlik fonksiyonları ise hâlâ, üzerindeki hiçbir yazılımın geçersiz kılamayacağı PLC'ye veya kontrolcüye aittir. IoT cihazlarının güvenli yapay zekâ ile kontrolü bunu insan onayı adımlarıyla genişletir; MQTT için bir MCP sunucusu geliştirme ise okuma ve komut araçlarını bir ajana yapılandırılmış şekilde nasıl sunacağınızı gösterir.

Bir AIoT Proje Yol Haritası

  1. Kararı tanımlayın. Model bir sonuç ürettiğinde ne değişecek? Hiçbir şey değişmeyecekse burada durun.
  2. Veriyi toplayın ve bağlamlandırın. Tutarlı topic'ler, birimler, zaman damgaları ve varlık metaverileri. Yapay zekâ projelerinin çoğu algoritmalar yüzünden değil, veri kalitesi yüzünden başarısız olur.
  3. Basit kurallar veya istatistiklerle bir temel çizgi oluşturun. Karmaşık bir modelin bir şey katıp katmadığını size bu söyler.
  4. Çıkarım konumunu gecikme, bant genişliği ve bağlantıya göre seçin.
  5. Model çıktılarını model sürümü ve güven değeriyle topic olarak yayımlayın.
  6. Döngüyü dikkatle kapatın: önce uyarılar, sonra öneriler, en son da yalnızca bir doğrulama kapısı üzerinden otomatik komutlar.
  7. İzleyin ve yeniden eğitin. Sensörler kayar, prosesler değişir ve modellerin performansı düşer. IoT MLOps rehberi sürümlemeyi, izlemeyi ve yeniden dağıtımı ele alır.

Yaygın Tuzaklar

  • Temsil edici olmayan verilerle eğitim. Yazın eğitilmiş bir model her kış sabahını anomali olarak işaretleyebilir.
  • Eksik veriyi göz ardı etmek. Sessizleşen bir sensör kendi başına bir sinyaldir. Modellerin boşlukları kararlı okumalar sanmaması için Last Will durum topic'leri kullanın.
  • Kara kutu uyarılar. Operatörler anlayamadıkları uyarıları görmezden gelir. Her olaya değeri, temel çizgiyi ve nedeni ekleyin.
  • LLM'lere aşırı güvenmek. Dil modelleri makul görünen ama yanlış komutlar üretebilir. Önerdikleri her şeyi katı limitlere göre doğrulayın.
  • Her şeyi buluta göndermek. Yüksek frekanslı titreşim veya video edge'de işlenmeli, yukarıya özellikler veya tespitler gönderilmelidir.

AIoT Veri Hattınızı ConnectMQ ile Güçlendirin

Modellerinizin içeriye güvenilir bir veri akışına, dışarıya ise sonuçlar ve komutlar için kontrollü bir kanala ihtiyacı vardır. app.connectmq.com adresinde kredi kartı gerektirmeyen Serverless planla ücretsiz bir hesap oluşturun, ardından cihazları, dedektörleri ve ajanları üretilen kimlik bilgileriyle 8883 portunda TLS üzerinden bağlayın. ConnectMQ MQTT 3.1.1 ve 5.0'ı destekler; ücretli planlar ise birkaç dedektör instance'ının tek bir telemetri akışının yükünü paylaşabilmesi için paylaşımlı abonelikler ekler. Daha fazla bağlantı veya izole bir ortam için bulut MQTT broker planlarını karşılaştırın.

Sık Sorulan Sorular

Yapay zekâ ile IoT arasındaki fark nedir?

IoT, fiziksel dünyada algılayan ve harekete geçen bağlantılı cihazlar ağıdır; yapay zekâ ise verilerden kalıplar öğrenen ve tahminler yapan teknikler bütünüdür. AIoT ikisini birleştirir; böylece cihaz verileri modelleri besler ve model çıktıları aksiyonları tetikler.

Yapay zekâ edge'de mi yoksa bulutta mı çalışmalı?

Görü veya yüksek frekanslı titreşim analizi gibi zamana duyarlı ve bant genişliği yoğun çıkarımı edge'de çalıştırın. Eğitim, filo çapında analitik, tahminleme ve büyük dil modelleri için bulutu kullanın. Çoğu sistem ikisini birleştirir.

ConnectMQ yapay zekâ veya makine öğrenmesi özellikleri içeriyor mu?

Hayır. ConnectMQ MQTT mesajlaşma katmanıdır. Modelleriniz, veri almak ve sonuç yayımlamak için ConnectMQ'ya MQTT client'ı olarak bağlanan kendi servislerinizde, edge cihazlarınızda veya ML platformlarınızda çalışır.

Bir LLM IoT cihazlarını doğrudan kontrol edebilir mi?

Etmemelidir. Bir ajanın önerdiği komutları; izin listeleri, değer limitleri ve hız limitleri uygulayan, bir denetim kaydı tutan ve cihaz komut topic'lerine yayın yapmasına izin verilen tek client olan bir doğrulama kapısından geçirin.

En kolay ilk yapay zekâ ve IoT projesi hangisidir?

Mevcut bir sensör akışı üzerinde gerçek zamanlı anomali tespiti; çünkü etiketlenmiş arıza verisi gerektirmez. Bu rehberdeki örnek gibi kayan istatistiksel bir temel çizgi, faydalı uyarılar üretmek için çoğu zaman yeterlidir.

İlgili yazılar

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.