حزمة تطوير حديثة بلغة بايثون لـ PI Web API (مفتوحة المصدر)
أطلقنا pisharp-piwebapi مفتوحة المصدر — حزمة بايثون متزامنة وغير متزامنة ومُوثَّقة الأنواع بالكامل، تزيل الشيفرة المتكرّرة من قراءة وكتابة بيانات AVEVA PI عبر PI Web API.
PI Web API هو أكثر الطرق قابلية للنقل لإيصال بيانات نظام AVEVA PI إلى أي شيء يتحدّث HTTP — لكن استخدامه الخام يعني كتابة المصادقة والترقيم والتجميع وتحليل الاستجابات يدوياً في كل مشروع. كنّا نعيد بناء هذه السباكة مراراً، فاستخلصناها في مكتبة مفتوحة المصدر ونشرناها على PyPI باسم pisharp-piwebapi. هي برخصة Apache-2.0 وتوجد على github.com/Vedteq/pisharp-piwebapi-python.
بنيناها من أجل PiSharp، منصّتنا المستقلة لمطوّري نظام AVEVA PI، واستخلصنا نواتها القابلة لإعادة الاستخدام كمصدر مفتوح. وهي المكتبة نفسها التي نلجأ إليها كلّما احتاجت بيانات PI أن تتحرّك عبر HTTP.
أي مشكلة تزيلها فعلاً؟
التحدّث إلى PI Web API مباشرة كدّ REST: بناء الرابط الصحيح، وترميز WebID، والترقيم عبر Links.Next، وتجميع النداءات كيلا تُرهق الخادم، ثم تحليل JSON ضعيف الأنواع يدوياً. الحزمة تختصر ذلك إلى نداءات دوال مُوثَّقة الأنواع. تطلب نقطة بمسارها وتقرأ قيمتها؛ والمكتبة تتولّى HTTP والترقيم والتحليل إلى نماذج Pydantic v2، فيُكمل محرّرك الاستجابة تلقائياً بدل تخمين مفاتيح القواميس.
كيف تقرأ قيمة نقطة PI؟
ثبّت عبر pip install pisharp-piwebapi، وأنشئ PIWebAPIClient برابط PI Web API الأساسي وبيانات الاعتماد، ثم ابحث عن نقطة واقرأها. عملياً: client.points.get_by_path(r"\\SERVER\sinusoid") يُعيد نقطة مُوثَّقة الأنواع، و client.streams.get_value(point.web_id) يُعيد قيمتها الحالية وطابعها الزمني. التاريخ المسجَّل عبر نافذة هو client.streams.get_recorded(web_id, start_time="-1h", end_time="*")، والكتابة بالعودة هي client.streams.update_value(web_id, value=42.0). صيغة الوقت النسبي في PI التي تعرفها (-1h و *) تمرّ مباشرة.
هل يدعم العمل غير المتزامن للسحب عالي الحجم؟
نعم. هناك عميلان بالسطح نفسه: PIWebAPIClient للنصوص المباشرة، و AsyncPIWebAPIClient للأحمال المتزامنة — يُستخدم كمدير سياق غير متزامن ويُنتظَر (await client.streams.get_value(...)). يعمل على httpx في الأساس ويتطلّب Python 3.10+. حين توزّع آلاف قراءات الوسوم إلى تحميل مستودع، يتيح لك العميل غير المتزامن فعل ذلك بالتوازي بدل طلب واحد حاجب في كل مرة.
ماذا يغطّي إلى جانب قراءة الوسوم؟
- النقاط والتدفّقات — البحث بالمسار أو WebID، وقراءة القيم الحالية والمسجَّلة والمُستوفاة، وكتابة القيم بالعودة.
- العناصر والخصائص — تصفّح هرمية إطار أصول PI، والمرور على الأبناء، وإنشاء أو حذف العناصر والخصائص.
- أُطر الأحداث (Event Frames) — البحث والإنشاء والإقرار والحذف، لتحليل التوقّفات والدفعات.
- الخوادم وقواعد البيانات — سرد خوادم الأصول والبيانات، وتصفّح قواعد بيانات AF وعناصرها العليا.
- طلبات الدُفعات — تجميع عدة نداءات API في رحلة HTTP واحدة.
- الترقيم التلقائي — يتابع العميل Links.Next عبر كل الصفحات فلا تكتب حلقات ترقيم.
كيف تندمج في أنبوب Power BI أو التحليلات؟
إضافة pandas الاختيارية (pip install pisharp-piwebapi[pandas]) تمنح StreamValues.to_dataframe()، فتحوّل قيم تدفّقات PI مباشرة إلى DataFrame — الخطوة الأولى الطبيعية قبل التلخيص والشحن إلى SQL أو بحيرة سحابية أو Power BI. وللبيئات المصادَق عليها بنظام ويندوز هناك إضافة Kerberos (pip install pisharp-piwebapi[kerberos])، إلى جانب مصادقة Basic وشهادات العميل. وهناك أيضاً مولّد شيفرة OpenAPI لإنشاء أغلفة مُوثَّقة الأنواع من مواصفة Swagger الخاصة بخادمك.
أتستخدم الحزمة أم تبني بنفسك؟
إن كنت تنفّذ إثبات مفهوم لمرة واحدة، فطلبات REST الخام تكفي. لكن لحظة أن يحتاج السحب إلى أن يكون موثوقاً ومُوثَّق الأنواع ورخيص الصيانة لسنوات، تصبح الشيفرة المتكرّرة — المصادقة والترقيم والتجميع ومعالجة الأخطاء — هي بالضبط الجزء الذي يتآكل. هذا ما توحّده الحزمة، والأنبوب المتين فوقها هو ما نبنيه. إن كانت بيانات PI لديك محبوسة في المؤرّخ، فأسرع طريق لرسم ما هو واقعي على نشرتك تحديداً هو مكالمة استكشاف قصيرة.
