import socket def get_public_ip(): # Halka açık IP adresini almak için dış bir web servisi kullanıyoruz # Bu örnekte, ipify.org kullanıyoruz try: with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.connect(('8.8.8.8', 80)) public_ip = s.getsockname()[0] return public_ip except Exception as e: print("Halka açık IP adresi alınamadı:", e) return None class AkıllıEvSistemi: def __init__(self): self.sıcaklık = 20 self.ışık_durumu = False self.hareket_algılayıcı = False def sıcaklık_güncelle(self, yeni_sıcaklık): self.sıcaklık = yeni_sıcaklık return f"Sıcaklık güncellendi: {self.sıcaklık} derece" def ışık_kontrol(self, durum): self.ışık_durumu = durum if durum: return "Işıklar açıldı" else: return "Işıklar kapatıldı" def hareket_algılandı(self): self.hareket_algılayıcı = True return "Hareket algılandı!" def ev_durumu_görüntüle(self): return f"Sıcaklık: {self.sıcaklık} derece, Işık Durumu: {'Açık' if self.ışık_durumu else 'Kapalı'}, Hareket Algılayıcı: {'Aktif' if self.hareket_algılayıcı else 'Pasif'}" # Akıllı ev sistemi oluştur ev = AkıllıEvSistemi() # Sunucu ayarları HOST = '0.0.0.0' # Tüm ağ arayüzlerinden bağlantıyı kabul et PORT = 65432 # Sunucunun çalıştığı port public_ip = get_public_ip() if public_ip: print(f"Sunucu başlatıldı, {public_ip}:{PORT} üzerinde istemci bekleniyor...") else: print("Halka açık IP adresi alınamadı. Sunucu başlatılamadı.") with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server_socket: server_socket.bind((HOST, PORT)) server_socket.listen() while True: conn, addr = server_socket.accept() with conn: print('Bağlantı adresi:', addr) while True: data = conn.recv(1024) if not data: break elif data.decode() == "sıcaklık_güncelle": yeni_sıcaklık = float(conn.recv(1024).decode()) response = ev.sıcaklık_güncelle(yeni_sıcaklık) elif data.decode() == "ışık_kontrol": durum = conn.recv(1024).decode() response = ev.ışık_kontrol(durum.lower() == "açık") elif data.decode() == "hareket_algılandı": response = ev.hareket_algılandı() elif data.decode() == "ev_durumu_görüntüle": response = ev.ev_durumu_görüntüle() else: response = "Geçersiz istek" conn.sendall(response.encode())