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:
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
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.