openhab / openhab1-addons

Add-ons for openHAB 1.x
Eclipse Public License 2.0
3.43k stars 1.69k forks source link

RFXCOM Blinds1.DC106 ID with 3 bytes + 1 nibble (4 bit/half byte) #4151

Open zeliant opened 8 years ago

zeliant commented 8 years ago

I have a RFXCOM rfxtrx433e and I'm trying to use the rfxcom binding to control my Dooya curtains motor.

I managed to pair the rfxcom with the motor using rfxmgr program by following the instructions in the manual. I could execute open/close/stop commands using the rfxmgr.

The next step is to integrate the it into openhab but I hit a roadblock because it seems the binding is expecting 3 bytes ID for the RFXCOM Blinds1 packet. In rfxmgr I was using 3 and half byte ID or 3 bytes + 1 nibble to control the motor.

The ID i used to control the motor in rfxmgr: 01 02 03 1 rfxcom

What rfxcom binding is transmitting: Transmitting data: 09 19 06 11 01 02 03 01 00 00 09 = default 19 = blinds1 packet type 06 = T6, DC106 subtype 11 = sequence number 01 = ID1 02 = ID2 03 = ID3 01 = unit ID 00 = command code 00 = signal level

What i need rfxcom binding to transmit is: Transmitting data: 09 19 06 11 01 02 03 1 01 00 00 09 = default 19 = blinds1 packet type 06 = T6, DC106 subtype 11 = sequence number 01 = ID1 02 = ID2 03 = ID3 1 = ID4 (4 bit) 01 = unit ID 00 = command code 00 = signal level

I was a java programmer but I not been coding for many years now. Correct me if i'm wrong.

I checked the RFXComBlinds1Message.java source code and seems to me that the codes doesn't cater for ID with id1(8bit) + id2(8bit) + id3(8bit) + id4(4bit).

Any suggestion on what i should do to send out 28bits of data as the ID using the rfxcom binding in order for me to control my dooya curtain motor using openhab? I can code but will need some time to get back my coding skills.

This is my first post and thank you all very much for creating such a good home automation software. I just switched from vera not long ago and I really like this project. Will contribute as much as I can when I have time.

ivanfmartinez commented 8 years ago

Try using the unitcode 17 on openhab binding, this will send (00010001) in the message which corresponds to the ID4(1) and unitID (1)

If it works please add this information and sample for Blinds1 to https://github.com/openhab/openhab/wiki/RFXCOM-Binding

zeliant commented 8 years ago

@ivanfmartinez thank you so much for your suggestion. it works!

i will update the wiki this weekend.

steve-bate commented 8 years ago

@zeliant. Have you had a chance to update the wiki? If so, thank you, and can we close the issue?

Wqty commented 8 years ago

Hi,

Same problem here - RFXCOM with Blinds1 / DC106. Solution to combine ID4 with Unit ID works only with one digit unit IDs. When unit ID > 10 nothing happens...

Any solution?

zeliant commented 8 years ago

@steve-bate been busy with work recently. Will find time to update the wiki

@Wqty it should still work for unit ID 10. what is your ID4 number?

assuming you put your ID4 as 1, and unit ID as 10.

it should send 0001 + 1010 = 00011010 = 26 (decimal)

try sending with your_address.26

Wqty commented 8 years ago

@zeliant Thank you! That was so obvious! My mistake was to use binary 0001 and 00001010 - so after conversion that gave me 266 (decimal).

Now - it works also for units with ID > 9. Thanks again!

zeliant commented 8 years ago

@Wqty you're welcome.

just curious, you installed more than 10 curtains/blinds in your house? that you need to use ID > 9?

Wqty commented 8 years ago

@zeliant That's right. I've got 14 of them. Blind motors are equipped with 433Mhz radio. What is more interesting: they are not officially supported by RFXCOM. But i was able to clone each channel from one of my blinds remotes to rfxtrx433e.

Once again - thanks!

spalkoski commented 8 years ago

Hi all,

I was able to get the ID from my Dooya motor and control it through RFXmngr however I am not able to get OH2 rfxcom binding to work though.

28bit binary read from Audacity= 10110110 00000111 01011011 1011 Translated to hex for RFXmngr (worked to control motor) = B6 07 5B B using unit 1 Translated to decimal for OpenHab/RFXcom binding (not working) = 190870971.1

I assume the PaperUI is setting the right packet type/subtype in the items definition (I select Blinds1 and T6 list for the Dooya motor in PaperUI)

Perhaps the issue is something else entirely.... My log has "unknown" for the Raw data output. Tried few different ways and never seem to get raw data output. Looking at binding code I believe "unknown" is a result of the msg being NULL

Log:

19:19:52.769 [DEBUG] [binding.rfxcom.handler.RFXComHandler] - Received channel: rfxcom:blinds1:581035e2:shutter, command: DOWN
19:19:52.771 [DEBUG] [g.rfxcom.handler.RFXComBridgeHandler] - Transmitting message 'Raw data = unknown, Packet type = BLINDS1, Seq number = 3, Sub type = T6, Device Id = 190870971.1, Command = CLOSE, Signal level = 0, Battery level = 0'
19:19:53.498 [DEBUG] [g.rfxcom.handler.RFXComBridgeHandler] - Message received: Raw data = 0402010300, Packet type = TRANSMITTER_MESSAGE, Seq number = 3, Sub type = RESPONSE, Response = ACK
19:19:53.500 [DEBUG] [g.rfxcom.handler.RFXComBridgeHandler] - Transmitter response received: Raw data = 0402010300, Packet type = TRANSMITTER_MESSAGE, Seq number = 3, Sub type = RESPONSE, Response = ACK
19:19:53.502 [DEBUG] [g.rfxcom.handler.RFXComBridgeHandler] - Command successfully transmitted, 'ACK' received
19:19:53.504 [INFO ] [smarthome.event.ItemCommandEvent    ] - Item 'rfxcom_blinds1_581035e2_shutter' received command DOWN

Hopefully someone can shed some light on my troubles.

Thanks.

9037568 commented 8 years ago

The rfxcom binding @palkie is referencing is the OH2 binding.

The original thread here is about the OH1 binding. Please open a new thread in the community forum to discuss this new issue.

spalkoski commented 8 years ago

I do not think it is an OH2 specific issue. I think it is with my motor's ID4 being a large value combined with unitcode 1 the value was too large for the work around above (1011+0001 = 177 in my case) .

I changed underlying code for the binding to handle T6 such that it does the bit operation without the workaround....

        if (subType.toByte() == 6) {
            data[4] = (byte) ((sensorId >>> 20) & 0xFF);
            data[5] = (byte) ((sensorId >>> 12) & 0xFF);
            data[6] = (byte) ((sensorId >>> 4) & 0xFF);
            data[7] = (byte) (((sensorId & 0x0F) << 4) | (unitCode & 0x0F));
        } else {
            data[4] = (byte) ((sensorId >>> 16) & 0xFF);
            data[5] = (byte) ((sensorId >>> 8) & 0xFF);
            data[6] = (byte) (sensorId & 0xFF);
            data[7] = unitCode;
        }

Perhaps this type of fix can be worked into the base code (if relevant... I am not familiar with differences in subtypes).

av01d commented 6 years ago

Does anybody know what the command codes are for DS106? What is the two-digit code for open, close, stop? Update: figured it out myself: 00 = Up 01 = Down 02 = Stop