Files
sea/tcl/startup/lsvar.tcl
2022-08-18 15:04:28 +02:00

146 lines
3.8 KiB
Tcl

# list variables normally shown in graphic window
# to be used for a quick overview with a slow connection
# M. Bartkowiak Sept 2014
# M. Zolliker Oct 2014
proc get_var_value {var {unit NONE} {valunitname ""}} {
upvar $valunitname valunit
set path [join [split $var .] /]
if {[catch "hgetpropval $path logger_name"] == 0} {
# hipadaba
set val [hvali $path]
set valunit0 "$val $unit"
catch {set valunit0 [format {%12.7g %s} $val $unit]}
set valunit [silent $valunit0 hgetpropval $path geterror]
if {$valunit0 ne $valunit} {
return NaN
}
return $val
} else {
set sub ""
scan $path {%[^/]/%s} obj sub
set com "result $obj $sub"
if [catch $com val] {
set valunit $val
return NaN
}
set valunit [format "%12s %s" $val $unit]
catch {set valunit [format "%12.6g %s" $val $unit}
return $val
}
}
proc lsvar {} {
set units [list]
set output "[samenv name]\n"
foreach item [result vars] {
set unit 0
set label ""
scan $item {%[^|]|%[^|]|%[^|]|} var unit label
if {$label eq ""} {
set label $var
}
set fullunit $unit
scan $unit {%[^_]} unit
get_var_value $var $unit valunit
if {! [info exists output_$fullunit]} {
lappend units $fullunit
}
append output_$fullunit [format "%-12s: %s\n" $label $valunit]
}
foreach fullunit $units {
append output [set output_$fullunit]
}
clientput $output
}
publishLazy lsvar Spy
proc lsvarjson {} {
set units [list]
foreach item [result vars] {
set unit 0
set label ""
scan $item {%[^|]|%[^|]|%[^|]|} var unit label
if {$label eq ""} {
set label $var
}
set fullunit $unit
scan $unit {%[^_]} unit
set path [join [split $var .] /]
if {[catch "hgetpropval $path logger_name"] == 0} {
# hipadaba
set val [hvali $path]
catch {set val [format %.7g $val]}
set valunit [format {,"value":"%s","unit":"%s"} $val $unit]
catch {
append valunit [format {,"error":"%s"} [hgetpropval $path geterror]]
}
} else {
set sub ""
scan $path {%[^/]/%s} obj sub
set com "result $obj $sub"
if [catch $com val] {
set valunit [format {,"error":"%s"} $val]
} else {
catch {set val [format "%.6g" $val]}
set valunit [format {,"value":"%s","unit":"%s"} $val $unit]
}
}
if {! [info exists output_$fullunit]} {
lappend units $fullunit
}
lappend output_$fullunit [format {{"label":"%s"%s}} $label $valunit]
}
set output [list]
foreach fullunit $units {
lappend output [set output_$fullunit]
}
return [format {[%s]} [join $output ,]]
}
proc lsvarhtml {} {
set units [list]
set output "<h2>[string toupper [samenv name]]</h2><table>"
foreach item [result vars] {
set unit 0
set label ""
scan $item {%[^|]|%[^|]|%[^|]|} var unit label
if {$label eq ""} {
set label $var
}
set fullunit $unit
scan $unit {%[^_]} unit
set path [join [split $var .] /]
if {[catch "hgetpropval $path logger_name"] == 0} {
# hipadaba
set val [hvali $path]
catch {set val [format %.7g $val]}
set valunit "<td align=right>$val</td><td>$unit</td>"
catch {
set valunit "<td colspan=2>[hgetpropval $path geterror]</td>"
}
} else {
set sub ""
scan $path {%[^/]/%s} obj sub
set com "result $obj $sub"
if [catch $com val] {
} else {
catch {set val [format "%.6g" $val]}
}
set valunit "<td align=right>$val</td><td>$unit</td>"
}
if {! [info exists output_$fullunit]} {
lappend units $fullunit
}
append output_$fullunit "<tr><td>$label</td>$valunit</tr>"
}
foreach fullunit $units {
append output [set output_$fullunit]
}
clientput "$output</table>"
}
publishLazy lsvarhtml Spy