Reverse Engineering the Enphase Installer Toolkit

If you are interested in other Enphase information the following other pages may also be of interest:
What is inside the Enphase Envoy-S (teardown)
Enphase Envoy-S “Data Scraping”.
Enphase Envoy-S Open Ports!

While on my quest to create my own logging and analytics for the Envoy-S Solar PV controller I also was interested in how the Installer Toolkit authenticates with the web interface of the Envoy.

Authentication is “Digest” based so it isn’t as simple as just undoing the base64 encoding that “Basic” http authentication uses. Digest uses a nonce, domain and url in the mix to make each request to different pages need it’s own hashed password.

The trouble is – I don’t know what the password is for the Envoy. The username is “installer” but the password isn’t something known. I hoped to extract the password generation method from the Android application.

What helped is the fact that it seems the application is a Xamarin based application. As far as I can work out this means they wrote the application in Microsoft Visual Studio and have ported it to run on multiple mobile devices (Apple, Android, Windows Phone(?)).

So – decompressing the APK produces a load of windows .dll files! ILSpy then allows me to investigate the content or code within.

ilspy xamarin enphase about box

So.. all easy for me to understand in the language(s) that I can work with.
Imagine my surprise when I came across the “Configuration” section.

enphase oauth 911wasaninsidejob Oauth1911wasaninsidejob

Private Const OAuth2BogusClientId As String = "installer-toolkit-bogus"

Private Const OAuth2BogusSecret As String = "911wasaninsidejob"

Private Const OAuth1BogusConsumerKey As String = "notavalidconsomerkey"

Private Const OAuth1BogusConsumerSecret As String = "Oauth1911wasaninsidejob"

While being part of code that isn’t used in active connections (I believe the bogus sections are for offline, debug or demonstration testing that don’t authenticate against live systems).. I’m amazed that wording like that has remained within a program written by a company who, I presume, wouldn’t like it against their reputation.

My first thought is maybe a programmer has taken example code and forgotten to change the strings.. but no, a quick Google Search doesn’t reveal any pages at all with the wording in it… so it isn’t a lazy copy and paste from existing public “example” code.

Moving on from that… Other interesting bits of code are:

Public Function UsernameIsReviewUser(username As String) As Boolean
    Return Not String.IsNullOrEmpty(username) AndAlso username.ToLower().Equals("")
End Function
Friend Module Crypto
    Private salt As Byte() = Encoding.ASCII.GetBytes("com.enphase-energy.rocksit247")

If you are on Android then the SQLite Database it uses is stored in “/mnt/sdcard/Enphase/EnphaseDB_fixed.db3”.

When the Envoy is in AP mode the IP address might be  “”

Back onto Task. The Digest Authentication is handled by “Enphase.InstallerToolkit -> Enphase.Installeroolkit.Models -> EnphaseEnvoy” and uses the following code:

Public Sub SetupAuth()
	Dim credentialCache As CredentialCache = New CredentialCache()
	credentialCache.Add(New Uri("http://" + Me.IP_Address), "Digest", New NetworkCredential("installer", Me.GetPasswordForEnvoy()))
	credentialCache.Add(New Uri("http://" + Me.IP_Address + ":9094"), "Digest", New NetworkCredential("installer", Me.GetPasswordForEnvoy()))
	Dim nativeCookieHandler As NativeCookieHandler = New NativeCookieHandler()
	Dim list As List(Of Cookie) = New List(Of Cookie)()
	For Each current As Cookie In nativeCookieHandler.Cookies
		If current.Name.ToUpper().Equals("SESSIONID") Then
			current.Value = Nothing
		End If
	Me.httpClient = New HttpClient(New NativeMessageHandler(False, False, nativeCookieHandler) With { .UseDefaultCredentials = False, .Credentials = credentialCache })
End Sub

Public Function GetPasswordForEnvoy() As String
	Dim bufLen As UInteger = 128UI
	Dim stringBuilder As StringBuilder = New StringBuilder(128)
	EnphaseEnvoy.emupwGetMobilePasswd(Me.Serial_Number, "installer", Nothing, stringBuilder, bufLen)
	Return stringBuilder.ToString()
End Function

Public Shared Declare Function emupwGetMobilePasswd Lib "" (in_serialNumber As String, in_user As String, in_domain As String, out_buf As StringBuilder, bufLen As UInteger) As Integer 

In plain terms this means the function “SetupAuth” adds credentials to the http request using the hard coded username “installer” and the password generated by the function ” GetPasswordForEnvoy”.

GetPasswordForEnvoy, as far as I can read, creates a 128 character buffer and string and then requests another function of “emupwGetMobilePasswd” with the parameters:
Serial Number of Envoy, “installer”, Nothing, Blank String, Blank Buffer

Now; emupwGetMobilePasswd then references to an external “”dependent which appears to be a compiled program or component for ARM architecture processors. Sadly it doesn’t seem to be a drop in component and is likely a custom file for Enphase
It only seems to take the serial number and username as input. The “Domain” string (3rd input) is set to “Nothing” in the code and the final two variables are the out string and buffer.




This is where it gets beyond me skill level. I will continue to research and work out how I can either run the object on demand or just the math or function used to hash the details to return the password. More to come.. Bookmark and return at some point.

Update: 19th November 2016. Version 2.1.10 of the Installer Toolkit is out and has the following notable changes.

It contains a variable WORK_OFFLINE_KEY

Update: 21st August 2018. My own password cracked!

I’ve finally managed to make my own software that can interface with the file mentioned above! I can now, on demand, generate passwords against Envoy-S serial numbers.

I need to investigate if I can either package it up and distribute it for others to generate their own passwords or if I can make it a web based password generator somehow. The biggest problem is the .so is compiled for ARM… so getting data into and out of it will require an ARM emulator or a mobile phone.

Success.. web access to the installer interface on a computer!

Update: 22nd August 2018. Application made!

Enphase Energy Envoy-S password algorithm runner app!

You can download the Android app here.. Install then run it.. type in your units serial number and the blue box will show the installer password!

Update July 2021: A phyton script appears!
A visitor has managed to do what I couldn’t and has re-written the functions (my method just “uses” the existing compiled dll; hence the android requirement).
Please show your gratitude by commenting below saying thanks if you use either method.

This entry was posted in Uncategorized. Bookmark the permalink.

215 Responses to Reverse Engineering the Enphase Installer Toolkit

  1. RRM says:

    I’ll also bookmark this topic. Interesting progress you’re making!

  2. Paul says:

    yes – good info.

    Yet to try using the returned key with http outside of the installer ap.
    Could you post the format of the http command you were able to use?

    I have my own key.

  3. GET /api/v1/production/inverters HTTP/1.1
    Connection: keep-alive
    Authorization: Digest username="installer", realm="", nonce="XXXXXXXXXX", uri="/api/v1/production/inverters", response="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", qop=auth, nc=00000014, cnonce="XXXXXXXXXXXXXXXX"

    I expect the keep-alive line could be removed too.

  4. jam says:

    Well done! I took a similar path a few months ago, and got as far as decompiling the android app as well, resulting in extracting the dll files and that’s where I stopped as I don’t have a windows machine.

  5. Pingback: Enphase Envoy-S Open Ports! | thecomputerperson

  6. Pingback: Enphase Envoy-S “Data Scraping”. | thecomputerperson

  7. Al says:

    Well beyond my limited knowledge but I’m interested in what you’ve been able to achieve. I’m getting a Envoy S Metered installed in the next month and been pondering the ability to run a small pi box running a script to monitor the generation vs consumption to see what is excess and if over a certain threshold, close a dry contact that will operate a relay that will bring in the hot water system. Do you think this would be possible with what you’ve seen with the API? Or would it be easier to do it locally with CT clamps and measure local currents etc?

  8. Absolutely possible and I do it with a fab heater and an Omega Onion (similar to a pi). Just watch out for the envoy being laggy or crapping out under high load or many requests. See the comment thread about it queueing failed or timed out requests and snowballing. Make sure your script backs off and waits if the envoy doesn’t respond.

  9. Pingback: What is inside the Enphase Envoy-S (teardown) | thecomputerperson

  10. It has been a while.. but if anyone has this bookmarked or subscribes to comment updates… I’ve made some progress! I can generate installer passwords on demand for Envoy-S serial numbers.

    See the section titled “Update: 22nd August 2018. My own password cracked!” in the post above.

  11. Kimo says:

    Just an FYI, I tested this with my envoy-iq, and the generated password did not work. (I wasn’t sure it would since you developed this for an envoy-s, but it was worth a shot.)

  12. Very interesting – do you use the same “Installer Toolkit” to get it setup or configure it or does it have it’s own app?

  13. Kimo says:

    I never used the installer toolkit, I tried the password via the web interface on the envoy itself (going to the same link shown above, but of course using my envoy’s local IP). I don’t even think the installer used the installer toolkit yet, but rather detected the micros via the button on the envoy. (The installer still needs to enable the consumption meter.)

    When I try to login to an installer page, I use the installer login and the password generated by the app, but it just re-prompts me for the credentials.

  14. It would be worth installing the Enphase Installer Toolkit to see if that can find and log into your envoy. You don’t need a log in to be able to do this.. you load it, then click the lines in the top left and select “Connect to Envoy” from the menu. Check that the serial number displayed matches the one you were trying to use with my password generation app… then see if you can click it and get into the settings pages.

    If you can use the installer toolkit I’d be interested to try and work out what is not working correctly with the password generation app in your instance / setup.

  15. Kimo says:

    Interesting. When I install and run the toolkit on my android device, it requires me to log in to Enlighten, with no ability to change / select any options.

  16. Humm, with no ability to bypass it? If you can create or log into your account you then may get a message saying “no installer access” or similar, then you still get the ability to get the menu option I refer to in my last reply.

  17. kbonnel says:

    I thought it might do that as well, and the app does report insufficient rights. Unfortunately, it will not go past that part. I will have to do more playing/testing.

  18. Ben says:

    Can confirm that the generated passwords allow me access to the installer section of the Envoy web server using my newer Envoy IQ. I also spent a little bit of time finishing up reverse engineering the password generation algorithm and have a python script that will do it directly. Of note, there’s another function called `emupwGetPublicPasswd` that seems to call the same hash routine that `emupwGetMobilePasswd` uses; I’m sortof hoping that by guessing some of the input parameters, one might be able to use this to get a username/password that would work for an ssh login to the Envoy, which would enable a lot more interesting exploring.

  19. Scott Dee says:

    I got an envoy second hand and this worked great for getting in and checking things out.
    What I don’t have is a CT for production and there’s no place to buy one. Through your hacking have you come across any way to add a coil and calibrate it?

  20. Matthew says:

    I see with great interest you have a way of generating a password fro the local envoy-s – I downloaded the app – but no idea of how to run a .apk file (I am on my PC). Alternately my unit serial number is 121548011842 could you run your app and tell me what my password is please? Many thanks!

  21. Jaap says:

    Hi! Your code-generator works great!
    Is it possible to extract panel-level-information by json/api/etc?
    Now I’m using my Fibaro domotica-system to monitor total-production (via /production.json, but I’d like to monitor at panel-level.
    Hope you or someone else has the answer!

  22. JR says:

    Excellent work! I’ve been asking the manufacturer for months and they have ignored me. I can also confirm this pw tool works on the new IQ Envoy.

    @Scott, isn’t this the CT you’re looking for?

  23. Matt says:

    Hi, Thanks for all the info. I downloaded your Android app but upon install the phone gives me an error stating, “Parse error: There is a problem parsing the package”. I’ve tried installing it on an LG phone and a Samsung tablet. Is there anything else I need to do to get this package working? Cheers, Matt.

  24. The only time I remember seeing that was when I hadn’t cryptographically signed the package. not sure what to suggest in your case because the one that has uploaded should be the signed one :/

  25. Matt says:

    I’ve still had absolutely no luck running this program. I’ve even tried emulators on my Win 7 computer with no luck. The two devices I’ve tried it on have Android version 4.4.2. Would this be an issue? Could you possibly upload it again please so I can try a fresh copy? I’m not real up with Android apps and their peculiarities so I’m running a bit blind with this one. Cheers, Matt.

  26. Does the official installer app install and run ok on your devices?

  27. Matt says:

    Thanks for your replies. I installed it on my daughter’s old HTC phone and it works like a new one. Must have been the older phone/tablet that wouldn’t install it. Thanks for your efforts. Matt.

  28. Matt says:

    I just tried the password generator and I’m able to log on as an installer. Cheers, Matt.

  29. cpngn says:

    You cannot add a 3rd party CT and calibrate it. If you bought a CT enabled Envoy-S or IQ, you would have 1 or 2 CTs in hand. If not, don’t waste your time, it will never work until you buy the right equipment. You WILL need Enphase Support to set this up after the fact.

  30. Bryan McCoy says:

    My installer did not install the production current sense coil, as they have been taking them out for inconsistent operation. The micro inverters tell the Envoy what they are producing, and it tabulates it, hence the coil is not actually required (for just a panel installation).

  31. cpngn says:

    The Envoy (and a couple other) meters are more accurate than the 5% on the microinverters. They are “revenue grade” whereas the microinverters are not (so if you’re getting incentive rebates from the utility or state, they’ll almost always require you to use a revenue grade meter). But yes, just to get a site producing and get a good sense of what is or isn’t working, you do not need the CT coils, but having both can help with troubleshooting a LOT (being able to compare the sum of individual inverters’ data to the meter which includes them all coming down into your box).

  32. Suleiman says:

    Hi theComputerPerson,

    a) Mind generating my pwd (can’t run the apk). 121750030649
    b) I noticed that your ToolKit screenshot shows Production -7 W just after midnight – manual states it should be 0. Is your grid 120/208V by any chance?
    Mine is 120/208V and also shows a negative number as L1 has -ive power factor while L2 is +ive during non-production.

  33. 58e26e4b I believe.. My envoy has always reported IRO -7 W overnight. The web interface on the Envoy itself hides any minus values :) 7 W is probably the power draw of the envoy controller itself.

    I’m on single phase 230 V. (Or if that sounds wrong, look up whatever standard UK installs are.)

  34. Mns says:

    For my recently purchased envoy-s (Dec. 2018) the pwd generator is not successful in generating an accepted pwd. Anyone can help me out? Or is an update of the pwd generator possible?

    Thnx and regards

  35. Does the serial number you are filling in start 121? (and sorry, just checking, you are typing in the serial number too – it doesn’t auto detect it :) )
    Does the official installer toolkit work and log in to your envoy ok?

  36. Mns says:

    My s/n starts with 12175….. and is 12 characters long. Do I put in all 12 chars? Enlighten installer app installs fine on my apple devices, after starting it it immediately asks for logging into enlighten with a email and per. Apparently these are different than the one I use for app enlighten and on enlighten through the web.

    I am confused.

    Helping me out will be appreciated.

  37. jamguy says:

    I’ve finally got around to testing this out and it works perfectly. I dont have any android devices so I installed NOX Player for mac which is an Android emulator.

    Running it in “phone” mode, i uploaded the APK from this page into it and it worked perfectly.

    Thank you, and mega-kudos for the reverse engineering efforts!

  38. Suleiman says:

    Thanks @thecomputerperson for the code. It works. Thanks @jamguy for the Nox tip. Now I can run the Apk

  39. cbabkirk says:

    I have a dual Envoy Array. One Envoy-S and One IQ-Envoy. Inverters are a mix of older M215s and the rest are the new IQ-7 inverters. Thus the dual envoys. Both work fine with Installer Toolkit. I want to access the admin console for each envoy for datascraping inverter power now and other metrics. I have no Android devices here. Would it be possible for you to decode passwords for me for these serial numbers: ES = 121630006578 & EQ = 121834015273

    I am assuming the uname will be “installer”

    I have consumption and production CTs installed on the Envoy-S but just the production CT installed on the IQ-Envoy. The the production CT comes with th envoy. I had to order the consumption CTs.

  40. See the comment a few lines above for an ARM android emulator for the mac. I’ve used BlueStacks to emulate on Windows.

  41. cbabkirk says:

    Thanks…I will look into that. I am trying to use the published API calls to collect inverter power now metrics. I could get them off the Devices page on enlighten but that is delayed. It appeared to work when I had the older LCD envoy which used admin/admin but these newer Envoy-S and IQ-Envoy seem to use something else. I will see if I can decrypt these serial numbers using your app and will assume that the uname needs to be “installer”. Thanks for your help so far.

  42. Username is indeed installer.

  43. cbabkirk says:

    Just to be clear, the unanme and password I am trying to understand is for admin console access directly on the envoy and not the password needed for the installer app. On my originnal LCD envoy I used admin/admin. You’re saying for the newer envoy-S & IQ it is now installer/???

  44. [..] I also was interested in how the Installer Toolkit authenticates with the web interface of the Envoy. [..] The username is “installer” but the password isn’t something known. I hoped to extract the password generation method from the Android application.[..]

  45. interested one says:

    Hi your API worked perfectly for me for accessing the installer area on a mobile phone.
    But when trying to log in to the local Administration full size web page via my pc it appears that there is another user name other than Installer required or both the user name and another password are required.

    Without this there is no access to the unit like there was with the old evoy using user= admin password= admin

    as a result it is no longer possible to things light modify a grid profile or several other nice to have functions.

    there is limited access via the installer toolkit but not enough.

    or limited access via the immobile looking page with the generated password and user= installer.

    IP address obviously to be what ever you get for the Envoy

  46. interested one says:

    oops re the above spelling hmmm dam predictive text

  47. I’ve updated the link to the APK for the Android app – it now takes the username as an input too which is used by the password generating file from Enphase.. however I can’t get any combination or “admin” or “root” to work on my Envoy.

  48. interested one says:

    what about user= Envoy

  49. Also doesn’t work on mine.. If you have an android device or an android ARM emulator (see above) you can test the new apk and generate and test all you want :)

  50. interested one says:

    with the last message sn last 6 with as pw, has limited use but not full.
    But is full before assigning to a system
    I have a nexus 9 Android I tablet I will have a go with your APK again

  51. interested one says:

    nice APK now if only I knew the correct user id, it will be related to customer support.
    it is a shame as a virgin unit Envoy plus last 6 of sn as in the installer manual gives full access, but once the unit is assigned to a system that stops working and requires a support login, which is obviously quite different, I think I remember a firmware update just after the unit was assigned to a system, but not sure if the update was before or after.

  52. Interested one says:

    I wonder if in the code there is a section that produces a login user name based on the Envoy serial number or the site ID once the Envoy is assigned to a system?

  53. d says:

    Hi, Excellent work!
    Just a hint, for me your APK had to be renamed before I could execute it on my phone running Android 9.
    Question: Did you find any way to stop these extremely annoying time-out messages and freezes that appear in both the official Installer Toolkit, and also the login to the Envoy’s AP via web at 172.30.x.x (using the installer login and generated key)? Thank you.

  54. Thanks for the info about the file name. I too have the times where the web interface stops responding. It used to crash and never come back requiring a reboot of the envoy.
    At some point the envoy did a firmware update and the problem was just reduced to just short freezes. I’ve coded my fetcher to back off for 30 seconds if it detects a delay or timeout from the envoy. Otherwise it seems to have a denial of service effect where the envoy never catches up.

  55. Marco Papa says:

    Wow thanks for the NOX Player for MacOS and the app file. Worked great to generate the password for my Envoy-S Standard.

  56. Andrew says:

    Could someone please help me to generate the password for this serial: 121904084331
    Can’t make it run with emulators or on the phone.

  57. moulindegavray says:

    I can do it for you.

  58. moulindegavray says:

    Perfectly working on my Enphase Envoy-s Metered Multiphase.
    Merci beaucoup @thecomputerperson !
    The hardest for me was to run your Android app (2019-02-05a) on a 64-bit Ubuntu (18.04.2 LTS, itself on a old MacBook Air) via anBox (beta devmode 4-c732719 2019-07-22) with the famous error [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113] solved by
    Thanks to you I can now manage my hydroelectric watermill at a distance of a thousand kilometers (with an OpenVPN VPN bridge to access the LAN).

  59. Great to have some feedback, thank you.

  60. J says:

    Worked great, thank you.

  61. cbabkirk says:

    Have you developed api calls to collect metrics of an IQ-Envoy? I am using your past documents to collect data off my Envoy-S. Using the same calls for the IQ-Envoy does not get the same data as when used with the Envoy-S.

  62. I’ve not come across and am unlikely to come across an IQ so… out of luck there :(

  63. Stevens says:

    Does anyone know where to get the firmware files ? It would be interesting to try to get at the SSH password file.

  64. Rob T. says:

    Just wanted to report, I have an Envoy IQ. I was able to successfully use the provided APK to get my installer password. Most of what I’ve seen on the blog posts here that pertain to the Envoy-S seem to also work for the Envoy IQ.

    Thank you so much for all of the invo.

  65. newbie says:

    Can the installer password generated using the app mentioned above be used to gain access to enlighten manager to get enhanced system/panel-level monitoring data? Thanks!

  66. No. That is done at your installer’s side (and seems to cost the installer $250 one off to do so!)

  67. newbie says:

    Thanks thecomputerperson!
    When I go here:http:///home?locale=en&classic=1
    I can access the main page, but on clicking the links, it asks for a username/password. On entering the “installer”/password generated using your andriod app does not work and give a 401 error. But the same username/password work for this URL:
    Any idea why the classic console interface links don’t work please?


  68. If you have the old oval shaped envoy the classic interface works. It won’t work on the new envoy s (rectangular). Use the new / normal interface hosted on the main /. Or the installer app.

  69. Hobe says:

    I was not able to get the app running on my mac. Can you generate the password for serial 121936152464?

  70. Martin says:

    Hi, new Envoy owner here. Love to try to access the installer pages directly, but the 2019 apk does not run on my phone. Anyone care to generate a password for me?
    Much appreciated!

  71. Martin says:

    Hmm, serial would be handy for me previous request: 121944126438

  72. I believe that newer Android versions need a signed APK – something that has not been done to the one I’ve made. Maybe some time in the future I will fix that – until then.. someone else will have to generate you a password.

  73. Martin says:

    Thanks for the prompt reply. I’ll be patient :-)
    And an inquiry, whatever happened to your C# code, did you continue with that? Is it possible to share?

  74. Martin says:

    Yeah, victory, an old Samsung tablet ran the application, I now have my password…..

  75. Tim says:

    Hi you’all. I’d really like to get my password, but I cant get the APK to run. Can anyone help please. my serial # is 121836023772.

  76. Andre says:

    An emulator on PC and Mac that supports ARM is NoxPlayer. To install (and run) this .APX just download it (outside NoxPlayer) and open (double-click) it.

  77. animesh912 says:

    1. Can we access the Folders inside the Envoy-S ? If yes, then how?
    2. Can we Run S Script and do a DB Reset and Un-Retire Microinverter / Storage. Please explore and let us know.

  78. vincent says:

    Could someone help me to generate a password, the app does not work for me?

  79. Peter Galbavy says:

    Thanks for this. The password generator worked on my old Envoy-M (pill shaped) but can I ask you make the password field in the app both bigger and maybe a clearer font? I spent ages mistaking a capital B for an 8 :-)

  80. Maybe if I ever make any changes to the app :D The other thing that needs doing is signing the app so that it works on more modern Android operating systems.

  81. Peter says:

    Hi I have the pill shaped LCD Envoy and trying to get admin password for SN:121439061899 I have tried to load the apk but cant get it working. Was hoping someone could assist and provide on behalf.

  82. billinva says:

    Your app works! Thanks!

  83. Just Some Solar Dude says:

    Wow, got a whole system off eBay, including the envoy-s. Installed your app and the installer password works and I have full control to setup the system, Thank you for your efforts!

  84. Thank you for taking the time to comment; I really enjoy the Enphase Envoy S system and the details I can get from it so hope you find your setup useful too.

  85. Alex says:

    Guys, been trying to access the Installer Login or “/admin/home?locale=en” for my envoy in combiner with no success. ANyone could get a password for: 121929119171. THanks!

  86. Pingback: Don’t browse eBay – you may buy something(s) unexpected – SG Blog

  87. Matthew says:

    Alex try:

  88. Matthew says:

    Alex try user id Enphase Password 79k8jC5h

  89. Alex says:

    Tried both, its a no go sadly.

  90. Alex says:

    Im actually able to login to the “Installer Login” using installer/79k8jC5h. But ip/admin page also asks for the username/password that I cant seem to get.

  91. Eric Anderson says:

    try the following URL with the installer pswd:
    works for me on a new Enphase IQ Combiner 3C.
    used bluestacks emulator to generate pswd.

  92. Steve says:

    Brilliant! Worked like a dream.
    App works on Pixel 2 running latest Android 11.
    Password generated worked on Envoy-S running R4.10.35, which I believe is the latest

    Thank you so much!

  93. Thanks for the thanks / feedback : )

  94. DanC says:

    Thanks for your work @thecomputerperson … Installed the app but generated pwd is not working for me. Can somebody please generate pwd for me just to make sure that I am not insane :-) ?

    SN: 121825044946
    FW: R4.10.35

    thanks !

  95. OpuntiaMacrorhiza says:

    After many attempts I am unable to install the .apk (probably because my only android device is way old v4.4.2).

    Would you be able to generate an installer password for me? S/N: 122033006286

  96. JL says:

    Thanks for your work @thecomputerperson … Same thing for me as above poster. Installed the app but generated pwd is not working for me. Can somebody please generate pwd for me.

    SN: 122040035593
    FW: R4.10.35

    thanks !

  97. poida97 says:

    Yes, fantastic work @thecomputerperson, sadly the generated password does not work for my Envoy-S-Standard-EU either, sn 121551034010, FW 5.0.48.
    Is it possible that the original installer changed the password? From what I understand of your work, that’s not possible.

  98. I don’t think a password change is possible. Ensure you are typing it correctly and you have caps in the right places etc. (careful in case a 1 looks like an l and an I (capital i) looks like an l etc.)

  99. poida97 says:

    Appreciate the fast reply! Definitely typing it correctly, and I’ve tried different usernames in the generator, eg installer, Installer, envoy, Envoy etc.
    I can see that lots of people have had success but I haven’t seen anybody with specifically FW v5.x.
    Looking through the limited access that I do have, there is an option under settings to change the password http://ip_address/home#change_password – but of course you need to know the password to be able to use it. Of course no issues in directly using the Android Installer Toolkit app.
    I’ve sent a message to Enphase support to ask for it… but that’s wishful thinking.

  100. Cage says:

    Hi all,

    Good work @thecomputerperson!! Hope to enjoy this pwgenerator as well…
    Would be very happy if someone could help me out and generate a password for me based on my serial.
    Tried to install the app both on my old Android as well as my Shield Tv but without success.

  101. Cage says:

    Forgot to add my serial : 121905008899

  102. poida97 says:

    Well it decided to work for me, random. Most likely cause of problems was a typo by the operator (me).
    Enphase did respond to my request… with a No.

    Cage, try installer and f57D858C

    Thanks all.

  103. OpuntiaMacrorhiza says:

    It’s truly exciting to see this is still working, thank you @thecomputerperson! Unfortunately, I am still unable to get this to work for me.

    @poida97 could you help me out?
    – Serial Number: 122033006286
    – Software Version: D5.0.54 (8698e4)

  104. Cage says:

    @poida97: cheers ! worked for me!

  105. JdR says:

    This is absolutely brilliant! Thanks for all efforts.

    Any chance I could pretty-please someone to generate the pwd for me? (No luck with this NOX thing).

    Serial: 122037051241

  106. allen w says:

    I love you. thank you. yer da best. this is what owners deserve, full control of the systems they pay for <3

  107. JdR says:

    @poida97: any chance you could repeat your magic on my serial?

    Serial: 122037051241

    Much obliged!

  108. Steve says:

    I’ll share the love and do this one


  109. I’d like to thank everyone here for being so helpful <3

  110. JdR says:

    Thanks Steve! That is brilliant!

  111. Bill H says:

    Thank you for providing this app. Works perfectly

  112. Matt C says:

    Hi everyone, for some reason my s10+ will not allow me to install the apk. Can I please trouble anyone with access to provide password for my serial numer: 121703010972

    VERY much appreciated.

  113. Anthony Vella says:


  114. Kaleb says:

    Thank you all for your helpfulness. Would anybody be able to hook me up with a password for S/N 122033006286 bet. D5.0.54 (8698e4)

  115. Jos says:


    BTW to access wifi configuration you can use this combination:
    user: envoy
    password: 6 last digit of serial number

  116. Kaleb says:

    @Jos, thank you so much!! This worked like a charm!

  117. Jost says:

    Could someone please generate the password for Serial Number
    please. I don’t have an android device.

    THank you very much in advance

  118. Steve says:

    Here you go


  119. Jost says:

    @Steve, thanks you so much, it worked

  120. rkokfhung says:

    Hi would someone be kind enough to generate the password for my Envoy #122042088302

    Thanks in advance. I’m on iphone :( Also what is the userid to use with that? admin/installer?

    I can get to

  121. Ar says:

    Hi there!
    Can anyone help out with generating a password for this envoy s metered ?
    Unfortunately can’t manage to do this myself. Many thanks in advance ! :)

  122. rkokfhung says:

    @Ar i managed to run the Blustacks android emulator. Your’s is installer/63g6ef84

    give it a go using the URL http://envoy.local/home the installer login is at the bottome of the page.

  123. jerkmaster says:

    rkokfhung: the user is “installer” , your password would be (case sensitive) 473Ca85b

    Ar: your password , according to the app, is 63g6ef84

    remember if you are grid tied you could really mess things up… be sure to write down what you change so you can undo it in the future. better to ask enphase or installer if you have questions before changing something important. if you dont know what you are doing.

  124. Ar says:

    Thanks ! Will give it a try

  125. Paul says:

    I see some helpful people generating passwords based on serial numbers. Can I request one too, please?

    Serial for my system is: 122049048865

    Many thanks in advance!

  126. Steve says:

    Hi Paul,


  127. Paul says:

    Many thanks Steve! I can now access the Envoy on my PV system and lots of useful information from it thanks to the password you provided, the articles here and all the useful comments.

    Thanks to all!

  128. Tom V says:

    Hi very cool, also looking for my installer password but don’t have an android phone. Could someone generate it.
    Serial is 122050032219

    Would be cool if someone made a html 5 version on this site :)

  129. Steve says:

    Here you go Tom,


  130. Tom V says:

    Steve, thanks worked great! Let’s see if I can extract data to my and go without the e.t. phone enphase functions.

  131. webcamjan says:

    Could someone please generate the password for Serial Number
    please. I don’t have an android device.

    Thanks in advance.

  132. Steve says:

    Here you go


  133. webcamjan says:

    Working well, thanks for your quick response.

  134. Joerg says:

    Could you please generate the password for SN
    Thx in advance

  135. Steve says:

    Hi joerg, try 3kjf7a32

  136. Joerg says:

    Wow, that is quick. It works fine.

  137. Franky says:

    Greetings all,
    Installer trying to gouge me for $350+ to install consumption CTs. I decided to install myself, but I need to enable the meter in toolkit. Can somebody please assist me with a password gen. Much appreciated. SN# 122046059860

  138. Steve says:

    Hi Franky,
    I think I can save you $350…


  139. Philippe says:

    Dear all,
    Thanks a lot for your Help, I also bought CTs and cannot activate them without paying a visit from the official installer! Is someone could process the Pwd to enter toolkit app? Envoy s metered SN# 122033063854
    Much appreciated

  140. Steve says:

    Try this

  141. Philippe says:

    Thanks Steve, unfortunately it doesn’t work for my Envoy, perhaps user name isn’t installer?

  142. Steve says:

    I just double checked, and that’s the code I get from the app – I’m just and end user like yourself who just happens to have an Android phone.
    Can installers change the password? Maybe someone else has some ideas?

  143. Philippe says:

    I shall have a visit next week to a friend getting a new installation from same installer company as mine. Perhaps I’ll get it via their technician

  144. Eric Anderson says:

    installer is all lowercase… i generated same password as steve…

  145. dejortiver says:

    I need the installer password for an IQ Envoy with S/N 121942114837. I have no access to any Android-compatible devices.
    Thanks in advance.

  146. Steve says:

    Should be:

  147. dejortiver says:

    @Steve: thank you very much. I appreciate your help.

  148. Sam says:

    Great info – thanks!

  149. Jeff says:

    Hi Could you help me out too? SN: 122032024473

  150. Steve says:

    Here you go Jeff

  151. Jeff says:

    Many thanks!

  152. Al says:

    Hi! Great info, thanks for posting! I’m looking for the pw for 122039058953. Thanks!

  153. steve says:

    Here you go.

  154. Al says:

    That’s super quick, thanks Steve! I can confirm it’s working!

  155. Ken says:

    Wow, this is fantastic. Great work, a fantastic read I learned so much. Unfortunately I do not have any android devices in my live currently to load your program. So….. if I may be so forward as to ask for some assistance. My system is 121911073539

  156. Steve says:

    Hi Ken,

  157. Mark says:

    My HomeAssistant app just added Envoy as an available plugin, could you generate the password for S/N 110946138970 please? Thank you so much for doing this work for the community!

  158. kundip says:

    Mine worked perfectly. Put APK on old OPPO mobile.

  159. MF says:

    Is anyone able to generate the password for S/N: 121904084251 ? It would be very much appreciated.


  160. Would someone be able to generate for 121650018553 please?

  161. I cannot figure out how to side-load the .apk file on my Moto g6 Play. It’s a LOT harder with Andriod 8.0! Would someone please be kind enough to tell me the password for my brand new Envoy S/N 122107039184?

  162. Never mind! I dug up an older Moto e4 Android phone and installed the Envoy password cracking .apk file. I used it with the serial no. to generate a password for the login pop-up that the Envoy device presents on my local LAN, namely “383dfed2”. That works just fine with my “brand new” Envoy with 21 LF 370W panels attached:

    Serial Number: 122107039184
    Part Number: 800-00555-r03
    Software Version: R4.10.35 (6ed292)
    Software Build Date: 12 Nov, 2018 5:57 PM

    Thanks! Great work!

  163. To Greig Strafford my app copy says: “BA72977h” for “121650018553”. That looks odd to me, given the “h” at the end and the upper case “BA”! Good luck! :-)

  164. Thanks for this blog entry. It made me look into it further and I’ve written a small Python sample app to calculate the password (and also implements all the other passwords from the DLL). No need for an Android app, etc.

    I’ve put it on GitHub: sarnau/EnphaseEnergy

  165. rct says:

    Wow @sarnau Nicely done – I can confirm that it works!

  166. That is stunning. You’ve taken what I wanted to do and managed it with grace. I just couldn’t work out the compiled code! How did you work out the salting / strings (e.g. ‘ EnPhAsE eNeRgY ‘)?

  167. DirtyGreen says:

    Thanks. I used the python script you linked to and it worked, even though my Envoy is a plain Envoy rather than an -S.

  168. The salts (which are obfuscated by subtracting 0x20 from the ASCII values) and the weird counting of 0 and 1 is just plain reverse-engineering. Something I am experienced in for several decades… This was pretty trivial stuff, glad you find it useful.

  169. Anthony says:

    fantastic work again thecomputerperson and Markus.
    For anybody not wanting to go to the trouble of installing python on your PC (although it’s not difficult), you can also run Markus’ code on a free online python host like PythonAnywhere.
    Just create an account, change your serial number in the py script and upload and then run it.

  170. Chris says:

    I hadn’t been able to get the android app to work (old device), but that python script works perfectly for me! Thanks guys!

  171. Johnno says:

    thanks markus – the python script worked a treat on a brand new Envoy-S install this week

  172. Bags says:

    Fantastic work. I used the python script and it works!
    Thanks heaps to everyone involved.

  173. kamahat says:

    Many thanks for the job !!!! works like a charm

  174. charles says:

    I used the python script and it works! Thanks a ton to everyone involved.

  175. decramy says:

    I did manage to get the /stream/meter URL in Nodered. You will need the “node-red-contrib-sse-client” palette and then use this:

    [{“id”:”830c8b80.f89718″,”type”:”inject”,”z”:”45ce5843.4f3ce”,”name”:”Start / Restart / Unpause stream”,”props”:[{“p”:”payload”,”v”:””,”vt”:”date”},{“p”:”topic”,”v”:””,”vt”:”string”}],”repeat”:””,”crontab”:””,”once”:false,”onceDelay”:0.1,”topic”:””,”payload”:””,”payloadType”:”date”,”x”:170,”y”:560,”wires”:[[“5944b091.17285”]]},{“id”:”de79afb2.f459b”,”type”:”inject”,”z”:”45ce5843.4f3ce”,”name”:”Pause stream”,”repeat”:””,”crontab”:””,”once”:false,”onceDelay”:0.1,”topic”:””,”payload”:””,”payloadType”:”date”,”x”:230,”y”:680,”wires”:[[“31c2c1a4.b6aabe”]]},{“id”:”31c2c1a4.b6aabe”,”type”:”change”,”z”:”45ce5843.4f3ce”,”name”:””,”rules”:[{“t”:”set”,”p”:”pause”,”pt”:”msg”,”to”:”true”,”tot”:”bool”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:460,”y”:680,”wires”:[[“50364aa0.f4b3d4”]]},{“id”:”fc7709e7.f95788″,”type”:”inject”,”z”:”45ce5843.4f3ce”,”name”:”Stop stream”,”repeat”:””,”crontab”:””,”once”:false,”onceDelay”:0.1,”topic”:””,”payload”:””,”payloadType”:”date”,”x”:230,”y”:640,”wires”:[[“fc633663.b0ce48”]]},{“id”:”fc633663.b0ce48″,”type”:”change”,”z”:”45ce5843.4f3ce”,”name”:””,”rules”:[{“t”:”set”,”p”:”stop”,”pt”:”msg”,”to”:”true”,”tot”:”bool”}],”action”:””,”property”:””,”from”:””,”to”:””,”reg”:false,”x”:470,”y”:640,”wires”:[[“50364aa0.f4b3d4”]]},{“id”:”50364aa0.f4b3d4″,”type”:”sse-client”,”z”:”45ce5843.4f3ce”,”name”:””,”url”:””,”events”:[],”headers”:{},”proxy”:””,”restart”:true,”rejectUnauthorized”:false,”withCredentials”:true,”timeout”:”10″,”x”:690,”y”:660,”wires”:[[“6fa504f8fca90df3”]]},{“id”:”5944b091.17285″,”type”:”http request”,”z”:”45ce5843.4f3ce”,”name”:””,”method”:”GET”,”ret”:”txt”,”paytoqs”:”ignore”,”url”:””,”tls”:””,”persist”:false,”proxy”:””,”authType”:”digest”,”x”:410,”y”:560,”wires”:[[“5e0c1620.061b18”]]},{“id”:”5e0c1620.061b18″,”type”:”function”,”z”:”45ce5843.4f3ce”,”name”:”Set Cookie”,”func”:”msg.headers = {‘Cookie’: ‘sessionId=’ + msg.responseCookies.sessionId.value};\nreturn msg;”,”outputs”:1,”noerr”:0,”x”:610,”y”:560,”wires”:[[“50364aa0.f4b3d4”]]},{“id”:”6fa504f8fca90df3″,”type”:”json”,”z”:”45ce5843.4f3ce”,”name”:””,”property”:”payload”,”action”:””,”pretty”:false,”x”:690,”y”:720,”wires”:[[“29dd2e5fd14716ea”]]},{“id”:”8e1dfedd9994b9aa”,”type”:”influxdb out”,”z”:”45ce5843.4f3ce”,”influxdb”:”5e1bce89.bfd22″,”name”:””,”measurement”:”envoy_meter”,”precision”:””,”retentionPolicy”:””,”database”:”database”,”precisionV18FluxV20″:”s”,”retentionPolicyV18Flux”:””,”org”:”default”,”bucket”:”default”,”x”:1070,”y”:660,”wires”:[]},{“id”:”29e442028acaef29″,”type”:”function”,”z”:”45ce5843.4f3ce”,”name”:”reconstruct data”,”func”:”// Influx:\n// If msg.payload is an array containing two objects, \n// the first object will be written as the set of \n// named fields, the second is the set of named tags.\n\n// {\”event\”:\”message\”,\”payload\”:{\”p\”:-109.715,\”q\”:-164.932,\”s\”:267.003,\”v\”:234.435,\”i\”:1.134,\”pf\”:-0.42,\”f\”:50},\”parts\”:{\”parts\”:{\”id\”:\”7f5ab7eaf0763c52\”,\”type\”:\”object\”,\”key\”:\”net-consumption\”,\”index\”:1,\”count\”:3},\”id\”:\”75bdb43ad68df8ae\”,\”type\”:\”object\”,\”key\”:\”ph-b\”,\”index\”:1,\”count\”:3},\”topic\”:\”net-consumption\”,\”phase\”:\”ph-b\”,\”_msgid\”:\”f81b1819c033b07d\”}\n\nfields = {};\ntags = {};\n\ntags = {\”topic\”: (msg.topic),\n \”phase\”: (msg.phase)\n };\nfields = {\”wNow\”: (msg.payload.p),\n \”reactPower\”: (msg.payload.q),\n \”apprntPwr\”: (msg.payload.s),\n \”rmsVoltage\”: (msg.payload.v),\n \”rmsCurrent\”: (msg.payload.i),\n \”pwrFactor\”: (,\n \”frequency\”: (msg.payload.f)\n };\n\nmsg.payload = [fields,tags]\nreturn msg;”,”outputs”:1,”noerr”:0,”initialize”:””,”finalize”:””,”libs”:[],”x”:1100,”y”:720,”wires”:[[“8e1dfedd9994b9aa”]]},{“id”:”e498a42fbb59c40c”,”type”:”split”,”z”:”45ce5843.4f3ce”,”name”:””,”splt”:”\\n”,”spltType”:”str”,”arraySplt”:1,”arraySpltType”:”len”,”stream”:false,”addname”:”phase”,”x”:930,”y”:720,”wires”:[[“29e442028acaef29”]]},{“id”:”29dd2e5fd14716ea”,”type”:”split”,”z”:”45ce5843.4f3ce”,”name”:””,”splt”:””,”spltType”:”str”,”arraySplt”:1,”arraySpltType”:”len”,”stream”:false,”addname”:”topic”,”x”:810,”y”:720,”wires”:[[“e498a42fbb59c40c”]]},{“id”:”5e1bce89.bfd22″,”type”:”influxdb”,”hostname”:”″,”port”:”8086″,”protocol”:”http”,”database”:”database”,”usetls”:false,”tls”:”a0af54c0.3a7438″,”influxdbVersion”:”2.0″,”url”:”http://your-influx-database-here”,”rejectUnauthorized”:false},{“id”:”a0af54c0.3a7438″,”type”:”tls-config”,”name”:””,”cert”:””,”key”:””,”ca”:””,”certname”:””,”keyname”:””,”caname”:””,”servername”:””,”verifyservercert”:false}]

    Just use the installer credentials and put them in the HTTP-request. Also add a influx-connection.

  176. Ryan says:

    Help creating a password for an envoy IQ 121706022182 would be fantastic. Thanks a bunch!

  177. Bryan says:

    Try – installer/35d2db35 – I ported the outstanding python script to javascript to make this self-serve, I’ll host it somewhere soon.

  178. blah says:

    Looks like the previous comment got moderated, perhaps to reduce the “please generate my password!’s in the comments. Here’s a port of sarnau’s python script to JS to help those who’d still like help to get it.

  179. Lester says:

    Thanks for all the contributors and comments on this thread. I used the Python script cited in the main article above to gen my installer password for firmware version D5.0.55 (4f2662); it worked a treat.

  180. boysenbill says:

    thanks to computerperson and markus fritze for the python method. I accessed my installer from envoy.local. thanks

  181. Sashi N says:

    Does anyone have a way of getting the /stream/meter data into SQL Server?

  182. m says:

    You are doing god’s work, thanks!

  183. Sashi N says:

    Alright, some GISYBF, late night tinkering and I have managed to get the Python script to get all the relevant bits of the stream meter data straight into my SQL Server instance. Things to note:

    1) I have only two phases, so I have populated only ph-a and ph-b data elements. If you have three phases, you need to add the data elements accordingly to the Python Script and also the SQL Server table
    2) I am INSERTing into my SQL Server table. This is by definition an intensive process (gets logged). I have maintenance tasks on my SQL Server that run on a regular schedule and back up my server logs. If you don’t do that, you can fill up your hard drive space or reach the limits of your log file space

    SQL Code to create table (needs to be run only once).

    — Check To See If Table Already Exists. If Table Already Exists, Drop Existing Table

    SELECT 1


    DROP TABLE <>.dbo.<>


    — Create Table

    CREATE TABLE <>.dbo.<>
    Record_Inserted NUMERIC(16, 0)
    , prod_ph_a_wNow NUMERIC(15, 4)
    , prod_ph_a_ReactPower NUMERIC(15, 4)
    , prod_ph_a_ApprntPower NUMERIC(15, 4)
    , prod_ph_a_rmsVoltage NUMERIC(15, 4)
    , prod_ph_a_rmsCurrent NUMERIC(15, 4)
    , prod_ph_a_pwrFactor NUMERIC(15, 4)
    , prod_ph_a_Frequency NUMERIC(15, 4)
    , prod_ph_b_wNow NUMERIC(15, 4)
    , prod_ph_b_ReactPower NUMERIC(15, 4)
    , prod_ph_b_ApprntPower NUMERIC(15, 4)
    , prod_ph_b_rmsVoltage NUMERIC(15, 4)
    , prod_ph_b_rmsCurrent NUMERIC(15, 4)
    , prod_ph_b_pwrFactor NUMERIC(15, 4)
    , prod_ph_b_Frequency NUMERIC(15, 4)
    , net_cons_ph_a_wNow NUMERIC(15, 4)
    , net_cons_ph_a_ReactPower NUMERIC(15, 4)
    , net_cons_ph_a_ApprntPower NUMERIC(15, 4)
    , net_cons_ph_a_rmsVoltage NUMERIC(15, 4)
    , net_cons_ph_a_rmsCurrent NUMERIC(15, 4)
    , net_cons_ph_a_pwrFactor NUMERIC(15, 4)
    , net_cons_ph_a_Frequency NUMERIC(15, 4)
    , net_cons_ph_b_wNow NUMERIC(15, 4)
    , net_cons_ph_b_ReactPower NUMERIC(15, 4)
    , net_cons_ph_b_ApprntPower NUMERIC(15, 4)
    , net_cons_ph_b_rmsVoltage NUMERIC(15, 4)
    , net_cons_ph_b_rmsCurrent NUMERIC(15, 4)
    , net_cons_ph_b_pwrFactor NUMERIC(15, 4)
    , net_cons_ph_b_Frequency NUMERIC(15, 4)
    , total_cons_ph_a_wNow NUMERIC(15, 4)
    , total_cons_ph_a_ReactPower NUMERIC(15, 4)
    , total_cons_ph_a_ApprntPower NUMERIC(15, 4)
    , total_cons_ph_a_rmsVoltage NUMERIC(15, 4)
    , total_cons_ph_a_rmsCurrent NUMERIC(15, 4)
    , total_cons_ph_a_pwrFactor NUMERIC(15, 4)
    , total_cons_ph_a_Frequency NUMERIC(15, 4)
    , total_cons_ph_b_wNow NUMERIC(15, 4)
    , total_cons_ph_b_ReactPower NUMERIC(15, 4)
    , total_cons_ph_b_ApprntPower NUMERIC(15, 4)
    , total_cons_ph_b_rmsVoltage NUMERIC(15, 4)
    , total_cons_ph_b_rmsCurrent NUMERIC(15, 4)
    , total_cons_ph_b_pwrFactor NUMERIC(15, 4)
    , total_cons_ph_b_Frequency NUMERIC(15, 4)

    Once the table has been created, I created a task in my SQL Server that runs the following Python script

    import json
    import requests
    import threading
    from requests.auth import HTTPDigestAuth
    import datetime
    import pandas as pd
    import pyodbc

    # envoy-s host IP
    host = ‘<>’
    # envoy installer password
    password = ‘<>’

    user = ‘installer’
    auth = HTTPDigestAuth(user, password)
    marker = b’data: ‘

    dsn =”DRIVER={SQL SERVER};server=<>;database=<>;uid=<>;pwd=<>”

    def scrape_stream():
    while True:
    url = ‘http://%s/stream/meter’ % host
    stream = requests.get(url, auth=auth, stream=True, timeout=5)
    for line in stream.iter_lines():
    if line.startswith(marker):
    currentDT =
    curr_date = (currentDT.strftime(“%Y%m%d%H%M%S”))
    data = json.loads(line.replace(marker, b”))

    # Use the same format below to add Phase C data elements if needed
    # For example, prod_ph_c_wNow = data[‘production’][‘ph-c’][‘p’]

    prod_ph_a_wNow = data[‘production’][‘ph-a’][‘p’]
    prod_ph_a_ReactPower = data[‘production’][‘ph-a’][‘q’]
    prod_ph_a_ApprntPower = data[‘production’][‘ph-a’][‘s’]
    prod_ph_a_rmsVoltage = data[‘production’][‘ph-a’][‘v’]
    prod_ph_a_rmsCurrent = data[‘production’][‘ph-a’][‘i’]
    prod_ph_a_pwrFactor = data[‘production’][‘ph-a’][‘pf’]
    prod_ph_a_Frequency = data[‘production’][‘ph-a’][‘f’]
    prod_ph_b_wNow = data[‘production’][‘ph-b’][‘p’]
    prod_ph_b_ReactPower = data[‘production’][‘ph-b’][‘q’]
    prod_ph_b_ApprntPower = data[‘production’][‘ph-b’][‘s’]
    prod_ph_b_rmsVoltage = data[‘production’][‘ph-b’][‘v’]
    prod_ph_b_rmsCurrent = data[‘production’][‘ph-b’][‘i’]
    prod_ph_b_pwrFactor = data[‘production’][‘ph-b’][‘pf’]
    prod_ph_b_Frequency = data[‘production’][‘ph-b’][‘f’]
    net_cons_ph_a_wNow = data[‘net-consumption’][‘ph-a’][‘p’]
    net_cons_ph_a_ReactPower = data[‘net-consumption’][‘ph-a’][‘q’]
    net_cons_ph_a_ApprntPower = data[‘net-consumption’][‘ph-a’][‘s’]
    net_cons_ph_a_rmsVoltage = data[‘net-consumption’][‘ph-a’][‘v’]
    net_cons_ph_a_rmsCurrent = data[‘net-consumption’][‘ph-a’][‘i’]
    net_cons_ph_a_pwrFactor = data[‘net-consumption’][‘ph-a’][‘pf’]
    net_cons_ph_a_Frequency = data[‘net-consumption’][‘ph-a’][‘f’]
    net_cons_ph_b_wNow = data[‘net-consumption’][‘ph-b’][‘p’]
    net_cons_ph_b_ReactPower = data[‘net-consumption’][‘ph-b’][‘q’]
    net_cons_ph_b_ApprntPower = data[‘net-consumption’][‘ph-b’][‘s’]
    net_cons_ph_b_rmsVoltage = data[‘net-consumption’][‘ph-b’][‘v’]
    net_cons_ph_b_rmsCurrent = data[‘net-consumption’][‘ph-b’][‘i’]
    net_cons_ph_b_pwrFactor = data[‘net-consumption’][‘ph-b’][‘pf’]
    net_cons_ph_b_Frequency = data[‘net-consumption’][‘ph-b’][‘f’]
    total_cons_ph_a_wNow = data[‘total-consumption’][‘ph-a’][‘p’]
    total_cons_ph_a_ReactPower = data[‘total-consumption’][‘ph-a’][‘q’]
    total_cons_ph_a_ApprntPower = data[‘total-consumption’][‘ph-a’][‘s’]
    total_cons_ph_a_rmsVoltage = data[‘total-consumption’][‘ph-a’][‘v’]
    total_cons_ph_a_rmsCurrent = data[‘total-consumption’][‘ph-a’][‘i’]
    total_cons_ph_a_pwrFactor = data[‘total-consumption’][‘ph-a’][‘pf’]
    total_cons_ph_a_Frequency = data[‘total-consumption’][‘ph-a’][‘f’]
    total_cons_ph_b_wNow = data[‘total-consumption’][‘ph-b’][‘p’]
    total_cons_ph_b_ReactPower = data[‘total-consumption’][‘ph-b’][‘q’]
    total_cons_ph_b_ApprntPower = data[‘total-consumption’][‘ph-b’][‘s’]
    total_cons_ph_b_rmsVoltage = data[‘total-consumption’][‘ph-b’][‘v’]
    total_cons_ph_b_rmsCurrent = data[‘total-consumption’][‘ph-b’][‘i’]
    total_cons_ph_b_pwrFactor = data[‘total-consumption’][‘ph-b’][‘pf’]
    total_cons_ph_b_Frequency = data[‘total-consumption’][‘ph-b’][‘f’]

    cnxn = pyodbc.connect(dsn)
    cursor = cnxn.cursor()
    INSERT INTO <>.dbo.<> VALUES
    ”’ + str(curr_date) + ”’
    , ”’ + str(prod_ph_a_wNow) +”’
    , ”’ + str(prod_ph_a_ReactPower) +”’
    , ”’ + str(prod_ph_a_ApprntPower) +”’
    , ”’ + str(prod_ph_a_rmsVoltage) +”’
    , ”’ + str(prod_ph_a_rmsCurrent) +”’
    , ”’ + str(prod_ph_a_pwrFactor) +”’
    , ”’ + str(prod_ph_a_Frequency) +”’
    , ”’ + str(prod_ph_b_wNow) +”’
    , ”’ + str(prod_ph_b_ReactPower) +”’
    , ”’ + str(prod_ph_b_ApprntPower) +”’
    , ”’ + str(prod_ph_b_rmsVoltage) +”’
    , ”’ + str(prod_ph_b_rmsCurrent) +”’
    , ”’ + str(prod_ph_b_pwrFactor) +”’
    , ”’ + str(prod_ph_b_Frequency) +”’
    , ”’ + str(net_cons_ph_a_wNow) +”’
    , ”’ + str(net_cons_ph_a_ReactPower) +”’
    , ”’ + str(net_cons_ph_a_ApprntPower) +”’
    , ”’ + str(net_cons_ph_a_rmsVoltage) +”’
    , ”’ + str(net_cons_ph_a_rmsCurrent) +”’
    , ”’ + str(net_cons_ph_a_pwrFactor) +”’
    , ”’ + str(net_cons_ph_a_Frequency) +”’
    , ”’ + str(net_cons_ph_b_wNow) +”’
    , ”’ + str(net_cons_ph_b_ReactPower) +”’
    , ”’ + str(net_cons_ph_b_ApprntPower) +”’
    , ”’ + str(net_cons_ph_b_rmsVoltage) +”’
    , ”’ + str(net_cons_ph_b_rmsCurrent) +”’
    , ”’ + str(net_cons_ph_b_pwrFactor) +”’
    , ”’ + str(net_cons_ph_b_Frequency) +”’
    , ”’ + str(total_cons_ph_a_wNow) +”’
    , ”’ + str(total_cons_ph_a_ReactPower) +”’
    , ”’ + str(total_cons_ph_a_ApprntPower) +”’
    , ”’ + str(total_cons_ph_a_rmsVoltage) +”’
    , ”’ + str(total_cons_ph_a_rmsCurrent) +”’
    , ”’ + str(total_cons_ph_a_pwrFactor) +”’
    , ”’ + str(total_cons_ph_a_Frequency) +”’
    , ”’ + str(total_cons_ph_b_wNow) +”’
    , ”’ + str(total_cons_ph_b_ReactPower) +”’
    , ”’ + str(total_cons_ph_b_ApprntPower) +”’
    , ”’ + str(total_cons_ph_b_rmsVoltage) +”’
    , ”’ + str(total_cons_ph_b_rmsCurrent) +”’
    , ”’ + str(total_cons_ph_b_pwrFactor) +”’
    , ”’ + str(total_cons_ph_b_Frequency) +”’


    except requests.exceptions.RequestException as e:
    print(‘Exception fetching stream data: %s’ % e)

    def main():
    stream_thread = threading.Thread(target=scrape_stream)
    # stream_thread.setDaemon(True)

    if __name__ == ‘__main__’:

    I will be working on some open source data visualization tools and will build an GUI to display this data. Will keep you posted and thanks to all the wonderful people on the WWW who post/share things that made all this possible

  184. copitano says:

    I’ve been using the script for quite some time now. It works great. A huge thank you to everyone who contributed.
    Now I have a little problem. Domoticz has been out for a day and a half. Now the production data is no longer correct. Is there a possibility to correct the production figures for the time when Domoticz was down?

  185. What software version is that on?

  186. pnakashian says:

    software version is D7.0.68

    i don’t know if this is only pushed to envoys connected to backup batteries and solar panels, i did notice yesterday later envoy firmware was updated the battery firmware were also being updated at a later time.

    There is a small non-usable workaround that gives me temporary access to envoy from a browser when I’m redicrected to


    there is a button on this page to login with enphase using enlighten credentials. the redirect with this login is very slow but eventually i am redirected and can see the data probably with some sort of session token, but the session doesn’t last long, i did it late last night and it was already expired this morning.

    i believe the redirect back to envoy url looked like this


    There is also now a new web link

    login with enlighten credenticals it is where we are supposed to create access token, but 2 required fields
    1 empty “system” parameter , and another “Envoy” dropdown which is empty no matter what I enter for the system parameter, so either my enlighten privileges need to be increased for these fields to be populated or the site is not yet complete. the is also the redirected site from envoy above.

  187. I’m all the way back on software version D5.0.49! Wonder how you trigger an update.

  188. pnakashian says:

    During the battery installation I recall the installer said they had to upgrade the envoy firmware version for the batteries to operate correctly, I saw first hand when the envoy consumption/production measurements became wrong due to lack of cable shielding the battery used that data to discharge power when I was already producing more than consuming. This initial upgrade didn’t revoke my local access. local access now not only requires access token but it is also unsigned ssl https://envoy.ip/ivp/meters.

  189. james says:

    Thanks the python password generator worked perfectly

  190. Dolph V S says:

    I am not a computer person.
    I tried to follow the thread and see if I could figure out how to acquire my Enphase Installer password, but did not manage to get passed the programming language / script hurdle.
    Maybe someone can explain in simple terms how I can get my password? It would mean a great deal to me.

  191. Do you have an Android mobile phone?
    Or just post your serial number here and I suspect someone will generate the password for you.

  192. dolphvs says:

    I am sorry for the delayed response. I never got an e-mail someone replied.
    Thank you for replying. :-)
    My serial number is: 122128052044
    The android route did not work out for me either.
    I’m a real computer illiterate. To reply to the previous message I had to create another account, because I could not remember how I sent the first message. Doh. Disadvantage of being retired I guess.

  193. dolphvs says:

    My serial number is: 122128052044
    The first one who can provide the Installer password/code, I will transfer $10 via PayPal after verification that it works.

  194. poida97 says:


    If you must transfer, transfer to the OP of this post.

  195. dolphvs says:

    Hello poida97, Thank you VERY much for having taken the time and effort to generate a password for my Envoy-S s/n 122128052044.
    However, it does not work (message: Invalid Username or Password).
    Maybe the Envoy software version is too new (D5.0.62.210602
    (5e57a9)) or the Username ”installer” has changed?
    Perhaps there are people who see this as a challenge AND have the brains to drill down to a solution. My brain is just too small to solve this problem.

  196. poida97 says:

    Hmm, not sure what might be causing the issue. I just installed a replacement Envoy S Metered + DRM yesterday, my software version is the same as yours, and the generated password worked fine for me.
    I can’t help with the technical stuff, so can you just double check the serial number, and that you are using the username “installer” all in lowercase, and that the password case matches also? Please also try in a private browser session.

  197. poida97 says:

    also… if you search the comments on this thread by my username you will see that it didn’t work for me on first attempt. Then it decided to work, with the same details. Maybe the envoy has a timeout period, try leaving it alone for 24 hours before trying again just a guess.

  198. dolphvs says:

    poida97, once again many thanks for your response. I will certainly try again after 24 hrs.
    I did triple-check the input for lower/uppercase etc.
    I used the Installer Toolkit App on my Android phone (because location pin is required).
    I have to look into how to do it with my laptop and Firefox.

  199. dolphvs says:

    Victory !! after having left it for 24 hrs and logging in with my laptop and a Firefox private window, I was in. Thank you poida97 for your continued help.
    I want to apologise to the entire community her for asking the question: ”What is my password?”. I now realise that countless persons have asked the same question and you must have gotten really tired with it. However, I presume the other persons asking the question are programming illiterates like me and could not look past the scripts and technical language in the above posts. After my failed first attempt to login with my password (Thanks poida97) I scraped together all me courage and trawled through the posts. Thanks to blah for posting his link to calculate your own password for dummies:
    I also want to apologise to persons I have bothered personally, like the computerperson and Markus Fritze.
    Anyway, onwards to my next quest: getting rid of the anti-islanding setting on my Enphase system (for emergency situations only).

  200. vk2him says:

    For those interested, I’ve used this password generator to create a Home Assistant addon that outputs mqtt from the json steam http://envoy.local/stream/meter

    It’s easy to install and configure via a single click of the “add Repository” button in the instructions:

  201. Rick says:

    I was able to log in to the installer panel via http://{ipgoeshere}/installer/setup/home#overview with account ‘installer’ and password generated with the / (gives the same password). D5.0.55 (4f2662)

  202. Ben says:

    Could all this information be used to build SMART solar charger? I would LOVE to push “ALL” if my surplus solar power into a batterybank. I would need smart software (and hardware) to only peak shave the surplus solar charge to the battery bank. My Envoy is connected to the smart meter (grid) so (in theorie) the system should know when the produced solar power is exported. There is where i would like a relay to switch and activate the charger.
    Could someone build this for me?
    Or is there a better way to storage the surplus solar power?
    And YES i do know of the very expensive Enphase battery’s.

  203. Paul says:

    Thanks 4 sharing, it worked for me.

  204. Phoenix says:

    Merci pour cet app fonctionne nickel j’ai l’ai utiliser sous W10 avec bluestacks sur une envoy metered de 2021

  205. pv8484 says:

    Thanks for the great work. I can confirm generated password works on Envoy iQ D5.0.62 (5e57a9).

  206. AntiG17 says:

    Merci pour le lien, ça fonctionne parfaitement

  207. ZimbiX says:

    Thanks for all this valuable research! Using what I learned here, I’ve been able to create a program that switches my battery-less Enphase system to a zero-export grid profile while my energy retailer, Amber, has a negative feed-in tariff; thereby avoiding being charged money to export in those periods of reduced demand 😀

  208. Wow, not come across a plan (in the UK at least) which potentially costs you if you export during reduced demand times! Though unlike Aus; we also don’t have the DRM (Demand Response Mode?) flag/switch requirement.

  209. cwietholt says:

    I just tried the Python code, the Android App and on my Envoy iQ D7.3.120 without any luck. Any suggestions?

  210. cwietholt says:

    @pnakashian: It seems that you are having the same difficulties I am having with the D.7.x version. Did you find a solution?

  211. Pim says:

    If there is a solution, i would be very pleased….my Envoy-S-Standard-EU is on firmware D7.0.88

Comment on this topic

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s