Skip to content

Status notify updates#466

Open
balk77 wants to merge 8 commits intocorneel27:status_notify_updatesfrom
balk77:status_notify_updates
Open

Status notify updates#466
balk77 wants to merge 8 commits intocorneel27:status_notify_updatesfrom
balk77:status_notify_updates

Conversation

@balk77
Copy link
Collaborator

@balk77 balk77 commented Nov 23, 2025

Addition of status codes.

Todo:

  • Documentation
  • More statuses for some errors

@balk77 balk77 requested a review from corneel27 as a code owner November 23, 2025 19:40
@jsimonetti
Copy link
Collaborator

Ik heb hier nog totaal niet over nagedacht, maar waarom gebruiken we niet gewoon json om informatie terug te sturen naar HA?

in een automation kun je dan iets doen als:

{{ states('input_text.dao_notification_json') | from_json }}

@balk77
Copy link
Collaborator Author

balk77 commented Nov 24, 2025

Dat lijkt me ook beter. Dan sturen we {"DAO Calc gestart", 101} of iets dergelijks. Dan kunnen we ook de optie om een notificatie wel of niet te sturen bij berekenen weghalen. Alleen een check of de entity is ingesteld.

@balk77
Copy link
Collaborator Author

balk77 commented Nov 24, 2025

Dan zou het zoiets worden:

def notify(self, message, status, notification_berekening = True):        
        # send notification if entity is set in config
        if self.notification_entity is not None:
            # build notification message
            notify_dict = {
                "message": message + " " + dt.datetime.now().strftime("%d-%m-%Y %H:%M:%S"),
                "status": status,
            }
            # serialize to json
            json_output = json.dumps(notify_dict, indent=4)
            # send the notification
            self.set_value(
                self.notification_entity,
                notify_dict,
            )

Waarbij we ook de timestamp weg kunnen laten want die noteert HA ook al. Dubbelop dus. Dit is wel een breaking change overigens.

@jsimonetti
Copy link
Collaborator

Ik zou de timestamp ook in een lose json key stoppen trouwens, niet in de message.

Aangezien het breaking is, kunnen we dit achter een feature flag hangen. 'use_json_notification' oid?
Dan kun je helemaal los gaan :)

@corneel27
Copy link
Owner

Sorry, dat ik zo laat "instap".
Ik ben druk geweest met het fixen van een paar andere storende fouten m.b.t. de warmtepomp en de boiler.
Die ga ik zo publishen in een nieuwe test-versie.

Ik ben het met Jeroen eens: laten we het gelijk goed doen.
Met json kunnen we optioneel maken. Dat optionele kan eenvoudig door in de settings een extra optionele "json-notify entity" op te nemen.
Als die is geconfigureerd (sterk aanbevolen) dan sturen we daar een een json bericht naar toe met status-code.
Als die andere (ook) nog is geconfigureerd sturen we het oude bericht, zonder status-code.
Over een paar maanden maken we de oude methode "deprecated" en faseren we hem uit.
Dan wordt het geen breaking change maar sturen we de gebruikers naar de json-implementatie.

Overigens: de notity-function hoort m.i. in da_base.py.
Dan kunnen andere functies (zoals straks de pv-voorspeller) er ook gebruik van maken.

@balk77
Copy link
Collaborator Author

balk77 commented Nov 25, 2025

Klinkt alsof we op dezelfde lijn zitten! Ik ga hier aan werken.

  • config optioneel maken
  • Functie naar da_base
  • lijst met codes (ik heb al een begin)
  • documentatie

Voor die laatste: wil je dat in docs.md of in de wiki, met een link er naar in docs?

@corneel27
Copy link
Owner

Voordat je aan de gang gaat graag aandacht voor het volgende:
Ik had gisteravond jouw eerste PR ( Refactor notifcations in day-ahead #465 ) goedgekeurd voordat ik het bij mij lokaal had getest. Daarin zaten toch twee storende fouten:

  1. ik kreeg direct een run time error: op ef notify(self, message,notification_berekening == True): (moest zijn ef notify(self, message,notification_berekening=True):. Hiedoor moest ik een nieuwe testversie maken.
  2. stiekum was ook de functionaliteit veranderd: ik krijg nu ook notificaties van van alle meldingen, terwijl ik alleen notificaties ontving van warnings en errors
    Mijn vraag aan jou is om alle code voor je die aanbiedt als PR te testen op run-time fouten en functioaniliteit en anders te melden als "breaking change".
    Voor mezelf heb ik ervan geleerd om externe PR's eerst bij mij lokaal te testen voordat ik ze goedkeur.

Verder heb ik nog een paar stijl-wensen, die ik zelf aanhou bij nieuwe functies:

  1. variabele-namen in het Engels
  2. iedere functie voorzien van documentatie conform de pyhon guidelines.
  3. iedere parameter voorzien van een type aanduiding.

Als voorbeeld jouw notify functie:

    def notify(self, message:str,notification_calculation:bool=False):
        """
        sent notification to HA
        :param message: the 
        :param notification_calculation: send notification of starting a calculation
        :return: -
        """
        if self.notification_entity is not None and notification_calculation:
            self.set_value(
                self.notification_entity,
                message + " " + dt.datetime.now().strftime("%d-%m-%Y %H:%M:%S"),
            )

Ik zou het fijn vinden als je ook die stijl-wensen aanhoudt.
Misschien moet ik ze opnemen in DEVELOP.md.

@balk77
Copy link
Collaborator Author

balk77 commented Nov 27, 2025

Cees, excuses voor het gedoe met de foute code. Ik zal beter testen, stijl in acht nemen en de bestaande functionaliteit niet proberen aan te passen. Hopelijk heb ik dit weekend wat tijd. Ik had mijn code wel getest en gefixt maar niet gepusht

@balk77
Copy link
Collaborator Author

balk77 commented Nov 28, 2025

Ik heb de functie verhuisd naar da_base, en getracht de style te volgen. Ik heb een lijst met status codes toegevoegd.

@corneel27
Copy link
Owner

Ik heb bovenstaande nog niet meegenomen in versie 2025.12.0.rc1.
Ik ga hier morgen tijd voor maken om alles goed te bekijken en dan neem ik het mee in 2025.12.0.rc2

Copy link
Collaborator

@jsimonetti jsimonetti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

De datum/tijd velden moeten denk ik naar UTC gezet worden voordat het naar HA gestuurd wordt. Ik weet het niet zeker.

.astimezone(timezone.utc).strftime (https://docs.python.org/3.6/library/datetime.html#datetime.datetime.astimezone)

dat, of voeg .%z om de timezone in de tekst op te nemen

@corneel27
Copy link
Owner

Ik heb ernaar gekeken.
Ik heb nog een vraag: je kiest voor een aparte setting "use_json_notification".
Wat is het voordeel daarvan t.o.v. een aparte optionele json_notification_entity zoals ik had gesuggereerd?

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

Successfully merging this pull request may close these issues.

3 participants