[phpBB Debug] PHP Warning: in file [ROOT]/includes/session.php on line 214: htmlspecialchars(): charset `p' not supported, assuming utf-8
[phpBB Debug] PHP Warning: in file [ROOT]/includes/session.php on line 215: htmlspecialchars(): charset `p' not supported, assuming utf-8
[phpBB Debug] PHP Warning: in file [ROOT]/includes/session.php on line 216: htmlspecialchars(): charset `p' not supported, assuming utf-8
[phpBB Debug] PHP Warning: in file [ROOT]/includes/session.php on line 87: htmlspecialchars(): charset `p' not supported, assuming utf-8
[phpBB Debug] PHP Warning: in file [ROOT]/includes/session.php on line 129: htmlspecialchars(): charset `p' not supported, assuming utf-8
[phpBB Debug] PHP Warning: in file [ROOT]/includes/session.php on line 130: htmlspecialchars(): charset `p' not supported, assuming utf-8
[phpBB Debug] PHP Warning: in file [ROOT]/includes/session.php on line 1685: htmlspecialchars(): charset `p' not supported, assuming utf-8
PROMOTIC FORUM • View topic - Zjištění seznamu definovaných alarmů
Page 1 of 1

Zjištění seznamu definovaných alarmů

PostPosted: Tue 21. May 2024 10:43:36
by kmpc
Dobrý den,

(mám verzi 9.0.27.0)

Pro uživatelské nastavení podmnožiny komunikovaných alarmů přes SMS bych potřeboval získat seznam všech definovaných (i dosud nikdy neaktivních) alarmů, tj, všech, které mám definované pomocí datového rozšíření v hlavní položce Data u každé proměnné. Z těch si pak uživatel bude vybírat, co půjde nebo nepůjde přes SMS.

Hned na začátku mě zastavil problém s funkcí GetStateData, která mi nevrací pole.
Vytvořil jsem testovací skript jako metodu pmaRoot a volám si ji tlačítkem v panelu. Na obrázku je vidět metoda, definice proměnných v Data s datovým rozšířením Alarm, aktuální stav alarmů a výstup Debug po zavolání metody v pmaRoot.

Alarmy.png
Alarmy.png (126.3 KiB) Viewed 18041 times


Jakékoli volání nad polem, např. a.GetSize(1); končí chybou,...

Zjistil jsem, že GetStateCount mi vrací jen alarmy, které již někdy nastaly, nedostanu všechny definované alarmy.

Co je ve skriptu špatně?
Předpokládám, že použité metody mi vrátí pouze již někdy aktivované alarmy, je to tak?
Jak zjistím počet a seznam všech definovaných alarmů, abych s nimi mohl pracovat?
Potřebuji nasměrovat, jak to celé správně uchopit.

Předem děkuji za radu.

Prachař

Re: Zjištění seznamu definovaných alarmů

PostPosted: Wed 22. May 2024 14:23:16
by Pavel Klimíček
Dobrý den.
Pokud chcete pouze seznam alarmů které jsou definovány v datovém rozšíření (a né ty, které se mohou vyvolat skriptové),
pak to lze řešit takto:

Code: Select all
var oData = pMe.Pm("../Data");
var nItems = oData.Count;
var nAl = 0;

for (var iTm = 0; iTm < nItems; iTm++)
{
   var oVar = oData.Item(iTm);
   if (oVar.Extension("al"))
   {
      Pm.Debug("Alarm Extension Name = " + oVar.Name + ", Value = " + oVar.Value);
      nAl++;
   }
}
Pm.Debug("Celkem alarmu v datovem rozsireni : " + nAl);


Ve Vašem skriptu máte chyby v metodě Pm.Debug.
Snažíte se tam k hodnotě metody která vrací pole ještě přidat string.
Pokud v proměnné "a" očekáváte že bude pole pak ho otestujete takto:
Code: Select all
Pm.Debug("----- Test pole a (oAl.GetStateData) ----");
Pm.Debug(a, 1);

Re: Zjištění seznamu definovaných alarmů

PostPosted: Thu 23. May 2024 11:21:56
by Pavel Klimíček
Pokud má jedna proměnná více alarmních datových rozšíření můžete použít tento skript:
Identifikátory datového rozšíření ale musí mít tuto posloupnost "al", "al0", "al1", ....
Code: Select all
var oData = pMe.Pm("../Data");
var nItems = oData.Count;

for (var iTm = 0; iTm < nItems; iTm++)
{
   var sInd = "al";
   var nCount = -1;
   var oVar = oData.Item(iTm);
   
   while (oVar.Extension(sInd))
   {
      Pm.Debug("Alarm Extension id = '" + sInd + "', Name = '" + oVar.Name + "', Value = " + oVar.Value);
      nCount++;
      sInd = "al" + nCount;
   }
}