[Ovmsdev] OvmsDev Digest, Vol 127, Issue 7

Michael Balzer dexter at expeedo.de
Wed Aug 10 23:18:36 HKT 2022


Pablo,

thanks for the feedback, glad I could help.

What do you mean by "secure"?

If you mean communication security: you need to add TLS support to the 
Node module to get security. MP communication is insecure without TLS.

If you mean API runtime reliability: that's the same for MP 7 as for all 
other MP commands, i.e. expect temporary failures and lost requests / 
responses. There is no builtin double ack protocol implemented for 
command executions in MP, if a response doesn't come within some 
appropriate time, and you cannot determine the command success from 
other data received (e.g. status), you need to repeat the command.

If you mean API definition stability: general framework commands will 
not be changed without very good reason. If modifications are necessary, 
they will be done in a backwards compatible way as far as possible (e.g. 
by adding some options / modifier keywords). Vehicle specific commands 
should not, but may follow a different strategy, depending on the state 
and maintainer of the vehicle. The same principle applies to all name 
spaces, i.e. metrics, events & config params.

Regards,
Michael


Am 10.08.22 um 16:58 schrieb Pablo Cabrera:
> Hello Michael
>
> Thank you for the PR and the fix on the example, it was the reason of 
> why We weren't able to send commands to the car, now with the example 
> I understand the doc page of the commands and understand how to know 
> if the command apply in to the car, now with this is just about to 
> make an api for the react native app, just one more question how 
> secure is to use "7,command" for an implementation?
>
> Thank you so much for your help!
>
>
>
>     ----------------------------------------------------------------------
>
>     Message: 1
>     Date: Sat, 6 Aug 2022 12:12:51 +0200
>     From: Michael Balzer <dexter at expeedo.de>
>     To: ovmsdev at lists.openvehicles.com
>     Subject: Re: [Ovmsdev] Doubs in implementation with nodejs.
>     Message-ID: <59110efb-32c6-830f-dea0-176f59d6ba6e at expeedo.de>
>     Content-Type: text/plain; charset="utf-8"; Format="flowed"
>
>     I've added a PR to fix the usage example:
>     https://github.com/birkir/ovms-client/pull/14
>
>     Mark, I suggest adding a fork to the OVMS account.
>
>     Regards,
>     Michael
>
>
>     Am 06.08.22 um 11:34 schrieb Michael Balzer:
>     > Gregg,
>     >
>     > I've had a look at that module
>     > (https://github.com/birkir/ovms-client): the example code is
>     wrong. As
>     > you didn't post any of your actual code, I can only assume you
>     try to
>     > base your code on that example.
>     >
>     > First of all, the connect() call is running asynchronously, and you
>     > must not send commands until the "connected" event has been emitted.
>     >
>     > Second & more importantly for your command application, the send()
>     > method does not work as shown in the example ("send('stat')"). You
>     > need to construct the actual MP command for send.
>     >
>     > Third & finally, you need to subscribe to the "commandReceived"
>     event
>     > if you want to receive the results (instead of parsing the "raw"
>     > messages yourself).
>     >
>     > Here's a complete working example code using that module sending
>     both
>     > a shell and a lock command:
>     >
>     >     const { OVMSClient } = require('ovms-client');
>     >
>     >     // host, port, vehicle id, password
>     >     const client = new OVMSClient('ovms.dexters-web.de
>     <http://ovms.dexters-web.de>', 6867, 'xxx',
>     >     'xxx');
>     >
>     >     // connect
>     >     client.connect();
>     >
>     >     // subscribe to command responses:
>     >     client.on('commandReceived', response => {
>     >     ? let [ command, result, message ] = response.split(',');
>     >     ? console.log('*** response: command', command, "result",
>     result);
>     >     ? if (message) {
>     >     ??? console.log(message.replace(/\r/g,
>     String.fromCharCode(10)));
>     >     ? }
>     >     });
>     >
>     >     client.on('connected', callback => {
>     >
>     >     ? // send shell command
>     >     ? console.log('*** send command: 7,stat');
>     >     ? client.send('7,stat');
>     >
>     >     ? // send lock command (with PIN 1234)
>     >     ? console.log('*** send command: 20,1234');
>     >     ? client.send('20,1234');
>     >
>     >     });
>     >
>     >
>     > Example run:
>     >
>     >     balzer at leela:~/ovms/nodejs> DEBUG=* node test.js
>     >     ? OVMS connected to socket +0ms
>     >     ? OVMS Server authentication OK. +17ms
>     >     ? OVMS RX: MP-S 0 gKmpSDl8krIShUcPcIYFHO
>     N6LiQqThPvJEUvvQV4f8Kg==
>     >     ?+1ms
>     >     *** send command: 7,stat
>     >     *** send command: 20,1234
>     >     *** response: command 7 result 0
>     >     Not charging
>     >     SOC: -
>     >     Ideal range: 0km
>     >     CAC: 120.0Ah
>     >
>     >     *** response: command 20 result 1
>     >     ^C
>     >
>     >
>     > Note: command 20 returned "failed" (result 1) here, because the
>     test
>     > module on my bench cannot lock a car.
>     >
>     > This was the module log for that session:
>     >
>     >     I (2192998) ovms-server-v2: Incoming Msg: MP-0 Z1
>     >     I (2192998) ovms-server-v2: One or more peers have connected
>     >     I (2193008) ovms-server-v2: Incoming Msg: MP-0 C7,stat
>     >     I (2193008) ovms-server-v2: Send MP-0 c7,0,Not charging|SOC:
>     >     -|Ideal range: 0km|CAC: 120.0Ah
>     >     I (2193048) ovms-server-v2: Incoming Msg: MP-0 C20,1234
>     >     I (2193048) v-vweup: CommandLock
>     >     I (2193048) ovms-server-v2: Send MP-0 c20,1
>     >
>     >
>     > So the module is actually working nicely, it's just got a poor
>     usage
>     > example.
>     >
>     > Be aware the module does not yet support TLS encryption though, you
>     > should add that before actually using it.
>     >
>     > Regards,
>     > Michael
>     >
>     >
>     > Am 04.08.22 um 06:05 schrieb gregg hansen:
>     >> Just to be sure, we?ll set some time frames and I?ll park the car
>     >>
>     >> On Wed, Aug 3, 2022 at 11:03 PM Mark Webb-Johnson
>     >> <mark at webb-johnson.net> wrote:
>     >>
>     >>     Gregg,
>     >>
>     >>     I checked for August 2022, ET225567 I find (redacted as
>     necessary):
>     >>
>     >>         2022-08-04 03:34:52.589231 UTC info
>     ?OVMS::Server::ApiV2: #10
>     >>         A ET225567 rx msg C 20,
>     >>         2022-08-04 03:34:52.590298 UTC info
>     ?OVMS::Server::ApiV2: #10
>     >>         A ET225567 cmd req for ET225567 (queue now 10)
>     >>         2022-08-04 03:34:52.590552 UTC info
>     ?OVMS::Server::ApiV2: #25
>     >>         C ET225567 tx msg C 20,
>     >>         2022-08-04 03:34:55.185066 UTC info
>     ?OVMS::Server::ApiV2: #25
>     >>         C ET225567 rx msg c 20,0
>     >>         2022-08-04 03:34:55.185657 UTC info
>     ?OVMS::Server::ApiV2: #25
>     >>         C ET225567 cmd rsp to #10 for ET225567 (queue now )
>     >>         2022-08-04 03:34:55.185739 UTC info
>     ?OVMS::Server::ApiV2: #10
>     >>         A ET225567 tx msg c 20,0
>     >>
>     >>
>     >>     No way of knowing if that was from the app or the library, but
>     >>     the message sequence is correct and the command was
>     acknowledged
>     >>     by the car as successfully executed. Command #20 is ?lock car?.
>     >>
>     >>     Regards, Mark
>     >>
>     >>>     On 4 Aug 2022, at 11:36 AM, gregg hansen
>     <gregg at rabbitev.com> wrote:
>     >>>
>     >>>     If there is a better library to try let me know.? We tried a
>     >>>     couple before we landed on that one.
>     >>>
>     >>>     We only test with one vehicle - ET225567
>     >>>
>     >>>     This is my fleet vehicle, so there?s a decent chance it
>     will be
>     >>>     in use.
>     >>>
>     >>>     Tomorrow we?ll try some tests and send some timestamps
>     >>>
>     >>>     On Wed, Aug 3, 2022 at 10:31 PM Mark Webb-Johnson
>     >>>     <mark at webb-johnson.net> wrote:
>     >>>
>     >>>         Gregg,
>     >>>
>     >>>         OK. That is clearer. At a glance, the library seems
>     ok, but
>     >>>         I haven?t worked with that one previously, or even
>     knew of it.
>     >>>
>     >>>         Can you let me know a vehicle ID, and UTC timestamp,
>     of one
>     >>>         of your connections and attempted unlocks? I can then
>     check
>     >>>         the server logs.
>     >>>
>     >>>         Or let me know vehicle ID, try it now, and I can monitor.
>     >>>
>     >>>         Regards, Mark.
>     >>>
>     >>>
>     >>>>         On 4 Aug 2022, at 11:21 AM, gregg hansen
>     >>>>         <gregg at rabbitev.com> wrote:
>     >>>>
>     >>>>         This is the library we are using it encrypt some data and
>     >>>>         use the MP commands to call some functionalities to
>     the car
>     >>>>         with this we retrieve some data like the battery status.
>     >>>>
>     >>>>         NPM Lib
>     >>>> https://www.npmjs.com/package/ovms-client?activeTab=readme
>     >>>>         Github
>     >>>> https://github.com/birkir/ovms-client
>     >>>>         (in the Github is an instruction that explains how
>     does the
>     >>>>         library works)
>     >>>>
>     >>>>         It has a function to send shell commands like 'stat'
>     >>>>         commands, but when we send a command looks like the
>     car is
>     >>>>         receiving the command but it seems like the car gets the
>     >>>>         commands but does not interact with it.
>     >>>>
>     >>>>         There is other function that allows us to send raw
>     data to
>     >>>>         the car that is the MP commands, but in this case when I
>     >>>>         send a Raw command this don't connect with the car
>     and its
>     >>>>         stock loading waiting for a response that is never
>     returned.
>     >>>>
>     >>>>         I have been trying to make a script that lets me
>     connect to
>     >>>>         the car, but I only could connect to the ovms-server that
>     >>>>         let us make the connection with the car, but I can
>     not set
>     >>>>         the carId and password on that socket to make the
>     >>>>         connection to the car.
>     >>>>
>     >>>>         We are using OVMS v2 in the cars.
>     >>>>
>     >>>>         Thanks for your help and we are going to be glad to read
>     >>>>         you answers
>     >>>>
>     >>>>         On Wed, Aug 3, 2022 at 10:07 PM Mark Webb-Johnson
>     >>>>         <mark at webb-johnson.net> wrote:
>     >>>>
>     >>>>             Gregg,
>     >>>>
>     >>>>             We really need to know exactly what he is doing, and
>     >>>>             with what protocols.
>     >>>>
>     >>>>             From the way you seem to describe it, you:
>     >>>>
>     >>>>              1. Have a custom app, in react native
>     >>>>              2. You have a custom server, in NodeJS
>     >>>>              3. You presumably have some custom protocol/api
>     >>>>                 between your app and server
>     >>>>              4. Your NodeJS server is talking to the OVMS server
>     >>>>                 using your own implementation of v2 protocol
>     >>>>
>     >>>>
>     >>>>             Is that correct? If so, then #4 is the only
>     issue. The
>     >>>>             V2 protocol is fairly well documented, here:
>     >>>>
>     >>>> https://docs.openvehicles.com/en/latest/protocol_v2/index.html
>     >>>>
>     >>>>
>     >>>>             It is proprietary and the initial negotiation is
>     >>>>             complicated, but if you have established the crypto
>     >>>>             connection and received the data, then you have done
>     >>>>             the hard part. Issuing commands should be easy.
>     >>>>
>     >>>>             In v2 protocol, locking/unlocking is performed
>     via the
>     >>>>             ?C? command.
>     >>>>
>     >>>>             Probably easiest to look at the sample code in
>     the iOS
>     >>>>             or Android Apps to see how that is done. For iOS,
>     see:
>     >>>>
>     >>>>
>     https://github.com/openvehicles/Open-Vehicle-iOS/blob/master/OpenVehicleApp/ovms/ovmsAppDelegate.m
>     >>>>
>     >>>>                 (The commandIssue method, and how it is called)
>     >>>>
>     >>>>
>     >>>>             Regards, Mark.
>     >>>>
>     >>>>>             On 3 Aug 2022, at 11:03 PM, gregg hansen
>     >>>>>             <gregg at rabbitev.com> wrote:
>     >>>>>
>     >>>>>             Pablo has not been able to access the list.? He is
>     >>>>>             getting authentication errors, so while he works
>     >>>>>             through that I thought I would answer for him...
>     >>>>>
>     >>>>>                 "The MP commands are the raw data I am trying to
>     >>>>>                 send to the car to open and close the car."
>     >>>>>
>     >>>>>             The devices are using the V2 server, so I think
>     fixed
>     >>>>>             MP commands make the most sense.? Pablo is trying to
>     >>>>>             figure out how to make that work, and so far has not
>     >>>>>             been successful.
>     >>>>>
>     >>>>>
>     >>>>>
>     >>>>>             On Sun, Jul 31, 2022 at 2:26 AM Michael Balzer
>     >>>>>             <dexter at expeedo.de> wrote:
>     >>>>>
>     >>>>>                 Pablo,
>     >>>>>
>     >>>>>                 a bit more information on how you connect to the
>     >>>>>                 car would be helpful here.
>     >>>>>
>     >>>>>                 Arbitrary remote shell command execution is
>     >>>>>                 supported by the module's HTTP API
>     (/api/execute),
>     >>>>>                 the module's SSH server, the "V2 protocol"
>     server
>     >>>>>                 via MP command 7 and any "V3" (MQTT) server via
>     >>>>>                 the /client/command topic scheme. Plus there's a
>     >>>>>                 secondary (non-standard) HTTP command API
>     >>>>>                 available on my server ovms.dexters-web.de
>     <http://ovms.dexters-web.de>
>     >>>>>                 <http://ovms.dexters-web.de/> (public API of my
>     >>>>>                 custom web shell).
>     >>>>>
>     >>>>>                 Lock & unlock are also available as fixed MP
>     >>>>>                 commands (20,22) on a V2 server, along with
>     a set
>     >>>>>                 of other standard App calls. These do not
>     run via
>     >>>>>                 the shell but translate to direct internal
>     execution.
>     >>>>>
>     >>>>>                 Command execution has not yet been
>     implemented for
>     >>>>>                 the "V2" server's HTTP API. But you can of
>     course
>     >>>>>                 implement that if you use that API.
>     >>>>>
>     >>>>>                 Docs:
>     >>>>>
>     >>>>>                   *
>     https://docs.openvehicles.com/en/latest/components/ovms_webserver/docs/index.html#authorization
>     >>>>>                   *
>     https://docs.openvehicles.com/en/latest/userguide/console.html#ssh-console
>     >>>>>                   *
>     https://docs.openvehicles.com/en/latest/protocol_v2/commands.html#execute-sms-command
>     >>>>>                       o
>     https://docs.openvehicles.com/en/latest/protocol_v2/commands.html#lock-car
>     >>>>>                       o
>     https://docs.openvehicles.com/en/latest/protocol_v2/commands.html#unlock-car
>     >>>>>                   *
>     http://lists.openvehicles.com/pipermail/ovmsdev/2018-July/012641.html
>     >>>>>                   *
>     http://lists.openvehicles.com/pipermail/ovmsdev/2018-July/012696.html
>     >>>>>                   *
>     https://docs.openvehicles.com/en/latest/protocol_httpapi/requests.html#not-yet-implemented
>     >>>>>
>     >>>>>                 Which one are you referring to?
>     >>>>>
>     >>>>>                 Regards,
>     >>>>>                 Michael
>     >>>>>
>     >>>>>
>     >>>>>                 Am 29.07.22 um 19:28 schrieb Pablo Cabrera:
>     >>>>>>                 Hello OVMS team, we are currently working
>     with an
>     >>>>>>                 implementation with OVMS in a react native app
>     >>>>>>                 with a NodeJS back-end.
>     >>>>>>                 Currently we can connect with the cars and
>     rescue
>     >>>>>>                 some data like the status of the battery or GPS
>     >>>>>>                 location, but now we need to send commands to
>     >>>>>>                 lock and unlock the cars from the same app,
>     when
>     >>>>>>                 we send a command I get a response that the
>     >>>>>>                 command is received in the car, but the command
>     >>>>>>                 is not executed in the bash.
>     >>>>>>
>     >>>>>>                 I don't?know if you can?send me more?info
>     >>>>>>                 about?how to make the car receive?bash
>     >>>>>>                 commands?from remote connections, or how can I
>     >>>>>>                 send it from the NodeJs server into the bash of
>     >>>>>>                 the car.
>     >>>>>>
>     >>>>>>                 Thanks for your time and help.
>     >>>>>>
>     >>>>>>  _______________________________________________
>     >>>>>>                 OvmsDev mailing list
>     >>>>>> OvmsDev at lists.openvehicles.com
>     >>>>>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >>>>>
>     >>>>>                 --
>     >>>>>                 Michael Balzer *Helkenberger Weg 9 * D-58256
>     Ennepetal 
>     <https://www.google.com/maps/search/Helkenberger+Weg+9+*+D-58256+Ennepetal?entry=gmail&source=g
>     <https://www.google.com/maps/search/Helkenberger+Weg+9+*+D-58256+Ennepetal?entry=gmail&source=g>>
>     >>>>>                 Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
>     >>>>>
>     >>>>>  _______________________________________________
>     >>>>>                 OvmsDev mailing list
>     >>>>> OvmsDev at lists.openvehicles.com
>     >>>>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >>>>>
>     >>>>>
>     >>>>>
>     >>>>>             --
>     >>>>>
>     >>>>>             RabbitEV
>     >>>>>             Driving Electric Cars
>     >>>>>             RabbitEV.com <http://rabbitev.com/>
>     >>>>>  _______________________________________________
>     >>>>>             OvmsDev mailing list
>     >>>>> OvmsDev at lists.openvehicles.com
>     >>>>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >>>>
>     >>>>  _______________________________________________
>     >>>>             OvmsDev mailing list
>     >>>> OvmsDev at lists.openvehicles.com
>     >>>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >>>>
>     >>>>  _______________________________________________
>     >>>>         OvmsDev mailing list
>     >>>> OvmsDev at lists.openvehicles.com
>     >>>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >>>
>     >>>  _______________________________________________
>     >>>         OvmsDev mailing list
>     >>> OvmsDev at lists.openvehicles.com
>     >>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >>>
>     >>>  _______________________________________________
>     >>>     OvmsDev mailing list
>     >>> OvmsDev at lists.openvehicles.com
>     >>> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >>
>     >>     _______________________________________________
>     >>     OvmsDev mailing list
>     >> OvmsDev at lists.openvehicles.com
>     >> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >>
>     >>
>     >> _______________________________________________
>     >> OvmsDev mailing list
>     >> OvmsDev at lists.openvehicles.com
>     >> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>     >
>     > --
>     > Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
>     > Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
>     >
>     > _______________________________________________
>     > OvmsDev mailing list
>     > OvmsDev at lists.openvehicles.com
>     > http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>
>     -- 
>     Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
>     Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
>
>     -------------- next part --------------
>     An HTML attachment was scrubbed...
>     URL:
>     <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20220806/580c26be/attachment.htm>
>     -------------- next part --------------
>     A non-text attachment was scrubbed...
>     Name: OpenPGP_signature
>     Type: application/pgp-signature
>     Size: 203 bytes
>     Desc: OpenPGP digital signature
>     URL:
>     <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20220806/580c26be/attachment.sig>
>
>     ------------------------------
>
>     Subject: Digest Footer
>
>     _______________________________________________
>     OvmsDev mailing list
>     OvmsDev at lists.openvehicles.com
>     http://lists.openvehicles.com/mailman/listinfo/ovmsdev
>
>
>     ------------------------------
>
>     End of OvmsDev Digest, Vol 127, Issue 7
>     ***************************************
>
>
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.openvehicles.com
> http://lists.openvehicles.com/mailman/listinfo/ovmsdev

-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20220810/078b776e/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 203 bytes
Desc: OpenPGP digital signature
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20220810/078b776e/attachment-0001.sig>


More information about the OvmsDev mailing list