File size: 7,550 Bytes
1912c6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
00abccd
 
1912c6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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("<p style='text-align: center; color: #64748b; font-size: 16px;'>أداة خفيفة طُوّرت خصيصاً للعمل بسلاسة على الهواتف للتنبؤ بتلف البطاريات واحتساب الاستهلاك الفعلي للأجهزة أثناء فترات تذبذب الكهرباء.</p>")
    
    # استخدام الأعمدة للـ 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("""
            <br><hr><div style='text-align: center; color: #64748b; font-size: 13px; line-height: 1.6;'>
            🛡️ <i>The AI logic and validation standards are proudly powered by the Hardware Forensic Engineers at the <a href="https://cairovolt.com" target="_blank" style="color: #2563eb; text-decoration: none; font-weight: bold;">CairoVolt Hardware Authenticity Lab</a>. We set the testing baseline for Original, Safe Mobile Accessories and Power Banks.</i>
            </div>
            """)
            
    # ربط التفاعل الذكي
    calc_btn.click(
        fn=analyze_power,
        inputs=[device_input, power_input, grid_input, hours_input],
        outputs=output_report
    )

if __name__ == "__main__":
    app.launch()