# OTA_P2 整合測試 [TOC] # Integrated/Testing Scenario ## OTA ### 1. report/status -> notification/setCampaing - [x] Checked - [ ] A. 缺少ecuClassName、ecuFirmwareMetadata.currentVersionURL - [ ] B. ecuSerialFromOEM、ecuSerialFromVendor、ecuOEMSerialNumber、ecuVendorSerialNumber (@Daren) - [ ] C. 多了missionStartTime、missionEndTime ```json= BMW/ota/DEVICETYPE/DEVICESUBTYPE/report/status 原始訊息 payload = { "timestamp": 1667292750000, "vehicle": { "vehicleId": "635f3b282f554c219a511fc6", "vinNumber": "1234567890" }, "ecuList": [ { "ecuId": "84aa751c-57b3-48c3-944c-19b225073bef", "softwareVersion": "v0.1.0" }, { "ecuId": "80c3a455-43f7-4b27-8318-1d4948f8fff7", "softwareVersion": "w0.0.1" }, { "ecuId": "9f3a67ce-843f-4b3b-9652-c08a35f86402", "softwareVersion": "0.0.1-zxc" }, { "ecuId": "5897ba39-bb06-4d69-a7ba-33c574968f69", "softwareVersion": "0.0.1" }, { "ecuId": "b13f933d-1a91-4b3f-b8a4-b4b2e592f779", "softwareVersion": "1.2.3-asd" }, { "ecuClassId": "704a31cd-d629-406d-a233-3bdaad25ce36", "ecuId": "e9f14408-c036-4e26-bf80-7faf57ab100c", "ecuClassSerialFromOEM": "1q2w3e4r", "ecuClassSerialFromVendor": "", "ecuOEMSerialNumber": "", "ecuVendorSerialNumber": "azsxdcfv", "hardwareVersion": "", "softwareVersion": "2.3.2-zxc" } ], "ecuChangeList": [ { "ecuClassId": "704a31cd-d629-406d-a233-3bdaad25ce36", "ecuId": "e9f14408-c036-4e26-bf80-7faf57ab100c", "ecuClassSerialFromOEM": "1q2w3e4r", "ecuClassSerialFromVendor": "", "ecuOEMSerialNumber": "", "ecuVendorSerialNumber": "azsxdcfv", "hardwareVersion": "", "softwareVersion": "2.3.2-zxc" } ] } encode => { "identity": "1234567890", "payload": "eyd0aW1lc3RhbXAnOiAxNjY4NTg5NzI3MTE0LCAnY2FtcGFpZ25Ub3BpYyc6ICdCTVcvb3RhLzYzNzFhNThmMmYwMDg3NjM0YTQ1NDY4OC9DYW1wYWlnbicsICdtaXNzaW9uVG9waWMnOiAnQk1XL290YS82MzcxYTU4ZjJmMDA4NzYzNGE0NTQ2ODgvNjM3NGE4OWY3ZGI0OGNjNTljZDZjNDYwL01pc3Npb24nLCAnbWlzc2lvblN0YXJ0VGltZSc6ICcnLCAnbWlzc2lvbkVuZFRpbWUnOiAxNjY5Nzc0Njc1NTk1LCAnb3RhQ2FtcGFpZ24nOiB7J2NhbXBhaWduSWQnOiAnNjM3MWE1OGYyZjAwODc2MzRhNDU0Njg4JywgJ21pc3Npb25JZCc6ICc2Mzc0YTg5ZjdkYjQ4Y2M1OWNkNmM0NjAnLCAnY2FtcGFpZ25BY3Rpb24nOiAnc3RhcnQnLCAnY2FtcGFpZ25BY3Rpb25UaW1lc3RhbXAnOiAxNjY4NTg5NzI3MTE0LCAnY2FtcGFpZ25TdGF0dXMnOiAnUnVubmluZycsICd2ZWhpY2xlQ2xhc3MnOiB7J2JyYW5kJzogJ0JNVycsICd2ZWhpY2xlQ2xhc3NOYW1lJzogJ1gxJywgJ3JvbGxvdXREYXRlJzogJzIwMjInfX0sICdwcmVjb25kaXRpb24nOiBbeydfaWQnOiAnMTAwMScsICdjb25kaXRpb24nOiAnc3BlZWQnLCAnb3BlcmF0b3InOiAnPScsICd2YWx1ZSc6ICcxMCcsICd2YWx1ZVR5cGUnOiAnSW50ZWdlcid9LCB7J19pZCc6ICcxMDAyJywgJ2NvbmRpdGlvbic6ICdnZWVyJywgJ29wZXJhdG9yJzogJz0nLCAndmFsdWUnOiAnUCcsICd2YWx1ZVR5cGUnOiAnU3RyaW5nJ31dLCAndXBkYXRlUGF0aCc6IHsnZWN1Q2xhc3NJZCc6ICc1NTE5NWQ4MS03YmEyLTQ1ZjUtYWMwNS1kMWVkN2Q3MDE2MDgnLCAndXBwZXJDb25uZWN0aW9uVHlwZSc6ICdDQU4nLCAnbmV4dE5vZGVzT3JkZXInOiAnU2VyaWFsJywgJ25leHROb2Rlcyc6IFt7J2VjdUNsYXNzSWQnOiAnZTA3NWNlYmEtMjFmYy00ZTAwLWFiZDktZDBhNWVjNWRlMDNkJywgJ3VwcGVyQ29ubmVjdGlvblR5cGUnOiAnRXRoZXJuZXQnLCAnbmV4dE5vZGVzT3JkZXInOiAnU2VyaWFsJywgJ25leHROb2Rlcyc6IFtdfSwgeydlY3VDbGFzc0lkJzogJzBjZWIzMjNlLTEwNjMtNGIyMy1hYWVhLTNkNTlhMjEyNTZmNycsICd1cHBlckNvbm5lY3Rpb25UeXBlJzogJ0V0aGVybmV0JywgJ25leHROb2Rlc09yZGVyJzogJ1NlcmlhbCcsICduZXh0Tm9kZXMnOiBbeydlY3VDbGFzc0lkJzogJzcwNGEzMWNkLWQ2MjktNDA2ZC1hMjMzLTNiZGFhZDI1Y2UzNicsICd1cHBlckNvbm5lY3Rpb25UeXBlJzogJ0V0aGVybmV0JywgJ25leHROb2Rlc09yZGVyJzogJ1NlcmlhbCcsICduZXh0Tm9kZXMnOiBbXX1dfV19LCAnb3RhTWlzc2lvbic6IHsndmVoaWNsZSc6IHsndmVoaWNsZUlkJzogJzYzNWYzYjI4MmY1NTRjMjE5YTUxMWZjNicsICd2aW5OdW1iZXInOiAnMTIzNDU2Nzg5MCcsICd2ZWhpY2xlQ2xhc3MnOiB7J2JyYW5kJzogJ0JNVycsICd2ZWhpY2xlQ2xhc3NOYW1lJzogJ1gxJywgJ3JvbGxvdXREYXRlJzogJzIwMjInfX0sICdlY3VMaXN0JzogW3snZWN1Q2xhc3NJZCc6ICcwY2ViMzIzZS0xMDYzLTRiMjMtYWFlYS0zZDU5YTIxMjU2ZjcnLCAnZWN1Q2xhc3NOYW1lJzogJ2l0YWNoaTAxJywgJ3ZlbmRvcic6ICdOUzUwMDEnLCAnZWN1U2VyaWFsRnJvbU9FTSc6ICcnLCAnZWN1U2VyaWFsRnJvbVZlbmRvcic6ICcnLCAnZWN1SWQnOiAnYjEzZjkzM2QtMWE5MS00YjNmLWI4YTQtYjRiMmU1OTJmNzc5JywgJ2VjdU5hbWUnOiAnaXRhY2hpMDEnLCAnZWN1T0VNU2VyaWFsTnVtYmVyJzogJzFxMnczZTRyJywgJ2VjdVZlbmRvclNlcmlhbE51bWJlcic6ICdhenN4ZGNmdicsICdlY3VGaXJtd2FyZU1ldGFkYXRhJzogeydjdXJyZW50VmVyc2lvbic6ICcxLjIuMy1hc2QnLCAnY3VycmVudFZlcnNpb25GaWxlbmFtZSc6ICfnlKLlk4Hlu7rnq4sgKDEpLnR4dCcsICdjdXJyZW50VmVyc2lvblNpemUnOiAnNTQ0JywgJ2N1cnJlbnRWZXJzaW9uTUQ1JzogJ2FzZGZnaGprbCcsICdjdXJyZW50VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAnY3VycmVudFZlcnNpb25WZXJpZnlQdWJsaWNLZXknOiAnVkdWemRGQjFZbXhwWTB0bGVVTnlaV0YwWlE9PScsICdjdXJyZW50VmVyc2lvbkNlcnRpZmljYXRpb24nOiAnVkdWemRFTkJRM0psWVhSbCcsICd0YXJnZXRWZXJzaW9uJzogJzEuMi40LWFzZCcsICd0YXJnZXRWZXJzaW9uRmlsZW5hbWUnOiAnMjAyMi0wOC0yMy0xOS0yNC01OS5sb2cnLCAndGFyZ2V0VmVyc2lvblNpemUnOiAnMTU0ODQnLCAndGFyZ2V0VmVyc2lvbk1ENSc6ICcxMjM0NTYnLCAndGFyZ2V0VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAndGFyZ2V0VmVyc2lvblZlcmlmeVB1YmxpY0tleSc6ICdWR1Z6ZEZCMVlteHBZMHRsZVVOeVpXRjBaUT09JywgJ3RhcmdldFZlcnNpb25DZXJ0aWZpY2F0aW9uJzogJ1ZHVnpkRU5CUTNKbFlYUmwnfX0sIHsnZWN1Q2xhc3NJZCc6ICc3MDRhMzFjZC1kNjI5LTQwNmQtYTIzMy0zYmRhYWQyNWNlMzYnLCAnZWN1Q2xhc3NOYW1lJzogJ2l0YWNoaTAyJywgJ3ZlbmRvcic6ICdOUzUwMDEnLCAnZWN1U2VyaWFsRnJvbU9FTSc6ICcnLCAnZWN1U2VyaWFsRnJvbVZlbmRvcic6ICcnLCAnZWN1SWQnOiAnZTlmMTQ0MDgtYzAzNi00ZTI2LWJmODAtN2ZhZjU3YWIxMDBjJywgJ2VjdU5hbWUnOiAnaXRhY2hpMDInLCAnZWN1T0VNU2VyaWFsTnVtYmVyJzogJzFxMnczZTRyJywgJ2VjdVZlbmRvclNlcmlhbE51bWJlcic6ICdhenN4ZGNmdicsICdlY3VGaXJtd2FyZU1ldGFkYXRhJzogeydjdXJyZW50VmVyc2lvbic6ICcyLjMuMi16eGMnLCAnY3VycmVudFZlcnNpb25GaWxlbmFtZSc6ICfnlKLlk4Hlu7rnq4sgKDEpLnR4dCcsICdjdXJyZW50VmVyc2lvblNpemUnOiAnNTQ0JywgJ2N1cnJlbnRWZXJzaW9uTUQ1JzogJ2FzZGZnaGprbCcsICdjdXJyZW50VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAnY3VycmVudFZlcnNpb25WZXJpZnlQdWJsaWNLZXknOiAnVkdWemRGQjFZbXhwWTB0bGVVTnlaV0YwWlE9PScsICdjdXJyZW50VmVyc2lvbkNlcnRpZmljYXRpb24nOiAnVkdWemRFTkJRM0psWVhSbCcsICd0YXJnZXRWZXJzaW9uJzogJzMuMC4wJywgJ3RhcmdldFZlcnNpb25GaWxlbmFtZSc6ICdwcmVjb25kaXRpb24uY3N2JywgJ3RhcmdldFZlcnNpb25TaXplJzogJzI4OCcsICd0YXJnZXRWZXJzaW9uTUQ1JzogJzEyMzQnLCAndGFyZ2V0VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAndGFyZ2V0VmVyc2lvblZlcmlmeVB1YmxpY0tleSc6ICdWR1Z6ZEZCMVlteHBZMHRsZVVOeVpXRjBaUT09JywgJ3RhcmdldFZlcnNpb25DZXJ0aWZpY2F0aW9uJzogJ1ZHVnpkRU5CUTNKbFlYUmwnfX1dfX0=", "signature": "ps4TJjsqMWu3ZQdU7HkY3+qc4eDafuZHX3Rjtine+h0uke9qloUAGilBDcaf8PKBWl9pfR51f4ElRC6L05Ej/eTpjPy9CdAU4Y0XiFyq1c+wiUSialb89DVJ7HiwrlP2NEJfY+TwgIkAjtFIJAM9X6bStI4aZVjXFAiQRFNSYbL3Dgy+KUik75s4tqGI8mYqAENLMzzhlbJMcjM9U2YS/KwQQWJQXjeWtX3dyOYrDmV3fDi8jM/zR+BRfvQ462eCG/XHHFQXifCpmYYAVplteE6Ll8fxVNnfBpZGQSRswMCT5zkv2DZ2iL+Rl1n/G9Xot+6BQ3J/zV72f1GHJJLsww==" } ``` ```json= BMW/ota/DEVICETYPE/DEVICESUBTYPE/notification/setCampaign 收到訊息: { "identity": "1234567890", "payload": "eyd0aW1lc3RhbXAnOiAxNjY4NTg5NzI3MTE0LCAnY2FtcGFpZ25Ub3BpYyc6ICdCTVcvb3RhLzYzNzFhNThmMmYwMDg3NjM0YTQ1NDY4OC9DYW1wYWlnbicsICdtaXNzaW9uVG9waWMnOiAnQk1XL290YS82MzcxYTU4ZjJmMDA4NzYzNGE0NTQ2ODgvNjM3NGE4OWY3ZGI0OGNjNTljZDZjNDYwL01pc3Npb24nLCAnbWlzc2lvblN0YXJ0VGltZSc6ICcnLCAnbWlzc2lvbkVuZFRpbWUnOiAxNjY5Nzc0Njc1NTk1LCAnb3RhQ2FtcGFpZ24nOiB7J2NhbXBhaWduSWQnOiAnNjM3MWE1OGYyZjAwODc2MzRhNDU0Njg4JywgJ21pc3Npb25JZCc6ICc2Mzc0YTg5ZjdkYjQ4Y2M1OWNkNmM0NjAnLCAnY2FtcGFpZ25BY3Rpb24nOiAnc3RhcnQnLCAnY2FtcGFpZ25BY3Rpb25UaW1lc3RhbXAnOiAxNjY4NTg5NzI3MTE0LCAnY2FtcGFpZ25TdGF0dXMnOiAnUnVubmluZycsICd2ZWhpY2xlQ2xhc3MnOiB7J2JyYW5kJzogJ0JNVycsICd2ZWhpY2xlQ2xhc3NOYW1lJzogJ1gxJywgJ3JvbGxvdXREYXRlJzogJzIwMjInfX0sICdwcmVjb25kaXRpb24nOiBbeydfaWQnOiAnMTAwMScsICdjb25kaXRpb24nOiAnc3BlZWQnLCAnb3BlcmF0b3InOiAnPScsICd2YWx1ZSc6ICcxMCcsICd2YWx1ZVR5cGUnOiAnSW50ZWdlcid9LCB7J19pZCc6ICcxMDAyJywgJ2NvbmRpdGlvbic6ICdnZWVyJywgJ29wZXJhdG9yJzogJz0nLCAndmFsdWUnOiAnUCcsICd2YWx1ZVR5cGUnOiAnU3RyaW5nJ31dLCAndXBkYXRlUGF0aCc6IHsnZWN1Q2xhc3NJZCc6ICc1NTE5NWQ4MS03YmEyLTQ1ZjUtYWMwNS1kMWVkN2Q3MDE2MDgnLCAndXBwZXJDb25uZWN0aW9uVHlwZSc6ICdDQU4nLCAnbmV4dE5vZGVzT3JkZXInOiAnU2VyaWFsJywgJ25leHROb2Rlcyc6IFt7J2VjdUNsYXNzSWQnOiAnZTA3NWNlYmEtMjFmYy00ZTAwLWFiZDktZDBhNWVjNWRlMDNkJywgJ3VwcGVyQ29ubmVjdGlvblR5cGUnOiAnRXRoZXJuZXQnLCAnbmV4dE5vZGVzT3JkZXInOiAnU2VyaWFsJywgJ25leHROb2Rlcyc6IFtdfSwgeydlY3VDbGFzc0lkJzogJzBjZWIzMjNlLTEwNjMtNGIyMy1hYWVhLTNkNTlhMjEyNTZmNycsICd1cHBlckNvbm5lY3Rpb25UeXBlJzogJ0V0aGVybmV0JywgJ25leHROb2Rlc09yZGVyJzogJ1NlcmlhbCcsICduZXh0Tm9kZXMnOiBbeydlY3VDbGFzc0lkJzogJzcwNGEzMWNkLWQ2MjktNDA2ZC1hMjMzLTNiZGFhZDI1Y2UzNicsICd1cHBlckNvbm5lY3Rpb25UeXBlJzogJ0V0aGVybmV0JywgJ25leHROb2Rlc09yZGVyJzogJ1NlcmlhbCcsICduZXh0Tm9kZXMnOiBbXX1dfV19LCAnb3RhTWlzc2lvbic6IHsndmVoaWNsZSc6IHsndmVoaWNsZUlkJzogJzYzNWYzYjI4MmY1NTRjMjE5YTUxMWZjNicsICd2aW5OdW1iZXInOiAnMTIzNDU2Nzg5MCcsICd2ZWhpY2xlQ2xhc3MnOiB7J2JyYW5kJzogJ0JNVycsICd2ZWhpY2xlQ2xhc3NOYW1lJzogJ1gxJywgJ3JvbGxvdXREYXRlJzogJzIwMjInfX0sICdlY3VMaXN0JzogW3snZWN1Q2xhc3NJZCc6ICcwY2ViMzIzZS0xMDYzLTRiMjMtYWFlYS0zZDU5YTIxMjU2ZjcnLCAnZWN1Q2xhc3NOYW1lJzogJ2l0YWNoaTAxJywgJ3ZlbmRvcic6ICdOUzUwMDEnLCAnZWN1U2VyaWFsRnJvbU9FTSc6ICcnLCAnZWN1U2VyaWFsRnJvbVZlbmRvcic6ICcnLCAnZWN1SWQnOiAnYjEzZjkzM2QtMWE5MS00YjNmLWI4YTQtYjRiMmU1OTJmNzc5JywgJ2VjdU5hbWUnOiAnaXRhY2hpMDEnLCAnZWN1T0VNU2VyaWFsTnVtYmVyJzogJzFxMnczZTRyJywgJ2VjdVZlbmRvclNlcmlhbE51bWJlcic6ICdhenN4ZGNmdicsICdlY3VGaXJtd2FyZU1ldGFkYXRhJzogeydjdXJyZW50VmVyc2lvbic6ICcxLjIuMy1hc2QnLCAnY3VycmVudFZlcnNpb25GaWxlbmFtZSc6ICfnlKLlk4Hlu7rnq4sgKDEpLnR4dCcsICdjdXJyZW50VmVyc2lvblNpemUnOiAnNTQ0JywgJ2N1cnJlbnRWZXJzaW9uTUQ1JzogJ2FzZGZnaGprbCcsICdjdXJyZW50VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAnY3VycmVudFZlcnNpb25WZXJpZnlQdWJsaWNLZXknOiAnVkdWemRGQjFZbXhwWTB0bGVVTnlaV0YwWlE9PScsICdjdXJyZW50VmVyc2lvbkNlcnRpZmljYXRpb24nOiAnVkdWemRFTkJRM0psWVhSbCcsICd0YXJnZXRWZXJzaW9uJzogJzEuMi40LWFzZCcsICd0YXJnZXRWZXJzaW9uRmlsZW5hbWUnOiAnMjAyMi0wOC0yMy0xOS0yNC01OS5sb2cnLCAndGFyZ2V0VmVyc2lvblNpemUnOiAnMTU0ODQnLCAndGFyZ2V0VmVyc2lvbk1ENSc6ICcxMjM0NTYnLCAndGFyZ2V0VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAndGFyZ2V0VmVyc2lvblZlcmlmeVB1YmxpY0tleSc6ICdWR1Z6ZEZCMVlteHBZMHRsZVVOeVpXRjBaUT09JywgJ3RhcmdldFZlcnNpb25DZXJ0aWZpY2F0aW9uJzogJ1ZHVnpkRU5CUTNKbFlYUmwnfX0sIHsnZWN1Q2xhc3NJZCc6ICc3MDRhMzFjZC1kNjI5LTQwNmQtYTIzMy0zYmRhYWQyNWNlMzYnLCAnZWN1Q2xhc3NOYW1lJzogJ2l0YWNoaTAyJywgJ3ZlbmRvcic6ICdOUzUwMDEnLCAnZWN1U2VyaWFsRnJvbU9FTSc6ICcnLCAnZWN1U2VyaWFsRnJvbVZlbmRvcic6ICcnLCAnZWN1SWQnOiAnZTlmMTQ0MDgtYzAzNi00ZTI2LWJmODAtN2ZhZjU3YWIxMDBjJywgJ2VjdU5hbWUnOiAnaXRhY2hpMDInLCAnZWN1T0VNU2VyaWFsTnVtYmVyJzogJzFxMnczZTRyJywgJ2VjdVZlbmRvclNlcmlhbE51bWJlcic6ICdhenN4ZGNmdicsICdlY3VGaXJtd2FyZU1ldGFkYXRhJzogeydjdXJyZW50VmVyc2lvbic6ICcyLjMuMi16eGMnLCAnY3VycmVudFZlcnNpb25GaWxlbmFtZSc6ICfnlKLlk4Hlu7rnq4sgKDEpLnR4dCcsICdjdXJyZW50VmVyc2lvblNpemUnOiAnNTQ0JywgJ2N1cnJlbnRWZXJzaW9uTUQ1JzogJ2FzZGZnaGprbCcsICdjdXJyZW50VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAnY3VycmVudFZlcnNpb25WZXJpZnlQdWJsaWNLZXknOiAnVkdWemRGQjFZbXhwWTB0bGVVTnlaV0YwWlE9PScsICdjdXJyZW50VmVyc2lvbkNlcnRpZmljYXRpb24nOiAnVkdWemRFTkJRM0psWVhSbCcsICd0YXJnZXRWZXJzaW9uJzogJzMuMC4wJywgJ3RhcmdldFZlcnNpb25GaWxlbmFtZSc6ICdwcmVjb25kaXRpb24uY3N2JywgJ3RhcmdldFZlcnNpb25TaXplJzogJzI4OCcsICd0YXJnZXRWZXJzaW9uTUQ1JzogJzEyMzQnLCAndGFyZ2V0VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAndGFyZ2V0VmVyc2lvblZlcmlmeVB1YmxpY0tleSc6ICdWR1Z6ZEZCMVlteHBZMHRsZVVOeVpXRjBaUT09JywgJ3RhcmdldFZlcnNpb25DZXJ0aWZpY2F0aW9uJzogJ1ZHVnpkRU5CUTNKbFlYUmwnfX1dfX0=", "signature": "ps4TJjsqMWu3ZQdU7HkY3+qc4eDafuZHX3Rjtine+h0uke9qloUAGilBDcaf8PKBWl9pfR51f4ElRC6L05Ej/eTpjPy9CdAU4Y0XiFyq1c+wiUSialb89DVJ7HiwrlP2NEJfY+TwgIkAjtFIJAM9X6bStI4aZVjXFAiQRFNSYbL3Dgy+KUik75s4tqGI8mYqAENLMzzhlbJMcjM9U2YS/KwQQWJQXjeWtX3dyOYrDmV3fDi8jM/zR+BRfvQ462eCG/XHHFQXifCpmYYAVplteE6Ll8fxVNnfBpZGQSRswMCT5zkv2DZ2iL+Rl1n/G9Xot+6BQ3J/zV72f1GHJJLsww==" } decode => { "timestamp": 1668589727114, "campaignTopic": "BMW/ota/6371a58f2f0087634a454688/Campaign", "missionTopic": "BMW/ota/6371a58f2f0087634a454688/6374a89f7db48cc59cd6c460/Mission", "missionStartTime": "", "missionEndTime": 1669774675595, "otaCampaign": { "campaignId": "6371a58f2f0087634a454688", "missionId": "6374a89f7db48cc59cd6c460", "campaignAction": "start", "campaignActionTimestamp": 1668589727114, "campaignStatus": "Running", "vehicleClass": { "brand": "BMW", "vehicleClassName": "X1", "rolloutDate": "2022" } }, "precondition": [ { "_id": "1001", "condition": "speed", "operator": "=", "value": "10", "valueType": "Integer" }, { "_id": "1002", "condition": "geer", "operator": "=", "value": "P", "valueType": "String" } ], "updatePath": { "ecuClassId": "55195d81-7ba2-45f5-ac05-d1ed7d701608", "upperConnectionType": "CAN", "nextNodesOrder": "Serial", "nextNodes": [ { "ecuClassId": "e075ceba-21fc-4e00-abd9-d0a5ec5de03d", "upperConnectionType": "Ethernet", "nextNodesOrder": "Serial", "nextNodes": [] }, { "ecuClassId": "0ceb323e-1063-4b23-aaea-3d59a21256f7", "upperConnectionType": "Ethernet", "nextNodesOrder": "Serial", "nextNodes": [ { "ecuClassId": "704a31cd-d629-406d-a233-3bdaad25ce36", "upperConnectionType": "Ethernet", "nextNodesOrder": "Serial", "nextNodes": [] } ] } ] }, "otaMission": { "vehicle": { "vehicleId": "635f3b282f554c219a511fc6", "vinNumber": "1234567890", "vehicleClass": { "brand": "BMW", "vehicleClassName": "X1", "rolloutDate": "2022" } }, "ecuList": [ { "ecuClassId": "0ceb323e-1063-4b23-aaea-3d59a21256f7", "ecuClassName": "itachi01", "vendor": "NS5001", "ecuSerialFromOEM": "", "ecuSerialFromVendor": "", "ecuId": "b13f933d-1a91-4b3f-b8a4-b4b2e592f779", "ecuName": "itachi01", "ecuOEMSerialNumber": "1q2w3e4r", "ecuVendorSerialNumber": "azsxdcfv", "ecuFirmwareMetadata": { "currentVersion": "1.2.3-asd", "currentVersionFilename": "產品建立 (1).txt", "currentVersionSize": "544", "currentVersionMD5": "asdfghjkl", "currentVersionVerifyAlgorithm": "RSA", "currentVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "currentVersionCertification": "VGVzdENBQ3JlYXRl", "targetVersion": "1.2.4-asd", "targetVersionFilename": "2022-08-23-19-24-59.log", "targetVersionSize": "15484", "targetVersionMD5": "123456", "targetVersionVerifyAlgorithm": "RSA", "targetVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "targetVersionCertification": "VGVzdENBQ3JlYXRl" } }, { "ecuClassId": "704a31cd-d629-406d-a233-3bdaad25ce36", "ecuClassName": "itachi02", "vendor": "NS5001", "ecuSerialFromOEM": "", "ecuSerialFromVendor": "", "ecuId": "e9f14408-c036-4e26-bf80-7faf57ab100c", "ecuName": "itachi02", "ecuOEMSerialNumber": "1q2w3e4r", "ecuVendorSerialNumber": "azsxdcfv", "ecuFirmwareMetadata": { "currentVersion": "2.3.2-zxc", "currentVersionFilename": "產品建立 (1).txt", "currentVersionSize": "544", "currentVersionMD5": "asdfghjkl", "currentVersionVerifyAlgorithm": "RSA", "currentVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "currentVersionCertification": "VGVzdENBQ3JlYXRl", "targetVersion": "3.0.0", "targetVersionFilename": "precondition.csv", "targetVersionSize": "288", "targetVersionMD5": "1234", "targetVersionVerifyAlgorithm": "RSA", "targetVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "targetVersionCertification": "VGVzdENBQ3JlYXRl" } } ] } } ``` ### 2. report/eventRequest -> notification/eventResponse - [x] Checked ```json= BMW/ota/DEVICETYPE/DEVICESUBTYPE/report/readyToExecuteCampaign 原始訊息: { "timestamp":1667292750000, "requestId":"x123456789", "vehicleId":"635f3a682f554c219a511fbf", "vinNumber":"1QAZ2WSX3EDC", "sessionReportList":[ ], "ecuReportList":[ { "timestamp":1667292750000, "sessionId":"6374c078e9d4f84c6560a883", "campaignId":"6371a58f2f0087634a454688", "ecuId":"f6fcf928-0aea-4ffc-a24e-85fa8d2faef6", "ecuClassId":"704a31cd-d629-406d-a233-3bdaad25ce36", "currentVersion":"2.3.2-zxc", "targetVersion":"3.0.0", "otaStepCode":"Downloading", "otaLog":[ { "logTimestamp":0, "logLevel":"warn", "logContent":"this is a test" } ] } ] } encode => { "payload": "eyd0aW1lc3RhbXAnOiAxNjY3MjkyNzUwMDAwLCAncmVxdWVzdElkJzogJ3gxMjM0NTY3ODknLCAndmVoaWNsZUlkJzogJzYzNWYzYTY4MmY1NTRjMjE5YTUxMWZiZicsICd2aW5OdW1iZXInOiAnMVFBWjJXU1gzRURDJywgJ3Nlc3Npb25SZXBvcnRMaXN0JzogW10sICdlY3VSZXBvcnRMaXN0JzogW3sndGltZXN0YW1wJzogMTY2NzI5Mjc1MDAwMCwgJ3Nlc3Npb25JZCc6ICc2Mzc0YzA3OGU5ZDRmODRjNjU2MGE4ODMnLCAnY2FtcGFpZ25JZCc6ICc2MzcxYTU4ZjJmMDA4NzYzNGE0NTQ2ODgnLCAnZWN1SWQnOiAnZjZmY2Y5MjgtMGFlYS00ZmZjLWEyNGUtODVmYThkMmZhZWY2JywgJ2VjdUNsYXNzSWQnOiAnNzA0YTMxY2QtZDYyOS00MDZkLWEyMzMtM2JkYWFkMjVjZTM2JywgJ2N1cnJlbnRWZXJzaW9uJzogJzIuMy4yLXp4YycsICd0YXJnZXRWZXJzaW9uJzogJzMuMC4wJywgJ290YVN0ZXBDb2RlJzogJ0Rvd25sb2FkaW5nJywgJ290YUxvZyc6IFt7J2xvZ1RpbWVzdGFtcCc6IDAsICdsb2dMZXZlbCc6ICd3YXJuJywgJ2xvZ0NvbnRlbnQnOiAndGhpcyBpcyBhIHRlc3QnfV19XX0=", "signature": "OrBi0EgfKxnLYLRqmH41HFYrVmD320LzCVBlgBfsF+CDQLfh1NtiTfhgtWOUHbue4ca5/X/u+6EMSfk+Fkg11Ha7C3rwZQ/T4YVEV+ijU6ooj36d+MH/F7LbpWxIB9Uo5oUQR7fUDFy+ESk8olN24u6HPMRtyE/Td4WlBk2/Q3Kd6PD6jE9Dqz1W8DBu2OmQWhWBHIj01nS3kdu4pGiJrVUPU7N/0HylYG2jFcknxXKOsCgq6Yeh7m70HmRLi3mSXXHs/rmIKfe6XQrMIctYbp1Hcx7hW2L3bW6sD5C2wRzURB+KPZ7jKR1oXVRfYcJAbBrqf1T9UROGdLrFC5HMCw==", "identity": "1QAZ2WSX3EDC" } ``` ```json= BMW/ota/DEVICETYPE/vehicleId/notification/eventResponse 收到訊息: { "identity": "1QAZ2WSX3EDC", "payload": "eyd0aW1lc3RhbXAnOiAxNjY4NzU5MDg1Mjg4LCAncmVxdWVzdElkJzogJ3gxMjM0NTY3ODknfQ==", "signature": "qvN/Zp5zd1APgb+zNCzjPWOFAr0Cc51ENdlPiq+C9g1u9WDCsXkHW/HFt8DyvxfUZB4iz2NmrWmCkl8ubETGmx04RGrl7r4bv2JZcJMZbCPN4Qhkn/JAm/2mb1ZTs+WNetd6wOp7arXLjh+oaYwJE2xL8Who2vbiGEY0DYzorsE5NAVufaBAkqzUMWFQVAsK7ah60eT+dzy7gwtkJu1jKFjjV0RZYqFpFl7S8iwNxs2380Zt10dIO1eq29mGn19a0rPXHccUotmSAu0rQT0DVFz8Zm64Jm1+ERBt6uki4kAhommGM5mu6xPia/O1JPBv3bXZBIQk6PdjG6yG/129mg==" } decode=> ``` ### 3. report/readyToExecuteCampaign -> notification/setSession - [x] Checked - [x] 多出了欄位 - 1. ecuSerialFromVendor - 2. currentVersionURL - 3. targetVersionURL ```json= BMW/ota/DEVICETYPE/DEVICESUBTYPE/report/readyToExecuteCampaign 原始訊息: { "timestamp": 1667530177000, "campaignId": "6371a58f2f0087634a454688", "missionId": "6374c078e9d4f84c6560a883", "vehicle": { "vehicleId": "635f3a682f554c219a511fbf", "vinNumber": "1QAZ2WSX3EDC" } } encode => { "payload":"eyd0aW1lc3RhbXAnOiAxNjY3NTMwMTc3MDAwLCAnY2FtcGFpZ25JZCc6ICc2MzcxYTU4ZjJmMDA4NzYzNGE0NTQ2ODgnLCAnbWlzc2lvbklkJzogJzYzNzRjMDc4ZTlkNGY4NGM2NTYwYTg4MycsICd2ZWhpY2xlJzogeyd2ZWhpY2xlSWQnOiAnNjM1ZjNhNjgyZjU1NGMyMTlhNTExZmJmJywgJ3Zpbk51bWJlcic6ICcxUUFaMldTWDNFREMnfX0=", "signature":"mMQPbD/naO2F4dyNhsfbOncacI36X7kpjkycCnP/UA820zzrT9wpwBEzk8K3ZFKsufivF+pCbh19Z3D6EmoufbcCz8NbQ2oFvi7JM+Cbsk1lk5E1F10f/jhyoK2VhK21MvvL9emK8vrStM4Vc2qbScUrFBGbjJxsrrGkwRJXGUXh8G1s8rDaAX1r9SIpZ0S8yNQwBJtaLrMBNNRGHULsrY5Fw9P6wrnP+ldsmg/AVki2+CtRAsu+EdOZZ7z8t17NCGbEx4g5knbm9fJwW3ncktiN/NHbEGrNDC2BjSiQPEZ1emUcA4KEd8BeL+MKc1sZkU6CSyuNsZzHtwvhxDDBxw==", "identity":"1QAZ2WSX3EDC" } ``` ```json= BMW/ota/DEVICETYPE/DEVICESUBTYPE/notification/setSession 收到訊息: { "identity":"1QAZ2WSX3EDC", "payload":"eyd0aW1lc3RhbXAnOiAxNjY4NzU4MDQyODMwLCAnY2FtcGFpZ25JZCc6ICc2MzcxYTU4ZjJmMDA4NzYzNGE0NTQ2ODgnLCAnbWlzc2lvbklkJzogJzYzNzRjMDc4ZTlkNGY4NGM2NTYwYTg4MycsICdzZXNzaW9uU3RhdHVzJzogeydzZXNzaW9uSWQnOiAnNjM3NGMwNzhlOWQ0Zjg0YzY1NjBhODgzJywgJ3Nlc3Npb25BY3Rpb24nOiAnc3RhcnQnLCAnc2Vzc2lvbkFjdGlvblNlcnZlclRpbWVzdGFtcCc6IDE2Njg3NTgwNDM5NDksICdvdGFTdGF0dXMnOiAnc3RhcnRlZCd9LCAnZWN1TGlzdCc6IFt7J2VjdUNsYXNzSWQnOiAnMGNlYjMyM2UtMTA2My00YjIzLWFhZWEtM2Q1OWEyMTI1NmY3JywgJ2VjdUNsYXNzTmFtZSc6ICdpdGFjaGkwMScsICd2ZW5kb3InOiAnTlM1MDAxJywgJ2VjdVNlcmlhbEZyb21PRU0nOiAnJywgJ2VjdVNlcmlhbEZyb21WZW5kb3InOiAnJywgJ2VjdU9FTVNlcmlhbE51bWJlcic6ICcxcTJ3M2U0cicsICdlY3VWZW5kb3JTZXJpYWxOdW1iZXInOiAnYXpzeGRjZnYnLCAnZWN1RmlybXdhcmVNZXRhZGF0YSc6IHsnY3VycmVudFZlcnNpb24nOiAnMS4yLjMtYXNkJywgJ2N1cnJlbnRWZXJzaW9uVXJsJzogJ3ZlcnNpb24vNDUxNDQ3YjgtZTdmNi00OGJkLWFiMjItOGZjYWJhMzkxNjAxL+eUouWTgeW7uueriyAoMSkudHh0JywgJ2N1cnJlbnRWZXJzaW9uRmlsZW5hbWUnOiAn55Si5ZOB5bu656uLICgxKS50eHQnLCAnY3VycmVudFZlcnNpb25TaXplJzogJzU0NCcsICdjdXJyZW50VmVyc2lvbk1ENSc6ICdhc2RmZ2hqa2wnLCAnY3VycmVudFZlcnNpb25WZXJpZnlBbGdvcml0aG0nOiAnUlNBJywgJ2N1cnJlbnRWZXJzaW9uVmVyaWZ5UHVibGljS2V5JzogJ1ZHVnpkRkIxWW14cFkwdGxlVU55WldGMFpRPT0nLCAnY3VycmVudFZlcnNpb25DZXJ0aWZpY2F0aW9uJzogJ1ZHVnpkRU5CUTNKbFlYUmwnLCAndGFyZ2V0VmVyc2lvbic6ICcxLjIuNC1hc2QnLCAndGFyZ2V0VmVyc2lvblVybCc6ICd2ZXJzaW9uLzBiZDQ0MzRlLTg3ODgtNDg3ZC05NGZmLTUwYzQ1NzI0MDgwZS8yMDIyLTA4LTIzLTE5LTI0LTU5LmxvZycsICd0YXJnZXRWZXJzaW9uRmlsZW5hbWUnOiAnMjAyMi0wOC0yMy0xOS0yNC01OS5sb2cnLCAndGFyZ2V0VmVyc2lvblNpemUnOiAnMTU0ODQnLCAndGFyZ2V0VmVyc2lvbk1ENSc6ICcxMjM0NTYnLCAndGFyZ2V0VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAndGFyZ2V0VmVyc2lvblZlcmlmeVB1YmxpY0tleSc6ICdWR1Z6ZEZCMVlteHBZMHRsZVVOeVpXRjBaUT09JywgJ3RhcmdldFZlcnNpb25DZXJ0aWZpY2F0aW9uJzogJ1ZHVnpkRU5CUTNKbFlYUmwnLCAnY3VycmVudFZlcnNpb25VUkwnOiAnaHR0cHM6Ly9haW90YW1yLmJsb2IuY29yZS53aW5kb3dzLm5ldC9vdGEvdmVyc2lvbi80NTE0NDdiOC1lN2Y2LTQ4YmQtYWIyMi04ZmNhYmEzOTE2MDEv55Si5ZOB5bu656uLICgxKS50eHQ/c3Y9MjAyMC0xMC0wMiZzcHI9aHR0cHMmc2U9MjAyMi0xMS0xOFQwOCUzQTAzJTNBNTdaJnNyPWImc3A9ciZzaWc9Q3NqQ2dzeDlUYmtHMUVOVW9INGpiUzJVaFB5RDZaMkRDMXR6OU4yUU56byUzRCcsICd0YXJnZXRWZXJzaW9uVVJMJzogJ2h0dHBzOi8vYWlvdGFtci5ibG9iLmNvcmUud2luZG93cy5uZXQvb3RhL3ZlcnNpb24vMGJkNDQzNGUtODc4OC00ODdkLTk0ZmYtNTBjNDU3MjQwODBlLzIwMjItMDgtMjMtMTktMjQtNTkubG9nP3N2PTIwMjAtMTAtMDImc3ByPWh0dHBzJnNlPTIwMjItMTEtMThUMDglM0EwMyUzQTU3WiZzcj1iJnNwPXImc2lnPWdNS1B5RVRHRHh3S1B2dlZrWVlEYWhkSVladk1PQTVsM3ZFU0ZTT3hXZUElM0QnfX0sIHsnZWN1Q2xhc3NJZCc6ICc3MDRhMzFjZC1kNjI5LTQwNmQtYTIzMy0zYmRhYWQyNWNlMzYnLCAnZWN1Q2xhc3NOYW1lJzogJ2l0YWNoaTAyJywgJ3ZlbmRvcic6ICdOUzUwMDEnLCAnZWN1U2VyaWFsRnJvbU9FTSc6ICcnLCAnZWN1U2VyaWFsRnJvbVZlbmRvcic6ICcnLCAnZWN1T0VNU2VyaWFsTnVtYmVyJzogJzFxMnczZTRyJywgJ2VjdVZlbmRvclNlcmlhbE51bWJlcic6ICdhenN4ZGNmdicsICdlY3VGaXJtd2FyZU1ldGFkYXRhJzogeydjdXJyZW50VmVyc2lvbic6ICcyLjMuMi16eGMnLCAnY3VycmVudFZlcnNpb25VcmwnOiAndmVyc2lvbi82MDNhZWM1NC1kOWM2LTQ3NTEtOTliOC1jNWVkYjlhYTZiMzIv55Si5ZOB5bu656uLICgxKS50eHQnLCAnY3VycmVudFZlcnNpb25GaWxlbmFtZSc6ICfnlKLlk4Hlu7rnq4sgKDEpLnR4dCcsICdjdXJyZW50VmVyc2lvblNpemUnOiAnNTQ0JywgJ2N1cnJlbnRWZXJzaW9uTUQ1JzogJ2FzZGZnaGprbCcsICdjdXJyZW50VmVyc2lvblZlcmlmeUFsZ29yaXRobSc6ICdSU0EnLCAnY3VycmVudFZlcnNpb25WZXJpZnlQdWJsaWNLZXknOiAnVkdWemRGQjFZbXhwWTB0bGVVTnlaV0YwWlE9PScsICdjdXJyZW50VmVyc2lvbkNlcnRpZmljYXRpb24nOiAnVkdWemRFTkJRM0psWVhSbCcsICd0YXJnZXRWZXJzaW9uJzogJzMuMC4wJywgJ3RhcmdldFZlcnNpb25VcmwnOiAndmVyc2lvbi84ZmZmMmM2Yy04ZDcxLTQ4ZTMtYThlNC0xMDVkYzAwM2JkMmYvcHJlY29uZGl0aW9uLmNzdicsICd0YXJnZXRWZXJzaW9uRmlsZW5hbWUnOiAncHJlY29uZGl0aW9uLmNzdicsICd0YXJnZXRWZXJzaW9uU2l6ZSc6ICcyODgnLCAndGFyZ2V0VmVyc2lvbk1ENSc6ICcxMjM0JywgJ3RhcmdldFZlcnNpb25WZXJpZnlBbGdvcml0aG0nOiAnUlNBJywgJ3RhcmdldFZlcnNpb25WZXJpZnlQdWJsaWNLZXknOiAnVkdWemRGQjFZbXhwWTB0bGVVTnlaV0YwWlE9PScsICd0YXJnZXRWZXJzaW9uQ2VydGlmaWNhdGlvbic6ICdWR1Z6ZEVOQlEzSmxZWFJsJywgJ2N1cnJlbnRWZXJzaW9uVVJMJzogJ2h0dHBzOi8vYWlvdGFtci5ibG9iLmNvcmUud2luZG93cy5uZXQvb3RhL3ZlcnNpb24vNjAzYWVjNTQtZDljNi00NzUxLTk5YjgtYzVlZGI5YWE2YjMyL+eUouWTgeW7uueriyAoMSkudHh0P3N2PTIwMjAtMTAtMDImc3ByPWh0dHBzJnNlPTIwMjItMTEtMThUMDglM0EwMyUzQTU3WiZzcj1iJnNwPXImc2lnPXJNV05jT0o2cUNlZ0VBMlpIVVdKZTE4UE9YMGlXb0twRVZJcG13ZnpwcHMlM0QnLCAndGFyZ2V0VmVyc2lvblVSTCc6ICdodHRwczovL2Fpb3RhbXIuYmxvYi5jb3JlLndpbmRvd3MubmV0L290YS92ZXJzaW9uLzhmZmYyYzZjLThkNzEtNDhlMy1hOGU0LTEwNWRjMDAzYmQyZi9wcmVjb25kaXRpb24uY3N2P3N2PTIwMjAtMTAtMDImc3ByPWh0dHBzJnNlPTIwMjItMTEtMThUMDglM0EwMyUzQTU3WiZzcj1iJnNwPXImc2lnPWpOY2F1RFc2eSUyRk03MEREcjJVd0Y1dHRhNEJxM0RzSFBoa3V1S3pEVFVuNCUzRCd9fV19", "signature":"NyH1sKj7+ndIh7jtn5ktIp2AAL/YvEBJBPG0I2pl612O3p5cdCORSAW1xRe9cEzl6URyxJrDGQN4W6Z2uLH6AxbmwWoLD0SaFTJA+80m6yqcm2uGSlSftdCr6ZyWiCV8lp0onTrDaqHHSnBr4Ud1LyuDN8OAXFhoioWZ5b3MqCkUA++V0VJWe8Hm3gUi1p+aUThVEkmmtZWsls7+qHUiSQzPp6tcHeCzS/DCrFjY0v2WcpsOJreT7H0RDliCyfEWk8+W4qdhZRY0O/4RshmZ5mi92eGZGVOJ/RbyeFft5aZSzfXb0fhKfNfeel1ksDSRUzOAswBFjHaZlYj0V69fPg==" } decode => { "timestamp": 1668758042830, "campaignId": "6371a58f2f0087634a454688", "missionId": "6374c078e9d4f84c6560a883", "sessionStatus": { "sessionId": "6374c078e9d4f84c6560a883", "sessionAction": "start", "sessionActionServerTimestamp": 1668758043949, "otaStatus": "started" }, "ecuList": [ { "ecuClassId": "0ceb323e-1063-4b23-aaea-3d59a21256f7", "ecuClassName": "itachi01", "vendor": "NS5001", "ecuSerialFromOEM": "", "ecuSerialFromVendor": "", "ecuOEMSerialNumber": "1q2w3e4r", "ecuVendorSerialNumber": "azsxdcfv", "ecuFirmwareMetadata": { "currentVersion": "1.2.3-asd", "currentVersionUrl": "version/451447b8-e7f6-48bd-ab22-8fcaba391601/產品建立 (1).txt", "currentVersionFilename": "產品建立 (1).txt", "currentVersionSize": "544", "currentVersionMD5": "asdfghjkl", "currentVersionVerifyAlgorithm": "RSA", "currentVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "currentVersionCertification": "VGVzdENBQ3JlYXRl", "targetVersion": "1.2.4-asd", "targetVersionUrl": "version/0bd4434e-8788-487d-94ff-50c45724080e/2022-08-23-19-24-59.log", "targetVersionFilename": "2022-08-23-19-24-59.log", "targetVersionSize": "15484", "targetVersionMD5": "123456", "targetVersionVerifyAlgorithm": "RSA", "targetVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "targetVersionCertification": "VGVzdENBQ3JlYXRl", "currentVersionURL": "https://aiotamr.blob.core.windows.net/ota/version/451447b8-e7f6-48bd-ab22-8fcaba391601/產品建立 (1).txt?sv=2020-10-02&spr=https&se=2022-11-18T08%3A03%3A57Z&sr=b&sp=r&sig=CsjCgsx9TbkG1ENUoH4jbS2UhPyD6Z2DC1tz9N2QNzo%3D", "targetVersionURL": "https://aiotamr.blob.core.windows.net/ota/version/0bd4434e-8788-487d-94ff-50c45724080e/2022-08-23-19-24-59.log?sv=2020-10-02&spr=https&se=2022-11-18T08%3A03%3A57Z&sr=b&sp=r&sig=gMKPyETGDxwKPvvVkYYDahdIYZvMOA5l3vESFSOxWeA%3D" } }, { "ecuClassId": "704a31cd-d629-406d-a233-3bdaad25ce36", "ecuClassName": "itachi02", "vendor": "NS5001", "ecuSerialFromOEM": "", "ecuSerialFromVendor": "", "ecuOEMSerialNumber": "1q2w3e4r", "ecuVendorSerialNumber": "azsxdcfv", "ecuFirmwareMetadata": { "currentVersion": "2.3.2-zxc", "currentVersionUrl": "version/603aec54-d9c6-4751-99b8-c5edb9aa6b32/產品建立 (1).txt", "currentVersionFilename": "產品建立 (1).txt", "currentVersionSize": "544", "currentVersionMD5": "asdfghjkl", "currentVersionVerifyAlgorithm": "RSA", "currentVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "currentVersionCertification": "VGVzdENBQ3JlYXRl", "targetVersion": "3.0.0", "targetVersionUrl": "version/8fff2c6c-8d71-48e3-a8e4-105dc003bd2f/precondition.csv", "targetVersionFilename": "precondition.csv", "targetVersionSize": "288", "targetVersionMD5": "1234", "targetVersionVerifyAlgorithm": "RSA", "targetVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "targetVersionCertification": "VGVzdENBQ3JlYXRl", "currentVersionURL": "https://aiotamr.blob.core.windows.net/ota/version/603aec54-d9c6-4751-99b8-c5edb9aa6b32/產品建立 (1).txt?sv=2020-10-02&spr=https&se=2022-11-18T08%3A03%3A57Z&sr=b&sp=r&sig=rMWNcOJ6qCegEA2ZHUWJe18POX0iWoKpEVIpmwfzpps%3D", "targetVersionURL": "https://aiotamr.blob.core.windows.net/ota/version/8fff2c6c-8d71-48e3-a8e4-105dc003bd2f/precondition.csv?sv=2020-10-02&spr=https&se=2022-11-18T08%3A03%3A57Z&sr=b&sp=r&sig=jNcauDW6y%2FM70DDr2UwF5tta4Bq3DsHPhkuuKzDTUn4%3D" } } ] } ``` ### 4. report/completeMission - [x] Checked ```json= 原始訊息: { "timestamp": 1667292750000, "sessionId": "6374c078e9d4f84c6560a883", "campaignId": "6371a58f2f0087634a454688", "vehicle": { "vehicleId": "635f3a682f554c219a511fbf", "vinNumber": "1QAZ2WSX3EDC" } } encode => { "payload": "eyd0aW1lc3RhbXAnOiAxNjY3MjkyNzUwMDAwLCAnc2Vzc2lvbklkJzogJzYzNzRjMDc4ZTlkNGY4NGM2NTYwYTg4MycsICdjYW1wYWlnbklkJzogJzYzNzFhNThmMmYwMDg3NjM0YTQ1NDY4OCcsICd2ZWhpY2xlJzogeyd2ZWhpY2xlSWQnOiAnNjM1ZjNhNjgyZjU1NGMyMTlhNTExZmJmJywgJ3Zpbk51bWJlcic6ICcxUUFaMldTWDNFREMnfX0=", "signature": "mLNwRnASHe1kxVVbIXFdXL58q/Yn1Fs13YzX5N60bwuuM7Upjw7t3HqsZ/ZE6GrGm+hn0ZmTutAW9gBW2tabYDsGI70ruEhLPmOsVZN4PK594eJ4yXJpI4Z5f1dtLKHseXeYZpPNq2fe7LmCko9UJYO1j9u4X3OHxW9qyMLc5R5ifeJn29p4H+lyGKkWO5O8bAwT0F3xRu8fDOttHkirMpih2r243HSDmDYa/j8A9/bz2X5kDwCsQyqNb6Z/E8dnPXnJ0E+yoXrJM3KGGUUMUqnoQczj1YWtE4V2PewEgEhbis7AHELrPDfloOs/siXQ66nIg+kzWpDp7urZxveH1A==", "identity": "1QAZ2WSX3EDC" } ``` ## Backend ### 1. Start a compaign -> setCompaign - [x] Checked ```json= PUT {{api}}/api/campaign/6371a58f2f0087634a454688/start Topic: BMW/ota/789/ca5607c0-79f8-4461-88f3-6bba3349c0dd/notification/setCampaign 收到訊息: response = { "signature": "voWgJszbS7xzFTZgNk3IK8eC62x9E3jqF3f1ciomdb5uMs6RQPmnOsA95fG7nm+3wJBK6tKdcWIfQv5kLu23UwK5iHY1x77JIcvWIGy6BZGAFS41IGLSGpjqNDQQwweHcAHygs3blihbgIDXS+l19TRvcMzKWheDMHjxm7cHQ25wqZsM+gQ9XLV3iAE22IZ3WWlFtOKkr9hIBfdPGcLlJHH40o5GgJNDzFcXPxhFEjF4aIRPn/Vz4x7iTlFrGiJaUuLQCOWixyFLKhzO+KfRJlO54xJrmQVSBXn5ZK7H8TVmOrKyly3OMwSdKMu14z4i+nDnZlxOFZdXqDPiF/yF1g==", "payload": "eyJ0aW1lc3RhbXAiOjE2Njg1OTU4MzMyMjcsImNhbXBhaWduVG9waWMiOiJCTVcvb3RhLzYzNzFhNThmMmYwMDg3NjM0YTQ1NDY4OC9DYW1wYWlnbiIsIm1pc3Npb25Ub3BpYyI6IkJNVy9vdGEvNjM3MWE1OGYyZjAwODc2MzRhNDU0Njg4LzYzNzRjMDc4ZTlkNGY4NGM2NTYwYTg4My9NaXNzaW9uIiwic2Vzc2lvblRvcGljIjoiQk1XL290YS82MzcxYTU4ZjJmMDA4NzYzNGE0NTQ2ODgvNjM3NGMwNzhlOWQ0Zjg0YzY1NjBhODgzL1Nlc3Npb24iLCJvdGFNaXNzaW9uIjp7ImVjdUxpc3QiOlt7ImVjdUNsYXNzSWQiOiIwY2ViMzIzZS0xMDYzLTRiMjMtYWFlYS0zZDU5YTIxMjU2ZjciLCJlY3VDbGFzc05hbWUiOiJpdGFjaGkwMSIsInZlbmRvciI6Ik5TNTAwMSIsImVjdVNlcmlhbEZyb21PRU0iOiIiLCJlY3VTZXJpYWxGcm9tVmVuZG9yIjoiIiwiZWN1T0VNU2VyaWFsTnVtYmVyIjoiMXEydzNlNHIiLCJlY3VWZW5kb3JTZXJpYWxOdW1iZXIiOiJhenN4ZGNmdiIsImVjdUZpcm13YXJlTWV0YWRhdGEiOnsiY3VycmVudFZlcnNpb24iOiIxLjIuMy1hc2QiLCJjdXJyZW50VmVyc2lvbk9iamVjdEtleSI6InZlcnNpb24vNDUxNDQ3YjgtZTdmNi00OGJkLWFiMjItOGZjYWJhMzkxNjAxL+eUouWTgeW7uueriyAoMSkudHh0IiwiY3VycmVudFZlcnNpb25VcmwiOiJ2ZXJzaW9uLzQ1MTQ0N2I4LWU3ZjYtNDhiZC1hYjIyLThmY2FiYTM5MTYwMS/nlKLlk4Hlu7rnq4sgKDEpLnR4dCIsImN1cnJlbnRWZXJzaW9uRmlsZW5hbWUiOiLnlKLlk4Hlu7rnq4sgKDEpLnR4dCIsImN1cnJlbnRWZXJzaW9uU2l6ZSI6IjU0NCIsImN1cnJlbnRWZXJzaW9uTUQ1IjoiYXNkZmdoamtsIiwiY3VycmVudFZlcnNpb25WZXJpZnlBbGdvcml0aG0iOiJSU0EiLCJjdXJyZW50VmVyc2lvblZlcmlmeVB1YmxpY0tleSI6IlZHVnpkRkIxWW14cFkwdGxlVU55WldGMFpRXHUwMDNkXHUwMDNkIiwiY3VycmVudFZlcnNpb25DZXJ0aWZpY2F0aW9uIjoiVkdWemRFTkJRM0psWVhSbCIsInRhcmdldFZlcnNpb24iOiIxLjIuNC1hc2QiLCJ0YXJnZXRWZXJzaW9uT2JqZWN0S2V5IjoidmVyc2lvbi8wYmQ0NDM0ZS04Nzg4LTQ4N2QtOTRmZi01MGM0NTcyNDA4MGUvMjAyMi0wOC0yMy0xOS0yNC01OS5sb2ciLCJ0YXJnZXRWZXJzaW9uVXJsIjoidmVyc2lvbi8wYmQ0NDM0ZS04Nzg4LTQ4N2QtOTRmZi01MGM0NTcyNDA4MGUvMjAyMi0wOC0yMy0xOS0yNC01OS5sb2ciLCJ0YXJnZXRWZXJzaW9uRmlsZW5hbWUiOiIyMDIyLTA4LTIzLTE5LTI0LTU5LmxvZyIsInRhcmdldFZlcnNpb25TaXplIjoiMTU0ODQiLCJ0YXJnZXRWZXJzaW9uTUQ1IjoiMTIzNDU2IiwidGFyZ2V0VmVyc2lvblZlcmlmeUFsZ29yaXRobSI6IlJTQSIsInRhcmdldFZlcnNpb25WZXJpZnlQdWJsaWNLZXkiOiJWR1Z6ZEZCMVlteHBZMHRsZVVOeVpXRjBaUVx1MDAzZFx1MDAzZCIsInRhcmdldFZlcnNpb25DZXJ0aWZpY2F0aW9uIjoiVkdWemRFTkJRM0psWVhSbCJ9fSx7ImVjdUNsYXNzSWQiOiI3MDRhMzFjZC1kNjI5LTQwNmQtYTIzMy0zYmRhYWQyNWNlMzYiLCJlY3VDbGFzc05hbWUiOiJpdGFjaGkwMiIsInZlbmRvciI6Ik5TNTAwMSIsImVjdVNlcmlhbEZyb21PRU0iOiIiLCJlY3VTZXJpYWxGcm9tVmVuZG9yIjoiIiwiZWN1T0VNU2VyaWFsTnVtYmVyIjoiMXEydzNlNHIiLCJlY3VWZW5kb3JTZXJpYWxOdW1iZXIiOiJhenN4ZGNmdiIsImVjdUZpcm13YXJlTWV0YWRhdGEiOnsiY3VycmVudFZlcnNpb24iOiIyLjMuMi16eGMiLCJjdXJyZW50VmVyc2lvbk9iamVjdEtleSI6InZlcnNpb24vNjAzYWVjNTQtZDljNi00NzUxLTk5YjgtYzVlZGI5YWE2YjMyL+eUouWTgeW7uueriyAoMSkudHh0IiwiY3VycmVudFZlcnNpb25VcmwiOiJ2ZXJzaW9uLzYwM2FlYzU0LWQ5YzYtNDc1MS05OWI4LWM1ZWRiOWFhNmIzMi/nlKLlk4Hlu7rnq4sgKDEpLnR4dCIsImN1cnJlbnRWZXJzaW9uRmlsZW5hbWUiOiLnlKLlk4Hlu7rnq4sgKDEpLnR4dCIsImN1cnJlbnRWZXJzaW9uU2l6ZSI6IjU0NCIsImN1cnJlbnRWZXJzaW9uTUQ1IjoiYXNkZmdoamtsIiwiY3VycmVudFZlcnNpb25WZXJpZnlBbGdvcml0aG0iOiJSU0EiLCJjdXJyZW50VmVyc2lvblZlcmlmeVB1YmxpY0tleSI6IlZHVnpkRkIxWW14cFkwdGxlVU55WldGMFpRXHUwMDNkXHUwMDNkIiwiY3VycmVudFZlcnNpb25DZXJ0aWZpY2F0aW9uIjoiVkdWemRFTkJRM0psWVhSbCIsInRhcmdldFZlcnNpb24iOiIzLjAuMCIsInRhcmdldFZlcnNpb25PYmplY3RLZXkiOiJ2ZXJzaW9uLzhmZmYyYzZjLThkNzEtNDhlMy1hOGU0LTEwNWRjMDAzYmQyZi9wcmVjb25kaXRpb24uY3N2IiwidGFyZ2V0VmVyc2lvblVybCI6InZlcnNpb24vOGZmZjJjNmMtOGQ3MS00OGUzLWE4ZTQtMTA1ZGMwMDNiZDJmL3ByZWNvbmRpdGlvbi5jc3YiLCJ0YXJnZXRWZXJzaW9uRmlsZW5hbWUiOiJwcmVjb25kaXRpb24uY3N2IiwidGFyZ2V0VmVyc2lvblNpemUiOiIyODgiLCJ0YXJnZXRWZXJzaW9uTUQ1IjoiMTIzNCIsInRhcmdldFZlcnNpb25WZXJpZnlBbGdvcml0aG0iOiJSU0EiLCJ0YXJnZXRWZXJzaW9uVmVyaWZ5UHVibGljS2V5IjoiVkdWemRGQjFZbXhwWTB0bGVVTnlaV0YwWlFcdTAwM2RcdTAwM2QiLCJ0YXJnZXRWZXJzaW9uQ2VydGlmaWNhdGlvbiI6IlZHVnpkRU5CUTNKbFlYUmwifX1dfSwib3RhQ2FtcGFpZ24iOnsiY2FtcGFpZ25JZCI6IjYzNzFhNThmMmYwMDg3NjM0YTQ1NDY4OCIsIm1pc3Npb25JZCI6IjYzNzRjMDc4ZTlkNGY4NGM2NTYwYTg4MyIsImNhbXBhaWduQWN0aW9uIjoic3RhcnQiLCJjYW1wYWlnblN0YXR1cyI6InN0YXJ0ZWQiLCJ2ZWhpY2xlQ2xhc3MiOnsiYnJhbmQiOiJCTVciLCJ2ZWhpY2xlQ2xhc3NOYW1lIjoiWDEiLCJyb2xsb3V0RGF0ZSI6IjIwMjIifX0sInByZWNvbmRpdGlvbiI6W3siaWQiOiIxMDAxIiwiY29uZGl0aW9uIjoic3BlZWQiLCJvcGVyYXRvciI6IkVxdWFsIiwidmFsdWUiOiIxMCIsInZhbHVlVHlwZSI6IkludGVnZXIifSx7ImlkIjoiMTAwMiIsImNvbmRpdGlvbiI6ImdlZXIiLCJvcGVyYXRvciI6IkVxdWFsIiwidmFsdWUiOiJQIiwidmFsdWVUeXBlIjoiU3RyaW5nIn1dLCJ1cGRhdGVQYXRoIjp7ImVjdUNsYXNzSWQiOiI1NTE5NWQ4MS03YmEyLTQ1ZjUtYWMwNS1kMWVkN2Q3MDE2MDgiLCJ1cHBlckNvbm5lY3Rpb25UeXBlIjoiQ0FOIiwibmV4dE5vZGVzT3JkZXIiOiJTZXJpYWwiLCJuZXh0Tm9kZXMiOlt7ImVjdUNsYXNzSWQiOiJlMDc1Y2ViYS0yMWZjLTRlMDAtYWJkOS1kMGE1ZWM1ZGUwM2QiLCJ1cHBlckNvbm5lY3Rpb25UeXBlIjoiRXRoZXJuZXQiLCJuZXh0Tm9kZXNPcmRlciI6IlNlcmlhbCIsIm5leHROb2RlcyI6W119LHsiZWN1Q2xhc3NJZCI6IjBjZWIzMjNlLTEwNjMtNGIyMy1hYWVhLTNkNTlhMjEyNTZmNyIsInVwcGVyQ29ubmVjdGlvblR5cGUiOiJFdGhlcm5ldCIsIm5leHROb2Rlc09yZGVyIjoiU2VyaWFsIiwibmV4dE5vZGVzIjpbeyJlY3VDbGFzc0lkIjoiNzA0YTMxY2QtZDYyOS00MDZkLWEyMzMtM2JkYWFkMjVjZTM2IiwidXBwZXJDb25uZWN0aW9uVHlwZSI6IkV0aGVybmV0IiwibmV4dE5vZGVzT3JkZXIiOiJTZXJpYWwiLCJuZXh0Tm9kZXMiOltdfV19XX19", "identity": "1QAZ2WSX3EDC" } decode response.paylaod => 得到結果 { "timestamp": 1668595833227, "campaignTopic": "BMW/ota/6371a58f2f0087634a454688/Campaign", "missionTopic": "BMW/ota/6371a58f2f0087634a454688/6374c078e9d4f84c6560a883/Mission", "sessionTopic": "BMW/ota/6371a58f2f0087634a454688/6374c078e9d4f84c6560a883/Session", "otaMission": { "ecuList": [ { "ecuClassId": "0ceb323e-1063-4b23-aaea-3d59a21256f7", "ecuClassName": "itachi01", "vendor": "NS5001", "ecuSerialFromOEM": "", "ecuSerialFromVendor": "", "ecuOEMSerialNumber": "1q2w3e4r", "ecuVendorSerialNumber": "azsxdcfv", "ecuFirmwareMetadata": { "currentVersion": "1.2.3-asd", "currentVersionObjectKey": "version/451447b8-e7f6-48bd-ab22-8fcaba391601/產品建立 (1).txt", "currentVersionUrl": "version/451447b8-e7f6-48bd-ab22-8fcaba391601/產品建立 (1).txt", "currentVersionFilename": "產品建立 (1).txt", "currentVersionSize": "544", "currentVersionMD5": "asdfghjkl", "currentVersionVerifyAlgorithm": "RSA", "currentVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "currentVersionCertification": "VGVzdENBQ3JlYXRl", "targetVersion": "1.2.4-asd", "targetVersionObjectKey": "version/0bd4434e-8788-487d-94ff-50c45724080e/2022-08-23-19-24-59.log", "targetVersionUrl": "version/0bd4434e-8788-487d-94ff-50c45724080e/2022-08-23-19-24-59.log", "targetVersionFilename": "2022-08-23-19-24-59.log", "targetVersionSize": "15484", "targetVersionMD5": "123456", "targetVersionVerifyAlgorithm": "RSA", "targetVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "targetVersionCertification": "VGVzdENBQ3JlYXRl" } }, { "ecuClassId": "704a31cd-d629-406d-a233-3bdaad25ce36", "ecuClassName": "itachi02", "vendor": "NS5001", "ecuSerialFromOEM": "", "ecuSerialFromVendor": "", "ecuOEMSerialNumber": "1q2w3e4r", "ecuVendorSerialNumber": "azsxdcfv", "ecuFirmwareMetadata": { "currentVersion": "2.3.2-zxc", "currentVersionObjectKey": "version/603aec54-d9c6-4751-99b8-c5edb9aa6b32/產品建立 (1).txt", "currentVersionUrl": "version/603aec54-d9c6-4751-99b8-c5edb9aa6b32/產品建立 (1).txt", "currentVersionFilename": "產品建立 (1).txt", "currentVersionSize": "544", "currentVersionMD5": "asdfghjkl", "currentVersionVerifyAlgorithm": "RSA", "currentVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "currentVersionCertification": "VGVzdENBQ3JlYXRl", "targetVersion": "3.0.0", "targetVersionObjectKey": "version/8fff2c6c-8d71-48e3-a8e4-105dc003bd2f/precondition.csv", "targetVersionUrl": "version/8fff2c6c-8d71-48e3-a8e4-105dc003bd2f/precondition.csv", "targetVersionFilename": "precondition.csv", "targetVersionSize": "288", "targetVersionMD5": "1234", "targetVersionVerifyAlgorithm": "RSA", "targetVersionVerifyPublicKey": "VGVzdFB1YmxpY0tleUNyZWF0ZQ==", "targetVersionCertification": "VGVzdENBQ3JlYXRl" } } ] }, "otaCampaign": { "campaignId": "6371a58f2f0087634a454688", "missionId": "6374c078e9d4f84c6560a883", "campaignAction": "start", "campaignStatus": "started", "vehicleClass": { "brand": "BMW", "vehicleClassName": "X1", "rolloutDate": "2022" } }, "precondition": [ { "id": "1001", "condition": "speed", "operator": "Equal", "value": "10", "valueType": "Integer" }, { "id": "1002", "condition": "geer", "operator": "Equal", "value": "P", "valueType": "String" } ], "updatePath": { "ecuClassId": "55195d81-7ba2-45f5-ac05-d1ed7d701608", "upperConnectionType": "CAN", "nextNodesOrder": "Serial", "nextNodes": [ { "ecuClassId": "e075ceba-21fc-4e00-abd9-d0a5ec5de03d", "upperConnectionType": "Ethernet", "nextNodesOrder": "Serial", "nextNodes": [] }, { "ecuClassId": "0ceb323e-1063-4b23-aaea-3d59a21256f7", "upperConnectionType": "Ethernet", "nextNodesOrder": "Serial", "nextNodes": [ { "ecuClassId": "704a31cd-d629-406d-a233-3bdaad25ce36", "upperConnectionType": "Ethernet", "nextNodesOrder": "Serial", "nextNodes": [] } ] } ] } } ``` ### 2. Pause a compaign - [x] Checked ```json= PUT {{api}}/api/campaign/6371a58f2f0087634a454688/pause topic: BMW/ota/6371a58f2f0087634a454688/Campaign 收到訊息: response = { "signature": "X6nOKq0h7NKT/ZuhhcXvcBormn95nfQn+nchnHPTeGFDi9krib2Vw5KSnyuuKe1E2uSytZM95Pu0WlYGl9UMnGY0oaVykPQoZwXZvHN3o8UKGzt+dXtK1j8bBueheEtzq3RCYAf+8an3NTi3t8Wxb10XuPAcJ9ARndaUrEs2DKzc173Q1okzaLVtxZPlCXqdQ1lbh/4YNMbcdz9d83j/rHqajfskx+Xr4jg77c/thIkoaL2XGJxSrkqFbkW+uuqBuC8tgTuBggaUqSRdySrrclXP55OaRXfxAye2MZBr1ncQi9l5ZTk6tU6jhODW0XFGATA+8ssE2fHB4lm3W8oKlA==", "payload": "eyJjYW1wYWlnbkFjdGlvbiI6InBhdXNlIiwiY2FtcGFpZ25JZCI6IjYzNzFhNThmMmYwMDg3NjM0YTQ1NDY4OCIsInRpbWVzdGFtcCI6MTY2ODY0NzA5NDA3NX0=", "identity": "BMW" } decode response.paylaod => 得到結果 { "campaignAction": "pause", "campaignId": "6371a58f2f0087634a454688", "timestamp": 1668647094075 } ``` ### 3. Resume a compaign - [x] Checked ```json= PUT {{api}}/api/campaign/6371a58f2f0087634a454688/resume topic: BMW/ota/6371a58f2f0087634a454688/Campaign 收到訊息: response = { "signature": "yNLMDbf4jRhYtavHXltT1c3N65dlswWhU/NUlUNvVKiJYRNPBndjUxQu2ra9JXNsfin1l5XFAPigxV4b3VCZYBDIC7fbPdVOJWp/JS+2wmx/4ogk5fyFDBg9FQeSFMSVCwVvBAwO81OfrHjpOa9QPYzv7s1s74gXM+A3XY4V8jCgGlu6YRnYWFc8FdneXS5cEOO3zijB4hSzy+NMqVMh42mc8T5LgV7sQsIMLxNKXKFkUwP7Uw86FYMoTs7mHepajFrU26LQR7wUU0Ij86/LDr23u0ewfWFfo2gPdIT0F+P8SyHRHZVv0XXtsJ4iGxYCCPmTTWeHuY410eUy1VAoaA==", "payload": "eyJjYW1wYWlnbkFjdGlvbiI6InJlc3VtZSIsImNhbXBhaWduSWQiOiI2MzcxYTU4ZjJmMDA4NzYzNGE0NTQ2ODgiLCJ0aW1lc3RhbXAiOjE2Njg2NTA4OTI3OTV9", "identity": "BMW" } decode response.paylaod => 得到結果 { "campaignAction": "resume", "campaignId": "6371a58f2f0087634a454688", "timestamp": 1668650892795 } ``` ### 4. Abort a compaign - [x] Checked ```json= PUT {{api}}/api/campaign/6371a58f2f0087634a454688/abort topic: BMW/ota/6371a58f2f0087634a454688/Campaign 收到訊息: response = { "signature": "R61kT92f9AJN1tOsMeN6AySFyy2A/vlHw7ywAWo1QZO01TU1EfZ91+6olUAZrBv25pDrnY5jLO5+Vuu3TXT4gWRNT1aSS2wp2WwRtaF7j5Qz4irnFQgt+otSMqHfVs0vwp75Jha3ZaXKnEKVdoK7Ja0ZnMsOYbaauPIcbc81eaN0cuDz56Mgqh4VgbWNGTPYf8Udo3W+wwyLydjcVNRJSDfEsycD8IEeikF6Xq/yACnpbpJkhw32y9Zo1+0sFUb0t1Hklqqi7Ww2R5C7mkWj7ycwU+mM9hHrfRye+TpSoL+XZK8GHWUBwV8mJenLMzDz8MPMh0KfR29OGTWO+SLzAA==", "payload": "eyJjYW1wYWlnbkFjdGlvbiI6ImFib3J0IiwiY2FtcGFpZ25JZCI6IjYzNzFhNThmMmYwMDg3NjM0YTQ1NDY4OCIsInRpbWVzdGFtcCI6MTY2ODY1MTM0ODQyNn0=", "identity": "BMW" } decode response.paylaod => 得到結果 { "campaignAction": "abort", "campaignId": "6371a58f2f0087634a454688", "timestamp": 1668651348426 } ``` ### 5. Pause a Mission - [x] Checked ```json= PUT {{api}}/api/mission/6374c078e9d4f84c6560a883/pause topic: BMW/ota/6371a58f2f0087634a454688/6374c078e9d4f84c6560a883/Mission 收到訊息: response = { "signature": "xpSCYMZfhq7F3RTjqy5iw3gFQrMV6an5d7gOf1yFAvOfqJayG6GtakAASDQCwvdWi1OgTKPXywBc90RoWoygQLay/xtP6S5nj7rYnJ6EYONpzxWmCYJ6EZhStdndcz2u8Nd2rmzKGCuxpm2pigd+I8V6UpA0AD8YIItCw1KSrDvmZfTSkoXPFpPraLSHNEEtLFYH+EWCxHHztv6I2gVxBgCI13kV09gsPQFuVRP8xUs3wynEZ7cy+9Ekk7v+TBjK7jXRJ27b7GCZNpFjc7+rN5Q9EpvXOLxVNlkXANSIEkS2muFajQXGCC7GrVMKovHi4YBKo8NPP1IvDdRLxX7sFg==", "payload": "eyJzZXNzaW9uSWQiOiI2Mzc0YzA3OGU5ZDRmODRjNjU2MGE4ODMiLCJjYW1wYWlnbklkIjoiNjM3MWE1OGYyZjAwODc2MzRhNDU0Njg4IiwidGltZXN0YW1wIjoxNjY4NjUxODcwOTM2LCJjb21tYW5kIjoicGF1c2UifQ==", "identity": "1QAZ2WSX3EDC" } decode response.paylaod => 得到結果 { "sessionId": "6374c078e9d4f84c6560a883", "campaignId": "6371a58f2f0087634a454688", "timestamp": 1668653373902, "command": "pause" } ``` ### 6. Resume a Mission - [x] Checked ```json= PUT {{api}}/api/mission/6374c078e9d4f84c6560a883/resume topic: BMW/ota/6371a58f2f0087634a454688/6374c078e9d4f84c6560a883/Mission 收到訊息: response = { "signature": "jbSS32ZMEfF2VdhRHFf8kAFk2GRnafkQQoe7EIs0JjTffmOhV5cHtyXmYr7CReVdaZlLxnatUVg51H5l7JjSUSmx9+IzSABlpyhmAWXbfX0DUcJwm6a4RHS3cCEKWHdI+EP38R4fDBkqGSc22wPoC22DnC3niv4sRDHLtjUc/00GZW8JT//lVyt+ZNSXRcx7zNXMPiT1Hpv4UPlwlYEUCmv2MbnB1nxjtrdTjkelR0LhJZTbQ0hWmikpQ+4xwRQjwVhp/mxYbULHHWeNf9YeI6vG8IFi/M/5FIE3of7g8MmKfounviHHdD2Y0W4YZuzjK+c57qJAMDuiT53jmAqTPQ==", "payload": "eyJzZXNzaW9uSWQiOiI2Mzc0YzA3OGU5ZDRmODRjNjU2MGE4ODMiLCJjYW1wYWlnbklkIjoiNjM3MWE1OGYyZjAwODc2MzRhNDU0Njg4IiwidGltZXN0YW1wIjoxNjY4NjUzMDYyNTU0LCJjb21tYW5kIjoicmVzdW1lIn0=", "identity": "1QAZ2WSX3EDC" } decode response.paylaod => 得到結果 { "sessionId": "6374c078e9d4f84c6560a883", "campaignId": "6371a58f2f0087634a454688", "timestamp": 1668653062554, "command": "resume" } ``` ### 7. Abort a Mission - [x] Checked ```json= PUT {{api}}/api/mission/6374c078e9d4f84c6560a883/abort topic: BMW/ota/6371a58f2f0087634a454688/6374c078e9d4f84c6560a883/Mission 收到訊息: response = { "signature": "Ym8bp3pzm1C23djk05vhsJD8ahwCWtPty0B9y5y4o/yJnwqbfz5v1jSmsger2xc2Xuw2JEjcUWwDLuOdo3fnfkoyI+urCo12jRwUzXmrcgHjuABcisX9aTkqZ6Ps4yQf2cS1eVmLT0SZi56ohNGQ/cA6cv/CtHclzQz7YmMugqkwlb+BkfAX1lks4q+Ddr9ik1jSDTacmyG8BIDzDfK+Eb+iU8dwjdXDTWKHBCAJ/8xd92Jp2b+x+YQwBEsk1s7cwzSiqN2HVfS3AeM62Uzb2C0ocMAoI5NTECLbxzx4yrdz4Uwy/UILwnKql25OX9QVIUTTbK0+fz1JZLTnuGyT2A==", "payload": "eyJzZXNzaW9uSWQiOiI2Mzc0YzA3OGU5ZDRmODRjNjU2MGE4ODMiLCJjYW1wYWlnbklkIjoiNjM3MWE1OGYyZjAwODc2MzRhNDU0Njg4IiwidGltZXN0YW1wIjoxNjY4NjUzNTgyMTk5LCJjb21tYW5kIjoiYWJvcnQifQ==", "identity": "1QAZ2WSX3EDC" } decode response.paylaod => 得到結果 { "sessionId": "6374c078e9d4f84c6560a883", "campaignId": "6371a58f2f0087634a454688", "timestamp": 1668653582199, "command": "abort" } ``` ## OTA_P2 ### 1. GenKey - [x] Checked ```json= [Request] BMW/ota/DEVICETYPE/vehicleId/report/vehicle request = { "timestamp": 1664326481000, "action": "genkey", "msgId": "x", "body": { "tenantId": "t123", "clientPublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAq/dKZntyd3dzwdHAAtfNcdvIHKQeaTpVQG24rXj+opcVybDq/Eq/gpeVTg91+0mp47JVr3vg6du2aBZbllsNP9C/W8o8VBDdVBA/i8zyye6QBlHvIbEPgW0CXhe99ioqxMHN4Zm2VaQ1L/sTFMyZkRgVHa9x/DhZQU3y6tGnaAOhrRTx5QB6Wwf9U9Pr+j9GMU9nKZbbh+51kHfmFdzdWE0+pDscfyD85EDc+GZCHO6qJudhTQ1IT1NumsNDO+1B8O5boA9fgl7Q35uAglhgCDO+IyMjTahcDKHTL3877AIioot3z4WcPkNY2GzTRiM+ybQkk6zTFTZqxDzqy0TOIQIDAQAB" } } Step1. 將request encode成 Base64String => "eyd0aW1lc3RhbXAnOiAxNjY0MzI2NDgxMDAwLCAnYWN0aW9uJzogJ2dlbmtleScsICdtc2dJZCc6ICd4JywgJ2JvZHknOiB7J3RlbmFudElkJzogJ3QxMjMnLCAnY2xpZW50UHVibGljS2V5JzogJ01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcS9kS1pudHlkM2R6d2RIQUF0Zk5jZHZJSEtRZWFUcFZRRzI0clhqK29wY1Z5YkRxL0VxL2dwZVZUZzkxKzBtcDQ3SlZyM3ZnNmR1MmFCWmJsbHNOUDlDL1c4bzhWQkRkVkJBL2k4enl5ZTZRQmxIdkliRVBnVzBDWGhlOTlpb3F4TUhONFptMlZhUTFML3NURk15WmtSZ1ZIYTl4L0RoWlFVM3k2dEduYUFPaHJSVHg1UUI2V3dmOVU5UHIrajlHTVU5bktaYmJoKzUxa0hmbUZkemRXRTArcERzY2Z5RDg1RURjK0daQ0hPNnFKdWRoVFExSVQxTnVtc05ETysxQjhPNWJvQTlmZ2w3UTM1dUFnbGhnQ0RPK0l5TWpUYWhjREtIVEwzODc3QUlpb290M3o0V2NQa05ZMkd6VFJpTSt5YlFrazZ6VEZUWnF4RHpxeTBUT0lRSURBUUFCJ319" Step2. 將Base64String 放入欄位payload,再用clientPrivateKey對base64String做signature並放入signature欄位 => 得到結果 { "payload":"eyd0aW1lc3RhbXAnOiAxNjY0MzI2NDgxMDAwLCAnYWN0aW9uJzogJ2dlbmtleScsICdtc2dJZCc6ICd4JywgJ2JvZHknOiB7J3RlbmFudElkJzogJ3QxMjMnLCAnY2xpZW50UHVibGljS2V5JzogJ01JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcS9kS1pudHlkM2R6d2RIQUF0Zk5jZHZJSEtRZWFUcFZRRzI0clhqK29wY1Z5YkRxL0VxL2dwZVZUZzkxKzBtcDQ3SlZyM3ZnNmR1MmFCWmJsbHNOUDlDL1c4bzhWQkRkVkJBL2k4enl5ZTZRQmxIdkliRVBnVzBDWGhlOTlpb3F4TUhONFptMlZhUTFML3NURk15WmtSZ1ZIYTl4L0RoWlFVM3k2dEduYUFPaHJSVHg1UUI2V3dmOVU5UHIrajlHTVU5bktaYmJoKzUxa0hmbUZkemRXRTArcERzY2Z5RDg1RURjK0daQ0hPNnFKdWRoVFExSVQxTnVtc05ETysxQjhPNWJvQTlmZ2w3UTM1dUFnbGhnQ0RPK0l5TWpUYWhjREtIVEwzODc3QUlpb290M3o0V2NQa05ZMkd6VFJpTSt5YlFrazZ6VEZUWnF4RHpxeTBUT0lRSURBUUFCJ319", "signature":"MZlNt48jBmFivBjpBdyAy6CW896lGR2e46wW4ln3McLfzhMHktMdPdggVIE/ClpGjkCBPBjwBOvH0gTLAZzZELW4QYISeigwQsY5U14wSJ6QjJKWg7xihCVV37gVXyrKQBqsVXgmbRHGj/o1r6mLhEWP9hp1dS3HUTq+2Lch4RIMeJgXgHHG1c0W1KIb4CDcJPorss0jkYXQObXTE4voESRg9Hlk96eLUtBMSXkcoVbi1XJBoqMhqBtEFFwIS5MLWWIkRK/C5mmEt0HI8LaDmyXjYyEMA+YAlGQr96G9OwrW8bzS2qdYoG8t4/2DYtRwu2GrtoJ3ILoqkVqbcU+uHg==", "identity":"AG" } ``` ```json= [Response] BMW/ota/DEVICETYPE/vehicleId/notification/vehicle response = { "signature": "oSYsPbO9AQYPh495woo8Pv5nYvkr5vZ1ndsUggytQlZNtV8KgpBuIFshGgwhYYUefIp/GQ6BPAb2G8DbqDM36d1ArJizOFgXe3ckxujj780l4j9bXEjOt6cfNps1TvPxFAoWqPKfJBUy8MnfPQB11+qdAQ/96BLB9ybVI/RxbWVqJNoTrgg0P22OxoYfCPKiLNJz9o8AlD75USukn+AL74GbTvXxmTDq++piU/UmOlOsp99gn0PvFkcsH7cvskTLYuu0KlEKAzMR0sQZGTK9+pZUgn0M1Y88ytFiJDeBnsvrKhxTU107oGYgM8vk4qzwz0KeTiAINUo2VTSeOH2DrQ==", "payload": "eyJtc2dJZCI6IngiLCJyZXN1bHQiOnsiY29kZSI6InMwMDEwIiwiZGF0YSI6eyJzZXJ2ZXJQdWJsaWNLZXkiOiJNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXh1eHNRNXk2REFieFFrYVM0ZWxUd3hwVEZJRDltUDJ5OXBnUFVGeFBpc1NKVXpTTDNIVU52VlVrSytrd0ExQmJ2TUFtSFBrYXRJYWVVcWtRU0JRU1NCelNjbTRQU3FMUm9oeHZrRlR2QzJhMi83UCtFVmdOMnNZeHR5dUhpT2p0WDZZOVpjcXp6c05JYTBUdEJkQkpRS2JpWXcvalh5SVV5Qm9TS21jWTRaS3lTZ3NUOFpEYlJNNW5Uc2ZhTVdieHkvN3dhU09CTTZzODVNMFMzSFcvVzE0NnYzdnhVZUdOMVE4cFF6cFRpQlBqb0wzRGpWQ2FMTVBYWklTbCt5N0VZNVY1S0FoVGcxSGFlZXVSdUh1ZFhPOGNXdVdCVTFwWmdZR0dRWi83V2c4UVFRbmpqMU1vMG40UnpsVmZMWUlndFp4d1F5M0RpL1ZVVDBiNW1CUGsrUUlEQVFBQiIsImJyYW5kU2VydmVyUHVibGljS2V5IjoiTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF5aTEya0d1QnhSRlpJdnpoeWV4T01nMWRXT1Y5NTdZbG9SZmJIelZua0dVSW44YzJxTld1NDBsTXEwK3lTUHFhd2lvdnBpcDF3djlHbER3cWtXeHQ1dGpyQkZUZ0tVY0N0Ym1BeDE2bVhwVFJNaEVmcDFtbUxPWDJHOVRyQlNjNWJOdTU4QStRdUFJS1NCU0I1RFd4Wjk1Y3dlV1l2MnA5bk1oR1hwQXpPOUZVMXNVVVJ1c0NjbkVMNVJQM3VwamNUcWsraUE4TUVRL014TmxDU2NyWmRudDBkYlRhTUIwS216akZsTWtYZGdJblpOZTNySjluVHJVd1hZS3htQVRWNXVZYU1qelZKTHNjaEp5cjkzYVhhQ0VpUmdMRXY2cjcxV2VRUC80c2pMVkdmS3Y4NXNoZ3R2MzBWWnZLUWtFYlF0a2laWWl2bDk4K2J5bDlSTWFrNndJREFRQUIifSwibWVzc2FnZSI6IkFDVElPTl9TVUNDRVNTIn19", "identity": "AG" } Step1. 將response.payload decode 成class Object =>得到 msg= { "msgId": "x", "result": { "code": "s0010", "data": { "serverPublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxuxsQ5y6DAbxQkaS4elTwxpTFID9mP2y9pgPUFxPisSJUzSL3HUNvVUkK+kwA1BbvMAmHPkatIaeUqkQSBQSSBzScm4PSqLRohxvkFTvC2a2/7P+EVgN2sYxtyuHiOjtX6Y9ZcqzzsNIa0TtBdBJQKbiYw/jXyIUyBoSKmcY4ZKySgsT8ZDbRM5nTsfaMWbxy/7waSOBM6s85M0S3HW/W146v3vxUeGN1Q8pQzpTiBPjoL3DjVCaLMPXZISl+y7EY5V5KAhTg1HaeeuRuHudXO8cWuWBU1pZgYGGQZ/7Wg8QQQnjj1Mo0n4RzlVfLYIgtZxwQy3Di/VUT0b5mBPk+QIDAQAB", "brandServerPublicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyi12kGuBxRFZIvzhyexOMg1dWOV957YloRfbHzVnkGUIn8c2qNWu40lMq0+ySPqawiovpip1wv9GlDwqkWxt5tjrBFTgKUcCtbmAx16mXpTRMhEfp1mmLOX2G9TrBSc5bNu58A+QuAIKSBSB5DWxZ95cweWYv2p9nMhGXpAzO9FU1sUURusCcnEL5RP3upjcTqk+iA8MEQ/MxNlCScrZdnt0dbTaMB0KmzjFlMkXdgInZNe3rJ9nTrUwXYKxmATV5uYaMjzVJLschJyr93aXaCEiRgLEv6r71WeQP/4sjLVGfKv85shgtv30VZvKQkEbQtkiZYivl98+byl9RMak6wIDAQAB" }, "message": "ACTION_SUCCESS" } Step2. verify signature with msg.serverPublicKey + response.signature + reponse.payload ``` ### 2. Register mode - [ ] Checked ### 3. Repalcement mode - [ ] Checked ### 4. Deprecated mode - [ ] Checked