<?xml version="1.0" encoding="UTF-8"?>
<Config Version="1.3"
        xmlns="http://www.insbud.net/ibmanager/logicCfg"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.insbud.net/ibmanager/logicCfg logicCfg.xsd">

  <!--

    ======================
    Description
    ======================

    Logika monitoruje stan urządzeń podłączonych do ibvunit na podstawie parametru tslc (czas od ostatniej prawidłowej komunikacji z urządzeniem).

    Należy zbudować listę sterowników z wszystkimi zmiennymi z listy.

    ======================
    Parameters
    ======================

    SubLogic supports following variables:

    counter.no                              - ilość monitorowanych urządzeń

    counter.err.state                       - stan błędu urządzeń:
                                              0 - wszystkie odpowiadają, lub czas do wywołania błędu jeszcze nie upłynął;
                                              1 - urządzenie nie odpowiada
                                              2 - zdublowana nazwa urządzenia

    counter.err.srt                         - string zawierający nazwy wszystkich sterowników z błędem

    setting.err.time                        - [s] po tym czasie, jeżeli nie zostanie nawiązana prawidłowa komunikacja z urządzeniem tzn:
                                                  wartość counter.tslc < setting.tslc.limit i wartość counter.tslc <> -1
                                                  zostanie zarejestrowany błąd urządzenia

    setting.tslc.timeout                    - [s] wartość limitu tslc. Jeżeli wartość counter.tslc jest większa niż setting.tslc.timeout to
                                                  fakt ten traktowany jest jako błąd komunikacji ze sterownikiem

    counter.tslc                            - lista - [s] tslc sterownika (-1 oznacza, że sterownik nigdy nie odpowiedział)

    counter.err.downcounter                 - lista - [s] licznik powiązany z setting.err.timer. Jeżeli dojdzie do 0 to zostanie wywołany błąd counter.err.state

    counter.err.state                       - lista - czy urządzenie jest w stanie błędu

    setting.id                              - lista - identyfikator sterownika zgodny z ibvunit (np. rs.0.id.1)

    setting.err.enabled                     - lista - czy błąd komunikacji ma być monitorowany

    ======================
    mandatory variables
    ======================

    Logic expects following mandatory variables:

    reload.trigger                          - causes reloading lua script

    memcnt                                  - current amount of memory used by lua in bytes

    Logic expects following kv settings:

    LuaScriptPath                           - path to the lua script - must be absolute

    ======================
    ChangeLog
    ======================

    2022-08-02 ver 1.0.0

    # First release

   -->

  <!-- Type and Version must be the same as Logic::TYPE and Logic::VERSION in Logic.cpp -->
  <Logic Type="Lua" SubType="DeviceMonitor" Version="1.0.10.1421" SubVersion="1.0.0.0">

    <Declaration>

      <GlobalDeclSection>

      </GlobalDeclSection>

      <InstanceDeclSection>

        <!-- mandatory variables -->

        <Var Name="reload.trigger" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="true"
          Direction="Input" Min="0" Max="1"
          Default="0" IsStorable="false"/>

        <Var Name="memcnt" Type="T_LONGLONG"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="false"
          Direction="Output" Min="0"
          Default="0" IsStorable="false"/>

        <Var Name="counter.no" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="false"
          Direction="Output" Min="0"
          Default="0" IsStorable="false"/>

        <Var Name="counter.err.comm.state" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="false"
          Direction="Output" Min="0"
          Default="0" IsStorable="false"/>

        <Var Name="counter.err.comm.str" Type="T_STRING"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="false"
          Direction="Output" 
          Default="" IsStorable="false"/>

        <Var Name="setting.err.time" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="true"
          Direction="Input" Default="10"
          IsStorable="true"/>

        <Var Name="setting.tslc.timeout" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="true"
          Direction="Input" Default="10" Min="1"
          IsStorable="true"/>

        <VarList Name="setting.id" Type="T_STRING"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="true"
          Direction="Input"  GroupName="devices"
          Default="" IsStorable="false"/>

        <VarList Name="setting.err.enabled" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="true"
          Direction="Input"  GroupName="devices"
          Min="0" Max="1" Default="1" IsStorable="true"/>

        <VarList Name="counter.tslc" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="true"
          Direction="Input"  GroupName="devices"
          Min="-1" Default="-1" IsStorable="false"/>

        <VarList Name="counter.err.downcounter" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="true"
          Direction="Output"  GroupName="devices"
          Default="0" Min="0" IsStorable="false"/>

        <VarList Name="counter.err.state" Type="T_INT"
          CanLocalRead="true" CanLocalWrite="true"
          CanExternRead="true" CanExternWrite="true"
          Direction="Output"  GroupName="devices"
          Min="0" Default="0" IsStorable="false"/>

        <Settings>
          <KVSettings>
            <!-- pointing source list - mandatory setting-->
            <KVSetting Key="LuaScriptPath" Value="logic/scripts/DeviceMonitor.lua"/>
          </KVSettings>
        </Settings>

    </InstanceDeclSection>

    </Declaration>

    <Initialization>

      <GlobalInitSection>
      </GlobalInitSection>

      <Instances>

        <Instance Name="dev">

          <InstanceInitSection>

            <VarAssign Name="counter.err.comm.str"         Value=""  DstVar="Notifier.dev.controllers.str.content2"/>

            <VarListItem ListName="setting.id"                      Postfix="0"                        Value="rs.0.id.1"/>
            <VarListItem ListName="setting.err.enabled"             Postfix="0"                        Value="1"/>
            <VarListItem ListName="counter.tslc"                    Postfix="0"                        Value="-1"/>
            <VarListItem ListName="counter.err.downcounter"         Postfix="0"                        Value="0"/>
            <VarListItem ListName="counter.err.state"               Postfix="0"                        Value="0"/>

            <VarListItem ListName="setting.id"                      Postfix="1"                        Value="rs.0.id.10"/>
            <VarListItem ListName="setting.err.enabled"             Postfix="1"                        Value="1"/>
            <VarListItem ListName="counter.tslc"                    Postfix="1"                        Value="-1"/>
            <VarListItem ListName="counter.err.downcounter"         Postfix="1"                        Value="0"/>
            <VarListItem ListName="counter.err.state"               Postfix="1"                        Value="0"/>

            <VarListItem ListName="setting.id"                      Postfix="2"                        Value="rs.0.id.11"/>
            <VarListItem ListName="setting.err.enabled"             Postfix="2"                        Value="1"/>
            <VarListItem ListName="counter.tslc"                    Postfix="2"                        Value="-1"/>
            <VarListItem ListName="counter.err.downcounter"         Postfix="2"                        Value="0"/>
            <VarListItem ListName="counter.err.state"               Postfix="2"                        Value="0"/>

            <VarListItem ListName="setting.id"                      Postfix="3"                        Value="rs.0.id.12"/>
            <VarListItem ListName="setting.err.enabled"             Postfix="3"                        Value="1"/>
            <VarListItem ListName="counter.tslc"                    Postfix="3"                        Value="-1"/>
            <VarListItem ListName="counter.err.downcounter"         Postfix="3"                        Value="0"/>
            <VarListItem ListName="counter.err.state"               Postfix="3"                        Value="0"/>

            <VarListItem ListName="setting.id"                      Postfix="4"                        Value="rs.0.id.13"/>
            <VarListItem ListName="setting.err.enabled"             Postfix="4"                        Value="1"/>
            <VarListItem ListName="counter.tslc"                    Postfix="4"                        Value="-1"/>
            <VarListItem ListName="counter.err.downcounter"         Postfix="4"                        Value="0"/>
            <VarListItem ListName="counter.err.state"               Postfix="4"                        Value="0"/>

          </InstanceInitSection>

        </Instance>

      </Instances>

    </Initialization>

  </Logic>

</Config>
