Hi everyone,
I have some progamming exp, but the Home-assistant way of scripting is a smth i don’t understand yet.
How do i make this python script into the HA-automations that it will fire every 10 sec?
I do not understand how to make it into a working automation, i’ve found the variables that HA uses.
I’ve made this in C++(arduino) and changed it to python so it looks more like the HA scripting…
Can anyone help me make this work ?
(at the end of the script , i change the value of input_number.smappee_charging_speed , and that should fire the automation (by change of value) to change the car_chargers ampere.
With kind regards,
BATTERY_PERCENT_MIN = 40 ##input_number.battery_percent_min
MAX_INVERTER_POWER = 3000 ##input_number.max_inverter_power
USE_BATTERY_TO_MIN=true ##input_number.use_battery_to_min
Prio_car_over_battery_min=true ##input_number.prio_car_over_battery_min
CAR_AMPERE_ZEKERING=11 ##input_number.car_ampere_zekering
Fase1_Volt=240
SOLAR_POWER_MAX=3000 ##input_number.solar_power_max
INVERTER_POWER_CORRECTION=1 ## input_number.inverter_power_correction
MAX_IMPORT= 0 ##input_number.max_import
grid_power_usage= sensor.power_meter_consumption
charge_car=true ##input_number.smart_car_charge
inverter_power=sensor.power_meter_active_power
SOLAR_POWER=sensor.inverter_input_power
BATTERY_PERCENT= sensor.batteries_state_of_capacity
trigger:
- platform: time_pattern
seconds: '/10'
if(charge_car==true):
if (((grid_power_usage<MAX_IMPORT) and ((min(SOLAR_POWER_MAX,SOLAR_POWER)>inverter_power))): or (BATTERY_PERCENT>BATTERY_PERCENT_MIN)): ##we zijn aan het injecteren + niet batterij aan't discharge.
if (car_AMPERE>CAR_AMPERE_ZEKERING): ##marge op zekering
car_AMPERE= car_AMPERE+grid_power_usage/Fase1_Volt ##volt inlezen?
else: ##verbruik van't net => minderen
car_AMPERE= car_AMPERE-grid_power_usage/Fase1_Volt ##volt inlezen?
if(((BATTERY_PERCENT>BATTERY_PERCENT_MIN) and (USE_BATTERY_TO_MIN==true)) or (Prio_car_over_battery_min==true)): ##marge over + mag batterij gebruiken.
if(inverter_power<MAX_INVERTER_POWER):##marge op inverter
if (car_AMPERE>CAR_AMPERE_ZEKERING): ##marge op zekering
car_AMPERE=car_AMPERE+(MAX_INVERTER_POWER-inverter_power)/Fase1_Volt
else:##geen marge meer op batterij, enkel solar!
if(BATTERY_PERCENT==BATTERY_PERCENT_MIN): ##battery is min.
if(min(SOLAR_POWER_MAX,SOLAR_POWER)>inverter_power): ##meer solar_power dan inverter power dus batterij laad op.
car_AMPERE= car_AMPERE+(min(SOLAR_POWER_MAX,SOLAR_POWER)*INVERTER_POWER_CORRECTION-inverter_power)/Fase1_Volt
else: ##niet opladen van auto
car_AMPERE=0
input_number.smappee_charging_speed=car_AMPERE
i made it work using pyscript 
@service
def run_every5_sec():
BATTERY_PERCENT_MIN = float(state.get("input_number.battery_percent_min"))
MAX_INVERTER_POWER = float(state.get("input_number.max_inverter_power"))
USE_BATTERY_TO_MIN= state.get("input_boolean.use_battery_to_min")
Prio_car_over_battery_min= state.get("input_boolean.prio_car_over_battery_min")
CAR_AMPERE_ZEKERING= float(state.get("input_number.car_ampere_zekering"))
Fase1_Volt= float(240.0)
SOLAR_POWER_MAX= float(state.get("input_number.solar_power_max"))
INVERTER_POWER_CORRECTION= float(state.get("input_number.inverter_power_correction"))
MAX_IMPORT= float(state.get("input_number.max_import"))
grid_power_usage= float(state.get("sensor.power_meter_active_power"))
charge_car= state.get("input_boolean.smart_car_charge")
inverter_power= float(state.get("sensor.inverter_active_power"))
SOLAR_POWER= float(state.get("sensor.inverter_input_power"))
BATTERY_PERCENT= float(state.get("sensor.batteries_state_of_capacity"))
car_AMPERE=float(state.get("input_number.smappee_charging_speed"))
#log.info(f"variables voor")
#log.info(f" BATTERY_PERCENT_MIN= {BATTERY_PERCENT_MIN}")
#log.info(f" MAX_INVERTER_POWER= {MAX_INVERTER_POWER}")
#log.info(f" USE_BATTERY_TO_MIN= {USE_BATTERY_TO_MIN}")
#log.info(f" Prio_car_over_battery_min= {Prio_car_over_battery_min}")
#log.info(f" CAR_AMPERE_ZEKERING= {CAR_AMPERE_ZEKERING}")
#log.info(f" Fase1_Volt= {Fase1_Volt}")
#log.info(f" SOLAR_POWER_MAX= {SOLAR_POWER_MAX}")
#log.info(f" INVERTER_POWER_CORRECTION= {INVERTER_POWER_CORRECTION}")
#log.info(f" MAX_IMPORT= {MAX_IMPORT}")
#log.info(f" grid_power_usage= {grid_power_usage}")
#log.info(f" charge_car= {charge_car}")
#log.info(f" inverter_power= {inverter_power}")
#log.info(f" SOLAR_POWER= {SOLAR_POWER}")
#log.info(f" BATTERY_PERCENT= {BATTERY_PERCENT}")
#log.info(f" car_AMPERE= {car_AMPERE}")
if(charge_car=="on"):
log.info(f"charge_car on detected")
if (((grid_power_usage>MAX_IMPORT) and ((min(SOLAR_POWER_MAX,SOLAR_POWER)>inverter_power))) or (BATTERY_PERCENT>BATTERY_PERCENT_MIN)): ##we zijn aan het injecteren + niet batterij aan't discharge.
log.info(f"injectie of batterij marge")
if (car_AMPERE<CAR_AMPERE_ZEKERING): ##marge op zekering
log.info(f"marge op zekering detected")
car_AMPERE= car_AMPERE+grid_power_usage/Fase1_Volt ##volt inlezen?
else: ##verbruik van't net => minderen
car_AMPERE= car_AMPERE-grid_power_usage/Fase1_Volt ##volt inlezen?
log.info(f"verbruik van net! minderen")
if(((BATTERY_PERCENT>BATTERY_PERCENT_MIN) and (USE_BATTERY_TO_MIN=="on")) or (Prio_car_over_battery_min=="on")): ##marge over + mag batterij gebruiken.
if(inverter_power<MAX_INVERTER_POWER):##marge op inverter
if (car_AMPERE>CAR_AMPERE_ZEKERING): ##marge op zekering
car_AMPERE=car_AMPERE+(MAX_INVERTER_POWER-inverter_power)/Fase1_Volt
log.info(f"marge op baterij en inverter => gebruik de power")
else:##geen marge meer op batterij, enkel solar!
if(BATTERY_PERCENT==BATTERY_PERCENT_MIN): ##battery is min.
if(min(SOLAR_POWER_MAX,SOLAR_POWER)>inverter_power): ##meer solar_power dan inverter power dus batterij laad op.
car_AMPERE= car_AMPERE+(min(SOLAR_POWER_MAX,SOLAR_POWER)*INVERTER_POWER_CORRECTION-inverter_power)/Fase1_Volt
log.info(f"enkel marge op solar, enkel solar gebruiken")
else: ##niet opladen van auto
log.info(f"charge_car is off , momenteel op 6A")
car_AMPERE=float(6.0)
car_AMPERE=min(car_AMPERE,CAR_AMPERE_ZEKERING)
input_number.smappee_charging_speed.set_value(str(car_AMPERE))
log.info(f"variables na")
log.info(f" BATTERY_PERCENT_MIN= {BATTERY_PERCENT_MIN}")
log.info(f" MAX_INVERTER_POWER= {MAX_INVERTER_POWER}")
log.info(f" USE_BATTERY_TO_MIN= {USE_BATTERY_TO_MIN}")
log.info(f" Prio_car_over_battery_min= {Prio_car_over_battery_min}")
log.info(f" CAR_AMPERE_ZEKERING= {CAR_AMPERE_ZEKERING}")
log.info(f" Fase1_Volt= {Fase1_Volt}")
log.info(f" SOLAR_POWER_MAX= {SOLAR_POWER_MAX}")
log.info(f" INVERTER_POWER_CORRECTION= {INVERTER_POWER_CORRECTION}")
log.info(f" MAX_IMPORT= {MAX_IMPORT}")
log.info(f" grid_power_usage= {grid_power_usage}")
log.info(f" charge_car= {charge_car}")
log.info(f" inverter_power= {inverter_power}")
log.info(f" SOLAR_POWER= {SOLAR_POWER}")
log.info(f" BATTERY_PERCENT= {BATTERY_PERCENT}")
log.info(f" car_AMPERE= {car_AMPERE}")
log.info(f" script ended")