Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for sensor_cube.aqgl01 #190

Open
lopify opened this issue Jun 7, 2018 · 18 comments
Open

Add support for sensor_cube.aqgl01 #190

lopify opened this issue Jun 7, 2018 · 18 comments

Comments

@lopify
Copy link

lopify commented Jun 7, 2018

I realised that MiAqaraPlatform was finding my cube but not recognising it as the magic cube:

[2018-6-6 16:08:48] [MiAqaraPlatform] [DEBUG][Send]{"cmd":"read", "sid":"158d000231e6d3"}
[2018-6-6 16:08:48] [MiAqaraPlatform] [DEBUG][Revc]{"cmd":"read_ack","model":"sensor_cube.aqgl01","sid":"158d000231e6d3","short_id":60961,"data":"{"voltage":2905}"}

Turns out that my cube is the model "sensor_cube.aqgl01" so I added it to "parser/MagicSquareParser.js" in the following line:

MagicSquareParser.modelName = ['cube', 'sensor_cube', 'sensor_cube.aqgl01'];

Now it finds it, recognises it and configures it, great! :-),

The problem now is that I don't receive any event message from the gateway, when I move the cube it appears in the log of the YiHome App but I receive nothing, what can I do? Can you help me @YinHangCode ?

Thanks!

@Wormaap
Copy link

Wormaap commented Jun 10, 2018

Same trouble here with the Cube. The Mi Home app shows mine as sensor_cube.aqgl01, and it doesn't appear through Homebridge. Interesting thing, though, is that my MagicSquareParser.js doesn't even have the list you added this name to.

@Wormaap
Copy link

Wormaap commented Jun 25, 2018

Yesterday, I updated to 0.6.9 and the Cube didn't appear. Today, it's suddenly there.

@YinHangCode
Copy link
Owner

YinHangCode commented Jun 25, 2018

@Wormaap the interval of the find the new device is 30 minutes, or restart homebridge.

@Wormaap
Copy link

Wormaap commented Jun 25, 2018

Ahh, that makes sense. The switches that showed up in the Home app still aren't doing much, though, but that's probably just me not having them figured out yet. Thank you! :)

@halk1982
Copy link

Same problem here. Everything works fine on MI home app. After updating to 0.6.9 cube finally appears to Homekit but actions triggered (shake, flip, etc) are not delivered to Homekit. Any ideas?

@cgeist
Copy link

cgeist commented Jul 30, 2018

Same problem here: the buttons / virtual switches are correctly discovered but not showing any reaction at all. (see also #214)

@arachnetech
Copy link

My cube appears to be discovered, in that logging shows:

[2018-8-19 10:07:33] [MiAqaraPlatform] [DEBUG][Send]{"cmd":"read", "sid":"158d00026e9aaa"}
[2018-8-19 10:07:33] [MiAqaraPlatform] [DEBUG][Revc]{"cmd":"read_ack","model":"sensor_cube.aqgl01","sid":"158d00026e9aaa","short_id":59232,"data":"{\"voltage\":2955}"}

... and I now see 6 StatelessProgrammable switches in Homekit (although I didn't initially) for Flip90, Flip180, Move, TapTwice, ShakeAir and Rotate.

However, assigning actions to these switches does nothing. Should this version of the cube work?

Interestingly I also see Switches for Flip90, Flip180, Move, TapTwice and ShakeAir - and if I try changing the state of one of these in Homekit an error is logged - for example:

[2018-8-19 10:27:44] [MiAqaraPlatform] [DEBUG][Send]{"cmd":"write","model":"sensor_cube.aqgl01","sid":"158d00026e9aaa","data":{"status":"flip90", "key": "db2bfb84e295dc13fd18878efae1f22a"}}
[2018-8-19 10:27:44] [MiAqaraPlatform] [DEBUG][Revc]{"cmd":"write_ack","model":"sensor_cube.aqgl01","sid":"158d00026e9aaa","short_id":59232,"data":"{\"voltage\":2955}"}
  EventedHTTPServer [::ffff:192.168.10.172] Muting event '51.10' notification for this connection since it originated here. +9ms
[2018-8-19 10:27:44] [MiAqaraPlatform] [ERROR]SyntaxError: Unexpected string in JSON at position 96
[2018-8-19 10:27:44] [MiAqaraPlatform] [ERROR]SyntaxError: Unexpected string in JSON at position 96
    at JSON.parse (<anonymous>)
    at MagicSquareSwitchVirtualFlip90Parser.doSomething (/usr/lib/node_modules/homebridge-mi-aqara/parser/MagicSquareParser.js:234:27)
    at that.platform.sendWriteCommand.then.result (/usr/lib/node_modules/homebridge-mi-aqara/parser/SwitchVirtualBasePressParser.js:51:34)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
  EventedHTTPServer [::ffff:192.168.10.172] HTTP Response is finished +8ms
(node:10331) UnhandledPromiseRejectionWarning: Error: This callback function has already been called by someone else; it can only be called one time.
    at /usr/lib/node_modules/hap-nodejs/lib/util/once.js:12:13
    at MagicSquareSwitchVirtualFlip90Parser.callback2HB (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:197:17)
    at /usr/lib/node_modules/homebridge-mi-aqara/parser/SwitchVirtualBasePressParser.js:57:34
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
(node:10331) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 11)
  EventedHTTPServer [::ffff:192.168.10.172] HTTP request: /characteristics?id=51.10 +64ms
  HAPServer [CC:87:3D:E3:CE:30] HAP Request: GET /characteristics?id=51.10 +0ms
  Accessory [Homebridge] Getting value for Characteristic "On" +2ms
  Accessory [Homebridge] Got Characteristic "On" value: true +0ms
  EventedHTTPServer [::ffff:192.168.10.172] HTTP Response is finished +1ms

@MaFlax
Copy link

MaFlax commented Sep 2, 2018

Today I updated my gateway firmware to 1.4.1_157.0143 using the Mi Home App (on mainland china server) and now the cube is working fine. My plugin version is 0.6.9 and the buttons/switches are discovered in Homekit, assining actions also works. So you have to update your Gateway and the issue should be solved. Also restart your homebridge to refresh the accessories. So I guess it was a faulty gateway firmware.

@cgeist
Copy link

cgeist commented Sep 2, 2018

Yes, some functionality was restored by the firmware update! Rotate, however, as well as all stateful switches still appear to be broken.

@meesjan
Copy link

meesjan commented Sep 13, 2018

I have installed version 0.7.1. In the release notes (of 0.7.0) is stated that the MagicSquare Rotate StatelessProgrammableSwitch should be working now. I have tested this, however the tile in the Home app does not show any movement when rotating the cube. Neither the action is performed.

So in my opinion the rotate function is still not working.

What about you guys?

In a previous release the rotate tile in the Home app was also moving when performing other actions. Ffor example: flip90, then the flip90 tile was moving but also the rotate tile.

@dave-castle
Copy link

dave-castle commented Sep 13, 2018

got same problem with rotate, too, not fixed after 0.7.1

But can't hide the switches, even I stated it in the config.

{
"platform": "MiAqaraPlatform",
"gateways": {
"xxx": "xxx"
},
"Xxxxxxxxx": {
"MagicSquare_Switch_VirtualFlip180_d768": {
"disable": true
},
"MagicSquare_Switch_VirtualShakeAir_d768": {
"disable": true
},
"MagicSquare_Switch_VirtualTapTwice_d768": {
"disable": true
},
"MagicSquare_Switch_VirtualMove_d768": {
"disable": true
},
"MagicSquare_Switch_VirtualFlip90_d768": {
"disable": true
}
}
},

@MaFlax
Copy link

MaFlax commented Sep 13, 2018

I have a fix for rotate, the parser is faulty. I read the debug log and found this line: {"cmd":"report","model":"sensor_cube.aqgl01","sid":"158d000230e589","short_id":57705,"data":"{\"rotate\":\"16,500\"}"} there is no status anymore in the message. If you rotate clockwise, the number is positive. If you rotate counterclockwise the number is negative. So I changed 'status' to 'rotate' in the code. Here is my code for MagicSquareParser.js:

class MagicSquareStatelessProgrammableSwitchRotateParser extends MagicSquareStatelessProgrammableSwitchBaseParser {
    getProgrammableSwitchEventCharacteristicValue(jsonObj, defaultValue) {
        var value = null;
        var proto_version_prefix = this.platform.getProtoVersionPrefixByProtoVersion(this.platform.getDeviceProtoVersionBySid(jsonObj['sid']));
        if(1 == proto_version_prefix) {
            value = this.getValueFrJsonObjData1(jsonObj, 'rotate');
        } else if(2 == proto_version_prefix) {
            value = this.getValueFrJsonObjData2(jsonObj, 'cube_status');
        } else {

        }
        
        if(parseFloat(value) > parseFloat(0)) {
            return this.Characteristic.ProgrammableSwitchEvent.SINGLE_PRESS;
        } else if (value === 'rotate'){
            return this.Characteristic.ProgrammableSwitchEvent.SINGLE_PRESS;
        } else {
            return defaultValue;
        }

    }
}

My idea: Create a new accessory parser that recognizes the rotation direction. So maybe this way:

'MagicSquare_StatelessProgrammableSwitch_Rotate_Clockwise': MagicSquareStatelessProgrammableSwitchRotateClockwiseParser,
'MagicSquare_StatelessProgrammableSwitch_Rotate_Counterclockwise': MagicSquareStatelessProgrammableSwitchRotateCounterclockwiseParser

The new code above recognizes clockwise only.

All other switches are working properly. I haven't checked yet if hiding the switches is possible.

Edit: Working version of MagicSquareParser.js attached

MagicSquareParser.js.zip

@meesjan
Copy link

meesjan commented Sep 14, 2018

got same problem with rotate, too, not fixed after 0.7.1

But can't hide the switches, even I stated it in the config.

{
"platform": "MiAqaraPlatform",
"gateways": {
"xxx": "xxx"
},
"Xxxxxxxxx": {
"MagicSquare_Switch_VirtualFlip180_d768": {
"disable": true
},
"MagicSquare_Switch_VirtualShakeAir_d768": {
"disable": true
},
"MagicSquare_Switch_VirtualTapTwice_d768": {
"disable": true
},
"MagicSquare_Switch_VirtualMove_d768": {
"disable": true
},
"MagicSquare_Switch_VirtualFlip90_d768": {
"disable": true
}
}
},

To disable them you have to the delete the "_d768". See below. This should work.
{
"platform": "MiAqaraPlatform",
"gateways": {
"xxx": "xxx"
},
"Xxxxxxxxx": {
"MagicSquare_Switch_VirtualFlip180": {
"disable": true
},
"MagicSquare_Switch_VirtualShakeAir": {
"disable": true
},
"MagicSquare_Switch_VirtualTapTwice": {
"disable": true
},
"MagicSquare_Switch_VirtualMove": {
"disable": true
},
"MagicSquare_Switch_VirtualFlip90": {
"disable": true
}
}
},

@meesjan
Copy link

meesjan commented Sep 14, 2018

I have a fix for rotate, the parser is faulty. I read the debug log and found this line: {"cmd":"report","model":"sensor_cube.aqgl01","sid":"158d000230e589","short_id":57705,"data":"{\"rotate\":\"16,500\"}"} there is no status anymore in the message. If you rotate clockwise, the number is positive. If you rotate counterclockwise the number is negative. So I changed 'status' to 'rotate' in the code. Here is my code for MagicSquareParser.js:

class MagicSquareStatelessProgrammableSwitchRotateParser extends MagicSquareStatelessProgrammableSwitchBaseParser {
    getProgrammableSwitchEventCharacteristicValue(jsonObj, defaultValue) {
        var value = null;
        var proto_version_prefix = this.platform.getProtoVersionPrefixByProtoVersion(this.platform.getDeviceProtoVersionBySid(jsonObj['sid']));
        if(1 == proto_version_prefix) {
            value = this.getValueFrJsonObjData1(jsonObj, 'rotate');
        } else if(2 == proto_version_prefix) {
            value = this.getValueFrJsonObjData2(jsonObj, 'cube_status');
        } else {

        }
        
        if(parseFloat(value,10) > parseFloat(0)) {
            return this.Characteristic.ProgrammableSwitchEvent.SINGLE_PRESS;
        } else {
            return defaultValue;
        }
    }
}

My idea: Create a new accessory parser that recognizes the rotation direction. So maybe this way:

'MagicSquare_StatelessProgrammableSwitch_Rotate_Clockwise': MagicSquareStatelessProgrammableSwitchRotateClockwiseParser,
'MagicSquare_StatelessProgrammableSwitch_Rotate_Counterclockwise': MagicSquareStatelessProgrammableSwitchRotateCounterclockwiseParser

The new code above recognizes clockwise only.

All other switches are working properly. I haven't checked yet if hiding the switches is possible.

For me this is too technical (however I do understand what you explain). Hopefully one of the developers of this plugin can fix this. @YinHangCode ?

@caiminnl
Copy link

Today I updated my gateway firmware to 1.4.1_157.0143 using the Mi Home App (on mainland china server) and now the cube is working fine. My plugin version is 0.6.9 and the buttons/switches are discovered in Homekit, assining actions also works. So you have to update your Gateway and the issue should be solved. Also restart your homebridge to refresh the accessories. So I guess it was a faulty gateway firmware.

Thank you so much! This solved my problem!

@meesjan
Copy link

meesjan commented Oct 27, 2018

Today I updated my gateway firmware to 1.4.1_157.0143 using the Mi Home App (on mainland china server) and now the cube is working fine. My plugin version is 0.6.9 and the buttons/switches are discovered in Homekit, assining actions also works. So you have to update your Gateway and the issue should be solved. Also restart your homebridge to refresh the accessories. So I guess it was a faulty gateway firmware.

Thank you so much! This solved my problem!

The rotate function is still not working. The other five movements are.

@flipmoo
Copy link

flipmoo commented Nov 19, 2018

I just installed the cube. And i see the switches in homekit. But when i select one i get:

[2018-11-19 21:38:24] [MiAqaraPlatform] [DEBUG][Revc]{"cmd":"write_ack","model":"sensor_cube.aqgl01","sid":"158d000287911e","short_id":14394,"data":"{\"voltage\":2995}"}
[2018-11-19 21:38:24] [MiAqaraPlatform] [ERROR]SyntaxError: Unexpected token o in JSON at position 1
[2018-11-19 21:38:24] [MiAqaraPlatform] [ERROR]SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at MagicSquareSwitchVirtualFlip90Parser.getValueFrJsonObjData1 (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:78:32)
    at MagicSquareSwitchVirtualFlip90Parser.getStatusLowBatteryCharacteristicValue (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:127:30)
    at MagicSquareSwitchVirtualFlip90Parser.parserBatteryService (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:156:42)
    at MagicSquareSwitchVirtualFlip90Parser.parserAccessories (/usr/lib/node_modules/homebridge-mi-aqara/parser/SwitchVirtualBasePressParser.js:63:18)
    at MagicSquareParser.parserAccessories (/usr/lib/node_modules/homebridge-mi-aqara/parser/DeviceParser.js:49:27)
    at ParseUtil.parserAccessories (/usr/lib/node_modules/homebridge-mi-aqara/lib/ParseUtil.js:112:29)
    at MagicSquareSwitchVirtualShakeAirParser.doSomething (/usr/lib/node_modules/homebridge-mi-aqara/parser/MagicSquareParser.js:359:33)
    at that.platform.sendWriteCommand.then.result (/usr/lib/node_modules/homebridge-mi-aqara/parser/SwitchVirtualBasePressParser.js:51:34)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)
(node:18838) UnhandledPromiseRejectionWarning: Error: This callback function has already been called by someone else; it can only be called one time.
    at /usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/util/once.js:12:13
    at MagicSquareSwitchVirtualShakeAirParser.callback2HB (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:197:17)
    at /usr/lib/node_modules/homebridge-mi-aqara/parser/SwitchVirtualBasePressParser.js:57:34
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)
(node:18838) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)

@MaFlax
Copy link

MaFlax commented Nov 25, 2018

I just installed the cube. And i see the switches in homekit. But when i select one i get:

[2018-11-19 21:38:24] [MiAqaraPlatform] [DEBUG][Revc]{"cmd":"write_ack","model":"sensor_cube.aqgl01","sid":"158d000287911e","short_id":14394,"data":"{\"voltage\":2995}"}
[2018-11-19 21:38:24] [MiAqaraPlatform] [ERROR]SyntaxError: Unexpected token o in JSON at position 1
[2018-11-19 21:38:24] [MiAqaraPlatform] [ERROR]SyntaxError: Unexpected token o in JSON at position 1
    at JSON.parse (<anonymous>)
    at MagicSquareSwitchVirtualFlip90Parser.getValueFrJsonObjData1 (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:78:32)
    at MagicSquareSwitchVirtualFlip90Parser.getStatusLowBatteryCharacteristicValue (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:127:30)
    at MagicSquareSwitchVirtualFlip90Parser.parserBatteryService (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:156:42)
    at MagicSquareSwitchVirtualFlip90Parser.parserAccessories (/usr/lib/node_modules/homebridge-mi-aqara/parser/SwitchVirtualBasePressParser.js:63:18)
    at MagicSquareParser.parserAccessories (/usr/lib/node_modules/homebridge-mi-aqara/parser/DeviceParser.js:49:27)
    at ParseUtil.parserAccessories (/usr/lib/node_modules/homebridge-mi-aqara/lib/ParseUtil.js:112:29)
    at MagicSquareSwitchVirtualShakeAirParser.doSomething (/usr/lib/node_modules/homebridge-mi-aqara/parser/MagicSquareParser.js:359:33)
    at that.platform.sendWriteCommand.then.result (/usr/lib/node_modules/homebridge-mi-aqara/parser/SwitchVirtualBasePressParser.js:51:34)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)
(node:18838) UnhandledPromiseRejectionWarning: Error: This callback function has already been called by someone else; it can only be called one time.
    at /usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/util/once.js:12:13
    at MagicSquareSwitchVirtualShakeAirParser.callback2HB (/usr/lib/node_modules/homebridge-mi-aqara/parser/AccessoryParser.js:197:17)
    at /usr/lib/node_modules/homebridge-mi-aqara/parser/SwitchVirtualBasePressParser.js:57:34
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7)
(node:18838) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3)

Try: npm install homebridge-mi-aqara@0.7.3 or
sudo npm install homebridge-mi-aqara@0.7.3 to update to the newest version.
Then restart your homebridge.

It is very important to update your gateway firmware to the newest version using the Mi Home app. My gateway version is: 1.4.1_159.0143 on Mainland China server.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests