Summary

Cloud-connected garden irrigation hub. Controls irrigation valves and lighting via REST API over HTTPS. Authentication via OAuth2 access token (grant_type=password). No local RS-232 or UDP control mentioned.

Transport

protocols:
  - https
addressing:
  base_url: https://greeniq.net
  scheme: https
auth:
  type: oauth2
  method: bearer_token
  token_endpoint: https://greeniq.net/oauth2/access_token
  grant_type: password
  token_type: Bearer
# port: UNRESOLVED: HTTP port not stated in source (default 443 for https implied but not declared)

Traits

- routable   # valve and light port routing commands present
- queryable  # state query endpoints present

Actions

- id: get_access_token
  label: Get OAuth2 Access Token
  kind: action
  command: "POST https://greeniq.net/oauth2/access_token"
  params:
    - name: username
      type: string
      description: GreenIQ account username
    - name: password
      type: string
      description: GreenIQ account password
    - name: client_id
      type: string
      description: OAuth2 client ID
    - name: client_secret
      type: string
      description: OAuth2 client secret
    - name: grant_type
      type: string
      enum: [password]
  note: Returns access_token, expires_in, scope, refresh_token, token_type

- id: get_valves_state_and_config
  label: Get Valves State and Config
  kind: query
  command: "POST https://greeniq.net/php/api/get_valves_state_and_config.php"
  params:
    - name: access_token
      type: string
      description: OAuth2 access token

- id: set_valves_config
  label: Set Valves Config
  kind: action
  command: "POST https://greeniq.net/php/api/set_valves_config.php"
  params:
    - name: access_token
      type: string
      description: OAuth2 access token
    - name: data
      type: string
      description: JSON string with master and ports array (configuration: true/false/"Auto", number, name)

- id: get_config
  label: Get Hub Configuration
  kind: query
  command: "GET https://greeniq.net/php/api/get_config.php"
  params:
    - name: access_token
      type: string
      description: OAuth2 access token
  note: Returns status + data XML string (full hub config)

- id: set_config
  label: Set Hub Configuration
  kind: action
  command: "GET https://greeniq.net/php/api/get_config.php"
  params:
    - name: access_token
      type: string
      description: OAuth2 access token
    - name: data
      type: string
      description: Quoted XML string with hub configuration
  note: Endpoint name in source is get_config.php; second variant takes a data parameter and writes config. Per source, this is the write-config endpoint.

- id: get_hub_status
  label: Get Hub Status
  kind: query
  command: "GET https://greeniq.net/php/api/get_hub_status.php"
  params:
    - name: access_token
      type: string
      description: OAuth2 access token

- id: get_light_state_and_config
  label: Get Light State and Config
  kind: query
  command: "GET https://greeniq.net/php/api/get_light_state_and_config.php"
  params:
    - name: access_token
      type: string
      description: OAuth2 access token

- id: set_light_config
  label: Set Light Config
  kind: action
  command: "POST https://greeniq.net/php/api/set_light_config.php"
  params:
    - name: access_token
      type: string
    - name: data
      type: string
      description: JSON string with master and ports array (configuration: true/false/"Auto"/"On"/"Off", number, name)

- id: get_sensors_reading
  label: Get Sensors Reading
  kind: query
  command: "GET https://greeniq.net/php/api/get_sensors_reading.php"
  params:
    - name: access_token
      type: string
  note: documented but not implemented per source; returns {sensor, value} where sensor is one of flowerpower/koubachi/netatmo/flowmeter/adc

- id: get_savings
  label: Get Water Savings
  kind: query
  command: "GET https://greeniq.net/php/api/get_savings.php"
  params:
    - name: access_token
      type: string
    - name: timeperiod
      type: string
      enum: [day, week, month]
  note: documented but not implemented per source; returns savings in liters

Feedbacks

- id: valves_state
  type: object
  description: |
    JSON object with master (bool) and ports array. Each port:
    number (int), name (string), configuration ("Auto"|"On"|"Off"),
    active (bool), progress (int 0-100), end_time (string or timestamp).

- id: light_state
  type: object
  description: |
    JSON object with master (bool) and ports array. Same port schema as valves.

- id: hub_config_xml
  type: string
  description: Full hub configuration as XML document.

- id: hub_status
  type: object
  description: |
    JSON with version (string), last_seen (unix epoch int), ssid (string), signal_strength (string).

- id: sensor_reading
  type: object
  description: |
    JSON with sensor (flowerpower|koubachi|netatmo|flowmeter|adc) and value (sensor-dependent string).

- id: water_savings
  type: object
  description: JSON with savings (string, liters).

- id: oauth2_token
  type: object
  description: |
    JSON with access_token (string), expires_in (int seconds), scope (string),
    refresh_token (string), token_type ("Bearer").

- id: api_status
  type: enum
  values: [true, false]
  description: Top-level status field returned by every endpoint.

Variables

# per-valve / per-light port configuration:
#   configuration: "Auto" | "On" | "Off" | true | false
#   master (overall enable)
# UNRESOLVED: no other discrete settable parameters documented in source

Events

# UNRESOLVED: no server-push or webhook endpoints described in source

Macros

# UNRESOLVED: no multi-step sequences described in source

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: no safety warnings or interlock procedures in source

Notes

OAuth2 grant_type=password flow at https://greeniq.net/oauth2/access_token requires username, password, client_id, client_secret. Token response includes access_token, expires_in (315360000 = 10 years), scope, refresh_token, token_type=Bearer. All subsequent API calls pass access_token as POST or GET parameter. Per-port configuration accepts boolean or "Auto"/"On"/"Off" string; progress tracks active irrigation/lighting 0-100%. hub_status.version reflects hub firmware; no compatibility range stated.

get_config.php is overloaded: GET without data reads full XML config; GET with data parameter writes config back (despite endpoint name). Treat as separate read/write actions per source.

get_sensors_reading and get_savings are documented but not implemented server-side; calling them returns success but empty/passthrough data.

Provenance

source_domains:
  - web.archive.org
source_urls:
  - https://web.archive.org/web/20160122010755/http://greeniq.co/api.htm
retrieved_at: 2026-07-21T22:56:11.677Z
last_checked_at: 2026-10-01T06:40:04.313Z

Verification Summary

verdict: verified
checked_at: 2026-10-01T06:40:04.313Z
matched_actions: 10
action_count: 10
confidence: medium
summary: "All 10 spec actions map to documented endpoints with matching methods and URLs; source documents exactly these 10 and the transport values are supported. (7 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "no power-on sequencing, no fault recovery procedures, no binary protocol documentation in source"
- "HTTP port not stated in source (default 443 for https implied but not declared)"
- "no other discrete settable parameters documented in source"
- "no server-push or webhook endpoints described in source"
- "no multi-step sequences described in source"
- "no safety warnings or interlock procedures in source"
- "sensor reading schema not implemented; water savings not implemented; no local serial control; no firmware version range stated; HTTP port not declared"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0