ChipChop Support Forum
Log in
Log out
Join the forum
My Details
REPLIES: 6
VIEWS: 167
BACK
REPLY TO THIS POST
TomaszB
22 Feb 2026
ChipChop.updateStatus() seems to skip some variables
Hi Gizmo,

I feel that there is a small bug in ChipChop library (or more probably I do some wrong).

Setup:
A) HW: ESP8266
B) I have on my dashboard 12 variables: 8 are numbers, 4 are texts.



When I execute ChipChop.updateStatus for these variables it ignores this variable for which the ChipChop.updateStatus was executed as the last one during the first initialization.

Example 1: The variable Boiler_Heater had ChipChop.updateStatus executed as the last one during the first initialization. Since then subseqent executions of ChipChop.updateStatus is ignored for it.

Logs:
2026-2-22 22:23:48 INFO: UserParameterTemplate<T>::setValue. New parameter value: Last_Vaillant_Frame=1630
2026-2-22 22:23:48 INFO: UserParameterTemplate<T>::setValue. New parameter value: Boiler_Water_Input=48.00
2026-2-22 22:23:49 INFO: UserParameterTemplate<T>::setValue. New parameter value: Boiler_Water_Output=20.00
2026-2-22 22:23:49 INFO: UserParameterTemplate<T>::setValue. New parameter value: Outside_Temperature=-14.00
2026-2-22 22:23:50 INFO: UserParameterTemplate<T>::setValue. New parameter value: Boiler_Daily_Activity=189
2026-2-22 22:23:50 INFO: UserParameterTemplate<T>::setValue. New parameter value: Boiler_Heater=1

2026-2-22 22:23:53 INFO: ChipChopEngine::_send_heartbeat ChipChop >>> Heartbeat: {"Memory_Heap":28896} , {"uptime":"0 0:1:30"} , {"Last_Seen_Online_UTC_Seconds":1771795410} , {"Last_Seen_Online":"2026-2-22 22:23:30"} , {"Boiler_Daily_Activity":"0 0:3:11"} , {"Boiler_Daily_Activity_Seconds":191} , {"Last_Vaillant_Frame":"1970-1-1 1:27:10"} , {"Boiler_Water_Input":48.00} , {"Boiler_Water_Output":20.00} , {"Outside_Temperature":-14.00}
ChipChop log doesn't seem to know Boiler_Heater, even though it there were a few executions of updateStatus for it.


Example 2:
Now let's change the order of the first initialization and make the variable Last_Vaillant_Frame: initialised (execution of updateStatus) as the last one. Now this variable is ignored.

Logs:
2026-2-22 22:30:39 INFO: UserParameterTemplate<T>::setValue. New parameter value: Boiler_Water_Input=47.00
2026-2-22 22:30:40 INFO: UserParameterTemplate<T>::setValue. New parameter value: Boiler_Water_Output=22.00
2026-2-22 22:30:40 INFO: UserParameterTemplate<T>::setValue. New parameter value: Outside_Temperature=8.00
2026-2-22 22:30:41 INFO: UserParameterTemplate<T>::setValue. New parameter value: Boiler_Daily_Activity=972
2026-2-22 22:30:41 INFO: UserParameterTemplate<T>::setValue. New parameter value: Boiler_Heater=0
2026-2-22 22:30:42 INFO: UserParameterTemplate<T>::setValue. New parameter value: Last_Vaillant_Frame=900

2026-2-22 22:30:47 INFO: ChipChopEngine::_send_heartbeat ChipChop >>> Heartbeat: {"Memory_Heap":28768} , {"uptime":"0 0:2:0"} , {"Boiler_Daily_Activity":"0 0:16:12"} , {"Boiler_Daily_Activity_Seconds":972} , {"Last_Seen_Online_UTC_Seconds":1771795821} , {"Last_Seen_Online":"2026-2-22 22:30:21"} , {"Boiler_Water_Input":47.00} , {"Boiler_Water_Output":22.00} , {"Outside_Temperature":8.00} , {"Boiler_Heater":0}
ChipChop log doesn't seem to know Last_Vaillant_Frame, even though it there were a few executions of updateStatus for it.


I had to use use my Logger lib, that allows me to check logs through a Web Page rather than a Serial (that's why, there are date and hour at the beginning of logs generated by ChipChop lib). Certainly the issue persists also with logging disabled and with regular serial logging (below):

For Example 2 - logs through Serial. Still Last_Vaillant_Frame is missing.
ChipChop >>> Heartbeat: {"Memory_Heap":28736} , {"uptime":"0 0:2:30"} , {"Last_Seen_Online_UTC_Seconds":1771796860} , {"Last_Seen_Online":"2026-2-22 22:47:40"} , {"Boiler_Daily_Activity":"0 0:17:19"} , {"Boiler_Daily_Activity_Seconds":1039} , {"Boiler_Water_Input":27.00} , {"Boiler_Water_Output":16.00} , {"Outside_Temperature":-2.00} , {"Boiler_Heater":1}

I have a feeling that the total lenght of updated variables exceeded a limit. Maybe names are too long. Anyway, before I start experimaneting, I would like to share what I found.

Regards
Tomasz


Attached images
Gizmo
23 Feb 2026

Hi Mr T,

I've double checked things and it's not really a bug, you've just been lucky and discovered a "loophole" on your account...lol :-)

For some reason, you have more components allowed on your account than normal - it should be a max of 10 components per device and you have 15!
I think I have mistakenly given you more instead of another Tomasz, there's a so many of you on ChipChop I am loosing track who is who :-)

Anyway, it's 2 seconds to fix I am just going to give you a quick explanation what is actually happening

- The Dev Console should warn you if you try to add more components than allowed and in your case you were fine having 12.

- The problem is that the ChipChop Arduino engine on the ESP has a hardcoded limit of 10 components stored as an array of structs and when you call ChipChop.updateStatus() it starts to fill empty slots in the array and as you have noticed depending when you call updateStatus() if you try to add more statuses than it has empty slots it will simply start ignoring those calls and you will not get those components statuses back in the Dev Console.

The fix:

- manual fix - in the src/ChipChop_Config.h change the value of CC_MAX_COMPONENTS (in your case from 10 to 15)
- automatic - I have made a small update to the code builder so it will now automatically set that value based on your account allowance
    - Open the Dev Console and hit refresh (maybe do it 2 times)
    - In the code builder open the device you want and open the ChipChop Engine module, you should see at the bottom the Max Components value (it's just view only and can not be changed), press "Apply" then "Save" and then if you download the code package the CC_MAX_COMPONENTS in config file should have the new value.

Warning:

When you start going over 10 components you have to be careful with the length of the component names and values, the ChipChop IoT communication protocol has a hardcoded buffer limit of 2kb, if you exceed that the entire heartbeat will not be sent but you should see warnings.
This limit is set to save memory on small devices and also to give everyone a fair processing allocation on the Community servers. I don't think you will hit that limit but let me know if you do and I may be able to give you a bit more (depends on what you are trying to do and if it doesn't affect other users)


Let me know if the fix works

G


TomaszB
23 Feb 2026

Hi Gizmo

Thanks for this explanation. Everything is clear now. Maybe you can consider implementing time types, as now I have to send them twice, as int (used for synchronisation after restart) and string (for humans). I've described the idea in the post:
Proposal of data / time component types.

From my project point of view it is not a big deal, as I don't need the component used for tracking of free heap memory anymore. Now, with rewritten ChipChop lib, memory is not critical any longer (the new lib has solved also issues with unexpected restart and simultanous running of ChipChop and WebServer).
However, my engineering heart bleeds when I need to send the same component twice, as string and int...

Greetings from Poland
Tomasz
Gizmo
23 Feb 2026

ha, I have literally now started work on the "time" component type!

I probably need a day or two to get it built as there is a million places where it needs to be implemented plus the app widgets etc.
I will make a new announcement post when it's done.

fiy, technically with date/time ChipChop works in millisecond timestamps but on micro-controllers like esp we have 32 bit integers so I will have to build it to work in seconds (I know it could use strings but that would be unnecessary extra calculations on the servers)
TomaszB
23 Feb 2026

Thanks Gizmo.

The idea to consider for timestamp is to send to ChipChop time_t (Unix epoch in UTC) as integer. In this way all time manipulations can be done by user (example: user's code can calculate the date/time of the next measurement, alert,... and send it to ChipChop.)
Then ChipChop stores & handles this value as integer, thus it can be easily retrieved by user's code calling getMyStatus.
ChipChop only renders this component on dashboard as string in timezone declared by user (timezone declaration is already implemented).

For Time_elapsed / timespan (please name this type appropriately). The idea is exactly the same - user deals with integer - number of seconds. Only rendering on dashboard displays it as days hours:minutes:seconds.

User can easily add / subtract timespan from timestamp as they are simple integers, getting absolute value of time_t for a next alarm or event.
Subtracting two timestamps gives timespan.

Tomasz
Gizmo
23 Feb 2026

Here you go, I've made this "Time" component for you.

The only requirement is that the timestamp you send has to include any timezone offsets and daylight savings.

I had to do it that way as there are thousands of devices using the ChipChop.useClock(true) and I have to assume that they use the timestamp provided which already includes all timezone calculations - it's UTC0 + offsets pre-calculated and sent with every heartbeat so the device has less maths to do and ChipChop has its own time server that re-calculates all timezones every 10 minutes.

If you don't use the ChipChop's library clock in your code but more something like an RTC module than you will have to add extra seconds when you send the status (you are currently +3600 but that will change in the summer & winter)

Anyway, give it a go, just replace the component types to "Time" and chose either mode as Timestamp or Elapsed and make sure you have the timezone set correctly for the device

Let me know if it works ok or I have to do some tweaks


G
TomaszB
24 Feb 2026

Thanks Gizmo!
Let me test it tomorrow.

Regards
Tomasz