لقد واجهت مهمة التحكم في أرضية دافئة من واجهة Fibaro Home Center 2. يبدو أنها مهمة بسيطة ، ولكن لا. بناءً على طلب العميل ، ينبغي أن تستند الحرارة إلى درجة حرارة الأرض. تقرر استخدام الحرارة HeatIt.

كانت أكثر ملائمة لمتطلبات العملاء:
- تصميم أضيق الحدود
- القدرة على إطفاء كل شيء ممكن يضيء على اللوحة
- القدرة على العمل على أساس درجة حرارة الأرض
- إمكانية الارتباط المباشر مع المرحلات الخارجية (نظرًا لأن التدفئة تحت الأرضية هي ماء ، تحتاج إلى التحكم في المرحلات الموجودة في غرفة الغلاية ، والتي تعمل على إغلاق الصمامات في الدوائر المقابلة)
بعد أن درست بعض المواد على الشبكة ، اكتشفت أن Fibaro Home Center 2 "الرائع" لا يعرف كيفية ضبط الحرارة على درجات حرارة> 30 درجة في واجهة الويب و> 28 درجة في تطبيق الهاتف المحمول. ما لأقصى درجة حرارة الأرض ، بالطبع لا يكفي.

في الوقت نفسه ، تتيح منظمات الحرارة HeatIt إعداد ما يصل إلى 40 درجة. والسؤال هو لماذا لا يسمح Fibaro للمثبت بتعيين نطاق درجات الحرارة الممكنة. حسنًا ، حسناً ، لقد فكرت ، سنأتي بشيء ما. حتى أنه كانت هناك فكرة لتغيير قراءات مستشعر NTC بمقاوم إضافي ، ولكن بعد ذلك سيتعين على العميل التعود على قراءات درجة الحرارة في "الببغاوات" الشرطية ، وهي ليست جيدة.
كانت هناك فكرة ، ولكن ماذا لو أخذنا وأرسلنا بطريقة أو بأخرى قيمة أكبر؟
يتم وصف التبادل بين عميل الويب و Home Center 2 في
واجهة برمجة تطبيقات Fibaro RESTلكنني وجدت أنه من الأسهل اعتراض جميع الأوامر في Wireshark.
خصيصا ل HeatIt:
POST / api / devices / 9 / action / setMode {"args": [1]}
POST / api / devices / 9 / action / setSetpointMode {"args": [1]}
POST / api / devices / 9 / action / setThermostatSetpoint {"args": [1،27]}
الوصفsetMode - اختيار الوضع (الوسائط: 1 - على التدفئة ، 11 - التدفئة الاقتصادية ، 0 - إيقاف)
setSetpointMode - حدد الوضع الذي يتم عرض درجة حرارة التثبيت منه (الوسائط هي نفسها)
setThermostatSetpoint - ضبط درجة الحرارة المستهدفة للوضع (وفقًا لذلك ، تكون الوسيطة الأولى هي الوضع ، والثاني هو درجة الحرارة)
يمكنك أيضًا إرسال طلبات مثل:
GET / api / callAction؟ DeviceID = ID & name = setThermostatSetpoint & arg1 = MODE & arg2 = TEMP VALUE
الخ
يمكنك أيضًا معرفة جميع الأوامر والقيم لجميع الأجهزة المثبتة من خلال طلب REST:
الحصول على / api / الأجهزة
لذلك ، نرسل الحرارة إلى 35 درجة ، و ، ها ، قبلها الحرارة.
المهمة الآن هي التوصل إلى بديل للتحكم الكامل في الترموستات.
الخيار الأول هو جهاز Fibaro الظاهري.
لقد رسمت النموذج:

البدء في كتابة البرامج النصية:
أولاً ، سنكتشف معرّف جميع الأجهزة التي نهتم بها. للقيام بذلك ، انتقل إلى الإعدادات الخاصة بكل "جهاز" ذي صلة بخاصية ترموستات لدينا وانظر إلى المعرف في الصفحة أو في شريط عنوان المتصفح.
في حالتي ، الجهاز لضبط درجة الحرارة المستهدفة (setPoint) - المعرف:
7استشعار درجة حرارة الأرض - معرف:
8اختيار وضع التشغيل ترموستات - معرف:
9

أيضًا ، لجهازنا الافتراضي أيضًا معرّف خاص به ، ولا يمكن رؤيته إلا في شريط عنوان المتصفح ، ولدي هذا المعرف
12 . علاوة على ذلك ، يكون لكل عنصر من عناصر الجهاز الظاهري معرفه الخاص به ، في حالتي:
"الوتيرة الحالية". لدي معرف "
Label1 " ، "درجة حرارة الهدف" - معرف "
Label2 "
الأزرار "+" و "-" - المعرف "
Button1 "
والمعرف "
Button2 " ، على التوالي. "الوضع" - معرف "
Label1 ".
حسنًا ، الأزرار "OFF" و "ECO" و "ON" - المعرف "
Button3 " و ID "
Button4 " و ID "
Button5 " ، على التوالي.
الحلقة الرئيسية:
بعد ذلك ، نكتب البرامج النصية للأزرار:
مع أزرار اختيار الوضع ، كل شيء بسيط:
"OFF":
fibaro:call(9, 'setMode',0)
"ECO":
fibaro:call(9, 'setMode',11) fibaro:call(7, 'setSetpointMode',11)
"ON":
fibaro:call(9, 'setMode',1) fibaro:call(7, 'setSetpointMode',1)
لزر "+":
لزر "-":
currentSetPoint = tonumber(fibaro:getValue(7, 'value')) if (currentSetPoint > 5) then setPoint = currentSetPoint - 1 else setPoint = 5 end fibaro:call(7, 'setThermostatSetpoint',11, setPoint)
بشكل عام ، كل شيء.
أنها تعمل بشكل جيد ، والمشكلة الوحيدة هي التأخير بعد الضغط على الزر. إذا كنت تدير من شبكة محلية ، فستكون هذه هي 1-2 ثواني ، ولكن إذا كنت تدير عن بعد ، فقد يصل التأخير إلى 10 ثوانٍ. أي إذا لزم الأمر ، فقم بإضافة أو خفض درجة الحرارة بعشرات الدرجات عن بعد ، وقد يستغرق الأمر بضع دقائق.
بشكل عام ، هذا بالطبع عكاز ، لكن لا يوجد مخرج آخر. في أمور أخرى ، وبالنظر إلى المستقبل ، أقول إن النظام بأكمله سيخضع في النهاية لسيطرة Iridium Mobile ، لذلك هذا حل مؤقت.