Hi
I have 2 issues with my http protocol
The first:
QAction no load after params change value:
<Sessionid="1"name="API Status">
<Connectionid="1"name="Check Ping">
<Requestverb="GET"url="/api/v1/system/network/ping">
</Request>
<ResponsestatusCode="2">
<Contentpid="3"></Content>
</Response>
</Connection>
</Session>
<Timerid="1">
<Name>Fast Timer (10s)</Name>
<Timeinitial="true">10000</Time>
<Interval>75</Interval>
<Content>
<Group>2</Group>
</Content>
</Timer>
<Groupid="2">
<Name>Fast Polling</Name>
<Description>Fast Polling 10s</Description>
<Type>poll</Type>
<Content>
<Session>1</Session>
</Content>
</Group>
<Paramid="2">
<Name>StatusCodePingCheck</Name>
<Description>Status Code API</Description>
<Type>dummy</Type>
</Param>
<Paramid="3">
<Name>PingCheckResponse</Name>
<Description>Ping Check Response</Description>
<Type>dummy</Type>
</Param>
LOG:
2025/06/03 23:03:31.374|SLProtocol - 1084 - Titan-Live - copy|19012|CTimer::Execute|DBG|6|1 groups to execute
2025/06/03 23:03:31.374|SLProtocol - 1084 - Titan-Live - copy|19012|CTimer::TimerThreadFunc|DBG|6|Waiting for last group to be finished.
2025/06/03 23:03:31.378|SLProtocol - 1084 - Titan-Live - copy|8832|CGroup::Execute|DBG|6|Start executing group 2 (interval = 75) (depth=1)
2025/06/03 23:03:31.379|SLProtocol - 1084 - Titan-Live - copy|8832|CProtocol::LogHttpRequest|INF|3|<- 23:03:31 - GET http://172.28.20.201:80/api/v1/system/network/ping
2025/06/03 23:03:31.391|SLProtocol - 1084 - Titan-Live - copy|8832|CProtocol::ProcessHttpResult|INF|3|HTTP/1.1 200 OK
2025/06/03 23:03:31.392|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|-> StatusCodePingCheck set value to VT_BSTR : HTTP/1.1 200 OK (HTTP/1.1 200 OK)
2025/06/03 23:03:31.392|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|
2025/06/03 23:03:31.393|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|-> PingCheckResponse set value to VT_BSTR : {"ping": "ok"} ({"ping": "ok"})
2025/06/03 23:03:31.393|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|
2025/06/03 23:03:31.469|SLProtocol - 1084 - Titan-Live - copy|8832|CGroup::Execute|DBG|6|Finished executing group 2
2025/06/03 23:03:31.470|SLProtocol - 1084 - Titan-Live - copy|19012|CTimer::TimerThreadFunc|DBG|6|Last group finished.
Session working ok and get : {
"ping": "ok"
}
But no tigger QAction when params 3 have value.
The second issue:
I run manually Qaction:
using System;
using Newtonsoft.Json.Linq;
using Skyline.DataMiner.Scripting;
public static class QAction
{
publicstaticvoid Run(SLProtocol protocol)
{
try
{
string json = protocol.GetParameter(3)?.ToString();
protocol.Log("Value jsonnnnn:" + json,LogLevel.LogEverything);
var jsonObject = JObject.Parse(json);
if (jsonObject.TryGetValue("ping", out JToken pingToken))
{
string pingValue = pingToken.ToString();
if (string.Equals(pingValue, "ok", StringComparison.OrdinalIgnoreCase))
{
protocol.SetParameter(Parameter.apihealth, 1); // OK
}
else
{
protocol.SetParameter(Parameter.apihealth, 0); // FAIL
}
}
else
{
protocol.SetParameter(Parameter.apihealth, 0);
}
}
catch (Exception ex)
{
protocol.Log($"QA{protocol.QActionID}|{protocol.GetTriggerParameter()}|Run|Exception:{Environment.NewLine}{ex}", LogType.Error, LogLevel.NoLogging);
protocol.SetParameter(Parameter.apihealth, 0); // Por seguridad: asumimos FAIL
}
}
}
For some reason params 3 is null
but in log appear :
2025/06/03 23:03:31.379|SLProtocol - 1084 - Titan-Live - copy|8832|CProtocol::LogHttpRequest|INF|3|<- 23:03:31 - GET http://172.28.20.201:80/api/v1/system/network/ping
2025/06/03 23:03:31.391|SLProtocol - 1084 - Titan-Live - copy|8832|CProtocol::ProcessHttpResult|INF|3|HTTP/1.1 200 OK
2025/06/03 23:03:31.392|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|-> StatusCodePingCheck set value to VT_BSTR : HTTP/1.1 200 OK (HTTP/1.1 200 OK)
2025/06/03 23:03:31.392|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|
2025/06/03 23:03:31.393|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|-> PingCheckResponse set value to VT_BSTR : {"ping": "ok"} ({"ping": "ok"})
2025/06/03 23:03:31.393|SLProtocol - 1084 - Titan-Live - copy|8832|CParameter::SetValue|DBG|2|
2025/06/03 23:03:31.469|SLProtocol - 1084 - Titan-Live - copy|8832|CGroup::Execute|DBG|6|Finished executing group 2
Thanks
Hi,
I run manually QAction and work ok
2025/06/04 10:35:04.655|SLProtocol - 16756 - Titan-Live - copy|16092|CQAction::Run|INF|2|QAction [3] triggered by [pid=3/idx=-1/pk=/user=]
Input: new = {"ping": "ok"}
Input: old =
Input: extra = <NULL>
2025/06/04 10:35:04.667|SLManagedScripting.exe|ManagedInterop|CRU|5|51|Value jsonnnnn:{"ping": "ok"}
2025/06/04 10:35:04.668|SLProtocol - 16756 - Titan-Live - copy|22420|CParameter::SetValue|DBG|2|-> APIHealth set value to VT_R8 : 1.000000 (calculated = 1.000000)
2025/06/04 10:35:04.668|SLProtocol - 16756 - Titan-Live - copy|22420|CParameter::SetValue|DBG|2| 000000 31 1
2025/06/04 10:35:04.669|SLElement.exe|8024|CElement::SetParameterValueFuncAsync|DBG|5|Set for PID 100 Value = VT_R8 : 1.000000
2025/06/04 10:35:04.684|SLElement.exe|17076|CElement::SetParameterValue|DBG|1|** Parameter 100 changed to VT_R8 : 1.000000
2025/06/04 10:35:08.904|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Resetting last group
2025/06/04 10:35:08.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::Execute|DBG|6|1 groups to execute
2025/06/04 10:35:08.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Waiting for last group to be finished.
2025/06/04 10:35:08.918|SLProtocol - 16756 - Titan-Live - copy|13588|CGroup::Execute|DBG|6|Start executing group 2 (interval = 75) (depth=1)
2025/06/04 10:35:08.919|SLProtocol - 16756 - Titan-Live - copy|13588|CProtocol::LogHttpRequest|INF|3|<- 10:35:08 - GET http://172.28.20.201:80/api/v1/system/network/ping
2025/06/04 10:35:08.948|SLProtocol - 16756 - Titan-Live - copy|13588|CProtocol::ProcessHttpResult|INF|3|HTTP/1.1 200 OK
2025/06/04 10:35:08.948|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|-> StatusCodePingCheck set value to VT_BSTR : HTTP/1.1 200 OK (HTTP/1.1 200 OK)
2025/06/04 10:35:08.952|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2| 000000 485454502F 312E312032 3030204F4B HTTP/1.1 200 OK
2025/06/04 10:35:08.952|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|-> PingCheckResponse set value to VT_BSTR : {"ping": "ok"} ({"ping": "ok"})
2025/06/04 10:35:08.953|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2| 000000 7B2270696E 67223A2022 6F6B227D {"ping": "ok"}
2025/06/04 10:35:09.040|SLProtocol - 16756 - Titan-Live - copy|13588|CGroup::Execute|DBG|6|Finished executing group 2
2025/06/04 10:35:09.044|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Last group finished.
2025/06/04 10:35:18.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Resetting last group
2025/06/04 10:35:18.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::Execute|DBG|6|1 groups to execute
2025/06/04 10:35:18.905|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Waiting for last group to be finished.
2025/06/04 10:35:18.912|SLProtocol - 16756 - Titan-Live - copy|13588|CGroup::Execute|DBG|6|Start executing group 2 (interval = 75) (depth=1)
2025/06/04 10:35:18.912|SLProtocol - 16756 - Titan-Live - copy|13588|CProtocol::LogHttpRequest|INF|3|<- 10:35:18 - GET http://172.28.20.201:80/api/v1/system/network/ping
2025/06/04 10:35:18.920|SLProtocol - 16756 - Titan-Live - copy|13588|CProtocol::ProcessHttpResult|INF|3|HTTP/1.1 200 OK
2025/06/04 10:35:18.920|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|-> StatusCodePingCheck set value to VT_BSTR : HTTP/1.1 200 OK (HTTP/1.1 200 OK)
2025/06/04 10:35:18.921|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2| 000000 485454502F 312E312032 3030204F4B HTTP/1.1 200 OK
2025/06/04 10:35:18.921|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2|-> PingCheckResponse set value to VT_BSTR : {"ping": "ok"} ({"ping": "ok"})
2025/06/04 10:35:18.921|SLProtocol - 16756 - Titan-Live - copy|13588|CParameter::SetValue|DBG|2| 000000 7B2270696E 67223A2022 6F6B227D {"ping": "ok"}
2025/06/04 10:35:18.997|SLProtocol - 16756 - Titan-Live - copy|13588|CGroup::Execute|DBG|6|Finished executing group 2
2025/06/04 10:35:18.997|SLProtocol - 16756 - Titan-Live - copy|22272|CTimer::TimerThreadFunc|DBG|6|Last group finished.
The issue is why no run QAction for first time.

Hi Jose,
It's hard to see from your code fragment what goes wrong, since not your whole connector is included.
My best guess at the moment is that the problem is caused by parameter 3 since it is defined as a dummy parameter.
That parameter should be a string/text parameter instead of a dummy parameter because we want to store the content of the response into that parameter.
Let me know if this resolves at least 1 of your issues.
Kind regards,

<?xml version="1.0" encoding="utf-8" ?>
<Protocol xmlns="http://www.skyline.be/protocol">
<Name>ATEME Titan-Live</Name>
<Description>Titan Live DataMiner API connector</Description>
<Version>1.0.0.1</Version>
<IntegrationID>DMS-DRV-0001</IntegrationID>
<Provider>test</Provider>
<Vendor>test</Vendor>
<VendorOID>1.3.6.1.4.1.8813.2.99</VendorOID>
<DeviceOID>100</DeviceOID>
<ElementType>Monitoring Platform</ElementType>
<Type relativeTimers="true">http</Type>
<Display defaultPage="General" pageOrder="General;———-;Security;———-;Resources;Management;Services;Networking;Sensor;Licence;———-;Webpage#http://[Polling Ip]/" wideColumnPages="Security"/>
<SNMP includepages="true">auto</SNMP>
<Compliancies>
<CassandraReady>true</CassandraReady>
<MinimumRequiredVersion>10.2.0.0 – 12603</MinimumRequiredVersion>
</Compliancies>
<Params>
<Param id="1">
<Name>AfterStartup</Name>
<Description>After Startup</Description>
<Type>dummy</Type>
</Param>
<Param id="2">
<Name>StatusCodePingCheck</Name>
<Description>StatusCodePingCheck</Description>
<Type>read</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
</Param>
<Param id="3">
<Name>PingCheckResponse</Name>
<Description>PingCheckResponse</Description>
<Type>read</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
</Param>
<Param id="4">
<Name>StatusCodeLogin</Name>
<Description>status Code Login</Description>
<Type>dummy</Type>
</Param>
<Param id="5">
<Name>LoginResponse</Name>
<Description>Login Response</Description>
<Type>dummy</Type>
</Param>
<Param id="100" trending="true">
<Name>APIHealth</Name>
<Description>API Health</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[API Health Status]]>
</Subtext>
</Information>
<Interprete>
<RawType>numeric text</RawType>
<Type>double</Type>
<LengthType>next param</LengthType>
</Interprete>
<Alarm>
<Monitored>true</Monitored>
<CH>Fail</CH>
<Normal>Ok</Normal>
</Alarm>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Resources</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Management</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Services</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Networking</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Sensor</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
<Position>
<Page>Licence</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>discreet</Type>
<Discreets>
<Discreet>
<Display>Fail</Display>
<Value>0</Value>
</Discreet>
<Discreet>
<Display>Ok</Display>
<Value>1</Value>
</Discreet>
</Discreets>
</Measurement>
</Param>
<Param id="101" trending="false">
<Name>ProtocolSupport</Name>
<Description>Protocol Support</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[API support with this protocol]]>
</Subtext>
</Information>
<Alarm>
<Monitored>true</Monitored>
<Normal>Support</Normal>
<CH>Not Support</CH>
</Alarm>
<Interprete>
<RawType>numeric text</RawType>
<Type>double</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>1</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>discreet</Type>
<Discreets>
<Discreet>
<Display>Not Support</Display>
<Value>0</Value>
</Discreet>
<Discreet>
<Display>Support</Display>
<Value>1</Value>
</Discreet>
</Discreets>
</Measurement>
</Param>
<Param id="102" trending="false">
<Name>APIVersion</Name>
<Description>API Version</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[API Version]]>
</Subtext>
</Information>
<Alarm>
<Monitored>true</Monitored>
<Normal>2.4.0.3</Normal>
<CH>=!2.4.0.3</CH>
</Alarm>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>2</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="103" trending="false">
<Name>FirmwareVersion</Name>
<Description>Firmware Version</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[Firmware Version]]>
</Subtext>
</Information>
<Alarm>
<Monitored>true</Monitored>
<Normal>4.1.30.0-0</Normal>
<CH>=!4.1.30.0-0</CH>
</Alarm>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>3</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="104" trending="false">
<Name>ServerUUID</Name>
<Description>Server UUID</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[Unique UUID of Encoder]]>
</Subtext>
</Information>
<Alarm>
<Monitored>false</Monitored>
</Alarm>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>4</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="105" trending="false">
<Name>EncoderStatus</Name>
<Description>Encoder Status</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[Login Status of Encoder]]>
</Subtext>
</Information>
<Alarm>
<Monitored>true</Monitored>
<Normal>Authorized</Normal>
<CH>Not Authorized</CH>
</Alarm>
<Interprete>
<RawType>numeric text</RawType>
<Type>double</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>5</Row>
</Position>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>0</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>discreet</Type>
<Discreets>
<Discreet>
<Display>Not Authorized</Display>
<Value>0</Value>
</Discreet>
<Discreet>
<Display>Authorized</Display>
<Value>1</Value>
</Discreet>
</Discreets>
</Measurement>
</Param>
<Param id="106" trending="false">
<Name>FirmwareRelease</Name>
<Description>Firmware Release</Description>
<Type>read</Type>
<Information>
<Subtext>
<![CDATA[Firmware release version]]>
</Subtext>
</Information>
<Alarm>
<Monitored>false</Monitored>
</Alarm>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>General</Page>
<Column>0</Column>
<Row>6</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="135" trending="false">
<Name>username</Name>
<Description>Username</Description>
<Type>read</Type>
<Information>
<Subtext>
0
</Subtext>
</Information>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>2</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="235" setter="true">
<Name>username</Name>
<Description>Username</Description>
<Type>write</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>2</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="136" trending="false">
<Name>Password</Name>
<Description>Password</Description>
<Type>read</Type>
<Information>
<Subtext>
0
</Subtext>
</Information>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>3</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type options="Password">string</Type>
</Measurement>
</Param>
<Param id="236" setter="true">
<Name>Password</Name>
<Description>Password</Description>
<Type>write</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>3</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type options="Password">string</Type>
</Measurement>
</Param>
<Param id="137" trending="false">
<Name>TokenValue</Name>
<Description>Token</Description>
<Type>read</Type>
<Information>
<Subtext>
0
</Subtext>
</Information>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>1</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
<Param id="237" setter="true">
<Name>TokenValue</Name>
<Description>Token</Description>
<Type>write</Type>
<Interprete>
<RawType>other</RawType>
<Type>string</Type>
<LengthType>next param</LengthType>
</Interprete>
<Display>
<RTDisplay>true</RTDisplay>
<Positions>
<Position>
<Page>Security</Page>
<Column>0</Column>
<Row>1</Row>
</Position>
</Positions>
</Display>
<Measurement>
<Type>string</Type>
</Measurement>
</Param>
</Params>
<QActions>
<QAction id="1" name="Precompiled Code" encoding="csharp" options="precompile" />
<QAction id="2" name="After Startup" encoding="csharp" triggers="1" />
<QAction id="3" name="Ping Status" encoding="csharp" triggers="3" />
</QActions>
<HTTP>
<Session id="1" name="API Status">
<Connection id="1" name="Check Ping">
<Request verb="GET" url="/api/v1/system/network/ping">
</Request>
<Response statusCode="2">
<Content pid="3"></Content>
</Response>
</Connection>
</Session>
<Session id="2" name="API Login">
<Connection id="1" name="Credentials">
<Request verb="POST" url="/api/management/login">
<Parameters>
<Parameter key="user" pid="135"></Parameter>
<Parameter key="password" pid="136"></Parameter>
</Parameters>
<Headers>
<Header key="Content-Type">application/json</Header>
</Headers>
</Request>
<Response statusCode="4">
<Content pid="5"></Content>
</Response>
</Connection>
</Session>
</HTTP>
<Groups>
<Group id="1">
<Name>After Startup</Name>
<Description>After Startup</Description>
<Type>poll action</Type>
<Content>
<Action>2</Action>
</Content>
</Group>
<Group id="2">
<Name>Fast Polling</Name>
<Description>Fast Polling 10s</Description>
<Type>poll</Type>
<Content>
<Session>1</Session>
</Content>
</Group>
</Groups>
<Triggers>
<Trigger id="1">
<Name>After Startup</Name>
<On>protocol</On>
<Time>after startup</Time>
<Type>action</Type>
<Content>
<Id>1</Id>
</Content>
</Trigger>
</Triggers>
<Actions>
<Action id="1">
<Name>After Startup Group</Name>
<On id="1">group</On>
<Type>execute next</Type>
</Action>
<Action id="2">
<Name>After Startup QAction</Name>
<On id="1">parameter</On>
<Type>run actions</Type>
</Action>
</Actions>
<Timers>
<Timer id="1">
<Name>Fast Timer (10s)</Name>
<Time initial="true">10000</Time>
<Interval>75</Interval>
<Content>
<Group>2</Group>
</Content>
</Timer>
<Timer id="2">
<Name>Medium Timer (1m)</Name>
<Time initial="true" dataDisplay="30000">60000</Time>
<Interval>75</Interval>
<Content>
</Content>
</Timer>
<Timer id="3">
<Name>Slow Timer (5m)</Name>
<Time initial="true">300000</Time>
<Interval>75</Interval>
<Content>
</Content>
</Timer>
</Timers>
<PortSettings name="HTTP Connection">
<BusAddress>
<DefaultValue>ByPassProxy</DefaultValue>
<Disabled>false</Disabled>
</BusAddress>
<IPport>
<DefaultValue>80</DefaultValue>
<Disabled>false</Disabled>
</IPport>
</PortSettings>
</Protocol>

Hi,
Are you still experiencing both of your problems?
You mention in your initial post that the QAction is not triggered on parameter change, but at the same time that the response is {"ping": "ok"}, so I assume that the QAction does get triggered on some moments? It's good to know that DataMiner will not trigger the QAction if the data in the parameter stays identical (so in your case a ping that results again in the same response {"ping": "ok"} that is put in parameter 3, will not cause the QAction to be triggered again).
Could you provide some more information on what exactly is going wrong and what you expect to be happening?
Kind regards,

Hi Bram,
Yes, have both problem
No tigger QAction, APIHealth parameter no show "ok", APIHealth have 2 status (Fail and Ok),
when run for first time protocol no run Qaction, I need qaction detect if :
{
"ping": "ok"
}
show "OK" in API Health parameter if is null or other value show "Fail"
thanks

Hi,
Could you as a debugging step make parameter 3 visible by giving it a position on the display?
I'd expect that the raw json string ({"ping": "ok"}) will be visible in that parameter after a few seconds (when the timer goes off and the session is executed).
Let me know if you can indeed see that response or not.
Hi,
I can see values in both parameters, but the API Health parameter is linked to a QAction. The QAction should send 1
to API Health if it detects "ping": "ok"
, and 0
if it detects null
or an error.
However, I don’t know how to trigger the QAction to analyze the first value and show the result in the API Health parameter.

Hi,
It seems that the session is correctly fetching the data, and your configuration to trigger the QAction also seems correct to me.
I suspect that something in the QAction itself is going wrong.
The logs of the element itself should give you more information.
These can be found at C:Skyline DataminerLogging<elementName>.txt.
Could you before you even fetch the value of parameter 3 add a log message (e.g. 'protocol.Log("My unique log message", LogType.Error, LogLevel.NoLogging);')
You should be able to see this log message appear in that log file every time the QAction is triggered (so in your case once at startup since the value of parameter 3 is the same every time and the QAction won't retrigger).
If that succeeds, I suggest you add logging messages after every step to see what goes wrong.
I hope this will give you a way to proceed.
Let me know if you keep having problems.
Kind regards,
Hi Jose,
I tested your connector locally (just put another URL in the session) and everything seems to work OK on my side (the apiHealth-parameter shows "OK" a few seconds after startup of the element).
Is this indeed what you are trying to achieve, or am I misunderstanding you?
Because I cannot find any reason that the QAction does not get triggered.
Kind regards,