MIGRATION

Sun, 07 Apr 2024 11:25:00 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 07 Apr 2024 11:25:00 +0200
changeset 664
8adbc76fd122
parent 663
fa39f9c0e219
child 668
4df4c8b17733
permissions
-rw-r--r--

Version 0.9.17a3. Prepare for thermferm state tables.

		Migration from wiringPi to PIGPIO.
		==================================

WiringPi is unmaintained and replaced by pigpio. This will need large parts
of thermferm to be rewritten. It is also a good moment to replace the current
server protocol with json data and start sending data chaanges over
websockets.

Some parts of the code can make use of direct kernel support, since kernel 4
there are lots of new modules. Fact is that thermferm is started in 2014,
that is 10 years ago.

The current devices model is not very practical. We need to separate the parts
that don't need gpio out of it. All one-wire devices need their own driver
thread.


	Current threads.
	----------------

These are the current running threads.
1. my_one_wire_loop.
2. my_devices_loop.
3. my_server_loop.
4. my_panel_loop.
5. my_simulator_loop (if enabled).



	Steps to do.
	------------

Try to read all temperature sensors at once. The kernel supports this now.
The devices thread needs to use the collected temperatures.
Read all ds2413 devices from sys/bus/w1. If output bits are set different
then send output values.


Add pigpio library and make it testable by the configure script.


	Flow one-wire.
	--------------

States:
  1. Init state.
  2. Check for exit.
     Scan for devices. Add to one-wire list.
  3. Check for exit.
     Read all DS2413 devices programmed as input.
  4. Check for exit.
     Read one temperture sensor from list and update.
  5. Check for exit.
     Check for missing devices not in one wire table.
     Goto 2.
  6. Exit state.



	Flow thermferm.
	---------------

Before:
     Initialize all units.
     Publish DBirth
     Publish Startup

States (nested):

  1. Init.
  2. Check shutdown.
     Check run_pause.
     Wait for new minute.
  3. Update clock on display.
     Show room temp/humidity.
  4. If THB changed or 5 minutes passed publish NData.
  5. For units loop.

       1. Init.
       2. If air address
       3. If beer address
       4. If chiller address
       5. If door address
       6. If PSU address
       7. If unit->mode == UNITMODE_PROFILE
       8. If unit->mode == UNITMODE_NONE
       9. Usage counters
      10. If light address
      11. if ((unit->mode == UNITMODE_FRIDGE) || (unit->mode == UNITMODE_BEER) || (unit->mode == UNITMODE_PROFILE)) // Temp control active
      12. Update the LCD
      13. Set unit->mqtt_flag |= MQTT_FLAG_DATA after 60 seconds
      14. Publish what is needed.
      15. Handle alarms.
      16. End.

  6. Show LCD buffer.
  7. 60 seconds reset and actions.
  8. Keyboard check.
  9. Delay 100 mSec and goto 2.
 10. Done.

After:
     Stop all units.

mercurial