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ü:
- İzleme Aşaması: İlk çiçeklenme görülmeden önce (taraklanma dönemi), dekara 1 adet delta tipi feromon tuzağı yerleştirilir
- Popülasyon Takibi: Tuzaklardaki güve sayımları haftada bir düzenli olarak yapılır
- Müdahale Zamanlaması: İlk güve yakalandıktan sonra PB-ROPE çubukları devreye girer
- 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: - 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 - 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 - Mobil ve Web Uygulamaları
- Tarla bazlı gözlem kayıtları
- Gerçek zamanlı karar destek sistemleri
- Çiftçi-uzman iletişim platformları - 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: - 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 - Veri İşleme Katmanı
- Streamlit tabanlı web arayüzü
- Pandas ile veri analizi ve manipülasyonu
- NumPy ile matematiksel hesaplamalar
- Matplotlib ile görselleştirme - 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: - Zaman Serisi Grafikleri: Güve popülasyonunun zamana bağlı değişimi
- Eğilim Analizi: Polinom regresyonu ile trend belirleme
- Histogram Analizi: Monte Carlo simülasyon sonuçlarının dağılımı
- Ç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: - Risk eşiği aşıldığında otomatik aktivasyon
- Tarla koordinatlarına göre navigasyon
- Hesaplanan dozda feromon uygulama
- 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: - Proaktif Yaklaşım: Geleneksel reaktif mücadele yerine tahmin ve önleme odaklı stratejiler
- Ekonomik Verimlilik: Kimyasal girdilerin azaltılması ve verim optimizasyonu
- Çevresel Koruma: Ekosistemin korunması ve sürdürülebilir tarım practices
- Veri Driven Kararlar: Objektif verilerle desteklenen bilimsel yaklaşım
- Ö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.