karlg100 / frigidaire

Frigidaire Cloud API
17 stars 11 forks source link

Support for dehumidifier? #1

Open legomind opened 5 years ago

legomind commented 5 years ago

Any chance of adding support for dehumidifiers?

karlg100 commented 5 years ago

Not at the moment. But if it uses the same Frigidaire app on mobile devices and appear right along side the AC units, then I bet it uses a similar structure and easy to extend. The hardest part of this module was the authentication and session management. The rest is simply existing the functions for reading telementry/writing commands.

legomind commented 5 years ago

Yes, I just tested and it works fine. I would need to add codes for humidity settings, and convenience functions for changing humidistat. Would you accept a pull request?

karlg100 commented 5 years ago

Sure would! I’ve got a homebridge plug-in that stacks on top of this nodeJS lib. It too would need to be updated, assuming you want to control it with HomeKit.

legomind commented 5 years ago

Ok, I will try to get to it some time next week. As far as HomeKit, I don't have any IOS devices. I am looking to adapt your library to integrate with HomeAssistant, either by using NodeRED as a bridge to MQTT, or by rewriting it in python for direct integration into HomeAssistant.

Your hard work is very appreciated, as snooping on the android app network traffic is impossible because the app does not use the android system to verify the server certificate.

Either way, I will include details about my approach in the PR, along with closure of this issue.

karlg100 commented 5 years ago

Sounds great! Glad to see another home integration project maybe using it. Would love your contribution!

On Jan 31, 2019, at 7:53 AM, legomind <notifications@github.com mailto:notifications@github.com> wrote:

Ok, I will try to get to it some time next week. As far as HomeKit, I don't have any IOS devices. I am looking to adapt your library to integrate with HomeAssistant, either by using NodeRED as a bridge to MQTT, or by rewriting it in python for direct integration into HomeAssistant.

Your hard work is very appreciated, as snooping on the android app network traffic is impossible because the app does not use the android system to verify the server certificate.

Either way, I will include details about my approach in the PR, along with closure of this issue.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/karlg100/frigidaire/issues/1#issuecomment-459333417, or mute the thread https://github.com/notifications/unsubscribe-auth/ADkg93cASHB9WA7-SpJ-vLTXQxnEKnUrks5vIudIgaJpZM4aaFeE.

slix commented 5 years ago

@legomind Did you ever get anywhere with that? I just got a Frigidaire air conditioner and want Home Assistant support.

A simple smart outlet might be good enough for you.

Unfortunately the air conditioner beeps for every settings change. This makes it terrible for silently controlling it with a separate temperature sensor, like a physical thermostat in a home usually would.

karlg100 commented 5 years ago

@slix - the beeping must be a new "feature". the older model I have does't make any sounds when remotely controlling. check the stock app settings and see if you can turn that off?

njones11 commented 5 years ago

@legomind If you ever got around to adding dehumidifier support, it would be great if you could put up a pull request. If not, I might try tackling it before too long :)

legomind commented 5 years ago

@njones11 Unfortunately I have not gotten to it. Lol many other projects around the house have taken priority.

patrickkettner commented 4 years ago

this gets the functionality for the dehumidifier. Want to add timer functionality for the timer before sending the PR

reffr commented 4 years ago

I would also love dehumidifier support! That would be amazing!

deftdawg commented 4 years ago

@patrickkettner just do the PR... 99% of people won't ever use the timer anyway :wink:

deftdawg commented 4 years ago

Incidentally the app code that sets the timer functionality can be found inside the client APK (zip file) @ assets/www/default/js/app/models/DehumidifierModel.js lines 194-263

karlg100 commented 3 years ago

please run DEBUG=frigidaire node demo.js devices and post the output here.

mpash commented 3 years ago

please run DEBUG=frigidaire node demo.js devices and post the output here.

starting up
  frigidaire getting device list, but getting telem first +0ms
  frigidaire getTelem() +0ms
  frigidaire  +0ms
  frigidaire  +0ms
  frigidaire get() +0ms
  frigidaire  +0ms
  frigidaire no sessionId, starting auth sequence +0ms
  frigidaire authStage1() +1ms
  frigidaire  +0ms
  frigidaire  +0ms
  frigidaire get() +0ms
  frigidaire  +0ms
  frigidaire attempts: 0 +0ms
{
  url: 'https://prod2.connappl.com/ELXBasic/apps/services/api/ELXSmart/iphone/init',
  headers: {
    'x-wl-app-version': '4.0.2',
    'X-WL-Session': 'E98B1B36-46E4-9BC2-977D-4AF429BF7439',
    'X-WL-ClientId': '2c14c6f157ad3993f376755dc9dbab557ecc3909',
    'X-Requested-With': 'XMLHttpRequest',
    'User-Agent': 'ELXSmart/4.0.2 (iPad; iOS 11.4; Scale/2.00),ELXSmart/4.0.1 (iPad; iOS 11.4; Scale/2.00),Mozilla/5.0 (iPad; CPU OS 11_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15F79/Worklight/7.1.0.0 (4311995584)',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  },
  form: { isAjaxRequest: 'true', x: 0.2348377558393847 },
  jar: true,
  json: true
}
karlg100 commented 3 years ago

This is odd output and looks like the old Frigidaire web service.

Please check the module version. You'll want > version 2.0.

karlg100 commented 3 years ago

I've changed the debug flag.

please update this module to version 2.1.0, then do DEBUG=frigidaire:* node demo.js devices

ZachPL commented 2 years ago

Not sure how to do the debug flag but here is the result for my dehumidifier, if that helps EDIT: figured it out had to do it like this through cmd

D:\Chrome Downloads\frigidaire-2.1.2\frigidaire-2.1.2>set DEBUG=frigidaire:*

D:\Chrome Downloads\frigidaire-2.1.2\frigidaire-2.1.2>node demo.js devices
starting up
  frigidaire:lib init() +0ms
  frigidaire:lib authStage1() +0ms
  frigidaire:lib authStage1() - post() +1ms
  frigidaire:lib authStage1() - end +2ms
  frigidaire:lib init() - end +0ms
Getting Devices
  frigidaire:lib getDevices() +1ms
  frigidaire:lib getDevices() - auth is pending, reschedluing this call in 1000 +0ms
  frigidaire:lib authStage1() - postCallback() +475ms
  frigidaire:lib Acquired new sessionKey: BzuOUGOAJ3K7nhb6xsy60NOhljQutRoKYHXUh+OpmNcpegOwEri3E1ghpEYbkMXpUwabk/6W87ocOGX3ficG39Q8V+R9kADyD+vc0mqfNwWS5INwL7y6wX2Z4blXU32xeNg6t84jtFRmxpPdgcpsuL3ZG4Umi8Fl5Zum7nlNl9IgywY6PIFNOPFthOkLPF5hKfWoJUXQK8Rm6f4m5we/gdrzlZiWN1YT+YvPvAWzdN06S4wgLHt+XpxW7FknQHEhh1aibueFCkcIkNNa+rAvRK+UOKHS0P3QeSW4EBAfhlMT8OmPgaOT+dNO+lUHwgSNGTTF9O+q8Y+M2p/j3PiHOg== +0ms
  frigidaire:lib init() -> authStage1 callback +1ms
  frigidaire:lib getDevices() +0ms
  frigidaire:lib get() - /user-appliance-reg/users/tlszach@gmail.com/appliances +1ms
  frigidaire:lib get() - post auth stage +0ms
  frigidaire:lib get() - end request callback +341ms
  frigidaire:lib {
  frigidaire:lib   status: 'OK',
  frigidaire:lib   code: 'ECP0000',
  frigidaire:lib   message: 'success',
  frigidaire:lib   data: [
  frigidaire:lib     {
  frigidaire:lib       appliance_type: '950133061_00',
  frigidaire:lib       appliance_id: '02800213-443E070A26A5',
  frigidaire:lib       pnc: '950133061',
  frigidaire:lib       elc: '00',
  frigidaire:lib       sn: '02800213',
  frigidaire:lib       mac: '443E070A26A5',
  frigidaire:lib       cpv: '00',
  frigidaire:lib       nickname: 'Dehumidifier'
  frigidaire:lib     }
  frigidaire:lib   ]
  frigidaire:lib } +0ms
  frigidaire:lib [
  frigidaire:lib   {
  frigidaire:lib     appliance_type: '950133061_00',
  frigidaire:lib     appliance_id: '02800213-443E070A26A5',
  frigidaire:lib     pnc: '950133061',
  frigidaire:lib     elc: '00',
  frigidaire:lib     sn: '02800213',
  frigidaire:lib     mac: '443E070A26A5',
  frigidaire:lib     cpv: '00',
  frigidaire:lib     nickname: 'Dehumidifier'
  frigidaire:lib   }
  frigidaire:lib ] +2ms
  frigidaire:lib getDevices() - callback +1ms
  frigidaire:lib getDevices() - callback() - getting telem for 02800213 +0ms
  frigidaire:lib getTelem() - 02800213 +1ms
  frigidaire:lib getDeviceIndex() - sn: 02800213 +0ms
  frigidaire:lib found appliance match! +0ms
  frigidaire:lib get() - /elux-ms/appliances/latest?pnc=950133061&elc=00&sn=02800213&mac=443E070A26A5 +1ms
  frigidaire:lib get() - post auth stage +0ms
  frigidaire:lib getTelem() - end +2ms
  frigidaire:lib getDevices() +188ms
Got Devices
[
  {
    appliance_type: '950133061_00',
    appliance_id: '02800213-443E070A26A5',
    pnc: '950133061',
    elc: '00',
    sn: '02800213',
    mac: '443E070A26A5',
    cpv: '00',
    nickname: 'Dehumidifier'
  }
]
  frigidaire:lib get() - end request callback +184ms
  frigidaire:lib getTelemCallback() - end +0ms

I ran getTeleM and it seems like all the info I would expect came back just some missing their definitions, let me know if I can do anything else to help