docs: update compatibility notes again

This commit is contained in:
Wesley Ellis 2024-12-01 20:40:28 -05:00
parent 9502016f77
commit 0769474594
4 changed files with 302 additions and 296 deletions

View File

@ -30,7 +30,11 @@ Are you hiring? [Send me an email](mailto:tahnok+colmir02@gmail.com)
## Compatibility
The COLMI R02 and R06 are both fully compatible. The R10 is mostly compatible but there is a bug with getting real time heart rate. Steps and heart rate logging do work.
The following rings are fully compatible:
- Colmi R02
- Colmi R06
- Colmi R10
The rule of thumb is that if the listing suggests you use the QRing app, the ring is compatible with this client.

View File

@ -102,7 +102,13 @@ colmi_r02_client </h1>
<h2 id="compatibility">Compatibility</h2>
<p>The COLMI R02 and R06 are both fully compatible. The R10 is mostly compatible but there is a bug with getting real time heart rate. Steps and heart rate logging do work.</p>
<p>The following rings are fully compatible:</p>
<ul>
<li>Colmi R02</li>
<li>Colmi R06</li>
<li>Colmi R10</li>
</ul>
<p>The rule of thumb is that if the listing suggests you use the QRing app, the ring is compatible with this client.</p>

View File

@ -316,111 +316,109 @@
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">valid_readings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="k">except</span> <span class="ne">TimeoutError</span><span class="p">:</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="n">tries</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="c1"># TODO remove this since it breaks Realtec based rings</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">real_time</span><span class="o">.</span><span class="n">CONTINUE_HEART_RATE_PACKET</span><span class="p">)</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">stop_packet</span><span class="p">)</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">if</span> <span class="n">error</span><span class="p">:</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="n">valid_readings</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_realtime_reading</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reading_type</span><span class="p">:</span> <span class="n">real_time</span><span class="o">.</span><span class="n">RealTimeReading</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_poll_real_time_reading</span><span class="p">(</span><span class="n">reading_type</span><span class="p">)</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">set_time</span><span class="o">.</span><span class="n">set_time_packet</span><span class="p">(</span><span class="n">ts</span><span class="p">))</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">blink_twice</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">blink_twice</span><span class="o">.</span><span class="n">BLINK_TWICE_PACKET</span><span class="p">)</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_device_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bleak_client</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="n">device_info_service</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">services</span><span class="o">.</span><span class="n">get_service</span><span class="p">(</span><span class="n">DEVICE_INFO_UUID</span><span class="p">)</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">assert</span> <span class="n">device_info_service</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">hw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_HW_UUID</span><span class="p">)</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">assert</span> <span class="n">hw_info_char</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">hw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">hw_info_char</span><span class="p">)</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;hw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">fw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_FW_UUID</span><span class="p">)</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="k">assert</span> <span class="n">fw_info_char</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">fw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">fw_info_char</span><span class="p">)</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;fw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">stop_packet</span><span class="p">)</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="k">if</span> <span class="n">error</span><span class="p">:</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="n">valid_readings</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_realtime_reading</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reading_type</span><span class="p">:</span> <span class="n">real_time</span><span class="o">.</span><span class="n">RealTimeReading</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_poll_real_time_reading</span><span class="p">(</span><span class="n">reading_type</span><span class="p">)</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">set_time</span><span class="o">.</span><span class="n">set_time_packet</span><span class="p">(</span><span class="n">ts</span><span class="p">))</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">blink_twice</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">blink_twice</span><span class="o">.</span><span class="n">BLINK_TWICE_PACKET</span><span class="p">)</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_device_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="n">client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bleak_client</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="n">device_info_service</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">services</span><span class="o">.</span><span class="n">get_service</span><span class="p">(</span><span class="n">DEVICE_INFO_UUID</span><span class="p">)</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">assert</span> <span class="n">device_info_service</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="n">hw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_HW_UUID</span><span class="p">)</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">assert</span> <span class="n">hw_info_char</span>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">hw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">hw_info_char</span><span class="p">)</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;hw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">fw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_FW_UUID</span><span class="p">)</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="k">assert</span> <span class="n">fw_info_char</span>
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="n">fw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">fw_info_char</span><span class="p">)</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;fw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">return</span> <span class="n">data</span>
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="n">data</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr</span><span class="o">.</span><span class="n">HeartRateLog</span> <span class="o">|</span> <span class="n">hr</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">start_of_day</span><span class="p">(</span><span class="n">date_utils</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr</span><span class="o">.</span><span class="n">read_heart_rate_packet</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr</span><span class="o">.</span><span class="n">CMD_READ_HEART_RATE</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="p">)</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">:</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">READ_HEART_RATE_LOG_SETTINGS_PACKET</span><span class="p">)</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="p">)</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enabled</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">interval</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">hr_log_settings_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">(</span><span class="n">enabled</span><span class="p">,</span> <span class="n">interval</span><span class="p">)))</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="c1"># clear response from queue as it&#39;s unused and wrong</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="p">)</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_steps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">today</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">SportDetail</span><span class="p">]</span> <span class="o">|</span> <span class="n">steps</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="k">if</span> <span class="n">today</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">today</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">tzinfo</span> <span class="o">!=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">:</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Converting target time to utc&quot;</span><span class="p">)</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">days</span> <span class="o">=</span> <span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">target</span><span class="o">.</span><span class="n">date</span><span class="p">())</span><span class="o">.</span><span class="n">days</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Looking back </span><span class="si">{</span><span class="n">days</span><span class="si">}</span><span class="s2"> days&quot;</span><span class="p">)</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">steps</span><span class="o">.</span><span class="n">read_steps_packet</span><span class="p">(</span><span class="n">days</span><span class="p">))</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">CMD_GET_STEP_SOMEDAY</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="p">)</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">reboot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">reboot</span><span class="o">.</span><span class="n">REBOOT_PACKET</span><span class="p">)</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">raw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">subdata</span><span class="p">:</span> <span class="nb">bytearray</span><span class="p">,</span> <span class="n">replies</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">bytearray</span><span class="p">]:</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">packet</span><span class="o">.</span><span class="n">make_packet</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">subdata</span><span class="p">)</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="k">while</span> <span class="n">replies</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">data</span><span class="p">:</span> <span class="nb">bytearray</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">command</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="p">)</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="n">replies</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr</span><span class="o">.</span><span class="n">HeartRateLog</span> <span class="o">|</span> <span class="n">hr</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">start_of_day</span><span class="p">(</span><span class="n">date_utils</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr</span><span class="o">.</span><span class="n">read_heart_rate_packet</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr</span><span class="o">.</span><span class="n">CMD_READ_HEART_RATE</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="p">)</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">:</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">READ_HEART_RATE_LOG_SETTINGS_PACKET</span><span class="p">)</span>
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="p">)</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enabled</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">interval</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">hr_log_settings_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">(</span><span class="n">enabled</span><span class="p">,</span> <span class="n">interval</span><span class="p">)))</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="c1"># clear response from queue as it&#39;s unused and wrong</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="p">)</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_steps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">today</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">SportDetail</span><span class="p">]</span> <span class="o">|</span> <span class="n">steps</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="k">if</span> <span class="n">today</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">today</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">tzinfo</span> <span class="o">!=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">:</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Converting target time to utc&quot;</span><span class="p">)</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">days</span> <span class="o">=</span> <span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">target</span><span class="o">.</span><span class="n">date</span><span class="p">())</span><span class="o">.</span><span class="n">days</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Looking back </span><span class="si">{</span><span class="n">days</span><span class="si">}</span><span class="s2"> days&quot;</span><span class="p">)</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">steps</span><span class="o">.</span><span class="n">read_steps_packet</span><span class="p">(</span><span class="n">days</span><span class="p">))</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">CMD_GET_STEP_SOMEDAY</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="p">)</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">reboot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">reboot</span><span class="o">.</span><span class="n">REBOOT_PACKET</span><span class="p">)</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">raw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">subdata</span><span class="p">:</span> <span class="nb">bytearray</span><span class="p">,</span> <span class="n">replies</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">bytearray</span><span class="p">]:</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">packet</span><span class="o">.</span><span class="n">make_packet</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">subdata</span><span class="p">)</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="k">while</span> <span class="n">replies</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="n">data</span><span class="p">:</span> <span class="nb">bytearray</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">command</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="p">)</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">replies</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="k">return</span> <span class="n">results</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">return</span> <span class="n">results</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_full_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">FullData</span><span class="p">:</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a><span class="sd"> Fetches all data from the ring between start and end. Useful for syncing.</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">logs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">dates_between</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="n">logs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_heart_rate_log</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">return</span> <span class="n">FullData</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">logs</span><span class="p">)</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_full_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">FullData</span><span class="p">:</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a><span class="sd"> Fetches all data from the ring between start and end. Useful for syncing.</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="n">logs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">dates_between</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">logs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_heart_rate_log</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="n">FullData</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">logs</span><span class="p">)</span>
</span></pre></div>
@ -731,111 +729,109 @@ multi packet messages where the parser has state</p>
</span><span id="Client-153"><a href="#Client-153"><span class="linenos">153</span></a> <span class="n">valid_readings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
</span><span id="Client-154"><a href="#Client-154"><span class="linenos">154</span></a> <span class="k">except</span> <span class="ne">TimeoutError</span><span class="p">:</span>
</span><span id="Client-155"><a href="#Client-155"><span class="linenos">155</span></a> <span class="n">tries</span> <span class="o">+=</span> <span class="mi">1</span>
</span><span id="Client-156"><a href="#Client-156"><span class="linenos">156</span></a> <span class="c1"># TODO remove this since it breaks Realtec based rings</span>
</span><span id="Client-157"><a href="#Client-157"><span class="linenos">157</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">real_time</span><span class="o">.</span><span class="n">CONTINUE_HEART_RATE_PACKET</span><span class="p">)</span>
</span><span id="Client-158"><a href="#Client-158"><span class="linenos">158</span></a>
</span><span id="Client-159"><a href="#Client-159"><span class="linenos">159</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">stop_packet</span><span class="p">)</span>
</span><span id="Client-160"><a href="#Client-160"><span class="linenos">160</span></a> <span class="k">if</span> <span class="n">error</span><span class="p">:</span>
</span><span id="Client-161"><a href="#Client-161"><span class="linenos">161</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Client-162"><a href="#Client-162"><span class="linenos">162</span></a> <span class="k">return</span> <span class="n">valid_readings</span>
</span><span id="Client-163"><a href="#Client-163"><span class="linenos">163</span></a>
</span><span id="Client-164"><a href="#Client-164"><span class="linenos">164</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_realtime_reading</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reading_type</span><span class="p">:</span> <span class="n">real_time</span><span class="o">.</span><span class="n">RealTimeReading</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-165"><a href="#Client-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_poll_real_time_reading</span><span class="p">(</span><span class="n">reading_type</span><span class="p">)</span>
</span><span id="Client-166"><a href="#Client-166"><span class="linenos">166</span></a>
</span><span id="Client-167"><a href="#Client-167"><span class="linenos">167</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-168"><a href="#Client-168"><span class="linenos">168</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">set_time</span><span class="o">.</span><span class="n">set_time_packet</span><span class="p">(</span><span class="n">ts</span><span class="p">))</span>
</span><span id="Client-169"><a href="#Client-169"><span class="linenos">169</span></a>
</span><span id="Client-170"><a href="#Client-170"><span class="linenos">170</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">blink_twice</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-171"><a href="#Client-171"><span class="linenos">171</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">blink_twice</span><span class="o">.</span><span class="n">BLINK_TWICE_PACKET</span><span class="p">)</span>
</span><span id="Client-172"><a href="#Client-172"><span class="linenos">172</span></a>
</span><span id="Client-173"><a href="#Client-173"><span class="linenos">173</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_device_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="Client-174"><a href="#Client-174"><span class="linenos">174</span></a> <span class="n">client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bleak_client</span>
</span><span id="Client-175"><a href="#Client-175"><span class="linenos">175</span></a> <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Client-176"><a href="#Client-176"><span class="linenos">176</span></a> <span class="n">device_info_service</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">services</span><span class="o">.</span><span class="n">get_service</span><span class="p">(</span><span class="n">DEVICE_INFO_UUID</span><span class="p">)</span>
</span><span id="Client-177"><a href="#Client-177"><span class="linenos">177</span></a> <span class="k">assert</span> <span class="n">device_info_service</span>
</span><span id="Client-178"><a href="#Client-178"><span class="linenos">178</span></a>
</span><span id="Client-179"><a href="#Client-179"><span class="linenos">179</span></a> <span class="n">hw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_HW_UUID</span><span class="p">)</span>
</span><span id="Client-180"><a href="#Client-180"><span class="linenos">180</span></a> <span class="k">assert</span> <span class="n">hw_info_char</span>
</span><span id="Client-181"><a href="#Client-181"><span class="linenos">181</span></a> <span class="n">hw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">hw_info_char</span><span class="p">)</span>
</span><span id="Client-182"><a href="#Client-182"><span class="linenos">182</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;hw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="Client-183"><a href="#Client-183"><span class="linenos">183</span></a>
</span><span id="Client-184"><a href="#Client-184"><span class="linenos">184</span></a> <span class="n">fw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_FW_UUID</span><span class="p">)</span>
</span><span id="Client-185"><a href="#Client-185"><span class="linenos">185</span></a> <span class="k">assert</span> <span class="n">fw_info_char</span>
</span><span id="Client-186"><a href="#Client-186"><span class="linenos">186</span></a> <span class="n">fw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">fw_info_char</span><span class="p">)</span>
</span><span id="Client-187"><a href="#Client-187"><span class="linenos">187</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;fw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="Client-156"><a href="#Client-156"><span class="linenos">156</span></a>
</span><span id="Client-157"><a href="#Client-157"><span class="linenos">157</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">stop_packet</span><span class="p">)</span>
</span><span id="Client-158"><a href="#Client-158"><span class="linenos">158</span></a> <span class="k">if</span> <span class="n">error</span><span class="p">:</span>
</span><span id="Client-159"><a href="#Client-159"><span class="linenos">159</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Client-160"><a href="#Client-160"><span class="linenos">160</span></a> <span class="k">return</span> <span class="n">valid_readings</span>
</span><span id="Client-161"><a href="#Client-161"><span class="linenos">161</span></a>
</span><span id="Client-162"><a href="#Client-162"><span class="linenos">162</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_realtime_reading</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reading_type</span><span class="p">:</span> <span class="n">real_time</span><span class="o">.</span><span class="n">RealTimeReading</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-163"><a href="#Client-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_poll_real_time_reading</span><span class="p">(</span><span class="n">reading_type</span><span class="p">)</span>
</span><span id="Client-164"><a href="#Client-164"><span class="linenos">164</span></a>
</span><span id="Client-165"><a href="#Client-165"><span class="linenos">165</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-166"><a href="#Client-166"><span class="linenos">166</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">set_time</span><span class="o">.</span><span class="n">set_time_packet</span><span class="p">(</span><span class="n">ts</span><span class="p">))</span>
</span><span id="Client-167"><a href="#Client-167"><span class="linenos">167</span></a>
</span><span id="Client-168"><a href="#Client-168"><span class="linenos">168</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">blink_twice</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-169"><a href="#Client-169"><span class="linenos">169</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">blink_twice</span><span class="o">.</span><span class="n">BLINK_TWICE_PACKET</span><span class="p">)</span>
</span><span id="Client-170"><a href="#Client-170"><span class="linenos">170</span></a>
</span><span id="Client-171"><a href="#Client-171"><span class="linenos">171</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_device_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="Client-172"><a href="#Client-172"><span class="linenos">172</span></a> <span class="n">client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bleak_client</span>
</span><span id="Client-173"><a href="#Client-173"><span class="linenos">173</span></a> <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Client-174"><a href="#Client-174"><span class="linenos">174</span></a> <span class="n">device_info_service</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">services</span><span class="o">.</span><span class="n">get_service</span><span class="p">(</span><span class="n">DEVICE_INFO_UUID</span><span class="p">)</span>
</span><span id="Client-175"><a href="#Client-175"><span class="linenos">175</span></a> <span class="k">assert</span> <span class="n">device_info_service</span>
</span><span id="Client-176"><a href="#Client-176"><span class="linenos">176</span></a>
</span><span id="Client-177"><a href="#Client-177"><span class="linenos">177</span></a> <span class="n">hw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_HW_UUID</span><span class="p">)</span>
</span><span id="Client-178"><a href="#Client-178"><span class="linenos">178</span></a> <span class="k">assert</span> <span class="n">hw_info_char</span>
</span><span id="Client-179"><a href="#Client-179"><span class="linenos">179</span></a> <span class="n">hw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">hw_info_char</span><span class="p">)</span>
</span><span id="Client-180"><a href="#Client-180"><span class="linenos">180</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;hw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="Client-181"><a href="#Client-181"><span class="linenos">181</span></a>
</span><span id="Client-182"><a href="#Client-182"><span class="linenos">182</span></a> <span class="n">fw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_FW_UUID</span><span class="p">)</span>
</span><span id="Client-183"><a href="#Client-183"><span class="linenos">183</span></a> <span class="k">assert</span> <span class="n">fw_info_char</span>
</span><span id="Client-184"><a href="#Client-184"><span class="linenos">184</span></a> <span class="n">fw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">fw_info_char</span><span class="p">)</span>
</span><span id="Client-185"><a href="#Client-185"><span class="linenos">185</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;fw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="Client-186"><a href="#Client-186"><span class="linenos">186</span></a>
</span><span id="Client-187"><a href="#Client-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="n">data</span>
</span><span id="Client-188"><a href="#Client-188"><span class="linenos">188</span></a>
</span><span id="Client-189"><a href="#Client-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="n">data</span>
</span><span id="Client-190"><a href="#Client-190"><span class="linenos">190</span></a>
</span><span id="Client-191"><a href="#Client-191"><span class="linenos">191</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr</span><span class="o">.</span><span class="n">HeartRateLog</span> <span class="o">|</span> <span class="n">hr</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="Client-192"><a href="#Client-192"><span class="linenos">192</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-193"><a href="#Client-193"><span class="linenos">193</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">start_of_day</span><span class="p">(</span><span class="n">date_utils</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
</span><span id="Client-194"><a href="#Client-194"><span class="linenos">194</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr</span><span class="o">.</span><span class="n">read_heart_rate_packet</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
</span><span id="Client-195"><a href="#Client-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-196"><a href="#Client-196"><span class="linenos">196</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr</span><span class="o">.</span><span class="n">CMD_READ_HEART_RATE</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-197"><a href="#Client-197"><span class="linenos">197</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-198"><a href="#Client-198"><span class="linenos">198</span></a> <span class="p">)</span>
</span><span id="Client-199"><a href="#Client-199"><span class="linenos">199</span></a>
</span><span id="Client-200"><a href="#Client-200"><span class="linenos">200</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">:</span>
</span><span id="Client-201"><a href="#Client-201"><span class="linenos">201</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">READ_HEART_RATE_LOG_SETTINGS_PACKET</span><span class="p">)</span>
</span><span id="Client-202"><a href="#Client-202"><span class="linenos">202</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-203"><a href="#Client-203"><span class="linenos">203</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-204"><a href="#Client-204"><span class="linenos">204</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-205"><a href="#Client-205"><span class="linenos">205</span></a> <span class="p">)</span>
</span><span id="Client-206"><a href="#Client-206"><span class="linenos">206</span></a>
</span><span id="Client-207"><a href="#Client-207"><span class="linenos">207</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enabled</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">interval</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-208"><a href="#Client-208"><span class="linenos">208</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">hr_log_settings_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">(</span><span class="n">enabled</span><span class="p">,</span> <span class="n">interval</span><span class="p">)))</span>
</span><span id="Client-209"><a href="#Client-209"><span class="linenos">209</span></a>
</span><span id="Client-210"><a href="#Client-210"><span class="linenos">210</span></a> <span class="c1"># clear response from queue as it&#39;s unused and wrong</span>
</span><span id="Client-211"><a href="#Client-211"><span class="linenos">211</span></a> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-212"><a href="#Client-212"><span class="linenos">212</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-213"><a href="#Client-213"><span class="linenos">213</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-214"><a href="#Client-214"><span class="linenos">214</span></a> <span class="p">)</span>
</span><span id="Client-215"><a href="#Client-215"><span class="linenos">215</span></a>
</span><span id="Client-216"><a href="#Client-216"><span class="linenos">216</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_steps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">today</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">SportDetail</span><span class="p">]</span> <span class="o">|</span> <span class="n">steps</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="Client-217"><a href="#Client-217"><span class="linenos">217</span></a> <span class="k">if</span> <span class="n">today</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-218"><a href="#Client-218"><span class="linenos">218</span></a> <span class="n">today</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="Client-219"><a href="#Client-219"><span class="linenos">219</span></a>
</span><span id="Client-220"><a href="#Client-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">tzinfo</span> <span class="o">!=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">:</span>
</span><span id="Client-221"><a href="#Client-221"><span class="linenos">221</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Converting target time to utc&quot;</span><span class="p">)</span>
</span><span id="Client-222"><a href="#Client-222"><span class="linenos">222</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="Client-223"><a href="#Client-223"><span class="linenos">223</span></a>
</span><span id="Client-224"><a href="#Client-224"><span class="linenos">224</span></a> <span class="n">days</span> <span class="o">=</span> <span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">target</span><span class="o">.</span><span class="n">date</span><span class="p">())</span><span class="o">.</span><span class="n">days</span>
</span><span id="Client-225"><a href="#Client-225"><span class="linenos">225</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Looking back </span><span class="si">{</span><span class="n">days</span><span class="si">}</span><span class="s2"> days&quot;</span><span class="p">)</span>
</span><span id="Client-226"><a href="#Client-226"><span class="linenos">226</span></a>
</span><span id="Client-227"><a href="#Client-227"><span class="linenos">227</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">steps</span><span class="o">.</span><span class="n">read_steps_packet</span><span class="p">(</span><span class="n">days</span><span class="p">))</span>
</span><span id="Client-228"><a href="#Client-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-229"><a href="#Client-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">CMD_GET_STEP_SOMEDAY</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-230"><a href="#Client-230"><span class="linenos">230</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-231"><a href="#Client-231"><span class="linenos">231</span></a> <span class="p">)</span>
</span><span id="Client-232"><a href="#Client-232"><span class="linenos">232</span></a>
</span><span id="Client-233"><a href="#Client-233"><span class="linenos">233</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">reboot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-234"><a href="#Client-234"><span class="linenos">234</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">reboot</span><span class="o">.</span><span class="n">REBOOT_PACKET</span><span class="p">)</span>
</span><span id="Client-235"><a href="#Client-235"><span class="linenos">235</span></a>
</span><span id="Client-236"><a href="#Client-236"><span class="linenos">236</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">raw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">subdata</span><span class="p">:</span> <span class="nb">bytearray</span><span class="p">,</span> <span class="n">replies</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">bytearray</span><span class="p">]:</span>
</span><span id="Client-237"><a href="#Client-237"><span class="linenos">237</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">packet</span><span class="o">.</span><span class="n">make_packet</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">subdata</span><span class="p">)</span>
</span><span id="Client-238"><a href="#Client-238"><span class="linenos">238</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="Client-239"><a href="#Client-239"><span class="linenos">239</span></a>
</span><span id="Client-240"><a href="#Client-240"><span class="linenos">240</span></a> <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client-241"><a href="#Client-241"><span class="linenos">241</span></a> <span class="k">while</span> <span class="n">replies</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="Client-242"><a href="#Client-242"><span class="linenos">242</span></a> <span class="n">data</span><span class="p">:</span> <span class="nb">bytearray</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-243"><a href="#Client-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">command</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-244"><a href="#Client-244"><span class="linenos">244</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-245"><a href="#Client-245"><span class="linenos">245</span></a> <span class="p">)</span>
</span><span id="Client-246"><a href="#Client-246"><span class="linenos">246</span></a> <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="Client-247"><a href="#Client-247"><span class="linenos">247</span></a> <span class="n">replies</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="Client-189"><a href="#Client-189"><span class="linenos">189</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr</span><span class="o">.</span><span class="n">HeartRateLog</span> <span class="o">|</span> <span class="n">hr</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="Client-190"><a href="#Client-190"><span class="linenos">190</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-191"><a href="#Client-191"><span class="linenos">191</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">start_of_day</span><span class="p">(</span><span class="n">date_utils</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
</span><span id="Client-192"><a href="#Client-192"><span class="linenos">192</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr</span><span class="o">.</span><span class="n">read_heart_rate_packet</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
</span><span id="Client-193"><a href="#Client-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-194"><a href="#Client-194"><span class="linenos">194</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr</span><span class="o">.</span><span class="n">CMD_READ_HEART_RATE</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-195"><a href="#Client-195"><span class="linenos">195</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-196"><a href="#Client-196"><span class="linenos">196</span></a> <span class="p">)</span>
</span><span id="Client-197"><a href="#Client-197"><span class="linenos">197</span></a>
</span><span id="Client-198"><a href="#Client-198"><span class="linenos">198</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">:</span>
</span><span id="Client-199"><a href="#Client-199"><span class="linenos">199</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">READ_HEART_RATE_LOG_SETTINGS_PACKET</span><span class="p">)</span>
</span><span id="Client-200"><a href="#Client-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-201"><a href="#Client-201"><span class="linenos">201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-202"><a href="#Client-202"><span class="linenos">202</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-203"><a href="#Client-203"><span class="linenos">203</span></a> <span class="p">)</span>
</span><span id="Client-204"><a href="#Client-204"><span class="linenos">204</span></a>
</span><span id="Client-205"><a href="#Client-205"><span class="linenos">205</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enabled</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">interval</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-206"><a href="#Client-206"><span class="linenos">206</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">hr_log_settings_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">(</span><span class="n">enabled</span><span class="p">,</span> <span class="n">interval</span><span class="p">)))</span>
</span><span id="Client-207"><a href="#Client-207"><span class="linenos">207</span></a>
</span><span id="Client-208"><a href="#Client-208"><span class="linenos">208</span></a> <span class="c1"># clear response from queue as it&#39;s unused and wrong</span>
</span><span id="Client-209"><a href="#Client-209"><span class="linenos">209</span></a> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-210"><a href="#Client-210"><span class="linenos">210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-211"><a href="#Client-211"><span class="linenos">211</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-212"><a href="#Client-212"><span class="linenos">212</span></a> <span class="p">)</span>
</span><span id="Client-213"><a href="#Client-213"><span class="linenos">213</span></a>
</span><span id="Client-214"><a href="#Client-214"><span class="linenos">214</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_steps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">today</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">SportDetail</span><span class="p">]</span> <span class="o">|</span> <span class="n">steps</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="Client-215"><a href="#Client-215"><span class="linenos">215</span></a> <span class="k">if</span> <span class="n">today</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-216"><a href="#Client-216"><span class="linenos">216</span></a> <span class="n">today</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="Client-217"><a href="#Client-217"><span class="linenos">217</span></a>
</span><span id="Client-218"><a href="#Client-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">tzinfo</span> <span class="o">!=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">:</span>
</span><span id="Client-219"><a href="#Client-219"><span class="linenos">219</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Converting target time to utc&quot;</span><span class="p">)</span>
</span><span id="Client-220"><a href="#Client-220"><span class="linenos">220</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="Client-221"><a href="#Client-221"><span class="linenos">221</span></a>
</span><span id="Client-222"><a href="#Client-222"><span class="linenos">222</span></a> <span class="n">days</span> <span class="o">=</span> <span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">target</span><span class="o">.</span><span class="n">date</span><span class="p">())</span><span class="o">.</span><span class="n">days</span>
</span><span id="Client-223"><a href="#Client-223"><span class="linenos">223</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Looking back </span><span class="si">{</span><span class="n">days</span><span class="si">}</span><span class="s2"> days&quot;</span><span class="p">)</span>
</span><span id="Client-224"><a href="#Client-224"><span class="linenos">224</span></a>
</span><span id="Client-225"><a href="#Client-225"><span class="linenos">225</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">steps</span><span class="o">.</span><span class="n">read_steps_packet</span><span class="p">(</span><span class="n">days</span><span class="p">))</span>
</span><span id="Client-226"><a href="#Client-226"><span class="linenos">226</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-227"><a href="#Client-227"><span class="linenos">227</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">CMD_GET_STEP_SOMEDAY</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-228"><a href="#Client-228"><span class="linenos">228</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-229"><a href="#Client-229"><span class="linenos">229</span></a> <span class="p">)</span>
</span><span id="Client-230"><a href="#Client-230"><span class="linenos">230</span></a>
</span><span id="Client-231"><a href="#Client-231"><span class="linenos">231</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">reboot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client-232"><a href="#Client-232"><span class="linenos">232</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">reboot</span><span class="o">.</span><span class="n">REBOOT_PACKET</span><span class="p">)</span>
</span><span id="Client-233"><a href="#Client-233"><span class="linenos">233</span></a>
</span><span id="Client-234"><a href="#Client-234"><span class="linenos">234</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">raw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">subdata</span><span class="p">:</span> <span class="nb">bytearray</span><span class="p">,</span> <span class="n">replies</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">bytearray</span><span class="p">]:</span>
</span><span id="Client-235"><a href="#Client-235"><span class="linenos">235</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">packet</span><span class="o">.</span><span class="n">make_packet</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">subdata</span><span class="p">)</span>
</span><span id="Client-236"><a href="#Client-236"><span class="linenos">236</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="Client-237"><a href="#Client-237"><span class="linenos">237</span></a>
</span><span id="Client-238"><a href="#Client-238"><span class="linenos">238</span></a> <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client-239"><a href="#Client-239"><span class="linenos">239</span></a> <span class="k">while</span> <span class="n">replies</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="Client-240"><a href="#Client-240"><span class="linenos">240</span></a> <span class="n">data</span><span class="p">:</span> <span class="nb">bytearray</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client-241"><a href="#Client-241"><span class="linenos">241</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">command</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client-242"><a href="#Client-242"><span class="linenos">242</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client-243"><a href="#Client-243"><span class="linenos">243</span></a> <span class="p">)</span>
</span><span id="Client-244"><a href="#Client-244"><span class="linenos">244</span></a> <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="Client-245"><a href="#Client-245"><span class="linenos">245</span></a> <span class="n">replies</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="Client-246"><a href="#Client-246"><span class="linenos">246</span></a>
</span><span id="Client-247"><a href="#Client-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">results</span>
</span><span id="Client-248"><a href="#Client-248"><span class="linenos">248</span></a>
</span><span id="Client-249"><a href="#Client-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="n">results</span>
</span><span id="Client-250"><a href="#Client-250"><span class="linenos">250</span></a>
</span><span id="Client-251"><a href="#Client-251"><span class="linenos">251</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_full_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">FullData</span><span class="p">:</span>
</span><span id="Client-252"><a href="#Client-252"><span class="linenos">252</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-253"><a href="#Client-253"><span class="linenos">253</span></a><span class="sd"> Fetches all data from the ring between start and end. Useful for syncing.</span>
</span><span id="Client-254"><a href="#Client-254"><span class="linenos">254</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-255"><a href="#Client-255"><span class="linenos">255</span></a>
</span><span id="Client-256"><a href="#Client-256"><span class="linenos">256</span></a> <span class="n">logs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client-257"><a href="#Client-257"><span class="linenos">257</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">dates_between</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
</span><span id="Client-258"><a href="#Client-258"><span class="linenos">258</span></a> <span class="n">logs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_heart_rate_log</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="Client-259"><a href="#Client-259"><span class="linenos">259</span></a>
</span><span id="Client-260"><a href="#Client-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="n">FullData</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">logs</span><span class="p">)</span>
</span><span id="Client-249"><a href="#Client-249"><span class="linenos">249</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_full_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">FullData</span><span class="p">:</span>
</span><span id="Client-250"><a href="#Client-250"><span class="linenos">250</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client-251"><a href="#Client-251"><span class="linenos">251</span></a><span class="sd"> Fetches all data from the ring between start and end. Useful for syncing.</span>
</span><span id="Client-252"><a href="#Client-252"><span class="linenos">252</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client-253"><a href="#Client-253"><span class="linenos">253</span></a>
</span><span id="Client-254"><a href="#Client-254"><span class="linenos">254</span></a> <span class="n">logs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client-255"><a href="#Client-255"><span class="linenos">255</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">dates_between</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
</span><span id="Client-256"><a href="#Client-256"><span class="linenos">256</span></a> <span class="n">logs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_heart_rate_log</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="Client-257"><a href="#Client-257"><span class="linenos">257</span></a>
</span><span id="Client-258"><a href="#Client-258"><span class="linenos">258</span></a> <span class="k">return</span> <span class="n">FullData</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">logs</span><span class="p">)</span>
</span></pre></div>
@ -1005,8 +1001,8 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.get_realtime_reading"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_realtime_reading-164"><a href="#Client.get_realtime_reading-164"><span class="linenos">164</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_realtime_reading</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reading_type</span><span class="p">:</span> <span class="n">real_time</span><span class="o">.</span><span class="n">RealTimeReading</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.get_realtime_reading-165"><a href="#Client.get_realtime_reading-165"><span class="linenos">165</span></a> <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_poll_real_time_reading</span><span class="p">(</span><span class="n">reading_type</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_realtime_reading-162"><a href="#Client.get_realtime_reading-162"><span class="linenos">162</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_realtime_reading</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reading_type</span><span class="p">:</span> <span class="n">real_time</span><span class="o">.</span><span class="n">RealTimeReading</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">int</span><span class="p">]</span> <span class="o">|</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.get_realtime_reading-163"><a href="#Client.get_realtime_reading-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">_poll_real_time_reading</span><span class="p">(</span><span class="n">reading_type</span><span class="p">)</span>
</span></pre></div>
@ -1024,8 +1020,8 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.set_time"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.set_time-167"><a href="#Client.set_time-167"><span class="linenos">167</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.set_time-168"><a href="#Client.set_time-168"><span class="linenos">168</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">set_time</span><span class="o">.</span><span class="n">set_time_packet</span><span class="p">(</span><span class="n">ts</span><span class="p">))</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.set_time-165"><a href="#Client.set_time-165"><span class="linenos">165</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_time</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ts</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.set_time-166"><a href="#Client.set_time-166"><span class="linenos">166</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">set_time</span><span class="o">.</span><span class="n">set_time_packet</span><span class="p">(</span><span class="n">ts</span><span class="p">))</span>
</span></pre></div>
@ -1043,8 +1039,8 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.blink_twice"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.blink_twice-170"><a href="#Client.blink_twice-170"><span class="linenos">170</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">blink_twice</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.blink_twice-171"><a href="#Client.blink_twice-171"><span class="linenos">171</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">blink_twice</span><span class="o">.</span><span class="n">BLINK_TWICE_PACKET</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.blink_twice-168"><a href="#Client.blink_twice-168"><span class="linenos">168</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">blink_twice</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.blink_twice-169"><a href="#Client.blink_twice-169"><span class="linenos">169</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">blink_twice</span><span class="o">.</span><span class="n">BLINK_TWICE_PACKET</span><span class="p">)</span>
</span></pre></div>
@ -1062,23 +1058,23 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.get_device_info"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_device_info-173"><a href="#Client.get_device_info-173"><span class="linenos">173</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_device_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="Client.get_device_info-174"><a href="#Client.get_device_info-174"><span class="linenos">174</span></a> <span class="n">client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bleak_client</span>
</span><span id="Client.get_device_info-175"><a href="#Client.get_device_info-175"><span class="linenos">175</span></a> <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Client.get_device_info-176"><a href="#Client.get_device_info-176"><span class="linenos">176</span></a> <span class="n">device_info_service</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">services</span><span class="o">.</span><span class="n">get_service</span><span class="p">(</span><span class="n">DEVICE_INFO_UUID</span><span class="p">)</span>
</span><span id="Client.get_device_info-177"><a href="#Client.get_device_info-177"><span class="linenos">177</span></a> <span class="k">assert</span> <span class="n">device_info_service</span>
</span><span id="Client.get_device_info-178"><a href="#Client.get_device_info-178"><span class="linenos">178</span></a>
</span><span id="Client.get_device_info-179"><a href="#Client.get_device_info-179"><span class="linenos">179</span></a> <span class="n">hw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_HW_UUID</span><span class="p">)</span>
</span><span id="Client.get_device_info-180"><a href="#Client.get_device_info-180"><span class="linenos">180</span></a> <span class="k">assert</span> <span class="n">hw_info_char</span>
</span><span id="Client.get_device_info-181"><a href="#Client.get_device_info-181"><span class="linenos">181</span></a> <span class="n">hw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">hw_info_char</span><span class="p">)</span>
</span><span id="Client.get_device_info-182"><a href="#Client.get_device_info-182"><span class="linenos">182</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;hw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="Client.get_device_info-183"><a href="#Client.get_device_info-183"><span class="linenos">183</span></a>
</span><span id="Client.get_device_info-184"><a href="#Client.get_device_info-184"><span class="linenos">184</span></a> <span class="n">fw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_FW_UUID</span><span class="p">)</span>
</span><span id="Client.get_device_info-185"><a href="#Client.get_device_info-185"><span class="linenos">185</span></a> <span class="k">assert</span> <span class="n">fw_info_char</span>
</span><span id="Client.get_device_info-186"><a href="#Client.get_device_info-186"><span class="linenos">186</span></a> <span class="n">fw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">fw_info_char</span><span class="p">)</span>
</span><span id="Client.get_device_info-187"><a href="#Client.get_device_info-187"><span class="linenos">187</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;fw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="Client.get_device_info-188"><a href="#Client.get_device_info-188"><span class="linenos">188</span></a>
</span><span id="Client.get_device_info-189"><a href="#Client.get_device_info-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="n">data</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_device_info-171"><a href="#Client.get_device_info-171"><span class="linenos">171</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_device_info</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span class="p">]:</span>
</span><span id="Client.get_device_info-172"><a href="#Client.get_device_info-172"><span class="linenos">172</span></a> <span class="n">client</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bleak_client</span>
</span><span id="Client.get_device_info-173"><a href="#Client.get_device_info-173"><span class="linenos">173</span></a> <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
</span><span id="Client.get_device_info-174"><a href="#Client.get_device_info-174"><span class="linenos">174</span></a> <span class="n">device_info_service</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">services</span><span class="o">.</span><span class="n">get_service</span><span class="p">(</span><span class="n">DEVICE_INFO_UUID</span><span class="p">)</span>
</span><span id="Client.get_device_info-175"><a href="#Client.get_device_info-175"><span class="linenos">175</span></a> <span class="k">assert</span> <span class="n">device_info_service</span>
</span><span id="Client.get_device_info-176"><a href="#Client.get_device_info-176"><span class="linenos">176</span></a>
</span><span id="Client.get_device_info-177"><a href="#Client.get_device_info-177"><span class="linenos">177</span></a> <span class="n">hw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_HW_UUID</span><span class="p">)</span>
</span><span id="Client.get_device_info-178"><a href="#Client.get_device_info-178"><span class="linenos">178</span></a> <span class="k">assert</span> <span class="n">hw_info_char</span>
</span><span id="Client.get_device_info-179"><a href="#Client.get_device_info-179"><span class="linenos">179</span></a> <span class="n">hw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">hw_info_char</span><span class="p">)</span>
</span><span id="Client.get_device_info-180"><a href="#Client.get_device_info-180"><span class="linenos">180</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;hw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="Client.get_device_info-181"><a href="#Client.get_device_info-181"><span class="linenos">181</span></a>
</span><span id="Client.get_device_info-182"><a href="#Client.get_device_info-182"><span class="linenos">182</span></a> <span class="n">fw_info_char</span> <span class="o">=</span> <span class="n">device_info_service</span><span class="o">.</span><span class="n">get_characteristic</span><span class="p">(</span><span class="n">DEVICE_FW_UUID</span><span class="p">)</span>
</span><span id="Client.get_device_info-183"><a href="#Client.get_device_info-183"><span class="linenos">183</span></a> <span class="k">assert</span> <span class="n">fw_info_char</span>
</span><span id="Client.get_device_info-184"><a href="#Client.get_device_info-184"><span class="linenos">184</span></a> <span class="n">fw_version</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">read_gatt_char</span><span class="p">(</span><span class="n">fw_info_char</span><span class="p">)</span>
</span><span id="Client.get_device_info-185"><a href="#Client.get_device_info-185"><span class="linenos">185</span></a> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;fw_version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fw_version</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
</span><span id="Client.get_device_info-186"><a href="#Client.get_device_info-186"><span class="linenos">186</span></a>
</span><span id="Client.get_device_info-187"><a href="#Client.get_device_info-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="n">data</span>
</span></pre></div>
@ -1096,14 +1092,14 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.get_heart_rate_log"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_heart_rate_log-191"><a href="#Client.get_heart_rate_log-191"><span class="linenos">191</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr</span><span class="o">.</span><span class="n">HeartRateLog</span> <span class="o">|</span> <span class="n">hr</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="Client.get_heart_rate_log-192"><a href="#Client.get_heart_rate_log-192"><span class="linenos">192</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.get_heart_rate_log-193"><a href="#Client.get_heart_rate_log-193"><span class="linenos">193</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">start_of_day</span><span class="p">(</span><span class="n">date_utils</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
</span><span id="Client.get_heart_rate_log-194"><a href="#Client.get_heart_rate_log-194"><span class="linenos">194</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr</span><span class="o">.</span><span class="n">read_heart_rate_packet</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
</span><span id="Client.get_heart_rate_log-195"><a href="#Client.get_heart_rate_log-195"><span class="linenos">195</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.get_heart_rate_log-196"><a href="#Client.get_heart_rate_log-196"><span class="linenos">196</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr</span><span class="o">.</span><span class="n">CMD_READ_HEART_RATE</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.get_heart_rate_log-197"><a href="#Client.get_heart_rate_log-197"><span class="linenos">197</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.get_heart_rate_log-198"><a href="#Client.get_heart_rate_log-198"><span class="linenos">198</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_heart_rate_log-189"><a href="#Client.get_heart_rate_log-189"><span class="linenos">189</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr</span><span class="o">.</span><span class="n">HeartRateLog</span> <span class="o">|</span> <span class="n">hr</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="Client.get_heart_rate_log-190"><a href="#Client.get_heart_rate_log-190"><span class="linenos">190</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.get_heart_rate_log-191"><a href="#Client.get_heart_rate_log-191"><span class="linenos">191</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">start_of_day</span><span class="p">(</span><span class="n">date_utils</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
</span><span id="Client.get_heart_rate_log-192"><a href="#Client.get_heart_rate_log-192"><span class="linenos">192</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr</span><span class="o">.</span><span class="n">read_heart_rate_packet</span><span class="p">(</span><span class="n">target</span><span class="p">))</span>
</span><span id="Client.get_heart_rate_log-193"><a href="#Client.get_heart_rate_log-193"><span class="linenos">193</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.get_heart_rate_log-194"><a href="#Client.get_heart_rate_log-194"><span class="linenos">194</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr</span><span class="o">.</span><span class="n">CMD_READ_HEART_RATE</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.get_heart_rate_log-195"><a href="#Client.get_heart_rate_log-195"><span class="linenos">195</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.get_heart_rate_log-196"><a href="#Client.get_heart_rate_log-196"><span class="linenos">196</span></a> <span class="p">)</span>
</span></pre></div>
@ -1121,12 +1117,12 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.get_heart_rate_log_settings"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_heart_rate_log_settings-200"><a href="#Client.get_heart_rate_log_settings-200"><span class="linenos">200</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">:</span>
</span><span id="Client.get_heart_rate_log_settings-201"><a href="#Client.get_heart_rate_log_settings-201"><span class="linenos">201</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">READ_HEART_RATE_LOG_SETTINGS_PACKET</span><span class="p">)</span>
</span><span id="Client.get_heart_rate_log_settings-202"><a href="#Client.get_heart_rate_log_settings-202"><span class="linenos">202</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.get_heart_rate_log_settings-203"><a href="#Client.get_heart_rate_log_settings-203"><span class="linenos">203</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.get_heart_rate_log_settings-204"><a href="#Client.get_heart_rate_log_settings-204"><span class="linenos">204</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.get_heart_rate_log_settings-205"><a href="#Client.get_heart_rate_log_settings-205"><span class="linenos">205</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_heart_rate_log_settings-198"><a href="#Client.get_heart_rate_log_settings-198"><span class="linenos">198</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">:</span>
</span><span id="Client.get_heart_rate_log_settings-199"><a href="#Client.get_heart_rate_log_settings-199"><span class="linenos">199</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">READ_HEART_RATE_LOG_SETTINGS_PACKET</span><span class="p">)</span>
</span><span id="Client.get_heart_rate_log_settings-200"><a href="#Client.get_heart_rate_log_settings-200"><span class="linenos">200</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.get_heart_rate_log_settings-201"><a href="#Client.get_heart_rate_log_settings-201"><span class="linenos">201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.get_heart_rate_log_settings-202"><a href="#Client.get_heart_rate_log_settings-202"><span class="linenos">202</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.get_heart_rate_log_settings-203"><a href="#Client.get_heart_rate_log_settings-203"><span class="linenos">203</span></a> <span class="p">)</span>
</span></pre></div>
@ -1144,14 +1140,14 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.set_heart_rate_log_settings"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.set_heart_rate_log_settings-207"><a href="#Client.set_heart_rate_log_settings-207"><span class="linenos">207</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enabled</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">interval</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.set_heart_rate_log_settings-208"><a href="#Client.set_heart_rate_log_settings-208"><span class="linenos">208</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">hr_log_settings_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">(</span><span class="n">enabled</span><span class="p">,</span> <span class="n">interval</span><span class="p">)))</span>
</span><span id="Client.set_heart_rate_log_settings-209"><a href="#Client.set_heart_rate_log_settings-209"><span class="linenos">209</span></a>
</span><span id="Client.set_heart_rate_log_settings-210"><a href="#Client.set_heart_rate_log_settings-210"><span class="linenos">210</span></a> <span class="c1"># clear response from queue as it&#39;s unused and wrong</span>
</span><span id="Client.set_heart_rate_log_settings-211"><a href="#Client.set_heart_rate_log_settings-211"><span class="linenos">211</span></a> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.set_heart_rate_log_settings-212"><a href="#Client.set_heart_rate_log_settings-212"><span class="linenos">212</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.set_heart_rate_log_settings-213"><a href="#Client.set_heart_rate_log_settings-213"><span class="linenos">213</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.set_heart_rate_log_settings-214"><a href="#Client.set_heart_rate_log_settings-214"><span class="linenos">214</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.set_heart_rate_log_settings-205"><a href="#Client.set_heart_rate_log_settings-205"><span class="linenos">205</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">set_heart_rate_log_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enabled</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">interval</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.set_heart_rate_log_settings-206"><a href="#Client.set_heart_rate_log_settings-206"><span class="linenos">206</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">hr_log_settings_packet</span><span class="p">(</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">HeartRateLogSettings</span><span class="p">(</span><span class="n">enabled</span><span class="p">,</span> <span class="n">interval</span><span class="p">)))</span>
</span><span id="Client.set_heart_rate_log_settings-207"><a href="#Client.set_heart_rate_log_settings-207"><span class="linenos">207</span></a>
</span><span id="Client.set_heart_rate_log_settings-208"><a href="#Client.set_heart_rate_log_settings-208"><span class="linenos">208</span></a> <span class="c1"># clear response from queue as it&#39;s unused and wrong</span>
</span><span id="Client.set_heart_rate_log_settings-209"><a href="#Client.set_heart_rate_log_settings-209"><span class="linenos">209</span></a> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.set_heart_rate_log_settings-210"><a href="#Client.set_heart_rate_log_settings-210"><span class="linenos">210</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">hr_settings</span><span class="o">.</span><span class="n">CMD_HEART_RATE_LOG_SETTINGS</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.set_heart_rate_log_settings-211"><a href="#Client.set_heart_rate_log_settings-211"><span class="linenos">211</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.set_heart_rate_log_settings-212"><a href="#Client.set_heart_rate_log_settings-212"><span class="linenos">212</span></a> <span class="p">)</span>
</span></pre></div>
@ -1169,22 +1165,22 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.get_steps"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_steps-216"><a href="#Client.get_steps-216"><span class="linenos">216</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_steps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">today</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">SportDetail</span><span class="p">]</span> <span class="o">|</span> <span class="n">steps</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="Client.get_steps-217"><a href="#Client.get_steps-217"><span class="linenos">217</span></a> <span class="k">if</span> <span class="n">today</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.get_steps-218"><a href="#Client.get_steps-218"><span class="linenos">218</span></a> <span class="n">today</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="Client.get_steps-219"><a href="#Client.get_steps-219"><span class="linenos">219</span></a>
</span><span id="Client.get_steps-220"><a href="#Client.get_steps-220"><span class="linenos">220</span></a> <span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">tzinfo</span> <span class="o">!=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">:</span>
</span><span id="Client.get_steps-221"><a href="#Client.get_steps-221"><span class="linenos">221</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Converting target time to utc&quot;</span><span class="p">)</span>
</span><span id="Client.get_steps-222"><a href="#Client.get_steps-222"><span class="linenos">222</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="Client.get_steps-223"><a href="#Client.get_steps-223"><span class="linenos">223</span></a>
</span><span id="Client.get_steps-224"><a href="#Client.get_steps-224"><span class="linenos">224</span></a> <span class="n">days</span> <span class="o">=</span> <span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">target</span><span class="o">.</span><span class="n">date</span><span class="p">())</span><span class="o">.</span><span class="n">days</span>
</span><span id="Client.get_steps-225"><a href="#Client.get_steps-225"><span class="linenos">225</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Looking back </span><span class="si">{</span><span class="n">days</span><span class="si">}</span><span class="s2"> days&quot;</span><span class="p">)</span>
</span><span id="Client.get_steps-226"><a href="#Client.get_steps-226"><span class="linenos">226</span></a>
</span><span id="Client.get_steps-227"><a href="#Client.get_steps-227"><span class="linenos">227</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">steps</span><span class="o">.</span><span class="n">read_steps_packet</span><span class="p">(</span><span class="n">days</span><span class="p">))</span>
</span><span id="Client.get_steps-228"><a href="#Client.get_steps-228"><span class="linenos">228</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.get_steps-229"><a href="#Client.get_steps-229"><span class="linenos">229</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">CMD_GET_STEP_SOMEDAY</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.get_steps-230"><a href="#Client.get_steps-230"><span class="linenos">230</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.get_steps-231"><a href="#Client.get_steps-231"><span class="linenos">231</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_steps-214"><a href="#Client.get_steps-214"><span class="linenos">214</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_steps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">today</span><span class="p">:</span> <span class="n">datetime</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">SportDetail</span><span class="p">]</span> <span class="o">|</span> <span class="n">steps</span><span class="o">.</span><span class="n">NoData</span><span class="p">:</span>
</span><span id="Client.get_steps-215"><a href="#Client.get_steps-215"><span class="linenos">215</span></a> <span class="k">if</span> <span class="n">today</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.get_steps-216"><a href="#Client.get_steps-216"><span class="linenos">216</span></a> <span class="n">today</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="Client.get_steps-217"><a href="#Client.get_steps-217"><span class="linenos">217</span></a>
</span><span id="Client.get_steps-218"><a href="#Client.get_steps-218"><span class="linenos">218</span></a> <span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">tzinfo</span> <span class="o">!=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">:</span>
</span><span id="Client.get_steps-219"><a href="#Client.get_steps-219"><span class="linenos">219</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Converting target time to utc&quot;</span><span class="p">)</span>
</span><span id="Client.get_steps-220"><a href="#Client.get_steps-220"><span class="linenos">220</span></a> <span class="n">target</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">astimezone</span><span class="p">(</span><span class="n">tz</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">utc</span><span class="p">)</span>
</span><span id="Client.get_steps-221"><a href="#Client.get_steps-221"><span class="linenos">221</span></a>
</span><span id="Client.get_steps-222"><a href="#Client.get_steps-222"><span class="linenos">222</span></a> <span class="n">days</span> <span class="o">=</span> <span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">target</span><span class="o">.</span><span class="n">date</span><span class="p">())</span><span class="o">.</span><span class="n">days</span>
</span><span id="Client.get_steps-223"><a href="#Client.get_steps-223"><span class="linenos">223</span></a> <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Looking back </span><span class="si">{</span><span class="n">days</span><span class="si">}</span><span class="s2"> days&quot;</span><span class="p">)</span>
</span><span id="Client.get_steps-224"><a href="#Client.get_steps-224"><span class="linenos">224</span></a>
</span><span id="Client.get_steps-225"><a href="#Client.get_steps-225"><span class="linenos">225</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">steps</span><span class="o">.</span><span class="n">read_steps_packet</span><span class="p">(</span><span class="n">days</span><span class="p">))</span>
</span><span id="Client.get_steps-226"><a href="#Client.get_steps-226"><span class="linenos">226</span></a> <span class="k">return</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.get_steps-227"><a href="#Client.get_steps-227"><span class="linenos">227</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">CMD_GET_STEP_SOMEDAY</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.get_steps-228"><a href="#Client.get_steps-228"><span class="linenos">228</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.get_steps-229"><a href="#Client.get_steps-229"><span class="linenos">229</span></a> <span class="p">)</span>
</span></pre></div>
@ -1202,8 +1198,8 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.reboot"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.reboot-233"><a href="#Client.reboot-233"><span class="linenos">233</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">reboot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.reboot-234"><a href="#Client.reboot-234"><span class="linenos">234</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">reboot</span><span class="o">.</span><span class="n">REBOOT_PACKET</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.reboot-231"><a href="#Client.reboot-231"><span class="linenos">231</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">reboot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Client.reboot-232"><a href="#Client.reboot-232"><span class="linenos">232</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">reboot</span><span class="o">.</span><span class="n">REBOOT_PACKET</span><span class="p">)</span>
</span></pre></div>
@ -1221,20 +1217,20 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.raw"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.raw-236"><a href="#Client.raw-236"><span class="linenos">236</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">raw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">subdata</span><span class="p">:</span> <span class="nb">bytearray</span><span class="p">,</span> <span class="n">replies</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">bytearray</span><span class="p">]:</span>
</span><span id="Client.raw-237"><a href="#Client.raw-237"><span class="linenos">237</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">packet</span><span class="o">.</span><span class="n">make_packet</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">subdata</span><span class="p">)</span>
</span><span id="Client.raw-238"><a href="#Client.raw-238"><span class="linenos">238</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="Client.raw-239"><a href="#Client.raw-239"><span class="linenos">239</span></a>
</span><span id="Client.raw-240"><a href="#Client.raw-240"><span class="linenos">240</span></a> <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client.raw-241"><a href="#Client.raw-241"><span class="linenos">241</span></a> <span class="k">while</span> <span class="n">replies</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="Client.raw-242"><a href="#Client.raw-242"><span class="linenos">242</span></a> <span class="n">data</span><span class="p">:</span> <span class="nb">bytearray</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.raw-243"><a href="#Client.raw-243"><span class="linenos">243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">command</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.raw-244"><a href="#Client.raw-244"><span class="linenos">244</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.raw-245"><a href="#Client.raw-245"><span class="linenos">245</span></a> <span class="p">)</span>
</span><span id="Client.raw-246"><a href="#Client.raw-246"><span class="linenos">246</span></a> <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="Client.raw-247"><a href="#Client.raw-247"><span class="linenos">247</span></a> <span class="n">replies</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="Client.raw-248"><a href="#Client.raw-248"><span class="linenos">248</span></a>
</span><span id="Client.raw-249"><a href="#Client.raw-249"><span class="linenos">249</span></a> <span class="k">return</span> <span class="n">results</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.raw-234"><a href="#Client.raw-234"><span class="linenos">234</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">raw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">command</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="n">subdata</span><span class="p">:</span> <span class="nb">bytearray</span><span class="p">,</span> <span class="n">replies</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">[</span><span class="nb">bytearray</span><span class="p">]:</span>
</span><span id="Client.raw-235"><a href="#Client.raw-235"><span class="linenos">235</span></a> <span class="n">p</span> <span class="o">=</span> <span class="n">packet</span><span class="o">.</span><span class="n">make_packet</span><span class="p">(</span><span class="n">command</span><span class="p">,</span> <span class="n">subdata</span><span class="p">)</span>
</span><span id="Client.raw-236"><a href="#Client.raw-236"><span class="linenos">236</span></a> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">send_packet</span><span class="p">(</span><span class="n">p</span><span class="p">)</span>
</span><span id="Client.raw-237"><a href="#Client.raw-237"><span class="linenos">237</span></a>
</span><span id="Client.raw-238"><a href="#Client.raw-238"><span class="linenos">238</span></a> <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client.raw-239"><a href="#Client.raw-239"><span class="linenos">239</span></a> <span class="k">while</span> <span class="n">replies</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
</span><span id="Client.raw-240"><a href="#Client.raw-240"><span class="linenos">240</span></a> <span class="n">data</span><span class="p">:</span> <span class="nb">bytearray</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">wait_for</span><span class="p">(</span>
</span><span id="Client.raw-241"><a href="#Client.raw-241"><span class="linenos">241</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">queues</span><span class="p">[</span><span class="n">command</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(),</span>
</span><span id="Client.raw-242"><a href="#Client.raw-242"><span class="linenos">242</span></a> <span class="n">timeout</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
</span><span id="Client.raw-243"><a href="#Client.raw-243"><span class="linenos">243</span></a> <span class="p">)</span>
</span><span id="Client.raw-244"><a href="#Client.raw-244"><span class="linenos">244</span></a> <span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span><span id="Client.raw-245"><a href="#Client.raw-245"><span class="linenos">245</span></a> <span class="n">replies</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="Client.raw-246"><a href="#Client.raw-246"><span class="linenos">246</span></a>
</span><span id="Client.raw-247"><a href="#Client.raw-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="n">results</span>
</span></pre></div>
@ -1252,16 +1248,16 @@ multi packet messages where the parser has state</p>
</div>
<a class="headerlink" href="#Client.get_full_data"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_full_data-251"><a href="#Client.get_full_data-251"><span class="linenos">251</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_full_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">FullData</span><span class="p">:</span>
</span><span id="Client.get_full_data-252"><a href="#Client.get_full_data-252"><span class="linenos">252</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.get_full_data-253"><a href="#Client.get_full_data-253"><span class="linenos">253</span></a><span class="sd"> Fetches all data from the ring between start and end. Useful for syncing.</span>
</span><span id="Client.get_full_data-254"><a href="#Client.get_full_data-254"><span class="linenos">254</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.get_full_data-255"><a href="#Client.get_full_data-255"><span class="linenos">255</span></a>
</span><span id="Client.get_full_data-256"><a href="#Client.get_full_data-256"><span class="linenos">256</span></a> <span class="n">logs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client.get_full_data-257"><a href="#Client.get_full_data-257"><span class="linenos">257</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">dates_between</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
</span><span id="Client.get_full_data-258"><a href="#Client.get_full_data-258"><span class="linenos">258</span></a> <span class="n">logs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_heart_rate_log</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="Client.get_full_data-259"><a href="#Client.get_full_data-259"><span class="linenos">259</span></a>
</span><span id="Client.get_full_data-260"><a href="#Client.get_full_data-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="n">FullData</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">logs</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Client.get_full_data-249"><a href="#Client.get_full_data-249"><span class="linenos">249</span></a> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_full_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">end</span><span class="p">:</span> <span class="n">datetime</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">FullData</span><span class="p">:</span>
</span><span id="Client.get_full_data-250"><a href="#Client.get_full_data-250"><span class="linenos">250</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Client.get_full_data-251"><a href="#Client.get_full_data-251"><span class="linenos">251</span></a><span class="sd"> Fetches all data from the ring between start and end. Useful for syncing.</span>
</span><span id="Client.get_full_data-252"><a href="#Client.get_full_data-252"><span class="linenos">252</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Client.get_full_data-253"><a href="#Client.get_full_data-253"><span class="linenos">253</span></a>
</span><span id="Client.get_full_data-254"><a href="#Client.get_full_data-254"><span class="linenos">254</span></a> <span class="n">logs</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Client.get_full_data-255"><a href="#Client.get_full_data-255"><span class="linenos">255</span></a> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">date_utils</span><span class="o">.</span><span class="n">dates_between</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">):</span>
</span><span id="Client.get_full_data-256"><a href="#Client.get_full_data-256"><span class="linenos">256</span></a> <span class="n">logs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_heart_rate_log</span><span class="p">(</span><span class="n">d</span><span class="p">))</span>
</span><span id="Client.get_full_data-257"><a href="#Client.get_full_data-257"><span class="linenos">257</span></a>
</span><span id="Client.get_full_data-258"><a href="#Client.get_full_data-258"><span class="linenos">258</span></a> <span class="k">return</span> <span class="n">FullData</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">logs</span><span class="p">)</span>
</span></pre></div>

File diff suppressed because one or more lines are too long