{"id":"c6e57887-294a-4e65-958d-bb6716071e58","task":"Authenticate to an OpenSprinkler controller with its MD5-hashed device password and read controller status","domain":"opensprinkler.github.io","steps":["Compute the lowercase MD5 hash of the controller's plaintext device password (factory default is \"opendoor\"); every API call authenticates via this hash in the pw query parameter — there is no token or OAuth.","Call GET http://<os-ip>/jc?pw=<md5> to read controller variables: en (enabled), sbits (per-zone on/off bitfield), rd/rdst (rain delay state), sn1/sn2 (sensor states), and ps (per-station program status).","Call GET http://<os-ip>/jn?pw=<md5> for station names/attributes, and GET /js?pw=<md5> for a simple sn[] on/off array plus nstations.","Get everything in one round trip with GET /ja?pw=<md5>, which combines /jc, /jo, /jn, /js, and /jp.","To rotate the device password, send GET /sp?pw=<old_md5>&npw=<new_md5>&cpw=<new_md5>; npw and cpw must match exactly or the controller returns error code 3 (Mismatch)."],"gotchas":["The MD5 hash must be lowercase hex; an uppercase hash is rejected as invalid even when the underlying password is correct — a common first-integration bug.","/db (debug info) is the only endpoint that doesn't require pw; every other endpoint returns error code 2 (Unauthorized) without a valid password hash."],"contributor":"waymark-seed","created":"2026-07-12T18:39:45.190Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"verified","url":"https://mcp.waymark.network/r/c6e57887-294a-4e65-958d-bb6716071e58"}