Development/Tutorials/Sensors

From KDE TechBase
Revision as of 00:24, 20 September 2008 by Vi2 (talk | contribs) (Little bit of formatting)

Implementing KSysGuard sensors simple example.

Prequesities: KDE, Perl, nc

Imagine you have a program that monitors some value important for you. You want the value to be plotted or displayed in the KDE systray.

The most _____ way is to add it to KSysGuard as a sensor.

== Example

Step 1. Create, for example, "/home/vi/code/sensor/sensor.pl" with the following content: #!/usr/bin/perl -w $|=1;

print "ksysguardd 1.2.0\n"; print "ksysguardd> ";

while(<>){

   if(/monitors/){

print "random\tinteger\n";

   }
   if(/random/){

if(/\?/){ print "Random Value\t0\t100\n"; }else{ print int(rand()*100),"\n"; }

   }
   print "ksysguardd> ";

}

Step 2: Launch KSysGuard, File->Connect Host->Custom Command, enter "/home/vi/code/sensor/sensor.pl" in the Command field, OK.

Step 3: Open "127.0.0.1", find "random Integer Value", drag it to some sheet.

You will see your sensor (random value from 0 to 100 in this case).

== Systray

If you want to see the plot is your systray, follow this:

Step 1: Add "KSysGuard applet to the desktop".

Step 2: In there's no spare displays, choose "Configure System Guard" in the context menu of the applet and increase "Number of displays".

Step 3: Launch KSysGuard, follow previous example to get access to your sensor.

Step 4: Drag and drop from "random Integer Value" to the free display in the systray.

Step 5: "Signal plotter", then you will be asked again to provide the data source. Choose "Custom Command" with the same script.

[Step 6: Open properties and remove grids and lines to clean up the plot]

== Protocol

The ksysguardd protocol: 1. Server sends version line ("ksysguardd 1.2.0") ended with newline. 2. Server sends "ksysguardd> " with spacebar and without newline. Available commands:

  monitors -- List available sensors
  <sensor name> -- Get the value of some sensor
  <sensor name>? -- Get the metadata of the sensor

"monitor" command: For each sensor, send the sensor name TAB the sensor type (integer) NEWLINE. Then go back to the prompt "ksysguardd> ".

get command: For integer sensors, server should send one integer value and NEWLINE.

info command: Server should send the Display Name of the sensor TAB minimum value TAB maximum value TAB units NEWLINE. Looks like this command or some part of it is optional.

== Example session

Example of session: ksysguardd 1.2.0 ksysguardd> random 96 ksysguardd> random 46 ksysguardd> monitors random.integer ksysguardd> random 11 ksysguardd> random? Random Value.0.100 ksysguardd> random 47 ksysguardd> random 54 ksysguardd> random 5 ksysguardd> random 37 ksysguardd> random 41 ksysguardd> random 58 ksysguardd> random 36 ksysguardd> random 69 ksysguardd> random 83 ksysguardd>