aboutsummaryrefslogtreecommitdiffhomepage
path: root/config/kauf-plf12-factory.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'config/kauf-plf12-factory.yaml')
-rw-r--r--config/kauf-plf12-factory.yaml108
1 files changed, 108 insertions, 0 deletions
diff --git a/config/kauf-plf12-factory.yaml b/config/kauf-plf12-factory.yaml
new file mode 100644
index 0000000..a40150c
--- /dev/null
+++ b/config/kauf-plf12-factory.yaml
@@ -0,0 +1,108 @@
+substitutions:
+ project_ver_let: "f"
+
+ sub_update_interval: 2s
+ sub_pm_initial_option: YAML Configured ($sub_update_interval)
+
+
+packages:
+ kauf_plug_update: !include kauf-plf12-update.yaml
+
+
+esphome:
+ on_boot:
+ then:
+ - script.execute: script_factory_test
+
+
+script:
+ - id: script_factory_test
+ then:
+ # little sequence so factory can confirm firwmare is working.
+ - if:
+ condition:
+ lambda: 'return id(first_boot);'
+ then:
+
+ # get AP going ASAP
+ - lambda: 'wifi_wificomponent->set_ap_timeout(1);'
+
+ # reset scaling factors to 100
+ - number.set:
+ id: scale_power
+ value: 100
+ - number.set:
+ id: scale_current
+ value: 100
+ - number.set:
+ id: scale_voltage
+ value: 100
+
+ # turn on relay
+ - switch.turn_on: relay
+ - delay: 1s
+ - switch.turn_off: blue_led
+
+ - delay: 12s
+
+ # ensure all 3 values are reported
+ - wait_until:
+ lambda: return(!std::isnan(id(wattage).state) && !std::isnan(id(current).state) && !std::isnan(id(voltage).state));
+
+ # set scaling factors to expected test load.
+ # required ranges helps prevent calibration without proper test load.
+ - lambda: |-
+ uint32_t num_ok = 0;
+
+ if ( (id(wattage).state > 10) && (id(wattage).state < 100) ) {
+ auto call = id(scale_power).make_call();
+ call.set_value(ceil((10.0f*100.0f*26.800f) / id(wattage).state) / 10.0f);
+ call.perform();
+ num_ok++;
+ }
+ if ( (id(current).state > 0.01) && (id(current).state < 5.0) ) {
+ auto call = id(scale_current).make_call();
+ call.set_value(ceil((10.0f*100.0f*0.226f) / id(current).state) / 10.0f);
+ call.perform();
+ num_ok++;
+ }
+ if ( (id(voltage).state > 20) && (id(voltage).state < 250) ) {
+ auto call = id(scale_voltage).make_call();
+ call.set_value(ceil((10.0f*100.0f*120.0f) / id(voltage).state) / 10.0f);
+ call.perform();
+ num_ok++;
+ }
+
+ //test passed, clear first_boot variable so we don't run this again
+ id(first_boot) = false;
+
+ // finish factory test with results argument
+ id(finish_factory_test)->execute(num_ok);
+
+ - id: finish_factory_test
+ parameters:
+ num_ok: int
+ then:
+
+ # blink led to indicate finish test until button is pressed then stay on
+ - while:
+ condition:
+ binary_sensor.is_off: button_in
+ then:
+ - lambda: |-
+ if ( num_ok == 3 ) { id(blue_led).toggle(); }
+ else { id(red_led).toggle(); }
+ - delay: 100ms
+
+ # set power monitoring mode to lower frequency default
+ - select.set:
+ id: select_monitor_interval
+ option: "10s"
+ - lambda: global_preferences->sync();
+
+
+globals:
+ - id: first_boot # used to run test routine at factory
+ type: bool
+ restore_value: yes
+ initial_value: 'true'