I previously had these smartplugs flashed with EspEasy (I hate cloud enabled devices) I will post something about flashing these and others. Maybe … because you can find a lot of information on the internet. But i’ve used several tools, and made tools for this process. ( Raspberry Zero mobile tool and 3D printed PCB holder for example)
Well ..
I was using these devices in our previous home using curl commands and on a main wifi network. So i have to change the SSID and migrate from Espeasy to ESPhome so i can use these devices with Home Assistant.
Step 1 : Start in Access Point mode and migrate to my current Wifi Iot network.
Using my phone i made the necessary changes.
Goto HomeAssistant and ESPhome (you need to install this first via HACS) Press the green + Add device and give it a name
Next select the device type (Sonoff S20 in this case)
Press install and select manual download
Above will compile a binary for the Sonoff device.
Go back to your Sonoff interface and go to the tools tab. We can reflash the device without connecting this with wires to our computer.
Press Firmware load and select your downloaded binary
Back in HA it should say “online”
Pressing edit gives us a config page. Nothing works .. yet We need to add some yaml entries. ( use https://esphome.io/devices/sonoff_s20.html )
binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode:
input: true
pullup: true
inverted: true
name: "Sonoff S20 Button"
- platform: status
name: "Sonoff S20 Status"
- platform: gpio
pin: GPIO2
name: "Sonoff S20 Sensor"
switch:
- platform: gpio
name: "Sonoff S20 Relay"
pin: GPIO12
output:
# Register the green LED as a dimmable output ....
- platform: esp8266_pwm
id: s20_green_led
pin:
number: GPIO13
inverted: true
light:
# ... and then make a light out of it.
- platform: monochromatic
name: "Sonoff S20 Green LED"
output: s20_green_led
BeforeAfter
Now press install
Now we can use wirelessly to upload the config
After this the device can be discovered by HA
Click add, and use the encryption key found in the yaml config to add
For a while i’ve been using the wireless shelly button for all kinds of notifications. Most of the time i like to use it as a kind of alarm/need-help-now button.
The f*ckin’ awesome button i’m talking about (pictured above) is a small (45x45mm 16mm height) button, which can connect to your wifi and send MQTT messages. It even has a strap thingy to attach it to your keychain,
Four types of messages:
short press
2x short presses
3x short presses
and long press
When using pushover, you can push alarm and messages to your android (even overriding mute/silent if you configure it that way!)
Configuring the button: https://www.shelly.cloud/documents/user_guide/shelly_button_1.pdf
I’m using domoticz as a 433->mqtt bridge, and some virtual devices i can toggle with curl (bash scripts)
I needed to make a custom 433 door sensor in Home Assistant with toggles to OFF after a few seconds. (There is NO off signal in this cheap sensor i’m using)
I’m changing the payload complete, to have a payload which matches the device class for door: (state with on/off) It was nvalue = 0/1
(Whenever the IDX changes, I only have to update this Nodered part) HA won’t notice the change.
var nvalue = msg.payload.nvalue;
msg.payload = {};
if(nvalue == 1)
{
msg.payload.state = "ON";
return msg;
}
AND after 5 seconds
msg.payload = {};
msg.payload.state = "OFF";
return msg;
Last year i was playing with this radar module also, but today i made a version with MQTT and a linux client. (There is a project on the internet which uses a HC-SR04, and a arduino connected to the Laptop. This setup is more sensitive and no need for a usb thinghy.)
HC-SR04 module (ultrasound)
Last years version, using a micro transformer and a ESP-12
When using MQTT i can integrate this in HomeAssistant, Domoticz, NodeRed and more. But i’ve written a python script which runs on my Laptop. For example i can: Kill vlc, change to my work desktop, stop sound output and lock the screen. (everything you can script)
I wanted to have a “mobile” version of the sensor so i can place it anywhere. (Frontdoor, gardengate, candydrawer 🙂 )
These modules are very cheap, but do their job well!
I’ve used a Wroom ESP32 and a BattBorg together with the module, that’s it.
Below shows the speed of detection, and sending though the network
Python script which does a lock-screen using XDOTOOL
from paho.mqtt import client as mqtt_client
import subprocess
import time
broker = 'MQTT-SERVER'
port = 1883
topic = "radar/state"
client_id = "radarclient"
def connect_mqtt() -> mqtt_client:
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected to MQTT Broker!")
else:
print("Failed to connect, return code %d\n", rc)
client = mqtt_client.Client(client_id)
client.on_connect = on_connect
client.connect(broker, port)
return client
def subscribe(client: mqtt_client):
def on_message(client, userdata, msg):
state = msg.payload.decode()
print (state)
if state == "1":
subprocess.Popen(["xdotool","key","Super_L+l"])
time.sleep(30)
client.subscribe(topic)
client.on_message = on_message
def run():
client = connect_mqtt()
subscribe(client)
client.loop_forever()
if __name__ == '__main__':
run()
change subprocess.Popen([“xdotool”,”key”,”Super_L+l”]) into subprocess.Popen([“switchdesktop”]) to run a script named switchdesktop
#!/bin/bash
# This is the switchdesktop script, it goes to the next screen using winows-page-down combo
xdotool key "Super_L+Page_Down"
Todo:
3D print a case Make a version which becomes a Access Point. Then make another arduino setup which controls my Nikon. So it can act like a wildcam (offline)
Something like below, using a optocoupler ( i still got some leftovers from my doorbell to gpio-pin project.)
Getting 433Mhz dimmers working under HA is a pain in the *ss.
After moving my Rfxcom from domoticz to HA, there was still no good way to add dimmers. I’ve tried adding switches and migrating them to lights, but it didn’t work.
So i took another approach.
Domoticz has a good 433 to mqtt plugin. So i used NodeRed to talk to HA and Domoticz via MQTT.
Composite video print designed and ordered from china.
Changed some vlans in my network. I need to think of a way to extract/migrate domoticz 433 info into a new instance. For example .. i’ve got some instances in my device list which are only being controlled by domoticz, there is no remote i can reuse.
Tried welding again, because i could not do it for a long time, i noticed i have to practice again after 2 years. (I’ve got a dedicated power outlet outside now .. 🙂
Last 8mm films work done. (Converted all of my dad’s old 8mm reels)
Designed a hidden remote cabinet, holding remotes out of sight for the occasions when automation doesn’t work.
Designed also a wooden wall with hidden cabinets in our bedroom.
I’ve had this Shelly sensor for a long time. But never posted anything about this. Last weekend we had a -situation- in our kitchen, so what better time to test this device again!
This little disc shaped device has three metal points on its bottom side, those are the flood (water) sensors. It stay’s in sleep mode when all’s good. It does several things when it detects water.
Emits a alarm signal
Wakes-up wifi
Sends a MQTT message (when not connected to the cloud like i have) MQTT is a alarm message AND it wil send the temperature of the device!
After a while (when dry) goes back to sleep
There are connection point on the print you can use .. happy hacking!
My node-red configuration
Above is the part where the mqtt messages gets processed by Node-Red Sending it to PushOver and my little MqttLcdNotifier
Above is the MqttLcdNotifer .. there are several parts to this
Top line is from shelly flood and other notifications
Text input puts text from the NR GUI on my TV and the LCDDisplay
same parts are being used by my 3D printer when the print tool is getting TO hot, or printing is finished
Trigger at work WAS a notification for work .. nonfunc
mqttlcd-button is the mqtt message send from the display (the one that i was pushing) to stop the beeping and clears the display
Bash notify, is as previously posted a flow which i can control from my linux machines notify “compiling complete” for example. This is also being broadcast from my livingroom using speakers. (See separate post about this)
Wellll, put this in place 2 years ago, never looked at it again .. still works
I had a crash recently on one of my raspberry-pi’s .. SDcard failure, they are not made for a lot of write actions. In the past i’ve changed some images to read only and with a r/w overlay. Also tmp filesystems in memory .. all not ideal.
So i’ve started to make every RPi ssd bootable.
I’ve got several ssd already from other projects. Sata to USB adaptors are cheap, only a few euro’s.
Steps to take:
Download Raspberry Pi Imager tool
Choose OS > Misc Utility Images > Bootloader > USB Boot
Select storage and write to a temporary sd-card (Not needed any more after flashing for normal operations)
Boot USB with this Micro-SDcard .. i didn’t have a screen connected .. So i just waited a few minutes
While i was waiting i wrote a OS image to the SSD using the same imager tool
Choose OS > select sata/ssd drive
Change options (cog), enable ssh, choose hostname and set password
Write to drive
Remove sdcard from RPi attach ssd/sata and boot
My 3D printed sdcard case, luckily there was still one in there (32GB kindda big, but it was only for temporary use .. 16GB was broken ..
So .. without attaching a screen or keyboard, just a network cable. I have a running OS on a RPi from SSD
Having a lot of devices and running a Lab wil use a lot of energy. Now with the energy crisis in Europe, i had to take a closer look at whats using power in my house.
I notished some weird usage patterns while measuring.
I’m using a few shelly power plugs, to measure devices and powerstrips.
With these devices you can control devices connected to it. On/Off/Timer etcetera. It wil measure the power usage in watts, and it even got a temperature sensor. I like the fact that it perfectly integrates into your home automation using an extensive API. curl commands to controll, and even MQTT messaging. Intergrating in Home Assistant is a breeze.
So i was monitoring a bunch of stuff using Nodered/Grafana/Homeassistant and saw some recurring usage. But being always late to check things, i made use of my ledserver i’ve build a long time ago.
This ledserver consists of a Raspberry Pi Zero, with a led string and a API written in python.
Below is autostarted on the Raspberry
( I made this ledserver for work, it showed the status of servers and services. Beside that every colleage had a range which he could use for his own scripts. I made some little bash script templates to have led funtions standard in your bash profile.
#!/usr/bin/python
# apt-get install python-flask
#
import Adafruit_WS2801
import Adafruit_GPIO.SPI as SPI
import struct
from flask import Flask, render_template, request
app = Flask(__name__)
PIXEL_COUNT = 32
SPI_PORT = 0
SPI_DEVICE = 0
pixels = Adafruit_WS2801.WS2801Pixels(PIXEL_COUNT, spi=SPI.SpiDev(SPI_PORT, SPI_DEVICE))
pixels.clear()
pixels.show()
@app.route("/led/<deviceName>/<color>")
def action(deviceName, color):
if deviceName == 'reset':
print ("reset")
pixels.clear()
print (deviceName)
led = int(deviceName)
s = color
r = int(s[ :2], 16)
b = int(s[2:4], 16)
g = int(s[4: ], 16)
pixels.set_pixel_rgb(led, r,g,b)
pixels.show()
templateData = {
'rled' : r,
'bled' : b,
'gled' : g,
'deviceName' : deviceName,
}
return render_template('index.html', **templateData)
@app.route("/control/<controlcommand>")
def actioncommand(controlcommand):
if controlcommand == 'clear':
print("clear")
pixels.clear()
pixels.show()
templateData = {
'controlcommand' : controlcommand,
}
return render_template('index.html', **templateData)
@app.route("/range/<start>/<stop>/<color>")
def rangecommand(start,stop,color):
s = color
r = int(s[ :2], 16)
b = int(s[2:4], 16)
g = int(s[4: ], 16)
startled = int(start)
stopled = int(stop)
while (startled < stopled):
pixels.set_pixel_rgb(startled, r,g,b)
startled=startled + 1
pixels.show()
templateData = {
'rangecommand' : rangecommand,
}
return render_template('index.html', **templateData)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8080, debug=True)
Now you can control the leds with a simple curl command:
So today i made a little script to show power usage.
I’m reading the current power usage from a LS120 Youless
Youless LS120 device, which you can connect to your P1 connector.
With below bash script i’m reading the webinterface and update the ledstring. I was using this ledserver for general notification usage. Below a 2 minute hack ..