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

SP9 power monitoring API? #2

Open
CZDanol opened this issue May 26, 2022 · 9 comments
Open

SP9 power monitoring API? #2

CZDanol opened this issue May 26, 2022 · 9 comments

Comments

@CZDanol
Copy link

CZDanol commented May 26, 2022

Hello,
how did you figure out the "getSta" and "setSta" parameters? I have SP9 which also has power monitoring functionality and I'm trying to figure out what rest endpoint is used to get that data.

I tried doing a tcpdump in my router, but I couldn't get to make the app communicate with the plug directly and the cloud server seems to be using a slightly different protocol. I've found this response:
image
but I wasn't able to find out how to ask for the data locally.

@tvaira
Copy link

tvaira commented Jun 13, 2022

Only :

  • /getWifi
  • /getDetail
  • /getLightStatus
  • /getLed
  • /getSta
  • /guideDone
  • /setLightStatus
  • /setLed
  • /setNick
  • /setSta

@CZDanol
Copy link
Author

CZDanol commented Jun 13, 2022

How did you figure the list out? Is that definitely the complete list for SP9? Previous versions of the socket don't have the power monitoring functionality afaik.

@tvaira
Copy link

tvaira commented Jun 13, 2022

In Android app code

with : http://<ip>:5000/XXX

I have an SP9 and I'm also looking

@CZDanol
Copy link
Author

CZDanol commented Jun 13, 2022

I see. Thank you for your response. Please let me know if you find it out :) I'm trying to make the plug working with Home Assistant. I've made it turn on and off already, it's a pity I can't access the power monitoring data.

@tvaira
Copy link

tvaira commented Jun 14, 2022

@tvaira
Copy link

tvaira commented Jun 14, 2022

There are two operating modes:

  • locally (/getSta, /setSta, ...)
  • cloud (power monitoring, ...)

Can you post the full exchange with tcpdump?

my dump :

Received: 2400060001670053033f0000000000007b2273657269616c4e756d223a224541...34222c226d61726b223a22222c2274696d655f7a6f6e65223a302c226c6f636174696f6e223a224672616e63652f5061726973227d

{"serialNum":"EA...4","mark":"","time_zone":0,"location":"France/Paris"}

Received: 240006000166002c033d0000000000007b2273657269616c4e756d223a224541...34222c22737461747573223a307d

{"serialNum":"EA...94","status":0}

Received: 24000600018100000344000000000000240006000189001503450000000000007b22766572223a332c22656e65726779223a5b5d7d

{"ver":3,"energy":[]}

...

@rohanabraham
Copy link

Did you ever figure out how to get the energy usage on API?

@CZDanol
Copy link
Author

CZDanol commented Oct 26, 2022

Nope. Even tried contacting the support, they weren't of much help either.

@JakDoh
Copy link

JakDoh commented Oct 27, 2022

I am also looking for a solution to get data from the plug. I tried to decompile the official application and look for a way to get this kind of data. If there is a possibility to get data using GET or POST request, then it is not used in the official application. Instead, the power data are collected by the provisioning server where the plug sends data in regular periods. How to setup the plug to own provisioning server is very nicely described in the article metioned by tvaira.

The plug connects to the ntp server and synchronizes the time. In an hour interval - every hour on the hour - plug sends the overall consumption data to the provisioning server. Actual power consumption and partial consumption (last hour) is provided on request. Actual power consumption is provided on every single request, partial consuption data are availible each circa 5 minutes and more frequent request are rejected.

response for Actual powerconsuption
{"resp_code":0,"data":{"power":84.481}}'
response for partial consuption
{"energy":["1666809547,2370,0.060,2315,2","1666809547,2370,0.060,2315,3"]}'
response for partial consuption on the request in the first minutes on the hour (eq 8:00, 9:00) - also contains data from the previous hour
{"energy":["1666735585,362,0.000,0,2","1666735585,4048,0.010,1109,3"]}'
overall consuption data - no request
{"ver":3,"energy":["1666810806,203902,1.920,129354,0"]}

I haven't completely decoded these energy data frames yet because they are slightly different from time to time but i believe:

1666809547 epoch time
2370 time in seconds for which energy consuption is counted
0.060 energy consumed in kwh
2315 time in seconds for which power was actualy drowned
2 I don't understand the meaning yet

I extended the code from lui_gough by adding reading and requesting of energy data ability (POC only), to capture data for afterward "decoding". Download from here

I am familiarizing myself with the development of integration for Home Assistant which is my main aim.

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

4 participants