This post describes trying to control electric roller blinds made by Jysk using a simple RF transmitter and Raspberry Pi. It is just some quick notes, because I don’t have time to describe it in detail.
JYSK HUGLO: https://jysk.no/gardiner/rullegardiner/blackout/rullegardin-huglo-142×190-gra-elektrisk
There are some online references on how to get it to work with Homey (I think), but they didn’t give details on the RF signal.
The blinds use a simple on-off-keying protocol at 433 MHz. It is not compatible with common Arduino libraries that can receive such signals, like rc-switch, IRRemote (other libraries were tried, but I unfortunately didn’t ). It is controlled with a 15-channel battery operated remote control, with buttons for Up, Stop and Down.
The signal was captured using an RTL-SDR dongle and Universal Radio Hacker (https://github.com/jopohl/urh).
The signal for up or down is repeated 12 times over almost a second, but the last 6 pulses have a slightly different code.
Each transmission packet lasts about 57.8 ms including a pause between packets. The picture above shows the demodulated view. The packet can be described as a series of 350 μs intervals. Everything is aligned to 350 μs. One pulse highlighted below.
One raw RF data file here; Sorry – I can’t upload this in wordpress.
- ch2 up
- ch2 stop
- ch2 down
- ch1 up
- ch1 stop
- ch1 down
- other unknown
The signals are encoded, but for the purpose of reproduction, it’s fine to set each 350 μs block as one bit, receiving=1 and off=0. Then the signals for channel 1 are:
up_command=”fffc349b6d36d369369269a49249a49a498″ stop_command=”fffc349b6d36d369369269a49249a69a698″ down_command=”fffc349b6d36d369369269a49249a4da4d8″ |
This includes a sync pulse at the start of the signal.
The can be sent using a Raspberry Pi (and an RF transmitter module) using the pigpio library. The following python script is custom made only for my purposes, but the make_wave
and send_wave
functions could be useful for someone trying to do the same. Control code: https://github.com/famake3/controllers/blob/master/mqtt-pi-node/vindu.py#L38. The code uses pigpio in order to better control the timing of the output. pigpio handles GPIO in its own daemon process.
def make_wave(self, pi, rf_pin, rf_pulse_time, hex_string):
bin_string = bin(int(hex_string, 16))[2:].zfill(len(hex_string)*4)
waves = []
pin_mask = 1<<rf_pin
for bit in bin_string:
wave = []
# Set the pin high or low depending on the bit value
wave = [
pigpio.pulse(
pin_mask if bit == '1' else 0,
pin_mask if bit == '0' else 0,
rf_pulse_time*1e6
)
]
waves.extend(wave)
# Always return to zero
waves.append(pigpio.pulse(0, pin_mask, rf_pulse_time*1e6))
pi.wave_add_generic(waves)
return pi.wave_create()
def send_wave(self, wave_id):
#print("SENDING WAVE", wave_id)
for _ in range(self.num_repeat_packets):
self.pi.wave_send_once(wave_id)
time.sleep(self.packet_unit_time)
To send, wire up a transmitter module to a pin on Raspberry Pi.