#Over simplified example -- for illustration purposes:

class MainStateSync(StateObserverIF):
	#...

	def handle_update(self, section:str):
		#NOTE: Triggered after state values get changed

        #Compute effective RGB values of all the lights (inefficient, but simple):
		for (idx, refc) in self.roomcache_map.items():
			#NOTE: roomcache_map stores strings to keep from calculating
			#      on-the-fly when sending out signals. Not absolutely necessary.

			#Update both macropad lights & actual lights on Circuit Playground:
			for com in self.update_comlist:
				#com is an instance of EasyCktIO.UART.SigCom_UART
				#that knows how to send signals:
				com.send_signal(self.sig_lightval_update)