"Yarınki gazetede ne yazacağımı bilmeden uyursam, uyandığımda kahvaltıda ne yiyeceğimi bilemem." — Terry Pratchett"

Pamukta Pembekurt Yönetimi: Gelenekselden Dijitale Dönüşüm

Pamuk üretiminin karşılaştığı en önemli zararlılardan biri olan Pembekurt (Pectinophora gossypiella), milyonlarca çiftçinin geçim kaynağını tehdit eden stratejik bir sorundur. Bu küçük boyutlu güve türü, gri kanatlı ve gece aktif yapısıyla fark edilmesi zor, ancak pembe lekeli larva formuyla karakteristiktir. Yaşam döngüsü iklim koşullarına bağlı olarak değişen bu zararlı, hem ekonomik kayıplara hem de çevresel sorunlara yol açmaktadır.

yazı resim

Pamuk üretimi, dünya genelinde milyonlarca çiftçinin geçim kaynağı olan stratejik bir tarımsal faaliyettir. Ancak bu değerli bitkiyi tehdit eden zararlılar arasında Pembekurt (Pectinophora gossypiella), hem ekonomik kayıpları hem de çevre üzerindeki etkileri açısından kritik bir öneme sahiptir.
Pembekurt (Pectinophora gossypiella): Biyoloji ve Tanım
Morfolojik Özellikler
Pembekurt, Lepidoptera takımından bir güve türüdür ve kanat açıklığı yaklaşık 7 mm olan küçük boyutlu bir zararlıdır. Gri renkli kanatları olan bu güve, gece aktif olduğu için çıplak gözle görülmesi oldukça zordur. Larva formu ise çok şeffaf beyaz renkte olup, vücudunun her bölümünde pembe lekeler ve kıllar bulunur. Bu karakteristik pembe görünümü nedeniyle "Pembekurt" adını almıştır.
Yaşam Döngüsü
Pembekurt'un yaşam döngüsü, sıcaklık ve nem koşullarına bağlı olarak değişiklik gösterir:
- Yumurta Dönemi: Yetişkin dişiler, pamuğun çiçek, tarak ve kozalarına veya yaprak içine yumurtalarını bırakır
- Kuluçka Süresi: Yumurtalar 4-12 gün içinde açılır
- Larva Dönemi: Yaklaşık 15 gün sürer ve bu dönemde asıl zarar oluşur
- Pupa ve Ergin Dönemi: Klimatik koşullara bağlı olarak tamamlanır
Konukçu Bitkileri ve Zarar Şekli
Pembekurt'un esas konukçusu pamuk olmakla birlikte, bamya ve ebegümecigiller familyasından bitkiler de alternatif konukçular arasında yer alır.
Zarar Tipleri:
- Generatif Organlarda Zarar: Larvalar tarak, çiçek ve kozada beslenerek doğrudan zarar verir
- Çiğit Zararı: Koza içindeki çiğitleri (pamuk tohumları) yiyerek hem lif kalitesini hem de verimi düşürür
- Rozet Çiçek Oluşumu: Çiçekte larva bulunması durumunda çiçeğin açılamaması ve kapalı kalması
Geleneksel Mücadele Yöntemleri
Biyoteknik Mücadele: Çiftleşmeyi Engelleme Tekniği
Biyoteknik mücadele, çevre dostu ve sürdürülebilir bir yaklaşım olarak öne çıkmaktadır.
Uygulama Protokolü:

  1. İzleme Aşaması: İlk çiçeklenme görülmeden önce (taraklanma dönemi), dekara 1 adet delta tipi feromon tuzağı yerleştirilir
  2. Popülasyon Takibi: Tuzaklardaki güve sayımları haftada bir düzenli olarak yapılır
  3. Müdahale Zamanlaması: İlk güve yakalandıktan sonra PB-ROPE çubukları devreye girer
  4. Feromon Uygulaması: Dekara 25 adet PB-ROPE çubuk, pamuk bitkisinin tepe kısmına bağlanır
    Çalışma Mekanizması:
    Feromon çubukları, dişi Pembekurt'un doğal çiftleşme kokusunu taklit ederek erkek güveleri yanıltır. Bu durum:
    - Erkek güvelerin doğal dişileri bulmasını engeller
    - Çiftleşme oranını dramatik olarak düşürür
    - Döllenmemiş yumurta oranını artırarak bir sonraki nesli kontrol eder
    - Kimyasal pestisit kullanım ihtiyacını minimuma indirir
    Kimyasal Mücadele
    Kimyasal mücadele, biyoteknik yöntemlerin yetersiz kaldığı durumlarda son çare olarak uygulanır. Bu yaklaşımın dezavantajları şunlardır:
    - Doğal dengeyi bozma riski
    - Faydalı böceklerin zarar görmesi
    - Pestisit kalıntı sorunu
    - Direnç gelişimi riski
    Ticari Feromon Ürünleri
    Pazarda mevcut olan başlıca feromon ürünleri:
    Pegos (SMC İlaç Kimya)
    - Pamukta Pembe Kurt için özel olarak geliştirilmiş feromon kapsül/tuzak seti
    - Kullanım kolaylığı ve etkinlik açısından çiftçi dostu tasarım
    AgriSense Frustrate-PBW
    - Z,Z/E-7,11-hexadecadienyl acetate içerikli
    - Taraklanma dönemi başlangıcında dekara 25 adet kullanım önerisi
    - Uluslararası standartlarda üretim kalitesi
    Dijital Dönüşüm: Akıllı Tarım Çözümleri
    Yazılım Destekli Entegre Zararlı Yönetimi (IPM)
    Modern tarımda, geleneksel yöntemler yazılım destekli sistemlerle entegre edilerek daha etkin sonuçlar elde edilmektedir.
    Dijital Çözüm Bileşenleri:
  5. Feromon Tuzak İzleme Yazılımları
    - Akıllı tuzaklar ile otomatik güve sayımı
    - Kamera ve sensör teknolojisiyle 7/24 izleme
    - Bulut tabanlı veri analizi ve raporlama
  6. Tahmin ve Risk Analiz Programları
    - Meteorolojik verilerle entegre popülasyon tahmini
    - Sıcaklık, nem, yağış verilerinin biyolojik modellerle analizi
    - Kritik dönemlerin önceden belirlenmesi
  7. Mobil ve Web Uygulamaları
    - Tarla bazlı gözlem kayıtları
    - Gerçek zamanlı karar destek sistemleri
    - Çiftçi-uzman iletişim platformları
  8. Simülasyon ve Modelleme Yazılımları
    - Monte Carlo simülasyonu ile risk analizi
    - Volatilite ve regresyon analizleri
    - Optimum uygulama zamanlaması hesaplaması
    Akıllı Tuzak Teknolojisi
    Teknik Özellikler:
    - IoT sensörleri ile otomatik veri toplama
    - GPS koordinatlarıyla lokasyon takibi
    - Batarya ömrü optimizasyonu
    - Hava koşullarına dayanıklı tasarım
    Avantajlar:
    - Manuel sayım ihtiyacının ortadan kalkması
    - 24 saat kesintisiz izleme
    - Veri tutarlılığının artması
    - İş gücü maliyetlerinde tasarruf
    Canlı Saha Yönetim Sistemi: Teknolojik Entegrasyon
    Sistem Mimarisi
    Modern PBW (Pink Bollworm) yönetim sistemleri, çeşitli teknolojik bileşenleri entegre ederek kapsamlı bir çözüm sunar:
  9. Veri Toplama Katmanı
    - MQTT protokolü ile IoT sensör entegrasyonu
    - Gerçek zamanlı çevre koşulları ölçümü (sıcaklık, nem)
    - Otomatik güve sayım sistemleri
    - GPS tabanlı konum belirleme
  10. Veri İşleme Katmanı
    - Streamlit tabanlı web arayüzü
    - Pandas ile veri analizi ve manipülasyonu
    - NumPy ile matematiksel hesaplamalar
    - Matplotlib ile görselleştirme
  11. Karar Destek Katmanı
    - Monte Carlo simülasyon algoritmaları
    - Risk seviyesi hesaplama modülleri
    - Otomatik feromon dozaj önerileri
    - Eşik değer karşılaştırmaları
    Kullanıcı Arayüzü Özellikleri
    Ana Panel Bileşenleri:
    - Çoklu tarla yönetimi
    - Gerçek zamanlı durum göstergeleri
    - İnteraktif grafikler ve trendler
    - Renkli risk seviyesi göstergeleri
    Sidebar Kontrolleri:
    - Risk analizi parameter ayarları
    - Simülasyon konfigürasyonu
    - Tarla seçim menüsü
    - Sistem durumu monitörü
    Veri Analizi ve Görselleştirme
    Grafik Türleri:
  12. Zaman Serisi Grafikleri: Güve popülasyonunun zamana bağlı değişimi
  13. Eğilim Analizi: Polinom regresyonu ile trend belirleme
  14. Histogram Analizi: Monte Carlo simülasyon sonuçlarının dağılımı
  15. Çok Değişkenli Analiz: Sıcaklık, nem ve güve sayısı korelasyonu
    Monte Carlo Risk Analizi
    Matematiksel Temel:
    - Belirsizlik parametresi (σ) ile stokastik modelleme
    - Normal dağılım varsayımı altında simülasyon
    - Kritik eşik değerlerle risk olasılığı hesaplaması
    - Bootstrap yöntemiyle güven aralığı belirleme
    Risk Kategorileri:
    - Çok Düşük (<%20): Rutin izleme yeterli
    - Düşük (%20-40): Dikkatli takip gerekli
    - Orta*(%40-60): Hazırlık tedbirleri alınmalı
    - Yüksek (%60-80): Hemen müdahale gerekli
    - Çok Yüksek (>%80): Acil durum protokolü
    Otomatik Müdahale Sistemleri
    PB-ROPE Otomasyonu
    Sistem Bileşenleri:
    - Mikro-doz pompalama sistemleri
    - GPS kontrollü hareket mekanizmaları
    - Hava koşulları sensörleri
    - Uzaktan kontrol modülleri
    Operasyonel Protokol:
  16. Risk eşiği aşıldığında otomatik aktivasyon
  17. Tarla koordinatlarına göre navigasyon
  18. Hesaplanan dozda feromon uygulama
  19. Uygulama sonrası doğrulama ve kayıt
    İletişim ve Uyarı Sistemleri
    Multi-channel Bildirim:
    - SMS uyarıları (Twilio entegrasyonu)
    - E-posta bildirimleri
    - Push notification'lar
    - Web dashboard uyarıları
    Kritik Durum Protokolü:
    - Otomatik escalation mekanizması
    - Çoklu stakeholder bilgilendirme
    - Acil durum eylem planı aktivasyonu
    - Trace edilebilir müdahale kayıtları
    Raporlama ve Veri Yönetimi
    Çok Formatlı Raporlama
    Desteklenen Formatlar:
    - CSV: Ham veri analizi için
    - Excel: Tablo hesaplamaları ve pivot analizler
    - JSON: API entegrasyonu ve veri transferi
    - PDF: Resmi raporlama ve arşivleme
    İstatistiksel Analiz Metrikleri
    Temel İstatistikler:
    - Ortalama ve maksimum güve sayıları
    - Çevre koşulları trend analizi
    - Feromon etkinlik oranları
    - Maliyet-fayda hesaplamaları
    İleri Analitik:
    - Korelasyon matrisleri
    - Regresyon modeli katsayıları
    - Fourier analizi ile periyodik pattern tespiti
    - Makine öğrenmesi ile tahmin modelleri
    Sistem Entegrasyonu ve Ölçeklenebilirlik
    API ve Veri Akışı
    Teknik Altyapı:
    - RESTful API servisleri
    - MQTT broker konfigürasyonu
    - Database entegrasyonu (PostgreSQL/MongoDB)
    - Load balancing ve cache mekanizmaları
    Ölçeklenebilirlik Faktörleri:
    - Horizontal scaling capability
    - Multi-tenant architecture
    - Edge computing entegrasyonu
    - Cloud-hybrid deployment seçenekleri
    Güvenlik ve Veri Koruma
    Güvenlik Önlemleri:
    - End-to-end encryption
    - OAuth 2.0 authentication
    - Role-based access control
    - Data masking ve anonymization
    Ekonomik Analiz ve ROI
    Maliyet Karşılaştırması
    Geleneksel Yöntem Maliyetleri:
    - Manuel labor maliyeti
    - Kimyasal pestisit giderleri
    - Çevre remediation maliyetleri
    - Verim kayıpları
    Dijital Sistem Yatırımı:
    - İlk kurulum maliyeti
    - Sensör ve ekipman giderleri
    - Yazılım lisans ücretleri
    - Maintenance ve support
    ROI Hesaplaması:
    Tipik bir 100 dekar pamuk tarlası için 3 yıllık ROI analizi:
    - %15-25 verim artışı
    - %40-60 pestisit kullanım azalması
    - %30-45 işçilik maliyet tasarrufu
    - Toplam ROI: %180-220
    Çevre Etkisi ve Sürdürülebilirlik
    Ekolojik Faydalar
    Biyolojik Çeşitlilik:
    - Faydalı böcek popülasyonlarının korunması
    - Doğal predatör-prey dengesinin sürdürülmesi
    - Pollinatör türlerinin zarar görmemesi
    Toprak ve Su Kalitesi:
    - Kimyasal kalıntı azalması
    - Toprak mikroorganizma çeşitliliğinin korunması
    - Yeraltı suyu kontaminasyon riskinin minimize edilmesi
    Carbon Footprint Azaltma
    Emisyon Azaltıcı Faktörler:
    - Pestisit üretim süreçlerinden kaynaklanan emisyonların azalması
    - Traktör ve ilaçlama ekipmanı kullanım sıklığının düşmesi
    - Logistics ve taşıma maliyetlerinin optimizasyonu
    Gelecek Perspektifleri
    Teknolojik Trendler
    Emerging Technologies:
    - Yapay zeka ve makine öğrenmesi entegrasyonu
    - Drone teknolojisi ile havadan izleme
    - Blockchain ile traceability sistemleri
    - Augmented reality ile çiftçi eğitimi
    Precision Agriculture Integration:
    - Satelit görüntüleme ile büyük alan analizi
    - Hiperspektral imaging ile erken teşhis
    - Genomic sequencing ile zararlı strain analizi
    - Climate modeling ile uzun vadeli tahminler
    Politika ve Regülasyon
    Destekleyici Politikalar:
    - Sürdürülebilir tarım teşvikleri
    - Dijital transformation grants
    - Çevre dostu teknoloji sübvansiyonları
    - Research & development tax credits
    Pamukta Pembekurt yönetimi, geleneksel biyoteknik yöntemlerden dijital entegre sistemlere doğru hızla değişim geçirmektedir. Bu dönüşüm yalnızca teknik bir gelişme değil, aynı zamanda ekonomik sürdürülebilirlik ve çevresel sorumluluk açısından da kritik bir adımdır. Modern PBW yönetim sistemleri, feromon tuzaklarından Monte Carlo simülasyonlarına, IoT sensörlerinden makine öğrenme algoritmalarına kadar geniş bir teknoloji yelpazesini entegre ederek çiftçilere kapsamlı bir çözüm sunmaktadır. Bu sistemlerin başlıca avantajları şunlardır:
  20. Proaktif Yaklaşım: Geleneksel reaktif mücadele yerine tahmin ve önleme odaklı stratejiler
  21. Ekonomik Verimlilik: Kimyasal girdilerin azaltılması ve verim optimizasyonu
  22. Çevresel Koruma: Ekosistemin korunması ve sürdürülebilir tarım practices
  23. Veri Driven Kararlar: Objektif verilerle desteklenen bilimsel yaklaşım
  24. Ölçeklenebilirlik: Küçük aile işletmelerinden büyük tarımsal enterprises'a kadar uygulanabilirlik
    Gelecekte, bu sistemlerin yapay zeka, blockchain ve iklim modelleme gibi yeni teknolojilerle entegrasyonu, pamuk üretiminde daha da ileri düzey optimizasyon ve sürdürülebilirlik sağlayacaktır. Pembekurt yönetimindeki bu dijital dönüşüm, küresel gıda güvenliği ve çevresel sürdürülebilirlik hedefleri açısından örnek bir model oluşturmaktadır. Bu kapsamlı yaklaşım, çiftçilerin hem ekonomik getirilerini maksimize etmelerine hem de gelecek nesiller için sağlıklı bir çevre bırakmalarına olanak tanımaktadır. Pembekurt yönetimindeki bu paradigma değişimi, modern tarımın geleceğine ışık tutan önemli bir örnek teşkil etmektedir.
    Streamlit Uygulaması
    PBW Canlı Saha Yönetim Sistemi
    Amaç: Tarla bazlı canlı güve (zararlı) izleme, risk analizi ve otomatik feromon uygulaması yapmak.
    Kullanıcı arayüzü: Streamlit ile hazırlanmış, hem ana panel hem de sidebar üzerinden kontrol sağlanıyor.
    Veriler: Canlı IoT sensörleri (MQTT üzerinden) ve demo verilerle çalışabiliyor.
    Python

live_pbw_field_management.py

import streamlit as st
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import paho.mqtt.client as mqtt
import requests
from twilio.rest import Client
import datetime
import os
import time
import json
from io import BytesIO

Sayfa ayarları

st.set_page_config(
page_title="PBW Canlı Saha Yönetimi",
layout="wide",
page_icon="🌾"
)
st.title("🌾 PBW Canlı Saha Yönetim Sistemi")

------------------------------

0️⃣ Başlangıç Ayarları ve Session State

------------------------------

if 'all_data' not in st.session_state:
st.session_state.all_data = {}
if 'mqtt_connected' not in st.session_state:
st.session_state.mqtt_connected = False
if 'last_update' not in st.session_state:
st.session_state.last_update = datetime.datetime.now()

------------------------------

1️⃣ Canlı IoT Veri Akışı

------------------------------

MQTT_BROKER = "broker.hivemq.com"
MQTT_PORT = 1883
MQTT_TOPIC = "pbw/live_field"
MQTT_KEEPALIVE = 60
def on_connect(client, userdata, flags, rc):
if rc == 0:
st.session_state.mqtt_connected = True
st.sidebar.success("MQTT broker'a bağlandı")
else:
st.session_state.mqtt_connected = False
st.sidebar.error(f"Bağlantı hatası: {rc}")
def on_disconnect(client, userdata, rc):
st.session_state.mqtt_connected = False
if rc != 0:
st.sidebar.warning("Beklenmeyen MQTT bağlantı kesilmesi")
def on_message(client, userdata, msg):
try:
payload = msg.payload.decode()

JSON formatında veri bekleyelim

try:
data = json.loads(payload)
tarla_id = data.get('tarla_id', 'unknown')
except json.JSONDecodeError:

Eski formatı desteklemek için

row = payload.split(',')
if len(row) >= 6:
tarla_id = row[0]
data = {
'tarih': row[1],
'tuzak_sayisi': int(row[2]),
'guve_sayisi': int(row[3]),
'sicaklik': float(row[4]),
'nem': float(row[5])
}
else:
st.error(f"Geçersiz veri formatı: {payload}")
return
if tarla_id not in st.session_state.all_data:
st.session_state.all_data[tarla_id] = []
st.session_state.all_data[tarla_id].append({
'tarih': pd.to_datetime(data.get('tarih', datetime.datetime.now())),
'tuzak_sayisi': data.get('tuzak_sayisi', 0),
'guve_sayisi': data.get('guve_sayisi', 0),
'sicaklik': data.get('sicaklik', 0.0),
'nem': data.get('nem', 0.0)
})

Veri sayısını sınırla (performans için)

if len(st.session_state.all_data[tarla_id]) > 1000:
st.session_state.all_data[tarla_id] = st.session_state.all_data[tarla_id][-500:]
st.session_state.last_update = datetime.datetime.now()
except Exception as e:
st.error(f"Veri işleme hatası: {str(e)}")

MQTT istemcisini başlat

@st.cache_resource
def init_mqtt():
client = mqtt.Client()
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
try:
client.connect(MQTT_BROKER, MQTT_PORT, MQTT_KEEPALIVE)
client.subscribe(MQTT_TOPIC)
client.loop_start()
return client
except Exception as e:
st.error(f"MQTT bağlantı hatası: {str(e)}")
return None
mqtt_client = init_mqtt()

------------------------------

2️⃣ Tarla Seçimi ve Durum Bilgisi

------------------------------

st.sidebar.header("Tarla Seçimi")

Tarla listesi

tarla_list = list(st.session_state.all_data.keys()) if st.session_state.all_data else ['Tarla1', 'Tarla2', 'Tarla3', 'Tarla4', 'Tarla5']
selected_tarla = st.sidebar.selectbox("Tarla Seçin", tarla_list)

Bağlantı durumu

if st.session_state.mqtt_connected:
st.sidebar.success("✅ Canlı veri akışı aktif")
else:
st.sidebar.error("❌ Canlı veri akışı kesildi")

Son güncelleme zamanı

time_diff = (datetime.datetime.now() - st.session_state.last_update).total_seconds()
if time_diff > 300: # 5 dakikadan fazla
st.sidebar.error(f"❌ Son veri: {time_diff:.0f} saniye önce")
elif time_diff > 60:
st.sidebar.warning(f"⚠️ Son veri: {time_diff:.0f} saniye önce")
else:
st.sidebar.info(f"✅ Son veri: {time_diff:.0f} saniye önce")

------------------------------

3️⃣ Veriyi Hazırla

------------------------------

if selected_tarla in st.session_state.all_data and st.session_state.all_data[selected_tarla]:
data = pd.DataFrame(st.session_state.all_data[selected_tarla])

Tarihe göre sırala ve tekilleştir

data = data.sort_values('tarih').drop_duplicates('tarih', keep='last')
else:
st.info("Gerçek veri bulunamadı, demo verileri kullanılıyor...")
gun_sayisi = 30
dates = pd.date_range(start=datetime.datetime.now() - datetime.timedelta(days=gun_sayisi-1),
end=datetime.datetime.now(), freq='D')
sicaklik = np.random.normal(30, 2, gun_sayisi)
nem = np.random.normal(70, 5, gun_sayisi)
guve = np.linspace(5, 30, gun_sayisi) + np.random.normal(0, 2, gun_sayisi)
data = pd.DataFrame({
'tarih': dates,
'sicaklik': np.maximum(sicaklik, 0),
'nem': np.maximum(nem, 0),
'guve_sayisi': np.maximum(guve, 0),
'tuzak_sayisi': np.random.randint(5, 15, gun_sayisi)
})

------------------------------

4️⃣ Monte Carlo + Risk Analizi

------------------------------

st.sidebar.header("Risk Analizi Ayarları")
sigma = st.sidebar.slider("Belirsizlik Seviyesi (σ)", 1.0, 10.0, 3.0, 0.5)
simulations = st.sidebar.slider("Simülasyon Sayısı", 100, 10000, 1000, 100)
kritik_esik = st.sidebar.slider("Kritik Eşik Değeri", 10, 50, 25, 1)
def monte_carlo_simulasyonu(temel_deger, sigma, simulations):
return np.maximum(temel_deger + np.random.normal(0, sigma, simulations), 0)
def risk_seviyesi_hesapla(simule_edilmis_degerler, kritik_esik):
risk_olasiligi = np.sum(simule_edilmis_degerler > kritik_esik) / len(simule_edilmis_degerler)
if risk_olasiligi < 0.2:
return "Çok Düşük", 15, risk_olasiligi
elif risk_olasiligi < 0.4:
return "Düşük", 20, risk_olasiligi
elif risk_olasiligi < 0.6:
return "Orta", 25, risk_olasiligi
elif risk_olasiligi < 0.8:
return "Yüksek", 30, risk_olasiligi
else:
return "Çok Yüksek", 35, risk_olasiligi
if len(data) > 0:
son_guve_sayisi = data['guve_sayisi'].values[-1]
simule_edilmis_degerler = monte_carlo_simulasyonu(son_guve_sayisi, sigma, simulations)
risk_seviyesi, onerilen_feromon, risk_olasiligi = risk_seviyesi_hesapla(simule_edilmis_degerler, kritik_esik)
else:
son_guve_sayisi = 0
risk_seviyesi = "Bilinmiyor"
onerilen_feromon = 0
risk_olasiligi = 0

------------------------------

5️⃣ Grafik Gösterimi

------------------------------

st.subheader(f"{selected_tarla} - Canlı İzleme ve Analiz")

İki sütunlu layout

col1, col2 = st.columns([2, 1])
with col1:
fig, ax = plt.subplots(figsize=(10, 6))

Güve sayısı grafiği

ax.plot(data['tarih'], data['guve_sayisi'], marker='o', label='Güve Sayısı', linewidth=2, color='blue')
ax.axhline(y=kritik_esik, color='red', linestyle=':', label='Kritik Eşik', linewidth=2)

Eğilim çizgisi

if len(data) > 1:
z = np.polyfit(range(len(data)), data['guve_sayisi'], 1)
p = np.poly1d(z)
ax.plot(data['tarih'], p(range(len(data))), "r--", alpha=0.7, label='Eğilim')
ax.set_xlabel("Tarih")
ax.set_ylabel("Güve Sayısı")
ax.set_title(f"{selected_tarla} - Güve Popülasyonu ve Risk Analizi")
ax.legend()
ax.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
st.pyplot(fig)
with col2:

Risk göstergesi

st.metric("Son Güve Sayısı", f"{son_guve_sayisi:.1f}")

Renkli risk göstergesi

risk_renkleri = {
"Çok Düşük": "green",
"Düşük": "lightgreen",
"Orta": "orange",
"Yüksek": "lightcoral",
"Çok Yüksek": "red"
}
st.markdown(f"

Risk Seviyesi: {risk_seviyesi}

",
unsafe_allow_html=True)
st.metric("Risk Olasılığı", f"{risk_olasiligi*100:.1f}%")
st.metric("Önerilen Feromon", f"{onerilen_feromon} adet/da")

Çevre koşulları

if len(data) > 0:
st.subheader("Çevre Koşulları")
st.metric("Sıcaklık", f"{data['sicaklik'].values[-1]:.1f} °C")
st.metric("Nem", f"{data['nem'].values[-1]:.1f} %")

Monte Carlo simülasyon grafiği

st.subheader("Monte Carlo Risk Simülasyonu")
fig2, ax2 = plt.subplots(figsize=(10, 4))
ax2.hist(simule_edilmis_degerler, bins=50, alpha=0.7, color='skyblue', edgecolor='black')
ax2.axvline(x=kritik_esik, color='red', linestyle=':', linewidth=2, label='Kritik Eşik')
ax2.set_xlabel("Güve Sayısı Tahmini")
ax2.set_ylabel("Frekans")
ax2.set_title("Monte Carlo Simülasyonu - Gelecek Güve Popülasyonu Tahmini")
ax2.legend()
ax2.grid(True, alpha=0.3)
st.pyplot(fig2)

------------------------------

6️⃣ Otomatik PB-ROPE Komutu

------------------------------

st.subheader("Otomatik Müdahale Sistemi")
def feromon_komutu_gonder(tarla, adet):
try:

Demo modunda gerçek istek atmıyoruz

if st.sidebar.checkbox("Demo Modu", value=True):
st.success(f"DEMO: {tarla} için {adet} adet feromon uygulandı")
return True
url = f"http://pb-rope-device.local/set_dose?tarla={tarla}&adet={adet}"
response = requests.get(url, timeout=5)
if response.status_code == 200:
st.success(f"{tarla} için {adet} adet feromon uygulandı")
return True
else:
st.warning("Cihazla iletişim kurulamadı")
return False
except Exception as e:
st.error(f"Cihaz hatası: {str(e)}")
return False

Otomatik ve manuel uygulama seçenekleri

otomatik_uygulama = st.checkbox("Otomatik feromon uygulama (risk yüksekse)", value=True)
if otomatik_uygulama and risk_seviyesi in ["Yüksek", "Çok Yüksek"]:
if feromon_komutu_gonder(selected_tarla, onerilen_feromon):

Uygulama kaydı

if 'uygulamalar' not in st.session_state:
st.session_state.uygulamalar = []
st.session_state.uygulamalar.append({
'tarih': datetime.datetime.now(),
'tarla': selected_tarla,
'miktar': onerilen_feromon,
'risk': risk_seviyesi
})
if st.button("Manuel Feromon Uygula"):
feromon_komutu_gonder(selected_tarla, onerilen_feromon)

------------------------------

7️⃣ Raporlama

------------------------------

st.subheader("Raporlama ve Veri İşlemleri")

Tarih aralığı seçimi

tarih_baslangic = st.date_input("Başlangıç Tarihi", value=data['tarih'].min().date())
tarih_bitis = st.date_input("Bitiş Tarihi", value=data['tarih'].max().date())

Filtrelenmiş veri

filtrelenmis_data = data[(data['tarih'].dt.date >= tarih_baslangic) &
(data['tarih'].dt.date <= tarih_bitis)]

İndirme seçenekleri

rapor_format = st.selectbox("Rapor Formatı", ["CSV", "Excel", "JSON"])
def convert_df_to_csv(df):
return df.to_csv(index=False).encode('utf-8')
def convert_df_to_excel(df):
output = BytesIO()
with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
df.to_excel(writer, index=False, sheet_name='PBW_Veri')
return output.getvalue()
def convert_df_to_json(df):
return df.to_json(indent=4, orient='records', date_format='iso')
if rapor_format == "CSV":
rapor_data = convert_df_to_csv(filtrelenmis_data)
dosya_uzanti = "csv"
mime_type = "text/csv"
elif rapor_format == "Excel":
rapor_data = convert_df_to_excel(filtrelenmis_data)
dosya_uzanti = "xlsx"
mime_type = "application/vnd.ms-excel"
else:
rapor_data = convert_df_to_json(filtrelenmis_data)
dosya_uzanti = "json"
mime_type = "application/json"
st.download_button(
label=f"{rapor_format} olarak indir",
data=rapor_data,
file_name=f"PBW_{selected_tarla}_{datetime.date.today()}.{dosya_uzanti}",
mime=mime_type
)

Özet istatistikler

st.subheader("Özet İstatistikler")
if not filtrelenmis_data.empty:
col1, col2, col3, col4 = st.columns(4)
with col1:
st.metric("Ortalama Güve Sayısı", f"{filtrelenmis_data['guve_sayisi'].mean():.1f}")
with col2:
st.metric("Maksimum Güve Sayısı", f"{filtrelenmis_data['guve_sayisi'].max():.1f}")
with col3:
st.metric("Ortalama Sıcaklık", f"{filtrelenmis_data['sicaklik'].mean():.1f} °C")
with col4:
st.metric("Ortalama Nem", f"{filtrelenmis_data['nem'].mean():.1f} %")
st.dataframe(filtrelenmis_data.tail(10))

------------------------------

8️⃣ Kritik Uyarı Sistemi

------------------------------

if risk_seviyesi in ["Yüksek", "Çok Yüksek"]:
st.error(f"⚠️ {selected_tarla} için KRİTİK RİSK! Acil müdahale gerekiyor!")

Twilio SMS entegrasyonu (opsiyonel)

if st.button("SMS Uyarısı Gönder"):
try:

Twilio kimlik bilgilerini kontrol et

if all(key in st.secrets for key in ['TWILIO_ACCOUNT_SID', 'TWILIO_AUTH_TOKEN', 'TWILIO_PHONE_NUMBER', 'ALARM_PHONE_NUMBER']):
account_sid = st.secrets['TWILIO_ACCOUNT_SID']
auth_token = st.secrets['TWILIO_AUTH_TOKEN']
client_twilio = Client(account_sid, auth_token)
message = client_twilio.messages.create(
body=f"⚠️ PBW UYARISI: {selected_tarla} kritik risk! Tahmini güve: {son_guve_sayisi:.1f}, önerilen feromon: {onerilen_feromon} adet/da", from_=st.secrets['TWILIO_PHONE_NUMBER'], to=st.secrets['ALARM_PHONE_NUMBER']
)
st.success("SMS uyarısı gönderildi")
else:
st.warning("SMS gönderimi için gerekli ayarlar yapılandırılmamış")
except Exception as e:
st.error(f"SMS gönderim hatası: {str(e)}")

------------------------------

9️⃣ Sistem Durumu

------------------------------

st.sidebar.header("Sistem Durumu")
st.sidebar.metric("Risk Seviyesi", risk_seviyesi)
st.sidebar.metric("Son Güve Sayısı", f"{son_guve_sayisi:.1f}")
st.sidebar.metric("Önerilen Feromon", f"{onerilen_feromon} adet/da")
st.sidebar.metric("İzlenen Tarla Sayısı", len(tarla_list))

Uygulama geçmişi

if 'uygulamalar' in st.session_state and st.session_state.uygulamalar:
st.sidebar.subheader("Son Uygulamalar")
for uygulama in st.session_state.uygulamalar[-5:]: st.sidebar.text(f"{uygulama['tarih'].strftime('%d.%m.%Y %H:%M')} - {uygulama['tarla']} - {uygulama['miktar']} adet")

------------------------------

🔟 Gerçek Zamanlı Veri Akışı

------------------------------

st.subheader("Canlı Veri Akışı")
if selected_tarla in st.session_state.all_data and st.session_state.all_data[selected_tarla]:
son_veriler = pd.DataFrame(st.session_state.all_data[selected_tarla]) st.dataframe(son_veriler.tail().sort_values('tarih', ascending=False))
else:
st.info("Canlı veri akışı bekleniyor...")

Sayfayı otomatik yenileme

if st.sidebar.checkbox("Otomatik yenile", value=True):
yenileme_suresi = st.sidebar.slider("Yenileme sıklığı (saniye)", 5, 60, 15)
time.sleep(yenileme_suresi)
st.rerun()

------------------------------

Footer

------------------------------

st.sidebar.markdown("---")
st.sidebar.info("PBW Canlı Saha Yönetim Sistemi v2.0 | © 2026")
Başlıca Özellikler
Başlangıç ve Session State
st.session_state kullanılarak tüm veriler ve durumlar (MQTT bağlantısı, son güncelleme, uygulama geçmişi) saklanır.
Bu sayede sayfa yenilense bile veri kaybolmaz.
Canlı IoT Veri Akışı
MQTT ile pbw/live_field topic’inden veri alınır.
JSON veya eski format desteklenir.
Veri uzunluğu performans için 500-1000 satırla sınırlandırılmıştır.
Tarla Seçimi ve Durum Bilgisi
Sidebar üzerinden tarla seçilebilir.
MQTT bağlantı durumu ve son veri güncelleme zamanı görselleştirilir.
Veri Hazırlığı
Tarihe göre sıralama ve tekilleştirme yapılır.
Demo veriler ile test ve görselleştirme sağlanabilir.
Monte Carlo + Risk Analizi
Son güve sayısı üzerinden Monte Carlo simülasyonu yapılır.
Kullanıcı σ (belirsizlik), simülasyon sayısı ve kritik eşik değerini belirler.
Risk seviyesi Çok Düşük, Düşük, Orta, Yüksek, Çok Yüksek olarak renklendirilmiştir.
Özelleştirilmiş Risk Analizi
Risk olasılığına göre önerilen feromon miktarı da otomatik hesaplanır.
Kolayca entegre edilebilecek bir müdahale mantığı bulunur.
Grafikler ve Görselleştirme
Güve sayısı ve kritik eşik grafiği.
Eğilim çizgisi (polyfit) ile trend analizi.
Monte Carlo simülasyonu histogramı.
Streamlit metric ve markdown ile renkli risk göstergesi.
Otomatik PB-ROPE Komutu
Kritik risk durumunda otomatik feromon uygulaması.
Demo modunda gerçek cihaz çağrısı yerine mesaj gösterir.
Manuel uygulama seçeneği de mevcuttur.
Raporlama
Tarih aralığı seçimi ile filtrelenmiş veri.
CSV, Excel, JSON formatında indirme.
Özet istatistikler ve son 10 veri satırı gösterilir.
Kritik Uyarı Sistemi
Risk yüksek veya çok yüksekse kullanıcıya görsel uyarı verilir.
Twilio SMS entegrasyonu ile mobil uyarı gönderilebilir.
Sistem Durumu
Sidebar’da tüm kritik bilgiler (risk seviyesi, son güve sayısı, önerilen feromon, izlenen tarla sayısı) gösterilir. Son uygulamalar geçmişi listelenir.
Canlı Veri Akışı
Canlı veriler tablo halinde görüntülenir. Otomatik yenileme seçeneği ile sayfa periyodik olarak güncellenir.

Yorumlar

Başa Dön