Erweiterung der XML-API - Version 1.2 ?
Moderator: Co-Administratoren
-
- Beiträge: 427
- Registriert: 08.03.2010, 13:38
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 34 Mal
Re: Erweiterung der XML-API - Version 1.2 ?
Moin,
irgendwie stehe ich grade auf dem Schlauch. Eigentlich wollte ich nur einen dritten Parameter zu statelist.cgi hinzufügen, aber der Skript will bei mir dann einfach nicht laufen. Bei devicelist.cgi klappt es problemlos.
Wahrschenlich liegt es einfach daran dass ich keine Ahnung von TCL habe und auch nicht wie man es debuggt
Kann mir vielleicht mal jemand unter die Arme greifen?
irgendwie stehe ich grade auf dem Schlauch. Eigentlich wollte ich nur einen dritten Parameter zu statelist.cgi hinzufügen, aber der Skript will bei mir dann einfach nicht laufen. Bei devicelist.cgi klappt es problemlos.
Wahrschenlich liegt es einfach daran dass ich keine Ahnung von TCL habe und auch nicht wie man es debuggt
Kann mir vielleicht mal jemand unter die Arme greifen?
Code: Alles auswählen
#!/bin/tclsh
load tclrega.so
puts -nonewline {Content-Type: text/xml
Access-Control-Allow-Origin: *
<?xml version="1.0" encoding="ISO-8859-1" ?><stateList>}
set ise_id 0
set show_internal 0
set show_remote 0
catch {
set input $env(QUERY_STRING)
set pairs [split $input &]
foreach pair $pairs {
if {0 != [regexp "^(\[^=]*)=(.*)$" $pair dummy varname val]} {
set $varname $val
}
}
}
integer ise_id = "} $ise_id {";
integer show_internal = "} $show_internal {";
integer show_remote = "} $show_remote {";
if { ise_id != 0 } then {
append comm {
object obj = dom.GetObject(ise_id);
if(obj.TypeName() == "HSSDP")
{
object oDP = obj;
string dp = oDP.Name().StrValueByIndex(".", 2);
Write("<datapoint");
Write(" name='");WriteXML(oDP.Name());Write("'");
Write(" type='");WriteXML(oDP.Name().StrValueByIndex(".", 2));Write("'");
Write(" ise_id='");WriteXML(ise_id);Write("'");
! state fragt den aktuellen status des sensors/aktors ab, dauert lange
if (show_internal == 1) {
Write(" state='");WriteXML(oDP.State());Write("'");
}
! value nimmt den von der ccu gecachten wert, moeglicherweise nicht korrekt. Ggf. bei einigen geraeten immer abfragen
Write(" value='");WriteXML(oDP.Value());Write("'");
Write(" valuetype='");WriteXML(oDP.ValueType());Write("'");
Write(" timestamp='");WriteXML(oDP.Timestamp().ToInteger());Write("'");
Write(" />");
}
}
} else {
append comm {
string sDevId;
string sChnId;
string sDPId;
foreach (sDevId, root.Devices().EnumUsedIDs())
{
object oDevice = dom.GetObject(sDevId);
if( oDevice.ReadyConfig() && (oDevice.Name() != "Zentrale") && (oDevice.Name() != "HMW-RCV-50 BidCoS-Wir") )
{
Write("<device");
Write(" name='" # oDevice.Name() # "'");
Write(" ise_id='" # sDevId # "'");
string interfaceid = oDevice.Interface();
string servicechan = "" # dom.GetObject(interfaceid).Name() #"."#oDevice.Address()#":0";
object schan = dom.GetObject(servicechan#".UNREACH");
if(schan) { Write(" unreach='" # schan.Value() #"'"); }
object schan = dom.GetObject(servicechan#".STICKY_UNREACH");
if(schan) { Write(" sticky_unreach='" # schan.Value() #"'"); }
object schan = dom.GetObject(servicechan#".CONFIG_PENDING");
if(schan) { Write(" config_pending='" # schan.Value() #"'"); }
Write(" >"); ! device tag schliessen
foreach(sChnId, oDevice.Channels())
{
object oChannel = dom.GetObject(sChnId);
if ( (! oChannel.Internal()) || oChannel.Internal() )
{
Write("<channel name='");
WriteXML( oChannel.Name() );
Write("' ise_id='" # sChnId);
Write("' index='" # oChannel.ChnNumber());
if (oChannel.Internal()) {
Write("' visible='" );
Write("' operate='");
} else {
Write("' visible='");
WriteXML(oChannel.Visible());
Write("' operate='");
object o_sysVar = dom.GetObject(sChnId);
if( o_sysVar.UserAccessRights(iulOtherThanAdmin) == iarFullAccess ) {
Write("true");
} else {
Write("false");
}
}
Write("'>");
foreach(sDPId, oChannel.DPs().EnumUsedIDs())
{
object oDP = dom.GetObject(sDPId);
if(oDP)
{
string dp = oDP.Name().StrValueByIndex(".", 2);
if( (dp != "ON_TIME") && (dp != "INHIBIT") && (dp != "CMD_RETS") && (dp != "CMD_RETL") && (dp != "CMD_SETS") && (dp != "CMD_SETL") )
{
Write("<datapoint");
Write(" name='"); WriteXML(oDP.Name());
Write("' type='"); WriteXML(oDP.Name().StrValueByIndex(".", 2));
Write("' ise_id='" # sDPId );
! state fragt den aktuellen status des sensors/aktors ab, dauert lange
if (show_internal == 1) {
Write("' state='"); WriteXML(oDP.State());
}
! value nimmt den von der ccu gecachten wert, moeglicherweise nicht korrekt. Ggf. bei einigen geraeten immer abfragen
Write("' value='"); WriteXML(oDP.Value());
Write("' valuetype='" # oDP.ValueType());
Write("' valueunit='" # oDP.ValueUnit());
Write("' timestamp='" # oDP.Timestamp().ToInteger());
Write("' operations='" # oDP.Operations());
Write("' />");
}
}
}
Write("</channel>");
}
}
Write("</device>");
}
}
}
array set res [rega_script $comm]
puts -nonewline $res(STDOUT)
}
puts -nonewline {</stateList>}
Re: Erweiterung der XML-API - Version 1.2 ?
Hey,
wo hast du das denn her?
in unserem original steht doch das
wo hast du das denn her?
Code: Alles auswählen
integer ise_id = "} $ise_id {";
integer show_internal = "} $show_internal {";
integer show_remote = "} $show_remote {";
Code: Alles auswählen
set comm "var ise_id=$ise_id;\n"
set comm "var show_internal=$show_internal;\n"
-
- Beiträge: 427
- Registriert: 08.03.2010, 13:38
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 34 Mal
Re: Erweiterung der XML-API - Version 1.2 ?
Aus devicelist.cgi, ich wollte mal hier das parsing der Parameter vereinheitlichen. Außerdem hat es bei devicelist.cgi geklappt
Siehe hier: https://github.com/hobbyquaker/XML-API/ ... st.cgi#L22
Ich mach vll mal einen Pull Request für die devicelist auf Github auf, dann diskutiert es sich einfacher.
Gibts eine Möglichkeit um diese Skripts zu debuggen oder eine Fehlerausgabe mit Zeilenangabe zu bekommen?
Siehe hier: https://github.com/hobbyquaker/XML-API/ ... st.cgi#L22
Ich mach vll mal einen Pull Request für die devicelist auf Github auf, dann diskutiert es sich einfacher.
Gibts eine Möglichkeit um diese Skripts zu debuggen oder eine Fehlerausgabe mit Zeilenangabe zu bekommen?
Re: Erweiterung der XML-API - Version 1.2 ?
Moin,
ach so ja in der divecelist ist das drin.
Da funktioniert es aber nur so weil es in den implementiert ist.
Bei der statelist wird ja erst am ende das initialisiert.
Zum Testen bzw erstellen nehme ich immer von hobbyquaker das HQ WebUi. Da gibts eine schönen Editor unter dem Reiter Entwicklung.
Gruß Monty
ach so ja in der divecelist ist das drin.
Da funktioniert es aber nur so weil es in den
Code: Alles auswählen
array set res [rega_script { ... }
Bei der statelist wird ja erst am ende das
Code: Alles auswählen
array set res [rega_script $comm]
Zum Testen bzw erstellen nehme ich immer von hobbyquaker das HQ WebUi. Da gibts eine schönen Editor unter dem Reiter Entwicklung.
Gruß Monty
Re: Erweiterung der XML-API - Version 1.2 ?
Ach so,
also so sollte es gehen
also so sollte es gehen
Code: Alles auswählen
#!/bin/tclsh
load tclrega.so
puts -nonewline {Content-Type: text/xml
Access-Control-Allow-Origin: *
<?xml version="1.0" encoding="ISO-8859-1" ?><stateList>}
set ise_id 0
set show_internal 0
set show_remote 0
catch {
set input $env(QUERY_STRING)
set pairs [split $input &]
foreach pair $pairs {
if {0 != [regexp "^(\[^=]*)=(.*)$" $pair dummy varname val]} {
set $varname $val
}
}
}
set comm "var ise_id=$ise_id;\n"
set comm "var show_internal=$show_internal;\n"
set comm "var show_remote=$show_remote;\n"
.....
if { $show_remote!= 0 } then {
....
Re: Erweiterung der XML-API - Version 1.2 ?
Ich hätte da mal ein Problem. Ich habe die Version 1.5 installiert und bei mir wir bei Zusatzsoftware auch die 1.5 angezeigt, wenn ich die Einstellungen aufrufe steht oben "XML-API Version 1.12", nur ein anzeige Fehler?
Re: Erweiterung der XML-API - Version 1.2 ?
Ist mir auch mal aufgefallen, scheint nur nicht geändert worden zu sein.
-
- Beiträge: 427
- Registriert: 08.03.2010, 13:38
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 34 Mal
Re: Erweiterung der XML-API - Version 1.2 ?
Danke! Ich bau da demnächst einen PR drausMonty1979 hat geschrieben:Ach so,
also so sollte es gehen
Code: Alles auswählen
#!/bin/tclsh load tclrega.so puts -nonewline {Content-Type: text/xml Access-Control-Allow-Origin: * <?xml version="1.0" encoding="ISO-8859-1" ?><stateList>} set ise_id 0 set show_internal 0 set show_remote 0 catch { set input $env(QUERY_STRING) set pairs [split $input &] foreach pair $pairs { if {0 != [regexp "^(\[^=]*)=(.*)$" $pair dummy varname val]} { set $varname $val } } } set comm "var ise_id=$ise_id;\n" set comm "var show_internal=$show_internal;\n" set comm "var show_remote=$show_remote;\n" ..... if { $show_remote!= 0 } then { ....