Fibaro Home Center 2 وثيرموستات للتدفئة تحت البلاط HeatIt. كيفية رفع درجة الحرارة

لقد واجهت مهمة التحكم في أرضية دافئة من واجهة 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 " ، على التوالي.

الحلقة الرئيسية:

--       ,       : floor_temp = fibaro:getValue(8, 'value') currentSetPoint = tonumber(fibaro:getValue(7, 'value')) mode = fibaro:getValue(9, 'mode') --     fibaro:call(12, "setProperty", "ui.Label1.value", floor_temp) --               if (mode == '1') then fibaro:call(12, "setProperty", "ui.Label3.value", "ON") fibaro:call(12, "setProperty", "ui.Label2.value", currentSetPoint) elseif (mode == '11') then fibaro:call(12, "setProperty", "ui.Label3.value", "ECO") fibaro:call(12, "setProperty", "ui.Label2.value", currentSetPoint) elseif (mode == '0') then fibaro:call(12, "setProperty", "ui.Label3.value", "OFF") fibaro:call(12, "setProperty", "ui.Label2.value", "OFF") end 

بعد ذلك ، نكتب البرامج النصية للأزرار:
مع أزرار اختيار الوضع ، كل شيء بسيط:
"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')) --  ,        40  if (currentSetPoint < 40) then setPoint = currentSetPoint + 1 else setPoint = 40 end --      fibaro:call(7, 'setThermostatSetpoint',11, setPoint) 

لزر "-":

 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 ، لذلك هذا حل مؤقت.

Source: https://habr.com/ru/post/ar436344/


All Articles