Home Home Automation EventGhost basic authentication in HTTP requests

EventGhost basic authentication in HTTP requests

More magic in EventGhost

I’m sharing this tip, as it took me way too long to find a simple solution online, and as most of my articles, as a reminder of how to do this again in the future. After increasing security on my NodeRED server and certifying the server, I had to learn how to authenticate the HTTP requests with username and password and how to deal with HTTP vs HTTPS requests.

EventGhost basic authentication in HTTP|HTTPS requests

I’m submitting my data to the NodeRED server, which is password protected and SSL certified. This means I have to now include the basic authentication (username, password) in my few requests. I have put together a few lines of codes that make it easy for you guys to use, and obvious to read.

HTTP

To send the request – use the Python Script action and use the code below:

//HTTP POST request
import requests

username = "yourusername"                   ## your HTTP username
password = "secretpasswored"                ## your HTTP password
url = "http://192.168.1.xxx:1880/path"     ## NodeRED server address
data = {"light":1}                          ## some JSON formatted data

resp = requests.post(url, data, auth=(username, password))

HTTPS

To send the request – use the Python Script action and use the code below:

import requests
import warnings

#comment out the below line to get the Python warnings back
warnings.filterwarnings("ignore")

#set your credentials data
url = "https://192.168.1.xxx:1880/path"
username = "your username"
password = "your passowrd"
data = {"light":1}

#request the data & print it (comment out print later)
resp = requests.post(url, data, auth=(username, password), verify=False)

The code is simple, but if you are using a laptop, consider DNS rather than the IP for the NodeRED server. If you want to know why or what can you do with it, imagine linking a request like this to a keyboard macro.  You can use this to trigger lights, events or send notifications to other devices.

EventGhost Global Variables

Because the details of my server have changed, I had to redo all my HTTP requests. I don’t want to do this each time something changes. I figured out that I can set the global variables in EventGhost on start. Let’s do this so should anything happen I can change the values in a single script.

On boot, I want EvenGhost to load the default values which will be used later on in each script. We can do this by placing a Python script with the sensitive details in AutoStart:

#request the data & print it (comment out print later)
credentials = requests.get(url, auth=(username, password), verify=False)
print credentials.content

data = json.loads(credentials.content)


#Get JSON data  python username = data['JSON key']['key'] ie
#AutoRemote ID is stored as {"AR": "someID" }
#HTTP URL is stored in {"HTTP" :{"server":{"request":"URL FOR REQUEST"}}}

pixel = data['AR']
http = data['HTTP']['server']['request']

#store as global variable "test"|"test2", value
setattr(eg.globals, "test", pixel)
setattr(eg.globals, "test2", http)

print "***Default values loaded***"

These values will be loaded when EventGhost starts and the same HTTP post from before will this time look like that:

import requests
#setting username and password "HTTP_username"|"HTTP_password"|"HTTP_ip" are
#the name of the global variable
username = getattr(eg.globals, "HTTP_username")
password = getattr(eg.globals, "HTTP_password")

#composing a correct URL for HTTP
path = "/sonoff/relay/"
url = getattr(eg.globals, "HTTP_ip") + path

#adding data
data = {"light":0}

#sending a HTTP POST
resp = requests.post(url, data, auth=(username, password))

This way, if your IP or credentials change you have to modify only a single file.

I hope this tip on how EventGhost basic authentication in HTTP requests works will cut the googling time for you. If I can’t find a simple and well-explained answer within 3 pages of google searches it deserves an article. Even if it’s going to be a short one.

Project Download

Download project files here. Bear in mind that Patreon supporters have early access to project files and videos.

PayPal

Nothing says "Thank you" better than keeping my coffee jar topped up!

Patreon

Support me on Patreon and get an early access to tutorial files and videos.

image/svg+xml

Bitcoin (BTC)

Use this QR to keep me caffeinated in style with crypto-currency

Smart Ideas with

Automate your space in with these ecosystems and integrate it with other automation services

Learn NodeRED

NodeRED for beginners: 1. Why do you need a NodeRED server?

0
To server or not to server? That's a very silly question!

Best Automation Projects

ESP8266 WIFI lights under $5

0
Your Sonoff device can't do this!

Free wireless doorbell (Amazon Dash button hack)

0
The most terrifying situation I can imagine* is missing a parcel

New Amazon Dash Buttons

0
You can teach new buttons old tricks!

ESP8266 ceiling light – demo

0
Testing the ESP8266 as a WIFI light controller

Try Tasker and Raspberry Pi for your home automation needs!

0
Raspberry Pi can help you with your Tasker profiles

Smart Home

Testing 9 external antennas with CC2531 ZigBee coordinator

0
I have tested the range and the link quality of 9 external antennas with CC2531!

I have infinite buttons thanks to Aqara Opple

0
Gaming on Switch meets IoT - can you play games on Aqara Opple? Apparently you can! This and more uses of the connected wall switch

Smart lights won’t save you money

0
It's pretty clear how much power a smart light draws when turned on, but have you ever wonder how much do you pay to have it connected 24/7?

Alexa Routines: Setting volume on all Echos at once

0
Setting volumes on all Amazon Echo devices at once doesn't have to be a chore!

If Edison made smart lights: OEEONE ZigBee lightbulb

0
OEEONE ZigBee lightbulb may look vintage, but packs the latest ZigBee protocol