Best practice for controlling a proprietary 433 MHz protocol of a ceiling light? (hard- & software)

I recently bought a Neuhaus Lighting Group ceiling light (Paul Neuhaus PURE LINES LED Deckenleuchte aluminium Frame 110x30cm dimmbar (paul-neuhaus.de)) which comes with a 433,92 MHz remote control for brightness or temperature. I’d like to control this light with openHAB, which means openHAB has to emulate the remote / be able to send the commands of the remote.

From what I can see, the protocol being used is not Zigbee or anything similar (like with outher lamps from NLG), but a proprietary one. It also doesn’t seem to be some “dumb” protocol like IR, where the ceiling light just listens to whatever floats around (at least that’s how I interpret the part in the manual that mentions a sort of “pairing” process):

From my own experience with the integration of IR-devices into OH, the following steps would probably be necessary to solve that task:

  1. Set up an appropriate hardware / software stack
  2. Capture the signals of the remote
  3. Understand / reverse-engineer the signals / protocol (in my case only two for “brightness up” and “brightness down”, since that’s the only thing that’s needed)
  4. Pair the ceiling lamp to openHAB (once)
  5. Send the respective signals via openHAB (for “brightness up” and “brightness down”) when needed

With #5 I’m very familiar, but looking at a custom 433 MHz protocol I’m somewhat clueless on how to even approach the steps 1 - 4.

In this thread I read something about MiniCUL and FHEM, but I’m hesitant going down the FHEM-route but like to keep it simple.

And yes, I know that the fallback would be to open the remote and solder the Tx-signal pins of an ESP to the buttons of the remote. :wink:

Is there any experience on this out there?

I have lots of RF 433 mhz remote fobs around the house so I can control devices (even non RF devices)
I use the fob for example to open my blinds and the blinds are not RF they are wifi.
The main use is when the IR beam breaks at the front gate the RF doorbell rings.

This is what I use:

Note not all RF remotes will work. I had one that would not show up on the RF receiver.

Then you need to convert the RF signals so they can be transmitted. You use a program called bit bucket converter python script.

I did it years ago so it is all a bit hazy of the exact process.

Then I have a rule that says if the sonoff gets a RF then turn on something.
I just have in the rule a case statement as I have lots of things that can be run.
Here is example of the rule:

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: Portischbridge_Portischreceiveddata
    type: core.ItemStateUpdateTrigger
conditions: []
actions:
  - inputs: {}
    id: "2"
    configuration:
      type: application/javascript
      script: >
        
        var TOPIC = "";

        var PAYLOAD = "";


        var rfinput = items.getItem("Portischbridge_Portischreceiveddata").state;




        switch(rfinput) {

        /*  case "2F4481":
            //gate opener has pulsetime setting so turns off by itself
            var TOPIC = "cmnd/gateopener/POWER1";
        var PAYLOAD = "ON";

          console.log('Gate activated');
            result = actions.Exec.executeCommandLine(time.Duration.ofSeconds(5), "/usr/bin/mosquitto_pub","\-h","192.168.1.164","\-t","" + TOPIC,"\-m","" + PAYLOAD);
            break; */

        // I used else if as it seemed to work faster than all if statements
          case '53D80A':
            var TOPIC = "jedwood/raw/frontdoor-sensor";
        var PAYLOAD = "ON";
          console.log('Front door opened');
            break;
          case '53D80E':
            var TOPIC = "jedwood/raw/frontdoor-sensor";
        var PAYLOAD = "OFF";
          console.log('Front door closed');
            break;
            
          case '31E70A':
            var TOPIC = "jedwood/raw/laundrydoor-sensor";
        var PAYLOAD = "ON";
          console.log('Laundry door opened');
            break;
          case '31E70E':
            var TOPIC = "jedwood/raw/laundrydoor-sensor";
        var PAYLOAD = "OFF";
          console.log('Laundry door closed');
            break;
            
            
          case '135E0A':
            var TOPIC = "jedwood/raw/window-west";
        var PAYLOAD = "ON";
          console.log('Window west opened');
            break;
            case '135E0E':
            var TOPIC = "jedwood/raw/window-west";
        var PAYLOAD = "OFF";
          console.log('Window west closed');
            break;
            
            case '136C0A':
            var TOPIC = "jedwood/raw/middledoor-sensor";
        var PAYLOAD = "ON";
          console.log('Door bedroom Greg opened');
            break;
            case '136C0E':
            var TOPIC = "jedwood/raw/middledoor-sensor";
        var PAYLOAD = "OFF";
          console.log('Door bedroom Greg closed');
            break;
            
          case '13200A':
            var TOPIC = "jedwood/raw/window-laundry";
        var PAYLOAD = "ON";
            console.log('Window laundry opened');
            break;
          case '13200E':
            var TOPIC = "jedwood/raw/window-laundry";
          var PAYLOAD = "OFF";
                console.log('Window laundry closed');
            break;
            
            
          case '13220A':
            var TOPIC = "jedwood/raw/window-east";
        var PAYLOAD = "ON";
          console.log('Window east opened');
            break;
          case '13220E':
            var TOPIC = "jedwood/raw/window-east";
        var PAYLOAD = "OFF";
          console.log('Window east closed');
            break;

               
        }


        //If not blank then send the command

        if (TOPIC) {

        result = actions.Exec.executeCommandLine(time.Duration.ofSeconds(5), "/usr/bin/mosquitto_pub","\-h","192.168.1.164","\-t","" + TOPIC,"\-m","" + PAYLOAD);

        //console.log('The script ran the command '  + TOPIC);

        }


        //console.log('The script ran from bedroom RF bridge ' + rfinput + TOPIC);
    type: script.ScriptAction

You have all the skills to be able to do this with TASMOTA
Its the cheaper option.

This is another option to just buy a device that works and install program on PI to control that has a webpage to easily configure.

Either way you will need to.

Pair the remote.
learn all the button presses and map each button to individual items.
I someone is going to use the remote Each item is a momentary item so you will need to expire it.
Use these items to update real items to keep the state the same in openHAB and on device.

You only need to create one thing to control and all 433 items just use rules to send different commands to it.

However you probably already know all this.

I did it exactly as the previous speakers recommended. → Any Hardware supporting Tasmota (ESP f.e.)

Created Switches (not linked) with Metadata:
See here for first Brainstorm: [Blockly] RF-Switches Example/Solution

Here some simple Screens:


UID: mqtt:topic:192_168_5_90
label: MQTT LilyGO T-Internet-POE 90
thingTypeUID: mqtt:topic
configuration:
  payloadNotAvailable: Offline
  availabilityTopic: T-Internet-POE-90/tele/LWT
  payloadAvailable: Online
bridgeUID: mqtt:broker:926d131b5b
channels:
  - id: 192_168_5_90_RF
    channelTypeUID: mqtt:string
    label: Radio RXTX
    description: ""
    configuration:
      commandTopic: T-Internet-POE-90/cmnd/rfsend
      stateTopic: T-Internet-POE-90/tele/RESULT
      transformationPattern: REGEX:.*RfReceived..(.*)}

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.