vk_1 píše: ↑čtv říj 12, 2023 8:44 pm
Kodl69 píše: ↑čtv říj 12, 2023 8:29 pm
zkusím to tak nějak jak navádí diablo 1st, to vk_1: ty proměnný jsou pro mě španělská vesnice. ještě k tomu spojení do jednoho, kde se vytvoří to rozlišení msg.payload.xxx a msg.payload.yyy?
Použití globálních proměnných:
1.) nejdřív si udělám ukládání hodnot do proměnných.
Screenshot 2023-10-12 at 20.41.00.png
Screenshot 2023-10-12 at 20.41.11.png
2.) pak je můžu v libovolné funkci použít:
Kód: Vybrat vše
if (global.get('statusBatterySoC') > 80) {
// SoC je nad 80%, zapnu bojler
msg.payload = 1;
}
Taky primárně používám JS, ale jenom v případě, že je ten program složitější.
Pro případ, který uvádíš - function 18 - bych použil jednoduchý node CHANGE. Jenoduše "SET" global."jméno globální proměnné" to the value msg.payload. Tohle mi přijde jednodušší. Globalget a globalset až ve složitějších případech.
Jinak zásadně používám globální proměnné, protože si na ně sáhnu kdekoli a nemusím je držet jako msg a slučovat je.
Můj hlavní rozhodovací program ostrov/hybrid je tento:
Kód: Vybrat vše
var Ostrov_Rezim = global.get("Ostrov_Rezim")
var Ostrov_Cas_On = global.get("Ostrov_Cas_On")
var Ostrov_SOC_On = global.get("Ostrov_SOC_On")
var Ostrov_Spotreba_On = global.get("Ostrov_Spotreba_On")
var Ostrov_Cas = global.get("Ostrov_Cas")
var Ostrov_SOC = global.get("Ostrov_SOC")
var Ostrov_Spotreba = global.get("Ostrov_Spotreba")
if (Ostrov_Rezim == 0)
{
msg.payload = 3
}
else if (Ostrov_Rezim == 1)
{
msg.payload = 2
}
else if ((Ostrov_Cas_On * !Ostrov_Cas == 1) || (Ostrov_SOC_On * !Ostrov_SOC == 1) || (Ostrov_Spotreba_On * !Ostrov_Spotreba == 1))
{
msg.payload = 3
}
else
{
msg.payload = 2
}
return msg;
Ostrov_Rezim je:
0 = OFF (hybrid)
1 = ON (ostrov)
2 = AUTO (podle mého algoritmu, který řeším v jiném programu)
Ostatní proměnné jsou typu boolean, tedy true/false. Je možné je pak invertovat, násobit a podobně.
Ty proměnné _On zapínají nebo vypínají příslušnou podmínku a to se násobí hodnotou, zda je ta podmínka splněna.
Ty dvě čárky v kódu vedle sebe jsou logický operátor OR.
Výstupem z programu je hodnota msg.payload pro Switch position.
To Kodl69:
Ve tvém případě bych udělal jednoduchou boolean globální proměnnou třeba "Pobyt" a ta by nabývala true/false. Pak jednoduše na tlačítka dát payload true nebo false a v dalším node CHANGE: SET global.Pobyt to the value msg.payload. Vyřešeno třemi nody. První dvě tlačítka s nastavením true/false, pak to sloučit do CHANGE. Podobně by šly řešit ty analogové vstupy z fyzických tlačítek. To je celé.
Dokonce bys to mohl udělat, že do jednoho nodu CHANGE by šly všechny čtyři tvé vstupy (2x tlačítko, 2x analogový vstup). Snadné.