2323
2424UART_TIMEOUT = 60 * 30
2525POWER_TIMEOUT = 60 * 5
26+
2627MAX_CURRENT_PSM_UA = 10
28+ GREEN_THRESOLD_CURRENT_UA = MAX_CURRENT_PSM_UA # ≤ 10μA (good PSM current)
29+ YELLOW_THRESOLD_CURRENT_UA = 100 # ≤ 100μA (concerning but possible)
30+ RED_THRESOLD_CURRENT_UA = 1000 # ≤ 1000μA (bad but still plausible)
31+ # Readings above 1000uA are probably due to PPK crapping out, test is skipped in that case
32+
2733SAMPLING_INTERVAL = 0.01
2834CSV_FILE = "power_measurements.csv"
2935HMTL_PLOT_FILE = "power_measurements_plot.html"
@@ -34,13 +40,15 @@ def save_badge_data(average):
3440 badge_filename = "power_badge.json"
3541 logger .info (f"Minimum average current measured: { average } uA" )
3642 if average < 0 :
37- pytest .skip (f"current cant be negative, current average: { average } " )
38- elif average <= 10 :
43+ pytest .skip (f"Current can't be negative, current average: { average } " )
44+ elif average <= GREEN_THRESOLD_CURRENT_UA :
3945 color = "green"
40- elif average <= 50 :
46+ elif average <= YELLOW_THRESOLD_CURRENT_UA :
4147 color = "yellow"
42- else :
48+ elif average <= RED_THRESOLD_CURRENT_UA :
4349 color = "red"
50+ else :
51+ pytest .skip (f"Skipping test due to unreliable PPK reading: { average } uA" )
4452
4553 badge_data = {
4654 "label" : "🔗 PSM current uA" ,
@@ -234,7 +242,17 @@ def test_power(thingy91x_ppk2, hex_file):
234242 generate_time_series_html (CSV_FILE , 'Time (s)' , 'Current (uA)' , HMTL_PLOT_FILE )
235243
236244 # Determine test result based on whether PSM was reached
237- if not psm_reached :
245+ if psm_reached :
246+ pass # Test passes if PSM was reached
247+ elif min_rolling_average > RED_THRESOLD_CURRENT_UA :
248+ # Skip test if reading is absurdly high (likely PPK error)
249+ # Note: save_badge_data won't create file in this case
250+ pytest .skip (f"Skipping test due to unreliable PPK reading: { min_rolling_average } uA" )
251+ elif min_rolling_average > YELLOW_THRESOLD_CURRENT_UA :
252+ # Fail if current is in red zone (but still plausible)
253+ pytest .fail (f"PSM target not reached after { POWER_TIMEOUT / 60 } minutes, current too high: { min_rolling_average } uA" )
254+ else :
255+ # Current is between 0 and YELLOW_THRESHOLD but PSM wasn't reached
238256 pytest .fail (f"PSM target not reached after { POWER_TIMEOUT / 60 } minutes, only reached { min_rolling_average } uA" )
239257
240258def test_dummy_placeholder ():
0 commit comments