Best is to create a pull request, and let us know. We can check and merge with master.

Regards, Mark

On 19 Jul 2018, at 6:41 PM, Nikolay Shishkov <nshishkov@yahoo.com> wrote:

Thank you guys!
I think I am ready with something I want to create pull request on. Do I do this through my own repository, or can I just send someone a diff?
Nikolay

On Thursday, July 19, 2018, 12:37:58 PM GMT+2, Michael Balzer <dexter@expeedo.de> wrote:


Nikolay,

- what is the best way to compare OvmsMetricStrings? Or should I dublicate the state in an enum and use that?
- what is the best way to compare the OvmsMetricFloat to a literal float?

If you want to compare a state code encoded as a string, you can simply compare the std::string returned by AsString() with hard coded strings, e.g.

    std::string charge_state = StdMetrics.ms_v_charge_state->AsString();
    if (charge_state == "charging")
        …

If you'd rather use the old numeric state codes, there are utility functions in the ovms_utils module for encoding / decoding them.

As Mark wrote, you get the float value by the AsFloat() method and can compare that directly to a float literal. We haven't added comparison operators to the metrics classes yet, just assignment (and that needs casts in many cases). If you'd like to add more operators/types, go ahead.



- what is the current way of doing net_req_notification

Not required in v3. If you change a metric that needs notification, the serverv2 and serverv3 will act appropriately.

And if you want to customize standard notifications, you can do so by overloading the vehicle methods:

    virtual void NotifyChargeState();
    virtual void NotifyChargeStart();
    virtual void NotifyHeatingStart();
    virtual void NotifyChargeStopped();
    virtual void NotifyChargeDone();
    virtual void NotifyValetEnabled();
    virtual void NotifyValetDisabled();
    virtual void NotifyValetHood();
    virtual void NotifyValetTrunk();
    virtual void NotifyAlarmSounding();
    virtual void NotifyAlarmStopped();
    virtual void Notify12vCritical();
    virtual void Notify12vRecovered();

If you want to add vehicle specific notifications, take a look at the Twizy module (rt_notify).

You can simply send a notification from any command output by issuing MyNotify.NotifyCommand() (att: stack intensive) or send any string by MyNotify.NotifyString(). There are also varargs versions with "f" suffix acting like printf.

For building strings from command methods, there is the StringWriter class, that's a std::string that can be used as an OvmsWriter. Example:

    StringWriter buf(200);
    CommandStat(COMMAND_RESULT_NORMAL, &buf);
    MyNotify.NotifyString("info", "charge.sufficient", buf.c_str());

Best practice is to send notifications from within an event handler (e.g. Ticker1), so they run asynchronously in the event task context instead of blocking something.

Regards,
Michael

PS: we should start collecting these pieces for the developer manual, the general system API is quite mature now



On 19 Jul 2018, at 6:00 AM, Nikolay Shishkov <nshishkov@yahoo.com> wrote:

Hi, 
I am working on the Think City EV code and have some questions.
- what is the best way to signal that the charging connector is plugged? ms_v_charge_pilot?
previously it was cardoorbits1. 

- what is the best way to compare OvmsMetricStrings? Or should I dublicate the state in an enum and use that?

- what is the best way to compare the OvmsMetricFloat to a literal float?

- what is the current way of doing net_req_notification

Thanks in advance,
Nikolay
On Tuesday, July 17, 2018, 3:37:49 AM GMT+2, Mark Webb-Johnson <mark@webb-johnson.net> wrote:


-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________
OvmsDev mailing list
OvmsDev@lists.openvehicles.com
http://lists.openvehicles.com/mailman/listinfo/ovmsdev