def introspect
      inputs_h = Hash.new
      outputs_h = Hash.new
      
      #call all inputs introspect and merge values
      @inputs.each { |input|
        inputs_h.merge!(input.introspect) { |key, old, new| old.merge(new) }
      }
      #call all outputs introspect and merge values
      @outputs.each { |output|
        outputs_h.merge!(output.introspect) { |key, old, new| old.merge(new) }
      }
      
      res = Hash.new
      res["input"] = {"pin" => inputs_h}
      res["output"] = {"pin" => outputs_h}
      
      # component options
      opt = @options.dup
      opt.delete(:introspect)
      opt.delete(:debug)
      optmod = Hash.new
      opt.each_pair do |key,value|
        optmod[key.to_s] = value
      end
      res["component"] ={"options" => optmod}
      
      # component description
      res["component"]["description"] = @description
      res["component"]["category"]    = @category
      res["component"]["ttl"]         = @ttl
      return res
    end
def introspect
      inputs_h = Hash.new
      outputs_h = Hash.new
      
      #call all inputs introspect and merge values
      @inputs.each { |input|
        inputs_h.merge!(input.introspect) { |key, old, new| old.merge(new) }
      }
      #call all outputs introspect and merge values
      @outputs.each { |output|
        outputs_h.merge!(output.introspect) { |key, old, new| old.merge(new) }
      }
      
      res = Hash.new
      res["input"] = {"pin" => inputs_h}
      res["output"] = {"pin" => outputs_h}
      
      # component options
      opt = @options.dup
      opt.delete(:introspect)
      opt.delete(:debug)
      optmod = Hash.new
      opt.each_pair do |key,value|
        optmod[key.to_s] = value
      end
      res["component"] ={"options" => optmod}
      
      # component description
      res["component"]["description"] = @description
      res["component"]["category"]    = @category
      res["component"]["ttl"]         = @ttl
      return res
    end
Parse inputs and outputs to communicate with server