workspace: mode de charge de nuit, concierge sans relais parasite, journaux
- airtria-ha-vehicule.js : option --mode-nuit complete|sans_edf (seul input_select.victron_evcs_night_charge_mode, relecture, refus des options inconnues) ; libelle « aucune voiture branchee » distinct du selecteur. - concierge-live.js : message sans vehicule marque « (aucune action concierge », a ne pas relayer. - AGENTS.md : routage charge voiture de la nuit et budget, regle §5.0. - Journaux de tri Orange et AIRTRIA.
This commit is contained in:
@@ -5,8 +5,11 @@
|
||||
// node airtria-ha-vehicule.js --vehicule JEEP --niveau 12
|
||||
// node airtria-ha-vehicule.js --niveau 40 → niveau seul (véhicule inchangé)
|
||||
// node airtria-ha-vehicule.js --depart 16:00 → départ ponctuel AUJOURD'HUI (VW, ZERO) ; --depart aucun l'efface
|
||||
// node airtria-ha-vehicule.js --mode-nuit complete|sans_edf → charge voiture de la nuit (remis à sans_edf chaque jour à 12:00 par HA)
|
||||
// Écrit UNIQUEMENT : input_select (véhicule, option lue dans HA), input_number (niveau, entier 0-100)
|
||||
// et input_datetime (départ ponctuel, toujours daté du JOUR, jamais une autre date).
|
||||
// et input_datetime (départ ponctuel, toujours daté du JOUR, jamais une autre date),
|
||||
// et input_select.victron_evcs_night_charge_mode (option lue dans HA). JAMAIS le budget
|
||||
// (input_text.victron_evcs_night_budget, input_number.evcs_balance_night_vehicle_budget_kwh).
|
||||
// Ne touche JAMAIS victron_evcs_vehicle_level_ref_kwh ni victron_evcs_vehicle_level_at : une automatisation HA
|
||||
// les mémorise seule à chaque appel (une saisie identique compte aussi).
|
||||
'use strict';
|
||||
@@ -16,10 +19,11 @@ const token = () => fs.readFileSync(process.env.HA_TOKEN_FILE || path.join(__dir
|
||||
const SEL = 'input_select.victron_evcs_vehicle'; // « Véhicule branché » (désigné par EVCS)
|
||||
const NIV = 'input_number.victron_evcs_vehicle_level_pct'; // niveau saisi, %
|
||||
const DEP = 'input_datetime.victron_evcs_departure_ponctuel'; // départ ponctuel du jour (00:00 = aucun)
|
||||
const MODE = 'input_select.victron_evcs_night_charge_mode'; // sans_edf | complete
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
const opt = (n) => { const i = args.indexOf(n); return i >= 0 ? args[i + 1] : undefined; };
|
||||
const vehicule = opt('--vehicule'); const niveauArg = opt('--niveau'); const departArg = opt('--depart');
|
||||
const vehicule = opt('--vehicule'); const niveauArg = opt('--niveau'); const departArg = opt('--depart'); const modeArg = opt('--mode-nuit');
|
||||
|
||||
async function ha(method, url, body) {
|
||||
const ac = new AbortController(); const t = setTimeout(() => ac.abort(), 10000);
|
||||
@@ -34,6 +38,19 @@ async function ha(method, url, body) {
|
||||
const etat = async (e) => ha('GET', `/api/states/${e}`);
|
||||
|
||||
(async () => {
|
||||
if (modeArg !== undefined) {
|
||||
const m = await etat(MODE); const opts = m.attributes.options || [];
|
||||
const o = opts.find((x) => x.toLowerCase() === String(modeArg).toLowerCase());
|
||||
if (!o) { console.log(`refus : mode « ${modeArg} » inconnu de HA, options : ${opts.join(', ')}`); process.exit(2); }
|
||||
await ha('POST', '/api/services/input_select/select_option', { entity_id: MODE, option: o });
|
||||
await new Promise((r) => setTimeout(r, 800));
|
||||
const lu = (await etat(MODE)).state;
|
||||
if (lu !== o) { console.log(`erreur : écrit ${o} mais HA relit ${lu}`); process.exit(1); }
|
||||
console.log(lu === 'complete'
|
||||
? "C'est noté : charge complète cette nuit (batterie d'abord, puis EDF en heures creuses pour le reste). Retour à « sans EDF » demain à midi."
|
||||
: "C'est noté : charge sans EDF cette nuit (la voiture s'arrête au budget batterie et attend le soleil).");
|
||||
return;
|
||||
}
|
||||
const sel = await etat(SEL); const niv = await etat(NIV);
|
||||
const options = sel.attributes.options || [];
|
||||
const aujourdhui = new Date(Date.now() - new Date().getTimezoneOffset() * 60000).toISOString().slice(0, 10);
|
||||
|
||||
Reference in New Issue
Block a user