Created At

Jul 01, 2025

Last Update

Jul 02, 2026

Platforms

HC 3

Views

464

Download

41

Type Quick App

A little history...

The original Intesis QuickApp stopped working 2024ish and I made some changes to get it working again. It subsequently stopped working in 2025, and again some changes were made to get it functional, along with (IIRC) some reliability improvements to deal with polling failures. Vane control was removed, as my units don't have it. I received an anonymous request to add positional functionality back in.

This year, my original installer, who had been using my updated version, reported some HC3 changes had rendered it dud again. They kindly supplied a functional version.

To current day, having doodled some other QAs with AI tools I did this version.

  • I do not have positional control on my AC so cannot test that functionality.
  • I do not have an "auto" fan speed control so cannot test that functionality. It was left as is.
  • It is so far reliable in my enviroment, YMMV.
  • Feel free to publish any improvements, especially if you have positional control and auto fan speed in your environment.


This is an extensive AI assisted (claude/perplexity) update to this QuickApp but by nomeans a complete or perfected one. 

New Features

  • Full heating support added alongside cooling (previously cooling-only)
  • Temperature +/− buttons now respond instantly and send a single command after you finish pressing, even with rapid taps
  • Temperature control is whole-degree only (1°C steps) throughout, matching the AC's own remote and app
  • Optional vane (airflow direction) controls for wall-mounted units that support them — off by default, enabled via a device setting
  • Added a visible error message on the QuickApp display for connection or communication problems

Bug Fixes

  • Fixed the status display occasionally getting stuck mid-refresh
  • Fixed fan speed and vane position sometimes briefly reverting to the old value on screen after being changed
  • Fixed a crash that could occur when switching modes (heat/cool/fan/dry/auto)
  • Fixed the QuickApp failing to load on units without vane controls enabled
  • Fixed connection failures caused by stray spaces or line breaks in the IP address or other settings — these are now trimmed automatically
  • Fixed a rare fault where a single unanswered request to the AC unit could silently stop all status updates until the QuickApp was manually restarted
  • Fixed mode changes (cool/heat/dry/fan/auto) not always verifying the unit had actually turned on — this is now confirmed the same way other settings changes are
  • Fixed decreasing the temperature from the Fibaro thermostat panel sometimes having no visible effect
  • Fixed temperature changes made from the Fibaro thermostat panel occasionally flickering — showing the new value, briefly reverting, then settling correctly

Reliability & Performance

  • Every command sent to the unit is now verified by reading back its actual state, so the display reflects what really happened
  • Background status checks and manual button presses no longer interfere with each other
  • Added automatic retry/backoff if the AC unit becomes temporarily unreachable
  • Added a timeout safeguard so a single non-responding request can no longer freeze the status display indefinitely

2 Comments,  Want to add comment please login
86fd501068afcabb4312f1a10cbcffcc

Thank you for your sarcastic and mostly useless AI evaluation of the QA. You should perhaps refer to the original version before deciding if this one is a waste of time. I look forward to utilising your complete and perfect QA when it's published.

A76a3a4e1774cd33f5471b7ec24d0d428

1. "+" and "−" buttons behave identically when leaving AUTO (fan speed & vane position) Location: uilessVelocOnReleased / uiplusVelocOnReleased and uilessPositionOnReleased / uiplusPositionOnReleased Issue: Both the increase and decrease handlers use the exact same branch for the AUTO case (CFG.fanSpeedMin / 1), so pressing "+" while in AUTO produces the same result as pressing "−" — it jumps to the minimum instead of increasing. Why it matters: Looks like a copy-paste error where the "+" handler was cloned from the "−" handler and the AUTO branch wasn't updated. Confirm intended behavior and fix the "+" branch to move upward from AUTO. 2. TCPPort and acNum variables are never validated Location: onInit Issue: IPAddress is checked for empty string and shows a clear warning in the UI before polling starts. TCPPort and acNum get no equivalent check — if TCPPort is empty or non-numeric, tonumber() returns nil and the app silently proceeds into loopRefresh(), producing repeated connection errors with no clear diagnostic message. Why it matters: Inconsistent UX for misconfiguration; a user will see generic TCP errors instead of a clear "port not set" message like they get for the IP field. 3. Initial sock:connect() call is not wrapped in pcall Location: QuickApp:tcpExchange Issue: Every other failure path in the function (write, read, watchdog timeout) is caught and routed through fail(), but the very first call — sock:connect(self.ip, self.port, {...}) — is not protected. If the underlying HC3 socket API throws synchronously (e.g., on a nil port from issue #2, or a malformed IP), the exception would propagate uncaught instead of being handled. Why it matters: This is the one gap in an otherwise consistently defensive function; a synchronous throw here could stop the QuickApp instead of just logging a connection error. 4. Intesis protocol traffic is unencrypted and unauthenticated Location: Protocol-level (not fixable in the QuickApp code itself) Issue: All communication with the Intesis gateway is plain-text ASCII over TCP with no authentication. Why it matters: Anyone with network access to the same LAN/VLAN as the gateway can send arbitrary SET commands to the AC unit. Recommend documenting this as a deployment note (isolate the gateway on its own IoT VLAN) rather than a code fix. 5. acNum variable is inserted into the command string without format validation Location: QuickApp:intesisSend, QuickApp:intesisRead Issue: self.acNum is concatenated directly into the command ("SET," .. self.acNum .. ":" .. func ...) without checking it's a valid number. Why it matters: Low real-world risk (requires HC3 admin access to edit the variable), but a stray CR/LF or unexpected character in this field could inject an extra line into the TCP stream. Cheap to add a numeric-format check. 6. Position variable comparison is case-sensitive Location: onInit, applyVaneControlVisibility, vane button handlers Issue: The check is self.position == "True" (exact string match). Entering "true" (lowercase) silently disables vane controls with no warning. Why it matters: Easy to trip over when configuring the variable manually; consider case-insensitive comparison or a boolean-style variable. 7. CFG.commandTimeout is reused for two unrelated purposes Location: CFG config table Issue: The same constant controls both the delay between sequential poll reads and the delay between sending ONOFF and MODE during a mode change. Why it matters: Not a bug today, but a maintainability risk — tuning polling cadence would unintentionally also change mode-change timing. Suggest splitting into two named constants.

Load more comments
© 2024. Nice-Polska Sp. z o.o.Privacy policyTerms & ConditionsFeedback