<root>
<document scada='0' projtype='1' schema='103' license='1,60868906,6HTZ0E' title='' description='' fcversion='720897' target='ESP.ESP32.ESP32_WROOM_32' >
	<config data='' clkspd='240000000' simspd='0' usewdt='0' constif='0' commport='5' Use3V3='0' />
	<plugins >
		<dll_models enabled='1' />
	</plugins>
	<supplement use='0' head='' body='' />
	<debug />
	<traces />
	<ghost >
		<FK2 >
			<data name='FK2D0' port='4294967295' pin='4294967295' />
			<data name='FK2D1' port='4294967295' pin='4294967295' />
			<data name='FK2D2' port='4294967295' pin='4294967295' />
			<data name='FK2D3' port='4294967295' pin='4294967295' />
			<data name='FK2D4' port='4294967295' pin='4294967295' />
			<data name='FK2D5' port='4294967295' pin='4294967295' />
			<data name='FK2D6' port='4294967295' pin='4294967295' />
			<data name='FK2D7' port='4294967295' pin='4294967295' />
			<data name='FK2D8' port='4294967295' pin='4294967295' />
			<data name='FK2D9' port='4294967295' pin='4294967295' />
			<data name='FK2D10' port='4294967295' pin='4294967295' />
			<data name='FK2D11' port='4294967295' pin='4294967295' />
			<data name='FK2D12' port='4294967295' pin='4294967295' />
			<data name='FK2D13' port='4294967295' pin='4294967295' />
			<data name='FK2D14' port='4294967295' pin='4294967295' />
			<data name='FK2D15' port='4294967295' pin='4294967295' />
			<data name='FK2A0' port='4294967295' pin='4294967295' />
			<data name='FK2A1' port='4294967295' pin='4294967295' />
			<data name='FK2A2' port='4294967295' pin='4294967295' />
			<data name='FK2A3' port='4294967295' pin='4294967295' />
			<data name='FK2A4' port='4294967295' pin='4294967295' />
			<data name='FK2A5' port='4294967295' pin='4294967295' />
		</FK2>
		<ICD >
			<data name='AnalogPrescaleValue' value='19' />
			<data name='DigitalSampleRate' value='100000' />
			<data name='BreakpointCount' value='8' />
			<data name='CallStackDepthCount' value='8' />
			<data name='ClockPort' value='1' />
			<data name='ClockPin' value='6' />
			<data name='DataPort' value='1' />
			<data name='DataPin' value='7' />
			<data name='UseDefaultPins' value='1' />
			<data name='WrapEnabled' value='1' />
			<data name='CommsDelayOverridden' value='0' />
			<data name='CommsDelay' value='1' />
			<data name='CalculatedCommsDelay' value='1' />
			<data name='AnalogEB2PrescaleValue' value='2' />
			<data name='DigitalEB2SampleRate' value='100000' />
		</ICD>
		<pins >
			<digital A='0' B='0' C='0' D='0' E='0' F='0' G='0' H='0' I='0' J='0' K='0' L='0' M='0' N='0' O='0' P='0' Q='0' R='0' S='0' T='0' U='0' V='0' W='0' X='0' Y='0' Z='0' />
			<analog A='0' B='0' C='0' D='0' E='0' F='0' G='0' H='0' I='0' J='0' K='0' L='0' M='0' N='0' O='0' P='0' Q='0' R='0' S='0' T='0' U='0' V='0' W='0' X='0' Y='0' Z='0' />
		</pins>
	</ghost>
	<components >
		<settings autoimg='0' center='1' unitscale='0' fixedscale='0' fixedx='25' fixedy='25' fixedz='25' headcode='0' />
		<definition guid='2155635f-590d-45d2-b4b5-37049429d87b' vstate='40' vmin='0' vmaj='1' srcleaf='' visiblename='' description='' category='' category2='' category3='' bIs2dOnly='0' bIs3dOnly='0' bIsWysiwyg='0' catenable='1' author='' manuname='' manucode='' sysinfo='0' keywords='' dynamic='1' scadaCompatible='0' embeddedCompatible='1' showmacros='1' iconpath='' />
		<component class_type='root' codename='ComponentRoot' panelId='-1' x='0' y='0' z='0' xsz='1' ysz='1' zsz='1' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='0' poslock='0' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
			<resources />
			<properties />
			<values />
			<events />
			<apis />
			<variables >
				<variable public='0' >
					<def class_type='variable' name='Array_Position' type='s16' description='Array position + 1' isconst='0' isHidden='0' isinit='1' usrinit='1' setinit='1' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='DataString' type='T8' description='' isconst='0' isHidden='0' isinit='0' usrinit='&quot;&quot;' setinit='' >
						<array size='100' />
					</def>
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Temp_Var' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='LoopCount' type='u32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='counter' type='u8' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='InStringLen' type='u16' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='JSON_IX_S2_Power' type='u8' description='' isconst='1' isHidden='0' isinit='1' usrinit='2' setinit='2' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='DecodedChannel' type='s16' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Sensor_1_Raw' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot; &quot;' setinit='&quot; &quot;' >
						<array size='4' />
					</def>
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Run_Avg' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='000.000' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='AvgCfg' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot;&quot;' setinit='&quot;&quot;' >
						<array size='20' />
					</def>
				</variable>
				<variable public='0' >
					<def class_type='variable' name='JSON_IX_COUNT' type='u8' description='' isconst='1' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Sensor_2_Raw' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot; &quot;' setinit='&quot; &quot;' >
						<array size='4' />
					</def>
				</variable>
				<variable public='0' >
					<def class_type='variable' name='S_2_Power' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='000.000' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='DecodedTime' type='s16' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Heater' type='b1' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Sensor_1_Current' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='0.0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Sensor_3_Raw' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot; &quot;' setinit='&quot; &quot;' >
						<array size='4' />
					</def>
				</variable>
				<variable public='0' >
					<def class_type='variable' name='S_1_Power' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='000.000' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Fan' type='b1' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='JSON_IX_S1_Power' type='u8' description='' isconst='1' isHidden='0' isinit='1' usrinit='1' setinit='1' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='AverageConfig' type='s16' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Index' type='s16' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='InDataString' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot;&quot;' setinit='&quot;&quot;' >
						<array size='40' />
					</def>
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Array_Size' type='s16' description='' isconst='0' isHidden='0' isinit='1' usrinit='300' setinit='300' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='NoData' type='u32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='JSON_IX_Run_Average' type='u8' description='' isconst='1' isHidden='0' isinit='1' usrinit='4' setinit='4' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Sensor_2_Current' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='0.0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='JSON_IX_S3_Power' type='u8' description='' isconst='1' isHidden='0' isinit='1' usrinit='3' setinit='3' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Average_Data' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='{0.0}' >
						<array size='300' />
					</def>
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Sensor_3_Current' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='0.0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Input_Data' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='bPingFlag' type='b1' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='Data_Position' type='s16' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
				</variable>
				<variable public='0' >
					<def class_type='variable' name='S_3_Power' type='f32' description='' isconst='0' isHidden='0' isinit='1' usrinit='0.0' setinit='000.000' />
				</variable>
			</variables>
			<macros >
				<macro >
					<flowline name='TmrPing' description='' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<command class_type='calculation' title='Calculation' >
							<exp exp='bPingFlag = 1' />
						</command>
					</flowline>
				</macro>
				<macro >
					<flowline name='ReadEcoEyeData' description='' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<local name='x' type='u32' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<local name='RetXX' type='u8' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<command class_type='call' title='Wait up to 200ms for an incoming data string.' component='EcoEyeUART' macro='ReceiveString' >
							<return exp='InDataString' />
							<argument exp='200' />
							<argument exp='40' />
						</command>
						<command class_type='decision' title='Decision' exp='InDataString[0] == 0' swap='0' >
							<flowline >
								<command class_type='calculation' title='Diagnostic' >
									<exp exp='NoData = NoData + 1' />
								</command>
							</flowline>
							<flowline >
								<command class_type='calculation' title='Split the data string to individual sensor values.' >
									<exp exp='//Test data to verify this and later calculations.' />
									<exp exp='//InDataString = &quot;0123 4567 89AB&quot;' />
									<exp exp='' />
									<exp exp='Sensor_1_Raw = Left$(InDataString,4)' />
									<exp exp='Sensor_2_Raw = Mid$(InDataString,5,4)' />
									<exp exp='Sensor_3_Raw = Mid$(InDataString,10,4)' />
								</command>
								<command class_type='call' title='Convert sensor 1 Hex value to Decimal.' macro='HexStrToInt' >
									<return exp='Sensor_1_Current' />
									<argument exp='Sensor_1_Raw' />
								</command>
								<command class_type='call' title='Convert sensor 2 Hex value to Decimal.' macro='HexStrToInt' >
									<return exp='Sensor_2_Current' />
									<argument exp='Sensor_2_Raw' />
								</command>
								<command class_type='call' title='Convert sensor 3 Hex value to Decimal.' macro='HexStrToInt' >
									<return exp='Sensor_3_Current' />
									<argument exp='Sensor_3_Raw' />
								</command>
								<command class_type='calculation' title='Convert the sensor &quot;current&quot; values to mA.' >
									<exp exp='//Sensor_1_Current = Sensor_1_Current / 100' />
									<exp exp='//Sensor_2_Current = Sensor_2_Current / 100' />
									<exp exp='//Sensor_3_Current = Sensor_3_Current / 100' />
								</command>
								<command class_type='calculation' title='Convert the sensor &quot;current&quot; values to power.' >
									<exp exp='S_1_Power = Sensor_1_Current * 240 / 100000' />
									<exp exp='S_2_Power = (Sensor_2_Current * 240 / 100000) + 1.111' />
									<exp exp='S_3_Power = (Sensor_3_Current * 240 / 100000) + 2.222' />
								</command>
								<command class_type='calculation' title='Diagnostic' >
									<exp exp='LoopCount = LoopCount + 1' />
								</command>
							</flowline>
						</command>
					</flowline>
				</macro>
				<macro >
					<flowline name='Initialise_WIFI' description='Startup the WIFI.
If we have stored WIFI details then try to connect.
If we can&apos;t connect then host configuration WIFI network.' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<local name='SSID' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot;SKYCPJ4I&quot;' setinit='&quot;SKYCPJ4I&quot;' >
							<array size='50' />
						</local>
						<local name='Password' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot;Py5RCeFfszdZ&quot;' setinit='&quot;Py5RCeFfszdZ&quot;' >
							<array size='50' />
						</local>
						<local name='Ret' type='u8' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<local name='URL' type='T8' description='' isconst='0' isHidden='0' isinit='0' usrinit='&quot;&quot;' setinit='' >
							<array size='50' />
						</local>
						<local name='Connected' type='u8' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
						<command class_type='call' title='Startup ESP32 Comms' component='WLAN_ESP32' macro='Initialise' />
						<command class_type='call' title='Component Macro' component='NetworkComms1' macro='Initialise' />
						<command class_type='comment' title='' comment='Cound not get this to work so hard coded the WiFi settings.' textarea='12,0,12,0' />
						<command class_type='call' title='Read Stored SSID' disable='1' component='eeprom1' macro='ReadString' >
							<return exp='.SSID' />
							<argument exp='0' />
							<argument exp='50' />
						</command>
						<command class_type='call' title='Read Stored Password' disable='1' component='eeprom1' macro='ReadString' >
							<return exp='.Password' />
							<argument exp='50' />
							<argument exp='50' />
						</command>
						<command class_type='loop' title='Loop while not connected to user network' type='0' exp='.Connected = 0' >
							<flowline >
								<command class_type='decision' title='Is SSID Valid?' exp='Length$ (.SSID)' swap='0' >
									<flowline >
										<command class_type='call' title='Attempt to connect to Stored SSID' component='WLAN_ESP32' macro='ConnectToSSID' >
											<return exp='.Connected' />
											<argument exp='.SSID' />
											<argument exp='.Password' />
											<argument exp='20' />
										</command>
									</flowline>
									<flowline >
										<command class_type='calculation' title='SSID Invalid' >
											<exp exp='.Connected = 0' />
										</command>
									</flowline>
								</command>
								<command class_type='decision' title='Connection failed - Host our own network' exp='.Connected = 0' swap='0' >
									<flowline >
										<command class_type='call' title='Create an open network' component='WLAN_ESP32' macro='CreateAccessPoint' >
											<argument exp='&quot;FlowcodeWifi&quot;' />
											<argument exp='&quot;&quot;' />
											<argument exp='1' />
											<argument exp='0' />
										</command>
										<command class_type='call' title='Initialise Webserver User Interface' component='Config_Webserver' macro='Initialise' />
										<command class_type='call' title='Create a HTTP socket for communications' component='Config_Webserver' macro='CreateServerSocket' >
											<return exp='.Ret' />
											<argument exp='80' />
										</command>
										<command class_type='decision' title='Decision' exp='.Ret = 1' swap='0' >
											<flowline >
												<command class_type='loop' title='Loop' type='0' exp='.Ret' >
													<flowline >
														<command class_type='delay' title='Delay - Avoids ESP32 Watchdog reset' exp='100' type='1' />
														<command class_type='call' title='Component Macro' component='Config_Webserver' macro='CheckSocketActivity' >
															<return exp='.URL' />
														</command>
														<command class_type='decision' title='URL Returned?' exp='Length$ (.URL)' swap='0' >
															<flowline >
																<command class_type='calculation' title='Chop out the first 10 chars from the URL' >
																	<exp exp='.URL = Left$ (.URL,10)' />
																</command>
																<command class_type='decision' title='Check for submit URL' exp='Compare$ (.URL,&quot;submit.htm&quot;,0) == 0' swap='0' >
																	<flowline >
																		<command class_type='call' title='Get Form SSID' component='Config_Webserver' macro='GetInValue' >
																			<return exp='.SSID' />
																			<argument exp='0' />
																		</command>
																		<command class_type='call' title='Get Form Password' component='Config_Webserver' macro='GetInValue' >
																			<return exp='.Password' />
																			<argument exp='1' />
																		</command>
																		<command class_type='call' title='Save to EEPROM' component='eeprom1' macro='WriteString' >
																			<argument exp='0' />
																			<argument exp='50' />
																			<argument exp='.SSID' />
																		</command>
																		<command class_type='call' title='Save to EEPROM' component='eeprom1' macro='WriteString' >
																			<argument exp='50' />
																			<argument exp='50' />
																			<argument exp='.Password' />
																		</command>
																		<command class_type='calculation' title='Exit Config Loop - Retry to connect' >
																			<exp exp='.Ret = 0' />
																		</command>
																	</flowline>
																	<flowline />
																</command>
															</flowline>
															<flowline />
														</command>
													</flowline>
												</command>
											</flowline>
											<flowline />
										</command>
									</flowline>
									<flowline />
								</command>
							</flowline>
						</command>
					</flowline>
				</macro>
				<macro >
					<flowline name='VersionHistory' description='' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<command class_type='comment' title='' comment='3D/5 Added future average config controls' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='3D / 3GCI
Removed some debugging code.' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='3C
Added debug serial port' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='ESP3_MQTT_Client_EcoEye3B
WebApp_MQTT_Client_EcoEye3CE Are the latest pairing before removing debugging code.' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='ESP3_MQTT_Client_EcoEye3B
Changed EcoEye serial port to RX2 so I do not have to disconnect for downloading.
Unfortunately it does not work.' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='ESP3_MQTT_Client_EcoEye3A
Tidied up a bit, some minor issues fixed.' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='ESP3_MQTT_Client_EcoEye2B
Average routine added.' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='ESP3_MQTT_Client_EcoEye2A
The is the code from 1.3D converted to ESP32 WROOM temporarily as that has the web app example.
Once happy the plan is to migrate to Raspberry Pi with local MQTT.' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='EcoEye
Channel 1 is closest to the data connector.' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='!!! Important.
Before first use or after changing batteries in the transmitter the serial port needs enabling.

As from the EcoEye manual.
Smart.
Normally serial output is disabled and must be enabled to start live output.
Remove all sensors and the USB cable.
Take a battery out
press and hold the square button
put the battery back in while holding the square button down.
Release the button after the Red LED has flashed.
Plug the sensors and the USB cable back in.' textarea='12,0,12,0' />
						<command class_type='comment' title='' comment='Based on the Environment Monitoring example on the FlowCode forum.' textarea='12,0,12,0' />
					</flowline>
				</macro>
				<macro >
					<flowline name='InitialiseUART' description='' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<command class_type='call' title='Component Macro' component='EcoEyeUART' macro='Initialise' />
						<command class_type='call' title='' component='EcoEyeUART' macro='ChangeHWBaud' >
							<argument exp='4' />
						</command>
					</flowline>
				</macro>
				<macro >
					<flowline name='HexStrToInt' description='' statediag='0' >
						<return name='Return' type='u32' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<param name='str' type='T8*' description='' isconst='0' isHidden='0' isinit='0' usrinit='&quot;&quot;' setinit='' >
							<array size='20' />
						</param>
						<local name='len' type='u8' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<local name='i' type='u8' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<local name='x' type='u32' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<local name='c' type='u8' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<command class_type='calculation' title='Calculation' >
							<exp exp='.len = Length$ (.str)' />
							<exp exp='.x = 0' />
							<exp exp='.i = 0' />
						</command>
						<command class_type='loop' title='Loop' type='0' exp='.i &lt; .len' >
							<flowline >
								<command class_type='calculation' title='Make way for the next digit' >
									<exp exp='.x = .x * 16' />
									<exp exp='.c = .str[.i]' />
								</command>
								<command class_type='decision' title='Is it a digit' exp='(.c &gt;= &apos;0&apos;) &amp;&amp; (.c &lt;= &apos;9&apos;)' swap='0' >
									<flowline >
										<command class_type='calculation' title='Calculation' >
											<exp exp='.x = .x + (.c - &apos;0&apos;)' />
										</command>
									</flowline>
									<flowline >
										<command class_type='decision' title='Hex digit' exp='(.c &gt;= &apos;A&apos;) &amp;&amp; (.c &lt;= &apos;F&apos;)' swap='0' >
											<flowline >
												<command class_type='calculation' title='Calculation' >
													<exp exp='.x = .x + (.c - &apos;A&apos; + 10)' />
												</command>
											</flowline>
											<flowline >
												<command class_type='calculation' title='End of valid number so lets bail out of the loop' >
													<exp exp='.i = .len' />
												</command>
											</flowline>
										</command>
									</flowline>
								</command>
								<command class_type='calculation' title='Calculation' >
									<exp exp='.i = .i + 1' />
								</command>
							</flowline>
						</command>
						<command class_type='calculation' title='Calculation' break='1' >
							<exp exp='.Return = .x' />
						</command>
					</flowline>
				</macro>
				<macro >
					<flowline name='Decode' description='' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<local name='str' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot;&quot;' setinit='&quot;&quot;' >
							<array size='20' />
						</local>
						<command class_type='calculation' title='Calculation' >
							<exp exp='DecodedTime = AverageConfig &amp; 0b00001111' />
							<exp exp='DecodedChannel = AverageConfig &amp; 0b11110000' />
						</command>
						<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendNumber' >
							<argument exp='AverageConfig' />
						</command>
						<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendNumber' >
							<argument exp='DecodedTime' />
						</command>
						<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendNumber' >
							<argument exp='DecodedTime' />
						</command>
					</flowline>
				</macro>
				<macro >
					<flowline name='Main' description='' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<local name='iSuccess' type='u16' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
						<local name='bConnected' type='b1' description='' isconst='0' isHidden='0' isinit='1' usrinit='0' setinit='0' />
						<local name='iError' type='u8' description='' isconst='0' isHidden='0' isinit='0' usrinit='0' setinit='' />
						<local name='sData' type='T8' description='' isconst='0' isHidden='0' isinit='0' usrinit='&quot;&quot;' setinit='' >
							<array size='200' />
						</local>
						<local name='sTopic' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot;&quot;' setinit='&quot;&quot;' >
							<array size='32' />
						</local>
						<local name='sPayload' type='T8' description='' isconst='0' isHidden='0' isinit='1' usrinit='&quot;&quot;' setinit='&quot;&quot;' >
							<array size='32' />
						</local>
						<command class_type='label' title='Declare Connection Point' labelid='0' labelname='A' />
						<command class_type='call' title='Component Macro' component='EcoEyeUART' macro='Initialise' />
						<command class_type='call' title='Component Macro' component='Debug_Output' macro='Initialise' />
						<command class_type='comment' title='' comment='Startup WIFI and allow user to connect to their own network.

Attempts to connect to EE stored network.

If network cannot connect then host own network allowing user
to connect and configure the connection details.' textarea='12,0,12,0' />
						<command class_type='call' title='User Macro' macro='Initialise_WIFI' />
						<command class_type='comment' title='' comment='By this point we are now connected to the users network

We can now do generic TCP comms like the example below.

Or we could have a secondary Webserver component serving up different
pages with the functionality we require.' textarea='12,0,12,0' />
						<command class_type='delay' title='Delay' exp='1' type='2' />
						<command class_type='call' title='Component Macro' component='MQTTClient1' macro='Initialise' />
						<command class_type='interrupt' title='Interrupt' enable='1' name='TMR0' call='TmrPing' >
							<settings timer='1' prescale='-1' postscale='-1' rollover='30' bitcount='-1' trigger='3' ppsport='-1' ppspin='-1' maskhi='--------------------------------------------------------------------------------------------------------------------------------------------------------------------------8' masklo='--------------------------------------------------------------------------------------------------------------------------------------------------------------------------8' >
								<option value='30' />
								<option value='2' />
								<option value='-1' />
								<option value='-1' />
								<option value='-1' />
								<option value='-1' />
								<option value='-1' />
								<option value='-1' />
							</settings>
						</command>
						<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='ClearAll' />
						<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignName' >
							<argument exp='JSON_IX_COUNT' />
							<argument exp='&quot;count&quot;' />
						</command>
						<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignName' >
							<argument exp='JSON_IX_S1_Power' />
							<argument exp='&quot;S_1_Power&quot;' />
						</command>
						<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignName' >
							<argument exp='JSON_IX_S2_Power' />
							<argument exp='&quot;S_2_Power&quot;' />
						</command>
						<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignName' >
							<argument exp='JSON_IX_S3_Power' />
							<argument exp='&quot;S_3_Power&quot;' />
						</command>
						<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignName' >
							<argument exp='JSON_IX_Run_Average' />
							<argument exp='&quot;Run_Avg&quot;' />
						</command>
						<command class_type='loop' title='Loop' type='0' exp='1' >
							<flowline >
								<command class_type='decision' title='Decision' exp='.bConnected' swap='0' >
									<flowline >
										<command class_type='decision' title='Decision' exp='bPingFlag' swap='0' >
											<flowline >
												<command class_type='call' title='Component Macro' component='MQTTClient1' macro='Ping' />
												<command class_type='calculation' title='Calculation' >
													<exp exp='bPingFlag = 0' />
												</command>
											</flowline>
											<flowline />
										</command>
										<command class_type='call' title='Component Macro' component='MQTTClient1' macro='Read' >
											<return exp='.iSuccess' />
										</command>
										<command class_type='decision' title='Decision' exp='.iSuccess' swap='0' >
											<flowline >
												<command class_type='call' title='Component Macro' component='MQTTClient1' macro='GetTopic' >
													<return exp='.iSuccess' />
													<argument exp='.sTopic' />
													<argument exp='32' />
												</command>
												<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendString' >
													<argument exp='.sTopic' />
												</command>
												<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendChar' >
													<argument exp='13' />
												</command>
												<command class_type='decision' title='Decision' exp='Compare$(.sTopic,&quot;mtx_demo_switchdata&quot;,0) == 0' swap='0' >
													<flowline >
														<command class_type='call' title='Component Macro' component='MQTTClient1' macro='GetPayload' >
															<return exp='.iSuccess' />
															<argument exp='.sPayload' />
															<argument exp='32' />
														</command>
														<command class_type='decision' title='Decision' exp='.iSuccess' swap='0' >
															<flowline >
																<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendString' >
																	<argument exp='&quot;Success&quot;' />
																</command>
																<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendChar' >
																	<argument exp='13' />
																</command>
																<command class_type='call' title='Component Macro' component='JSONDecoder1' macro='ParseJSON' >
																	<argument exp='.sPayload' />
																</command>
																<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendString' >
																	<argument exp='.sPayload' />
																</command>
																<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendChar' >
																	<argument exp='13' />
																</command>
																<command class_type='call' title='Component Macro' component='JSONDecoder1' macro='FindName' >
																	<return exp='Index' />
																	<argument exp='AvgCfg' />
																	<argument exp='0' />
																</command>
																<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendNumber' >
																	<argument exp='Index' />
																</command>
																<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendChar' >
																	<argument exp='13' />
																</command>
																<command class_type='decision' title='Index found?' exp='Index &gt;= 0' swap='0' >
																	<flowline >
																		<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendString' >
																			<argument exp='&quot;IndexSuccess&quot;' />
																		</command>
																		<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendChar' >
																			<argument exp='13' />
																		</command>
																		<command class_type='call' title='Component Macro' component='JSONDecoder1' macro='ReadDataAsNumber' >
																			<return exp='AverageConfig' />
																			<argument exp='Index' />
																		</command>
																		<command class_type='call' title='User Macro' macro='Decode' />
																	</flowline>
																	<flowline >
																		<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendString' >
																			<argument exp='&quot;IndexFailed&quot;' />
																		</command>
																		<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendChar' >
																			<argument exp='13' />
																		</command>
																		<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendChar' >
																			<argument exp='13' />
																		</command>
																	</flowline>
																</command>
															</flowline>
															<flowline >
																<command class_type='call' title='Component Macro' component='Debug_Output' macro='SendString' >
																	<argument exp='&quot;NotSuccess&quot;' />
																</command>
															</flowline>
														</command>
													</flowline>
													<flowline />
												</command>
											</flowline>
											<flowline />
										</command>
										<command class_type='comment' title='' comment='Sample sensor and put together JSON packet' textarea='12,0,12,0' />
										<command class_type='call' title='User Macro' macro='ReadEcoEyeData' />
										<command class_type='comment' title='' comment='Really need to have the average routine called by an interrupt.' textarea='12,0,12,0' />
										<command class_type='call' title='User Macro' macro='Average' />
										<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignDataAsNumber' >
											<argument exp='JSON_IX_COUNT' />
											<argument exp='counter' />
										</command>
										<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignDataAsFloat' >
											<argument exp='JSON_IX_S1_Power' />
											<argument exp='S_1_Power' />
											<argument exp='3' />
										</command>
										<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignDataAsFloat' >
											<argument exp='JSON_IX_S2_Power' />
											<argument exp='S_2_Power' />
											<argument exp='3' />
										</command>
										<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignDataAsFloat' >
											<argument exp='JSON_IX_S3_Power' />
											<argument exp='S_3_Power' />
											<argument exp='3' />
										</command>
										<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='AssignDataAsFloat' >
											<argument exp='JSON_IX_Run_Average' />
											<argument exp='Run_Avg' />
											<argument exp='3' />
										</command>
										<command class_type='call' title='Component Macro' component='JSONEncoder1' macro='GenerateJSON' >
											<return exp='DataString' />
										</command>
										<command class_type='call' title='Call Component Macro' component='MQTTClient1' macro='Publish' >
											<return exp='.bConnected' />
											<argument exp='&quot;mtx_demo_sensedata&quot;' />
											<argument exp='DataString' />
										</command>
										<command class_type='call' title='Component Macro' disable='1' component='Debug_Output' macro='SendString' >
											<argument exp='DataString' />
										</command>
										<command class_type='calculation' title='Calculation' >
											<exp exp='counter = counter + 1' />
										</command>
										<command class_type='delay' title='Delay' exp='1000' type='1' />
									</flowline>
									<flowline >
										<command class_type='call' title='Component Macro' component='MQTTClient1' macro='Connect' >
											<return exp='.bConnected' />
										</command>
										<command class_type='decision' title='Decision' exp='.bConnected' swap='0' >
											<flowline >
												<command class_type='call' title='Call Component Macro' component='MQTTClient1' macro='Subscribe' >
													<return exp='.iSuccess' />
													<argument exp='&quot;mtx_demo_switchdata&quot;' />
												</command>
												<command class_type='decision' title='Decision' exp='!.iSuccess' swap='0' >
													<flowline />
													<flowline />
												</command>
											</flowline>
											<flowline />
										</command>
									</flowline>
								</command>
								<command class_type='call' title='Call Component Macro' component='MQTTClient1' macro='LastError' >
									<return exp='.iError' />
								</command>
								<command class_type='decision' title='Decision' exp='.iError || (.bConnected = 0)' swap='0' >
									<flowline >
										<command class_type='call' title='Call Component Macro' component='MQTTClient1' macro='ErrorAsString' >
											<return exp='.sData' />
											<argument exp='.iError' />
										</command>
										<command class_type='call' title='Call Component Macro' component='MQTTClient1' macro='Disconnect' />
										<command class_type='calculation' title='Calculation' >
											<exp exp='.bConnected = 0' />
										</command>
										<command class_type='delay' title='Delay' exp='5' type='2' />
										<command class_type='goto' title='Goto Connection Point' labelid='0' labelname='' />
									</flowline>
									<flowline >
										<command class_type='delay' title='Delay' exp='100' type='1' />
									</flowline>
								</command>
							</flowline>
						</command>
					</flowline>
				</macro>
				<macro >
					<flowline name='Average' description='' statediag='0' >
						<return name='Return' type='v0' description='' isconst='0' isHidden='0' isinit='0' usrinit='' setinit='' />
						<command class_type='comment' title='' comment='So far rolling average is over 300 seconds (5 minutes)
Later the plan is to add selector on web page for 5 / 10 / 15 minutes. ' textarea='12,0,12,0' />
						<command class_type='calculation' title='Change to suite data being averaged.' >
							<exp exp='Input_Data = S_3_Power' />
						</command>
						<command class_type='decision' title='Is the array not full' exp='Array_Position &lt; Array_Size' swap='0' >
							<flowline >
								<command class_type='comment' title='' comment='If the array is not full add the new data to the current position in the array.
Divide the temp store by the position in the array.' textarea='12,0,12,0' />
								<command class_type='calculation' title='Store the new value into the array' >
									<exp exp='Average_Data[Data_Position] = Input_Data' />
								</command>
								<command class_type='calculation' title='Add the new data to temp store' >
									<exp exp='Temp_Var = Temp_Var + Input_Data' />
								</command>
								<command class_type='calculation' title='Calculate the running average when the array is not full' >
									<exp exp='Run_Avg = Temp_Var / Array_Position' />
								</command>
								<command class_type='calculation' title='Increment the Loop_Limit counter' >
									<exp exp='Array_Position = Array_Position + 1' />
								</command>
							</flowline>
							<flowline >
								<command class_type='comment' title='' comment='If the array is full subtract the data in the current array position from the temp store.
Add the new data to the temp store.
Add the new data to the current array position.' textarea='12,0,12,0' />
								<command class_type='calculation' title='Subtract value in current position' >
									<exp exp='Temp_Var = Temp_Var - Average_Data[Data_Position]' />
								</command>
								<command class_type='calculation' title='Add new data to current position' >
									<exp exp='Temp_Var = Temp_Var + Input_Data' />
								</command>
								<command class_type='calculation' title='Store the new value into the array' >
									<exp exp='Average_Data[Data_Position] = Input_Data' />
								</command>
								<command class_type='calculation' title='Calculate the running average' >
									<exp exp='Run_Avg = Temp_Var / Array_Position' />
								</command>
							</flowline>
						</command>
						<command class_type='calculation' title='Next array position' >
							<exp exp='Data_Position = Data_Position + 1' />
							<exp exp='' />
						</command>
						<command class_type='decision' title='If at the last position in the array reset the position' exp='Data_Position &gt; Array_Size - 1' swap='0' >
							<flowline >
								<command class_type='calculation' title='Calculation' >
									<exp exp='Data_Position = 0' />
								</command>
							</flowline>
							<flowline />
						</command>
					</flowline>
				</macro>
			</macros>
			<component class_type='ref' guid='f0f54e46-0848-4930-9bb6-eff9a34ed229' vmin='4' vmaj='2' codename='WLAN_ESP32' panelId='0' x='483.5' y='-264' z='0' xsz='24.9811' ysz='25.1392' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='1' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='Verbose' data='1' />
					<value target='SSIDScanSize' data='8' />
					<value target='RemapIndex' data='22' />
					<value target='TCP_Base1::interface' data='0' />
					<value target='TCP_Base1::ConsoleData' data='1' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
			<component class_type='ref' guid='91049bf5-2436-42dc-947a-c30c86463d98' vmin='5' vmaj='1' codename='NetworkComms1' panelId='0' x='281.5' y='-320.04' z='1' xsz='1.00704' ysz='1.0133' zsz='1' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='0' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='Component' data='0' />
					<value target='LibraryComponent1::OutputIcon::LinkTo' data='001' />
					<value target='TCPIP_Channel' data='000' />
					<value target='RemapIndex' data='22' />
					<value target='Status' data='Supported' />
					<value target='Sim' data='0' />
					<value target='SimControl' data='000' />
					<value target='NetworkInterface' data='255' />
					<value target='IPAddress' data='0.0.0.0' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
			<component class_type='ref' guid='459c9cfb-82e3-40ad-9456-54fc40ba5e6c' vmin='1' vmaj='1' codename='MQTTClient1' panelId='0' x='82.0377' y='-251' z='2' xsz='24.9811' ysz='25.3491' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='0' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='NETWORK_COMPONENT' data='0' />
					<value target='LibraryComponent1::OutputIcon::LinkTo' data='001' />
					<value target='HOST' data='broker.hivemq.com' />
					<value target='PORT' data='1883' />
					<value target='CLIENT' data='FC_ESP_DataNode' />
					<value target='TIMEOUT' data='2000' />
					<value target='ReadTimeout' data='150' />
					<value target='KEEP_ALIVE' data='60' />
					<value target='AUTHENTICATION' data='000' />
					<value target='MaxPacketSize' data='260' />
					<value target='NAME' data='' />
					<value target='PASSWORD' data='' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
			<component class_type='ref' guid='dcbf571f-a6fa-402d-bdd4-be00cca4070f' vmin='2' vmaj='1' codename='eeprom1' panelId='0' x='485.5' y='-420.074' z='3' xsz='25.18' ysz='25.7194' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='0' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='EESize' data='128 byte' />
					<value target='EEbitdepth' data='16 bit' />
					<value target='InitialValues' data='' />
					<value target='InitValsParsed' data='' />
					<value target='ResetValues' data='0' />
					<value target='BitDepth' data='16' />
					<value target='Sim' data='0' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
			<component class_type='ref' guid='a1c9b843-a641-4b9c-b762-26995b8f9464' vmin='7' vmaj='1' codename='Config_Webserver' panelId='0' x='84' y='-400.04' z='4' xsz='25.1778' ysz='25.3326' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='0' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='label' data='Web Server' />
					<value target='RXBuffSize' data='1024' />
					<value target='Timeout' data='120' />
					<value target='Component' data='0' />
					<value target='LibraryComponent1::OutputIcon::LinkTo' data='001' />
					<value target='html_source' data='000' />
					<value target='Directory' data='$(srcdir)' />
					<value target='FComponent' data='0' />
					<value target='LibraryComponent1::InputIcon::LinkTo' data='0' />
					<value target='bCustomHeader' data='0' />
					<value target='bUseCallback' data='0' />
					<value target='bHeaderInCallback' data='0' />
					<value target='custom_header' data='HTTP/1.0 200 OK' />
					<value target='max_pages' data='2' />
					<value target='name1' data='index.htm' />
					<value target='html1' data='&lt;html&gt;
Flowcode ESP32 Demo - Network Config Page
 &lt;form action=&quot;submit.htm&quot;&gt;
    &lt;label for=&quot;0&quot;&gt;SSID&lt;/label&gt;
    &lt;input type=&quot;text&quot; placeholder=&quot;Enter SSID&quot; name=&quot;0&quot; required&gt;&lt;br /&gt;
    &lt;label for=&quot;1&quot;&gt;&lt;b&gt;Password&lt;/b&gt;&lt;/label&gt;
    &lt;input type=&quot;password&quot; placeholder=&quot;Enter Password&quot; name=&quot;1&quot; required&gt;&lt;br /&gt;
    &lt;button type=&quot;submit&quot; class=&quot;registerbtn&quot;&gt;Register&lt;/button&gt;
&lt;/form&gt; 
&lt;/html&gt;' />
					<value target='name2' data='page2.htm' />
					<value target='html2' data='&lt;html&gt;
SSID and Password collected.&lt;br /&gt;
Connecting to SSID.
&lt;/html&gt;' />
					<value target='name3' data='page3.htm' />
					<value target='html3' data='' />
					<value target='name4' data='page4.htm' />
					<value target='html4' data='' />
					<value target='Outgoing_Count' data='000' />
					<value target='Out_Len_0' data='20' />
					<value target='Out_Len_1' data='20' />
					<value target='Out_Len_2' data='20' />
					<value target='Out_Len_3' data='20' />
					<value target='Out_Len_4' data='20' />
					<value target='Out_Len_5' data='20' />
					<value target='Out_Len_6' data='20' />
					<value target='Out_Len_7' data='20' />
					<value target='Out_Len_8' data='20' />
					<value target='Out_Len_9' data='20' />
					<value target='Out_Len_10' data='20' />
					<value target='Out_Len_11' data='20' />
					<value target='Out_Len_12' data='20' />
					<value target='Out_Len_13' data='20' />
					<value target='Out_Len_14' data='20' />
					<value target='Out_Len_15' data='20' />
					<value target='Out_Len_16' data='20' />
					<value target='Out_Len_17' data='20' />
					<value target='Out_Len_18' data='20' />
					<value target='Out_Len_19' data='20' />
					<value target='Out_Len_20' data='20' />
					<value target='Out_Len_21' data='20' />
					<value target='Out_Len_22' data='20' />
					<value target='Out_Len_23' data='20' />
					<value target='Out_Len_24' data='20' />
					<value target='Out_Len_25' data='20' />
					<value target='Out_Len_26' data='20' />
					<value target='Out_Len_27' data='20' />
					<value target='Out_Len_28' data='20' />
					<value target='Out_Len_29' data='20' />
					<value target='Incoming_Count' data='002' />
					<value target='In_Len_0' data='50' />
					<value target='In_Len_1' data='50' />
					<value target='In_Len_2' data='20' />
					<value target='In_Len_3' data='20' />
					<value target='In_Len_4' data='20' />
					<value target='In_Len_5' data='20' />
					<value target='In_Len_6' data='20' />
					<value target='In_Len_7' data='20' />
					<value target='In_Len_8' data='20' />
					<value target='In_Len_9' data='20' />
					<value target='In_Len_10' data='20' />
					<value target='In_Len_11' data='20' />
					<value target='In_Len_12' data='20' />
					<value target='In_Len_13' data='20' />
					<value target='In_Len_14' data='20' />
					<value target='In_Len_15' data='20' />
					<value target='In_Len_16' data='20' />
					<value target='In_Len_17' data='20' />
					<value target='In_Len_18' data='20' />
					<value target='In_Len_19' data='20' />
					<value target='BMP' data='1' />
					<value target='GIF' data='1' />
					<value target='JPG' data='1' />
					<value target='PNG' data='1' />
					<value target='ICO' data='1' />
					<value target='CSS' data='1' />
					<value target='CSV' data='1' />
					<value target='TXT' data='1' />
					<value target='JS' data='1' />
					<value target='JAR' data='1' />
					<value target='JSON' data='1' />
					<value target='PDF' data='1' />
					<value target='XML' data='1' />
					<value target='RAR' data='1' />
					<value target='ZIP' data='1' />
					<value target='TTF' data='1' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
			<component class_type='ref' guid='f2ad060d-0ae3-43d2-9d82-f49eb4215240' vmin='0' vmaj='1' codename='JSONEncoder1' panelId='0' x='77' y='-536' z='5' xsz='25.1767' ysz='25' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='0' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='DataBytes' data='100' />
					<value target='AppendNewline' data='1' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
			<component class_type='ref' guid='6af7744a-76aa-4522-8cf1-05c8bd34859c' vmin='1' vmaj='1' codename='JSONDecoder1' panelId='0' x='207' y='-536' z='6' xsz='25.1767' ysz='25' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='0' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='DataBytes' data='100' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
			<component class_type='ref' guid='c73616d1-7ad0-45d9-aada-69ccfa4c5efc' vmin='0' vmaj='3' codename='EcoEyeUART' panelId='0' x='336.495' y='-515' z='7' xsz='25.1778' ysz='25.1392' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='1' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='cal_uart::CHANNEL' data='002' />
					<value target='cal_uart::BAUD_LIST' data='005' />
					<value target='cal_uart::BAUD' data='19200' />
					<value target='cal_uart::DBITS' data='008' />
					<value target='cal_uart::RETURN' data='001' />
					<value target='cal_uart::ECHO' data='000' />
					<value target='cal_uart::UseTX' data='0' />
					<value target='cal_uart::TX' data='$PORTA.12' />
					<value target='cal_uart::OutputPins' data='011' />
					<value target='cal_uart::TXAlt' data='0' />
					<value target='cal_uart::UseRX' data='1' />
					<value target='cal_uart::RX' data='$PORTA.16' />
					<value target='cal_uart::InputPins' data='016' />
					<value target='cal_uart::RXAlt' data='0' />
					<value target='cal_uart::FLOWEN' data='000' />
					<value target='cal_uart::RTS' data='$PORTB.2' />
					<value target='cal_uart::CTS' data='$PORTB.1' />
					<value target='label' data='UART' />
					<value target='cal_uart::ScopeTraces' data='0' />
					<value target='cal_uart::ConsoleData' data='1' />
					<value target='cal_uart::ConsoleFormat' data='000' />
					<value target='cal_uart::ConsoleColumns' data='64' />
					<value target='cal_uart::DataSource' data='000' />
					<value target='cal_uart::com_port' data='000' />
					<value target='cal_uart::Injector' data='000' />
					<value target='cal_uart::APIUseDDR' data='' />
					<value target='cal_uart::APIDDRPin' data='' />
					<value target='cal_uart::APIDDRRXState' data='' />
					<value target='cal_uart::APIUseFC' data='' />
					<value target='cal_uart::APICTSPin' data='' />
					<value target='cal_uart::APIRTSPin' data='' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
			<component class_type='ref' guid='c73616d1-7ad0-45d9-aada-69ccfa4c5efc' vmin='0' vmaj='3' codename='Debug_Output' panelId='0' x='274' y='-125' z='8' xsz='25.1778' ysz='25.1392' zsz='25' xang='0' yang='0' zang='0' xquat='0' yquat='0' zquat='0' wquat='1' visible='1' scadavisible='1' interactive='1' solid='1' layer='2' poslock='1' ancTop='0' ancBottom='0' ancLeft='0' ancRight='0' ancMinX='0' ancMinY='0' comp2dType='0' >
				<resources />
				<properties />
				<values >
					<value target='cal_uart::CHANNEL' data='001' />
					<value target='cal_uart::BAUD_LIST' data='009' />
					<value target='cal_uart::BAUD' data='115200' />
					<value target='cal_uart::DBITS' data='008' />
					<value target='cal_uart::RETURN' data='001' />
					<value target='cal_uart::ECHO' data='000' />
					<value target='cal_uart::UseTX' data='1' />
					<value target='cal_uart::TX' data='$PORTA.1' />
					<value target='cal_uart::OutputPins' data='000' />
					<value target='cal_uart::TXAlt' data='0' />
					<value target='cal_uart::UseRX' data='0' />
					<value target='cal_uart::RX' data='$PORTA.3' />
					<value target='cal_uart::InputPins' data='001' />
					<value target='cal_uart::RXAlt' data='0' />
					<value target='cal_uart::FLOWEN' data='000' />
					<value target='cal_uart::RTS' data='$PORTB.2' />
					<value target='cal_uart::CTS' data='$PORTB.1' />
					<value target='label' data='UART' />
					<value target='cal_uart::ScopeTraces' data='0' />
					<value target='cal_uart::ConsoleData' data='1' />
					<value target='cal_uart::ConsoleFormat' data='000' />
					<value target='cal_uart::ConsoleColumns' data='64' />
					<value target='cal_uart::DataSource' data='000' />
					<value target='cal_uart::com_port' data='000' />
					<value target='cal_uart::Injector' data='000' />
					<value target='cal_uart::APIUseDDR' data='' />
					<value target='cal_uart::APIDDRPin' data='' />
					<value target='cal_uart::APIDDRRXState' data='' />
					<value target='cal_uart::APIUseFC' data='' />
					<value target='cal_uart::APICTSPin' data='' />
					<value target='cal_uart::APIRTSPin' data='' />
				</values>
				<events />
				<apis />
				<variables />
				<macros />
			</component>
		</component>
	</components>
	<scadaresourcelookup />
	<keymap />
	<panel2d shadows='0' lighting='0' brightness='0' >
		<background rgb='8421376' img='' style='0' />
		<camera xe='0' ye='0' ze='387.865' xt='0' yt='0' zt='0' xquat='0' yquat='0' zquat='0' wquat='1' />
		<viewport dx='420' dy='849' zoom='131.025' fix_topleft='0' />
		<page x='1000' y='1000' show='0' rgb='7360576' />
		<winpos ID='7005' RectRecentFloat='887,0,1537,450' RectRecentDocked='0,0,420,872' RecentFrameAlignment='16384' RecentRowIndex='0' IsFloating='0' MRUWidth='32767' PinState='0' IsMaximized='0' IsVisible='0' />
	</panel2d>
	<panel3d shadows='0' lighting='2' brightness='-76' perspective='1' >
		<background rgb='8409120' img='' style='0' />
		<table rgb='7360576' img='' style='0' size='0' />
		<camera xe='0' ye='0' ze='781.66' xt='0' yt='0' zt='0' xquat='0' yquat='0' zquat='0' wquat='1' />
		<camerakey0 xe='0' ye='0' ze='300' xt='0' yt='0' zt='0' xquat='0' yquat='0' zquat='0' wquat='1' />
		<camerakey1 xe='-3.67394e-14' ye='0' ze='-300' xt='0' yt='0' zt='0' xquat='0' yquat='1' zquat='0' wquat='6.12323e-17' />
		<camerakey2 xe='0' ye='-300' ze='6.66134e-14' xt='0' yt='0' zt='0' xquat='-0.707107' yquat='0' zquat='0' wquat='0.707107' />
		<camerakey3 xe='-3.67394e-14' ye='300' ze='6.66134e-14' xt='0' yt='0' zt='0' xquat='-4.32978e-17' yquat='0.707107' zquat='0.707107' wquat='4.32978e-17' />
		<camerakey4 xe='-300' ye='-6.66134e-14' ze='6.66134e-14' xt='0' yt='0' zt='0' xquat='-0.5' yquat='0.5' zquat='0.5' wquat='0.5' />
		<camerakey5 xe='300' ye='-6.66134e-14' ze='6.66134e-14' xt='0' yt='0' zt='0' xquat='-0.5' yquat='-0.5' zquat='-0.5' wquat='0.5' />
		<camerakey6 xe='-173.205' ye='-173.205' ze='173.205' xt='0' yt='0' zt='0' xquat='-0.424708' yquat='0.17592' zquat='0.339851' wquat='0.820473' />
		<winpos ID='7004' RectRecentFloat='0,600,650,1050' RectRecentDocked='0,0,432,566' RecentFrameAlignment='16384' RecentRowIndex='0' IsFloating='0' MRUWidth='32767' PinState='0' IsMaximized='0' IsVisible='0' />
	</panel3d>
	<panels2d count='1' >
		<panel2d_0 id='0' name='2D Panel' type='0' >
			<winpos ID='1171' RectRecentFloat='657,151,1444,836' RectRecentDocked='1278,141,1920,1013' RecentFrameAlignment='16384' RecentRowIndex='0' IsFloating='1' MRUWidth='32767' PinState='0' IsMaximized='0' IsVisible='0' />
			<background fill='288230376151053813' showgrid='1' gridstyle='1' gridsize='10' gridbrush='71776119075691740' snaptogrid='1' fitcomp='0' disp_x='300' disp_y='400' scale='100' disp_col='16777215' />
		</panel2d_0>
	</panels2d>
	<layout >
		<view type='0' name='Main' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='75' scrollx='0' scrolly='0' flags='0' />
		<view type='0' name='InitialiseUART' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='100' scrollx='0' scrolly='0' flags='0' />
		<view type='0' name='Initialise_WIFI' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='100' scrollx='0' scrolly='0' flags='0' />
		<view type='0' name='TmrPing' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='100' scrollx='0' scrolly='0' flags='0' />
		<view type='0' name='ReadEcoEyeData' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='100' scrollx='0' scrolly='0' flags='0' />
		<view type='0' name='HexStrToInt' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='100' scrollx='0' scrolly='0' flags='0' />
		<view type='0' name='Average' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='100' scrollx='0' scrolly='0' flags='0' />
		<view type='0' name='VersionHistory' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='100' scrollx='0' scrolly='0' flags='0' />
		<view type='0' name='Decode' mode='0' placement='LAAAAAAAAAABAAAA---------------------wUAAAAYAAAA7gUAAGMDAAA' zoom='100' scrollx='0' scrolly='0' flags='0' />
	</layout>
</document>
</root>
