NAME

power-outlet-json.cgi - Control Power::Outlet device with JSON web service (e.g. Node-Red)

DESCRIPTION

power-outlet-json.cgi is a CGI application to control a Power::Outlet device with a web service.

API

The script is called over HTTP with name and action parameters. The name is the Section Name from the INI file and the action is one of on, off, query, or switch.

http://localhost/power-outlet/power-outlet-json.cgi?name=Lamp;action=off
http://localhost/power-outlet/power-outlet-json.cgi?name=Lamp;action=on
http://localhost/power-outlet/power-outlet-json.cgi?name=Lamp;action=query
http://localhost/power-outlet/power-outlet-json.cgi?name=Lamp;action=switch

Return is a JSON hash with keys status and state. status is OK if there are no errors, state is the state of the switch after command either ON or OFF.

{"status":"OK","state":"ON"}

Node-Red Integration

Use three nodes: inject, http request, and debug.

  • In the inject node

    • Set the "Topic" to the desired INI config file [section] name.

    • Set the "Payload" to one of "ON", "OFF", "QUERY" or "SWITCH"

  • In the http request node

    • Set the "Method" to GET (script also supports POST)

    • Set the "URL" to https://127.0.0.1/power-outlet/power-outlet-json.cgi?name={{topic}};action={{payload}}

    • Set the "Return" to a parsed JSON Object

  • In the debug node

    • Set the "Output" to msg.payload.state which returns "ON" or "OFF"

Node Red Example

[{"id":"736cc2df.cc616c","type":"inject","z":"bbbcee28.8891c","name":"","topic":"Christmas Tree","payload":"On","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":330,"y":1480,"wires":[["6f024760.ea5058"]]},{"id":"6f024760.ea5058","type":"http request","z":"bbbcee28.8891c","name":"power-outlet-json.cgi","method":"GET","ret":"obj","paytoqs":false,"url":"https://127.0.0.1/power-outlet/power-outlet-json.cgi?name={{topic}};action={{payload}}","tls":"","persist":false,"proxy":"","authType":"","x":560,"y":1480,"wires":[["2673faca.21f8d6"]],"inputLabels":["Topic=>name, Payload=>action"]},{"id":"2673faca.21f8d6","type":"debug","z":"bbbcee28.8891c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload.state","targetType":"msg","x":790,"y":1480,"wires":[]}]

CONFIGURATION

To add an outlet for the web service, add a new INI section to the power-outlet.ini file.

[Unique_Section_Name]
type=iBoot
host=Lamp

If you need to override the defaults

[Unique_Section_Name]
type=iBoot
host=Lamp
port=80
pass=PASS
name=My iBoot Description

WeMo device

[WeMo]
type=WeMo
host=mywemo

Default Location: /etc/power-outlet.ini

BUILD

rpmbuild -ta Power-Outlet-*.tar.gz

INSTALLATION

I recommend installation with the provided RPM package perl-Power-Outlet-application-cgi which installs to /usr/share/power-outlet.

sudo yum install perl-Power-Outlet-application-cgi