sanghviharshit / ha-monarchmoney

💰💲🏠💳🏦 Integration for Monarch in Home Assistant
https://www.monarchmoney.com/referral/craudhiyod
MIT License
15 stars 3 forks source link

Most sensors do not populate #3

Open elstevega opened 8 months ago

elstevega commented 8 months ago

The only sensor that is retrieving data from Monarch Money is 'Net Worth'. All the others are coming back as 0.

konecnyna commented 7 months ago

I've got the same issue.

I made a quick script to test monarch money portion of the code (not sure how you properly test a home assistant sensor in isolation) and it returns all the expect data. Still trying to narrow it down but looks right now it seems like a sensor write issue.


from monarchmoney import MonarchMoney
mm = MonarchMoney()

ATTR_ASSETS = "ASSETS"
ATTR_LIABILITIES = "LIABILITIES"

ATTR_BROKERAGE = "Investments"
ATTR_CREDIT = "Credit Cards"
ATTR_DEPOSITORY = "Cash"
ATTR_LOAN = "Loans"
ATTR_OTHER = "Other"
ATTR_REAL_ESTATE = "Real Estate"
ATTR_VALUABLE = "Valuables"
ATTR_VEHICLE = "Vehicles"
ATTR_OTHER_ASSET = "Other Assets"
ATTR_OTHER_LIABILITY = "Other Liabilities"
SENSOR_TYPES_GROUP = {
    ATTR_BROKERAGE: {
        "type": "brokerage",
        "group": ATTR_ASSETS,
        "icon": "mdi:chart-line",
    },
    ATTR_CREDIT: {
        "type": "credit",
        "group": ATTR_LIABILITIES,
        "icon": "mdi:credit-card",
    },
    ATTR_DEPOSITORY: {"type": "depository", "group": ATTR_ASSETS, "icon": "mdi:cash"},
    ATTR_LOAN: {"type": "loan", "group": ATTR_LIABILITIES, "icon": "mdi:bank"},
    ATTR_OTHER: {"type": "other", "group": "OTHER", "icon": "mdi:information-outline"},
    ATTR_REAL_ESTATE: {"type": "real_estate", "group": ATTR_ASSETS, "icon": "mdi:home"},
    ATTR_VALUABLE: {
        "type": "valuables",
        "group": ATTR_ASSETS,
        "icon": "mdi:treasure-chest",
    },
    ATTR_VEHICLE: {"type": "vehicle", "group": ATTR_ASSETS, "icon": "mdi:car"},
    ATTR_OTHER_ASSET: {
        "type": "other_asset",
        "group": ATTR_ASSETS,
        "icon": "mdi:file-document-outline",
    },
    ATTR_OTHER_LIABILITY: {
        "type": "other_liability",
        "group": ATTR_LIABILITIES,
        "icon": "mdi:account-alert-outline",
    },
}

def balances(accounts, category): 
    account_type = SENSOR_TYPES_GROUP[category]["type"]
    account_data = {}

    sensor_type_accounts = [
        account
        for account in accounts
        if account.get("type").get("name") == account_type
    ]

    for account in sensor_type_accounts:
        institution = None
        try:
            institution = account.get("credential").get("institution").get("name", "")
        except AttributeError:
            pass

        account_data[account.get("id", "")] = {
            "id": account.get("id", ""),
            "name": account.get("displayName", ""),
            "balance": account.get("displayBalance", ""),
            "account_type": account.get("type").get("name", ""),
            "institution": institution,
        }
    sensor_type_accounts_sum = round(
        sum(
            sensor_type_account["displayBalance"]
            for sensor_type_account in sensor_type_accounts
        )
    )
    print(category)
    print(sensor_type_accounts_sum)
    #print(account_data)
def net_worth(accounts):
    print("=======================")
    print("Net worth")
    print("=======================")

    active_accounts = [
        account for account in accounts if account["includeInNetWorth"] is True
    ]

    asset_accounts = [
        account
        for account in active_accounts
        if account["isAsset"] is True
        # and account["type"]["name"] in ASSET_ACCOUNT_TYPES
    ]
    liability_accounts = [
        account
        for account in accounts
        if account["isAsset"] is False
        # and account["type"]["name"] in LIABILITY_ACCOUNT_TYPES
    ]

    asset_accounts_sum = round(
        sum(asset_account["displayBalance"] for asset_account in asset_accounts)
    )
    liability_accounts_sum = round(
        sum(
            liability_account["displayBalance"]
            for liability_account in liability_accounts
        )
    )

    active_accounts_sum = asset_accounts_sum - liability_accounts_sum

    print(active_accounts_sum)
    print(asset_accounts_sum)
    print(liability_accounts_sum)

async def login_to_monarch(email, password):
    await mm.login(email, password)
    data = await mm.get_accounts()
    accounts = data["accounts"]
    net_worth(accounts)
    categories = SENSOR_TYPES_GROUP.keys()

    print("=======================")
    print("Balances")
    print("=======================")
    for category in categories:
        balances(accounts, category)

import asyncio

EMAIL=""
PASSWORD=""
asyncio.run(login_to_monarch(EMAIL, PASSWORD)) 
elstevega commented 7 months ago

Thanks for looking into this - curious to see what you find.

sanghviharshit commented 7 months ago

The default update interval is 1 hour. Can you check if it updates in 1 hour or not?

konecnyna commented 7 months ago

I've changed it between 30mins and 1hr doesn't seem to change the sensor. The state doesn't seem to persist either when I alter the settings but i suspect that might be an artifact of HACs or HA.

It's strange be because the net worth sensor is accurate and updates but all other sensors are 0.

Running:
Core 2024.1.5
Supervisor 2023.12.1
Operating System 11.4
TBTHEDBA commented 7 months ago

Also having the same issue.

itzalgd24 commented 7 months ago

Just installed and having the same issue. All 0's except Net Worth.

elstevega commented 7 months ago

I'm wondering if there is a problem with the repo? Downloading through HACs does not bring back the most recent code changes made two weeks ago. If I download the whole repo and drop it in HA I get a 'failed to initialize' error.

If I just selectively use the latest sensor.py, config_flow.py & update_coordinator.py the integration initializes but then again, all sensor except net_worth are 0.

sanghviharshit commented 7 months ago

HACS expects we publish a new release in github, I just did that. See if you can pull latest release and if it fixes the issue

elstevega commented 7 months ago

Completely deleted the integration & started over in HACs. Looks like it grabbed the 0.0.2 release, which is good, however now it's caught in loop of "Failed setup, will retry" & "Initializing". Nothing in the log.

konecnyna commented 7 months ago

Same issue as @elstevega

ZarielZariel commented 7 months ago

Same issue as @elstevega

elstevega commented 7 months ago

Ok - some updates: In sensor.py starting at line 313, comment these lines out & then add: '# c = cashflow.get("summary")[0]

'# self._state = c.get("summary").get("savings") '# self._income = c.get("summary").get("sumIncome") '# self._expenses = c.get("summary").get("sumExpense") '# self._savings = c.get("summary").get("savings") '# self._savings_rate = c.get("summary").get("savingsRate") * 100

    self._income = 0
    self._expenses = 0
    self._savings = 0
    self._savings_rate = 0

and in update_coordinator.py comment out lines 109-110 '# cashflow = await self._api.get_cashflow() '# data["cashflow"] = cashflow

Seems Monarch doesn't like the get_cashflow() API call

Now I'm getting data for Cash, Credit, Net Worth & Vehicles. Expense, Income & Cash Flow are unknown

Monarch Loans, Monarch Other, Monarch Other Assets, Monarch Other Liabilities, Monarch Real Estate, Monarch Valuables are all still $0.00 - but that may be correct as I don't have any data that fits those categories. (edit: not true as I have a ton of investment accounts - not sure which bucket they should be in...)

sanghviharshit commented 2 months ago

Can you please update to the latest release (0.0.3) and report if it's still an issue?

konecnyna commented 2 months ago

It works! Thank you!

TBTHEDBA commented 2 months ago

I can't get past authentication. Anyone having that issue?

On Sun, Jun 30, 2024, 9:43 AM defkon @.***> wrote:

It works! Thank you!

— Reply to this email directly, view it on GitHub https://github.com/sanghviharshit/ha-monarchmoney/issues/3#issuecomment-2198585370, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJXIGPVNWJY2BZP3JMREHCLZKAKPJAVCNFSM6AAAAABCLA37IWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOJYGU4DKMZXGA . You are receiving this because you commented.Message ID: @.***>