log: info javascript: - vm: shared script: | state = { residualpower: 200, pvpower: -3000, batterypower: 200, gridpower: -2000, chargepower: 0, maxcurrent: 0, battery: 63, // car }; function get() { console.log("state:", JSON.stringify(state)); } function set() { console.log(param+":", val); console.log("state:", JSON.stringify(state)); } meters: - name: grid type: custom power: type: js vm: shared script: state.gridpower = state.pvpower + state.chargepower + state.residualpower + state.batterypower; - name: pv type: custom power: type: js vm: shared script: state.pvpower += 100*Math.random(); - name: battery type: custom power: type: js vm: shared script: state.batterypower; soc: type: js vm: shared script: "30" - name: charge type: custom power: type: js vm: shared script: state.chargepower; soc: type: js vm: shared script: "30" chargers: - name: demo type: custom enable: type: js vm: shared script: | set(); state.enabled = val; if (state.enabled) state.chargepower = state.maxcurrent * 230; else state.chargepower = 0; enabled: type: js vm: shared script: | state.enabled; status: type: js vm: shared script: | if (state.enabled) "C"; else "B"; maxcurrent: type: js vm: shared script: | set(); state.maxcurrent = val; if (state.enabled) state.chargepower = state.maxcurrent * 230; vehicles: - name: demo title: e-Golf type: custom charge: type: js vm: shared script: | if (state.chargepower > 0) state.battery++; else state.battery--; if (state.battery < 15) state.battery = 15; if (state.battery > 100) state.battery = 100; state.battery; cache: 1s site: title: Demo meters: grid: grid pv: pv battery: battery loadpoints: - title: Carport charger: demo meters: charge: charge vehicle: demo