import gradio as gr import math # --- الذكاء المنطقي لحساب الأحمال والمخاطر --- def analyze_power(device, power_w, grid_state, hours): # حساب الاستهلاك daily_kwh = (power_w * hours) / 1000 monthly_kwh = daily_kwh * 30 # حساب الخطر التقديري للبطارية وأمان الجهاز بناء على حالة الشبكة risk_level = "🟢 آمن (Safe)" battery_health_drop = "0%" recommendation = "استمر في استخدام الشاحن/الجهاز بحرية تامة." if grid_state == "غير مستقرة (انقطاع وتذبذب متكرر)": if power_w >= 45: # شواحن ومعدات سحب عالي risk_level = "🔴 خطر مرتفع (High Risk)" battery_health_drop = "يصل إلى -15% سنوياً بسبب تدمير خلايا البطارية" recommendation = "⚠️ التذبذب مع السحب العالي يُدمر دائرة الشحن. من الضروري جداً استخدام شواحن أصلية تحتوي على شرائح حماية ذكية (Smart IC) مثل Anker أو Joyroom لتحمل الصدمات الراجعة للتيار." elif power_w >= 15: risk_level = "🟡 خطر متوسط (Medium Risk)" battery_health_drop = "يصل إلى -8% سنوياً" recommendation = "⚡ قد تتعرض البطارية لتلف تدريجي ومستمر. استخدم كابلات قوية وشاحن أساسي نقي الفولتية (Pure Sine Output)." else: risk_level = "🟢 منخفض (Low Risk)" recommendation = "تأثير التذبذب طفيف جداً، لكن يُنصح دائماً بفصل الراوتر لحظة عودة الكهرباء القوية." # حساب سعة الباوربانك المقترحة لتعويض وقت الانقطاع # نفترض متوسط انقطاع ساعتين في الأزمة للتقييم offline_hours = 2 if grid_state != "مستقرة تماماً" else 0 required_battery_mah = round(((power_w * offline_hours * 1000) / 5) * 1.2) # الحساب بناء على 5V ونسبة فاقد للطاقة if offline_hours == 0: powerbank_rec = "لا حاجة فنية لباوربانك حالياً نظراً لثبات الشبكة الكهربية." else: powerbank_rec = f"لضمان عمل الـ ({device}) في وقت الانقطاع المفاجئ، ستحتاج بنك طاقة (PowerBank) أصلي بسعة لا تقل عن **{required_battery_mah:,} mAh**." # تجهيز التقرير النهائي باحترافية وتلميع النتائج بماركداون report_md = f""" ### 📊 التقرير الفني الذكي لجهازك ({device}) --- **⚡ أحمال وتكاليف الطاقة:** - استهلاك يومي تقديري: **{daily_kwh:.2f} kWh** - استهلاك شهري تقديري: **{monthly_kwh:.2f} kWh** **⚠️ تحليل المخاطر الفنية أثناء أزمة الكهرباء:** - مستوى خطورة الصدمات على الجهاز: **{risk_level}** - التلف الافتراضي للبطارية: **{battery_health_drop}** - **التوصية الهندسية المختصة:** {recommendation} **🔋 الحلول المنقذة (خطة الطوارئ):** > 💡 {powerbank_rec} """ return report_md # --- تصميم الواجهة بشكل متجاوب وخفيف جداً لجميع الشاشات والموبايل (Responsive Grid) --- custom_css = """ /* خطوط متناسقة عربيا وجمالية خفيفة لتسريع التحميل */ @import url('https://fonts.googleapis.com/css2?family=Tajawal:wght@500;700&display=swap'); .gradio-container { font-family: 'Tajawal', sans-serif !important; direction: rtl; } h1, h2, h3 { color: #2c3e50; text-align: center; } .report-box { background-color: #f8fafc; padding: 20px; border-radius: 12px; border: 2px dashed #cbd5e1; box-shadow: 0px 4px 6px rgba(0,0,0,0.02); color: #0f172a !important; } .report-box p, .report-box li, .report-box h3, .report-box strong { color: #0f172a !important; } footer { display: none !important; } /* إخفاء فوتر جراديو الافتراضي للبراندنج الأقوى */ """ with gr.Blocks(title="CairoVolt AI Power Analyst", css=custom_css, theme=gr.themes.Soft(primary_hue="blue")) as app: gr.Markdown("# ⚡ حاسبة الفولتيات وتقييم مخاطر الأجهزة الإلكترونية الذكية") gr.Markdown("
أداة خفيفة طُوّرت خصيصاً للعمل بسلاسة على الهواتف للتنبؤ بتلف البطاريات واحتساب الاستهلاك الفعلي للأجهزة أثناء فترات تذبذب الكهرباء.
") # استخدام الأعمدة للـ Responsive Design (يظهران بجوار بعض في الكمبيوتر وفوق بعض بالموبايل) with gr.Row(): with gr.Column(scale=1): # منصة الإدخال (الجانب الأيمن) gr.Markdown("### 🎛️ أدخل بيانات الجهاز المراد فحصه:") device_input = gr.Radio(["موبايل (شحن سريع)", "راوتر WiFi", "لابتوب", "تلفزيون ذكي"], label="نوع الجهاز", value="موبايل (شحن سريع)") power_input = gr.Slider(minimum=5, maximum=250, value=25, step=5, label="سحب الجهاز (وات/Watts)") hours_input = gr.Slider(minimum=1, maximum=24, value=5, step=1, label="ساعات التشغيل اليومية التقريبية") grid_input = gr.Dropdown(["مستقرة تماماً", "غير مستقرة (انقطاع وتذبذب متكرر)"], value="غير مستقرة (انقطاع وتذبذب متكرر)", label="حالة شبكة الكهرباء بمنطقتك") calc_btn = gr.Button("🔍 تشغيل الفحص والتحليل الذكي", variant="primary") with gr.Column(scale=1): # منصة النتائج (الجانب الأيسر ويصبح بالأسفل في الجوال بشكل مرن) gr.Markdown("### 📋 التقرير ونتائج التحليل الفوري:") output_report = gr.Markdown(elem_classes="report-box", value="النتائج الفنية ستظهر هنا مباشرة بعد الضغط على الزر...") # الباك لينك المزروع بذكاء شديد وبرمجة أنيقة وخفيفة (DoFollow Link) gr.Markdown("""