I’m sure many of you saw the support instructions to a user detailing how to get access to the system logs.
Wonder what all that crap means? Let’s take a look! (you can download the logs from the link above and follow along at home, if you like)
You’ll see a whole list of files in there:
@400000005a5510b82b7438c8.u @400000005a5510bb11862138.u @400000005a7f05f91f9d52a0.s @400000005a83d2222c953540.s
@400000005a5510b911104d28.u @400000005a5510bb11866f58.u @400000005a82625f03394970.s @400000005a83d2d21de72aa8.s
@400000005a5510ba11db9438.u @400000005a5510bb11afcd30.u @400000005a837bcf3a0e1f20.s @400000005a85cc321e210b10.s
@400000005a5510ba12383af8.u @400000005a5510bb11d6c9a8.u @400000005a838c63249af0f0.s @400000005a86493737620e08.s
@400000005a5510ba1242b690.u @400000005a5510bb12417258.u @400000005a83b08d37ad5f48.s @400000005a875f0a2304a920.s
@400000005a5510ba12b571a8.u @400000005a5510bb13a74bb8.u @400000005a83ccb400782da0.s @400000005a87beca0bdf98b8.s
@400000005a5510ba2e450820.u @400000005a5510bb15a66778.u @400000005a83cd49347a3058.s @400000005a88981c0ee24d80.s
@400000005a5510ba32054088.u @400000005a5510bb15b4c728.u @400000005a83cdf222c79468.s @400000005a8ad9182e660570.s
@400000005a5510ba320bb8c8.u @400000005a5510be1232a160.u @400000005a83ce9f1461c9e8.s @400000005a8afe991a536528.s
@400000005a5510bb105d29c8.u @400000005a7a6f9627817eb0.s @400000005a83cf63340dab18.s @400000005a8e4a0f30fc34f8.s
@400000005a5510bb11249490.u @400000005a7cfbc60e3cd238.s @400000005a83d008316a73a0.s @400000005a90d0af384c6250.s
@400000005a5510bb1170a920.u @400000005a7e6af013635548.s @400000005a83d0b3160ee960.s config
@400000005a5510bb1185ac08.u @400000005a7e88af2135e460.s @400000005a83d17b3aedbd38.s current
The files beginning with ‘@’ are archives. The ones ending with ‘.u’ are ones that have been uploaded to Glowforge.
current
is the log file we’ll examine. It’s the log file written by the Glowforge daemon process that controls the machine.
The first line we see tells us about an error (Though, this one really isn’t a true error.):
2018-01-09_18:57:51.15840 3 ERROR: unable to read /data/glowforge.conf (2: No such file or directory, src/config.cpp:401)
This entry tells us 2 things:
- One, it’s looking for a file on the
/data
partition (the ~3.5GB partition that holds the logs and survives firmware upgrades) namedglowforge.conf
. This is the local configuration override file. You can put config settings in here, and they will override the default ones that come with the firmware. What settings, you ask? The address of the API and WSS servers, and the signatures of their SSL certs. I’ll cover those in a future post. - Two, that the program that wrote this file (the
/glowforge/glowforge
service) was written in C++.
Next up, we have the PID of the daemon, and the buildtime of the firmware image:
2018-01-09_18:57:51.22832 4 INFO: PID: 620
2018-01-09_18:57:51.22834 4 INFO: Build time: Jan 8 2018 23:06:26
2018-01-09_18:57:51.22835 4 INFO: Start time: Jan 9 2018 18:57:51
2018-01-09_18:57:51.22836 4 INFO: Machine uptime: 15 sec
We’re then presented with some information courtesy of U-Boot:
2018-01-09_18:57:51.22836 4 INFO: Boot flags: 00000001 power-on
2018-01-09_18:57:51.22837 4 INFO: Boot attempts: 1
2018-01-09_18:57:51.22838 4 INFO: Software resets: 0
2018-01-09_18:57:51.22838 4 INFO: Watchdog timeouts: 0
2018-01-09_18:57:51.22839 4 INFO: Times started since boot: 1
2018-01-09_18:57:51.22839 4 INFO: Abnormal terminations since boot: 0
2018-01-09_18:57:51.22840 4 INFO: Last termination exit code: 0
The boot flags tell the system why it is booting. Was this a normal power-on, sw-reset, or watchdog reset? It also keeps a running counter. Helpful to see if the system is stuck in a boot loop.
We then get some version information, serial number, and some microprocessor fuse info:
2018-01-09_18:57:51.22841 4 INFO: OS version 1.3.1-12
2018-01-09_18:57:51.22841 4 INFO: Application version e65b5ee4 internal debug
2018-01-09_18:57:51.22842 4 INFO: libuv version 1.15.0
2018-01-09_18:57:51.22843 4 INFO: ck version 0.5.2
2018-01-09_18:57:51.22843 4 INFO: libcurl version 7.54.0
2018-01-09_18:57:51.22844 4 INFO: ssl version GnuTLS/3.3.12
2018-01-09_18:57:51.22844 4 INFO: libwebsockets version 2.0.3 unknown-build-hash
2018-01-09_18:57:51.22845 4 INFO: Serial number: <REDACTED - DON'T PUBLISH THIS - EVER>
2018-01-09_18:57:51.22846 4 INFO: Manufacturing info: 0x00000140 0x00000000
2018-01-09_18:57:51.22846 4 INFO: Boot fuses: 0x00005060
The boot fuses are one-time-programmable settings that reside inside the microprocessor. They cannot be changed. (NOTE: Don’t publicly post your serial number. It is one of the two authentication tokens used by your machine, and both are permanently burned in fuses and cannot be changed.)
Remember the glowforge.conf
file I mentioned earlier? This is what it sets:
2018-01-09_18:57:51.22847 4 INFO: Server URL: https://app.glowforge.com
2018-01-09_18:57:51.24892 4 INFO: Status service URL: wss://status.glowforge.com
2018-01-09_18:57:51.24895 4 INFO: Server public key: QtYJR25yugWevrRMRBgg5+zE+ubxSSwwCTnx+m38yUo=
2018-01-09_18:57:51.24896 4 INFO: Server public key: 3Lq2nVYO5DxKPlJQAFE4BMZY+BQKWcBoAzZTxllWsG8=
2018-01-09_18:57:51.24896 4 INFO: Server public key: cJ7oDkzjLl7vOEyuAqXIlNwvht015vXyfGbU6nJIqFk=
Next up, we have the air filter fan settings (obviously, not doing much as it’s not likely this user actually has an air filter yet):
2018-01-09_18:57:51.24897 36 DEBUG: air_filter_exhaust_fan: setting to 1000 ms
2018-01-09_18:57:51.24898 36 DEBUG: air_filter_intake_fan: setting to 1000 ms
2018-01-09_18:57:51.24898 36 DEBUG: air_filter_power_supply_unit_fan: setting to 1000 ms
2018-01-09_18:57:51.24899 36 DEBUG: air_filter_intake_fan: setting to 0 ms
2018-01-09_18:57:51.24899 36 DEBUG: air_filter_exhaust_fan: setting to 0 ms
2018-01-09_18:57:51.24900 36 DEBUG: air_filter_power_supply_unit_fan: setting to 0 ms
This block is logging the setup of the (currently unused) accelerometers and sensor logging intervals:
2018-01-09_18:57:51.25574 36 DEBUG: interconnect_temp_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.25574 36 DEBUG: board_accel_period: setting to 500 ms
2018-01-09_18:57:51.25575 36 DEBUG: board_accel_x_axis: setting to 0
2018-01-09_18:57:51.25575 38 DEBUG: board_accel_y_axis: setting to 0
2018-01-09_18:57:51.25576 40 DEBUG: board_accel_z_axis: setting to 0
2018-01-09_18:57:51.25576 42 DEBUG: board_accel_duration: setting to 5
2018-01-09_18:57:51.25577 43 DEBUG: board_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.25577 43 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.25578 43 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.25578 44 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.25579 44 DEBUG: board_temp_period: setting to 5000 ms
2018-01-09_18:57:51.25579 44 DEBUG: lid_accel_duration: setting to 5
2018-01-09_18:57:51.26273 45 DEBUG: head_accel_period: setting to 500 ms
2018-01-09_18:57:51.26276 45 DEBUG: head_accel_z_axis: setting to 0
2018-01-09_18:57:51.26277 46 DEBUG: head_accel_x_axis: setting to 0
2018-01-09_18:57:51.26278 48 DEBUG: head_accel_y_axis: setting to 0
2018-01-09_18:57:51.26278 50 DEBUG: lid_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.26279 50 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.26279 50 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.26280 50 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.26280 50 DEBUG: board_temp_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.26281 50 DEBUG: lid_accel_period: setting to 500 ms
2018-01-09_18:57:51.26281 50 DEBUG: head_accel_duration: setting to 5
2018-01-09_18:57:51.26282 51 DEBUG: interconnect_temp_period: setting to 5000 ms
2018-01-09_18:57:51.26282 51 DEBUG: head_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.26283 51 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.26283 72 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.26284 72 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.26284 73 DEBUG: head_temp_period: setting to 5000 ms
2018-01-09_18:57:51.26285 73 DEBUG: lid_temp_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.27874 73 DEBUG: lid_temp_period: setting to 5000 ms
2018-01-09_18:57:51.27878 73 DEBUG: head_temp_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.27878 73 DEBUG: lid_accel_x_axis: setting to 0
2018-01-09_18:57:51.27879 77 DEBUG: lid_accel_y_axis: setting to 0
2018-01-09_18:57:51.27879 77 DEBUG: lid_accel_z_axis: setting to 0
2018-01-09_18:57:51.27880 79 INFO: hw: initialized
2018-01-09_18:57:51.27881 80 INFO: sensor: started (TID=628)
The unused audio system bitching about not finding audio files:
2018-01-09_18:57:51.27881 95 INFO: audio_peripheral: Unable to load sound file /glowforge/sound/boot
2018-01-09_18:57:51.27882 95 INFO: audio_peripheral: Unable to load sound file /glowforge/sound/print_complete
2018-01-09_18:57:51.27882 95 INFO: audio_peripheral: Unable to load sound file /glowforge/sound/print_interrupted
Communications with the laser head are next:
2018-01-09_18:57:51.27883 101 DEBUG: head connected: ID=0x4c, generation=0x04
2018-01-09_18:57:51.27883 101 DEBUG: beam_detect_irq: setting to 0
2018-01-09_18:57:51.27884 101 ERROR: i2c_transfer: ioctl failed (9: Bad file descriptor, src/i2c.cpp:26)
The ‘Hardware Finite State Machine’ makes its first appearance:
2018-01-09_18:57:51.27884 102 DEBUG: HWFSM: event INIT handled by state initial
2018-01-09_18:57:51.27885 103 INFO: doors closed
The HSFM is the master controller for all device CNC operations.
Onto some more sensor initialization:
2018-01-09_18:57:51.27885 103 DEBUG: intake_fan: setting to 250 ms
2018-01-09_18:57:51.28712 103 DEBUG: exhaust_fan: setting to 250 ms
2018-01-09_18:57:51.31539 160 INFO: head initialized
2018-01-09_18:57:51.32048 161 DEBUG: air_assist: setting to 250 ms
2018-01-09_18:57:51.32050 162 DEBUG: uv_led: setting to 0
2018-01-09_18:57:51.32051 164 DEBUG: white_led: setting to 0
2018-01-09_18:57:51.32635 166 DEBUG: z_mode_enable: setting to 1
2018-01-09_18:57:51.32637 167 INFO: Z axis: set half step mode
2018-01-09_18:57:51.32638 167 DEBUG: lambda_t: setting to 6553
2018-01-09_18:57:51.32638 168 DEBUG: lambda_k: setting to 1966
2018-01-09_18:57:51.32639 169 DEBUG: purge_air_output: setting to 1
2018-01-09_18:57:51.32640 170 DEBUG: purge_air_period_source: setting to 1000 ms
2018-01-09_18:57:51.32640 170 DEBUG: z_stepper_enable: setting to 0
2018-01-09_18:57:51.33095 171 DEBUG: z_stepper_current: setting to 1
2018-01-09_18:57:51.33097 172 DEBUG: theta_t: setting to 40
2018-01-09_18:57:51.33098 173 DEBUG: purge_air_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.33099 173 DEBUG: theta_r: setting to 32
2018-01-09_18:57:51.33099 174 DEBUG: air_assist_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.33100 174 DEBUG: beam_detect_irq: setting to 0
2018-01-09_18:57:51.33100 174 DEBUG: e_t: setting to 96
2018-01-09_18:57:51.33101 175 DEBUG: air_assist_pwm: setting to 204
2018-01-09_18:57:51.34688 177 DEBUG: power_temp_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.34690 177 DEBUG: cpu_temp_period: setting to 5000 ms
2018-01-09_18:57:51.34691 177 DEBUG: intake_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.34691 178 DEBUG: cpu_temp_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.34692 178 DEBUG: hw_supply_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.34693 178 DEBUG: power_temp_period: setting to 5000 ms
2018-01-09_18:57:51.34693 178 DEBUG: exhaust_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.34694 178 DEBUG: ir_sensors_data_logging_interval: setting to 0 ms
The lamba_t, lamba_k, theta_t, theta_r, e_t settings are related to the beam sensor in the head, and control the IR sensor’s amplifier.
Time to clear out any pulse data (commonly referred to in the official forums as ‘waveforms’), and set the position as X:0 Y:0 Z:0.
2018-01-09_18:57:51.34694 178 INFO: hw: clearing pulse data
2018-01-09_18:57:51.34695 178 INFO: hw: clearing position
More HWFSM operations, continuing the hardware initialization.
2018-01-09_18:57:51.34695 179 DEBUG: HWFSM: event ENTRY handled by state initializing_subsystems
2018-01-09_18:57:51.34696 179 INFO: coolant: initialized
2018-01-09_18:57:51.34696 179 INFO: hw: started (TID=629)
2018-01-09_18:57:51.34697 179 DEBUG: HWFSM: event PROCEED handled by state initializing_subsystems
2018-01-09_18:57:51.34697 179 DEBUG: HWFSM: event EXIT handled by state initializing_subsystems
2018-01-09_18:57:51.34698 179 DEBUG: HWFSM: initializing_subsystems => waiting_for_hardware
2018-01-09_18:57:51.36433 192 DEBUG: intake_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.36436 192 DEBUG: exhaust_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.36437 192 DEBUG: air_assist_pwm: setting to 204
2018-01-09_18:57:51.36437 202 INFO: coolant_flow_controller_peripheral: Entering pump state 2
2018-01-09_18:57:51.36438 202 INFO: coolant_flow_controller_peripheral: Pump off
2018-01-09_18:57:51.36438 202 DEBUG: coolant_temp_monitor_data_logging_interval: setting to 100 ms
2018-01-09_18:57:51.36439 203 DEBUG: coolant_temp_monitor_timer: setting to 1000 ms
2018-01-09_18:57:51.36439 203 DEBUG: coolant_temp_update_timer: setting to 100 ms
2018-01-09_18:57:51.36440 203 DEBUG: coolant_flow_controller_data_logging_interval: setting to 100 ms
2018-01-09_18:57:51.36440 203 DEBUG: flow_controller_monitor_timer: setting to 1000 ms
2018-01-09_18:57:51.36441 203 DEBUG: flow_controller_pi_timer: setting to 100 ms
2018-01-09_18:57:51.36441 203 INFO: cam: initialized
2018-01-09_18:57:51.36442 204 INFO: coolant: started (TID=631)
2018-01-09_18:57:51.36442 207 INFO: cam: initializing pipeline
2018-01-09_18:57:51.36443 207 DEBUG: air_assist_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.36443 207 DEBUG: z_stepper_current: setting to 1
2018-01-09_18:57:51.38140 210 DEBUG: beam_detect_irq: setting to 0
2018-01-09_18:57:51.38143 211 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.38144 212 DEBUG: board_accel_z_axis: setting to 0
2018-01-09_18:57:51.38144 213 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.38145 214 DEBUG: board_accel_y_axis: setting to 0
2018-01-09_18:57:51.38145 221 DEBUG: board_accel_x_axis: setting to 0
2018-01-09_18:57:51.38146 223 DEBUG: board_accel_period: setting to 500 ms
2018-01-09_18:57:51.38146 223 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.38147 224 DEBUG: board_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.42188 226 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.42191 227 DEBUG: head_accel_z_axis: setting to 0
2018-01-09_18:57:51.42192 228 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.42192 229 DEBUG: head_accel_y_axis: setting to 0
2018-01-09_18:57:51.42193 230 DEBUG: head_accel_x_axis: setting to 0
2018-01-09_18:57:51.42193 233 DEBUG: head_accel_period: setting to 500 ms
2018-01-09_18:57:51.42194 233 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.42194 233 DEBUG: head_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.42195 235 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.42195 235 DEBUG: lid_accel_z_axis: setting to 0
2018-01-09_18:57:51.42196 236 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.42196 236 DEBUG: lid_accel_y_axis: setting to 0
2018-01-09_18:57:51.42197 237 DEBUG: lid_accel_x_axis: setting to 0
2018-01-09_18:57:51.42197 238 DEBUG: lid_accel_period: setting to 500 ms
2018-01-09_18:57:51.42198 238 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.42198 238 DEBUG: lid_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.42199 239 DEBUG: HWFSM: event ENTRY handled by state waiting_for_hardware
2018-01-09_18:57:51.42199 239 DEBUG: HWFSM: event EXIT handled by state waiting_for_hardware
2018-01-09_18:57:51.43108 239 DEBUG: HWFSM: waiting_for_hardware => idle
2018-01-09_18:57:51.43111 239 DEBUG: intake_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.43111 239 DEBUG: exhaust_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.43112 239 DEBUG: air_assist_pwm: setting to 204
2018-01-09_18:57:51.43112 262 DEBUG: air_assist_data_logging_interval: setting to 1000 ms
2018-01-09_18:57:51.43113 262 DEBUG: z_stepper_current: setting to 1
2018-01-09_18:57:51.43113 268 DEBUG: beam_detect_irq: setting to 0
2018-01-09_18:57:51.43576 277 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.44045 282 DEBUG: board_accel_z_axis: setting to 0
2018-01-09_18:57:51.44736 290 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.45209 293 DEBUG: board_accel_y_axis: setting to 0
2018-01-09_18:57:51.47747 322 DEBUG: board_accel_x_axis: setting to 0
2018-01-09_18:57:51.48353 326 DEBUG: board_accel_period: setting to 500 ms
2018-01-09_18:57:51.48356 326 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.49459 328 DEBUG: board_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.49462 331 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.49462 332 DEBUG: head_accel_z_axis: setting to 0
2018-01-09_18:57:51.49463 333 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.49464 334 DEBUG: head_accel_y_axis: setting to 0
2018-01-09_18:57:51.49464 336 DEBUG: head_accel_x_axis: setting to 0
2018-01-09_18:57:51.49465 337 DEBUG: head_accel_period: setting to 500 ms
2018-01-09_18:57:51.49465 338 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.49466 338 DEBUG: head_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.50689 343 DEBUG: accel_fifo_mode: setting to 0
2018-01-09_18:57:51.52163 362 DEBUG: lid_accel_z_axis: setting to 0
2018-01-09_18:57:51.52166 363 DEBUG: accel_fifo_enable: setting to 0
2018-01-09_18:57:51.52167 363 DEBUG: lid_accel_y_axis: setting to 0
2018-01-09_18:57:51.52167 364 DEBUG: lid_accel_x_axis: setting to 0
2018-01-09_18:57:51.52623 367 DEBUG: lid_accel_period: setting to 500 ms
2018-01-09_18:57:51.52626 367 DEBUG: accel_decimator: setting to 0
2018-01-09_18:57:51.52626 367 DEBUG: lid_accel_data_logging_interval: setting to 0 ms
2018-01-09_18:57:51.52627 368 DEBUG: hw: writing to /sys/glowforge/cnc/stop
2018-01-09_18:57:51.52627 368 INFO: hw: clearing pulse data
2018-01-09_18:57:51.52628 368 INFO: hw: clearing position
2018-01-09_18:57:51.52628 369 DEBUG: hw: writing 1 to /sys/glowforge/cnc/laser_latch
2018-01-09_18:57:51.52629 369 DEBUG: HWFSM: event ENTRY handled by state idle
2018-01-09_18:57:51.52629 369 DEBUG: HWFSM: event PROCEED handled by state idle
Finally resulting in the HWFSM reaching the IDLE state, followed by initializing the camera.
Now, we connect to the cloud:
2018-01-09_18:57:53.43024 2211 INFO: net: initialized
2018-01-09_18:57:53.43027 2273 INFO: stats: started (TID=646)
2018-01-09_18:57:53.45352 2298 INFO: net: started (TID=620)
2018-01-09_18:57:53.46315 2300 DEBUG: hw: /dev/watchdog opened, timeout is 60 sec
2018-01-09_18:57:53.46318 2300 INFO: audio_peripheral: Unable to play sound /glowforge/sound/boot
2018-01-09_18:57:53.46319 2300 INFO: net: requesting socket token
2018-02-27_23:42:58.66453 8016 INFO: socket token request: http_code=200, result=0 (OK)
2018-02-27_23:42:58.67891 8019 INFO: WebSocketClient: connecting to wss://status.glowforge.com:443...
2018-02-27_23:42:59.07524 8427 INFO: WebSocketClient: connection established
2018-02-27_23:42:59.08046 8427 INFO: net: connected
2018-02-27_23:42:59.08049 8429 DEBUG: net: websocket interface has address 10.0.0.4
2018-02-27_23:42:59.16016 8512 INFO: update machine status: url=https://app.glowforge.com/api/machines/status http_code=200, result=0 (OK)
The cloud asks for the device’s settings (I’ll detail the contents of the machine to cloud communications in another post):
2018-02-27_23:42:59.46446 8816 INFO: settings [10152211]: state=ready
When the cloud is satisfied with the contents of the settings, it commands the device to start the “HUNT” cycle.
Next up: