OpenALPR Webhook Processor for IP Cameras

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
Here ya go. Still didn't get anything on that temp relay website:

JSON:
{"log":"[03:04:06 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T03:04:06.595486019Z"}
{"log":"[03:04:06 INF] Executed DbCommand (22ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T03:04:06.82601201Z"}
{"log":"SELECT COUNT(*) FROM \"sqlite_master\" WHERE \"name\" = '__EFMigrationsHistory' AND \"type\" = 'table';\n","stream":"stdout","time":"2021-01-07T03:04:06.826050949Z"}
{"log":"[03:04:06 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T03:04:06.869702157Z"}
{"log":"SELECT \"MigrationId\", \"ProductVersion\"\n","stream":"stdout","time":"2021-01-07T03:04:06.869736029Z"}
{"log":"FROM \"__EFMigrationsHistory\"\n","stream":"stdout","time":"2021-01-07T03:04:06.869744985Z"}
{"log":"ORDER BY \"MigrationId\";\n","stream":"stdout","time":"2021-01-07T03:04:06.869751717Z"}
{"log":"[03:04:06 ERR] failed to register Agent\n","stream":"stdout","time":"2021-01-07T03:04:06.997277945Z"}
{"log":"System.Net.Http.HttpRequestException: \u003c!DOCTYPE html\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997314836Z"}
{"log":"\u003chtml lang=\"en\"\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997324753Z"}
{"log":"    \u003chead\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997331291Z"}
{"log":"        \u003cmeta charset=\"utf-8\"\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.99733748Z"}
{"log":"        \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997344306Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997351893Z"}
{"log":"        \u003ctitle\u003eNot Found\u003c/title\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997357925Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997364746Z"}
{"log":"        \u003c!-- Fonts --\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.99737056Z"}
{"log":"        \u003clink rel=\"dns-prefetch\" href=\"/fonts.gstatic.com\"\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997376973Z"}
{"log":"        \u003clink href=\"https://fonts.googleapis.com/css?family=Nunito\" rel=\"stylesheet\"\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997384363Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997391486Z"}
{"log":"        \u003c!-- Styles --\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997397223Z"}
{"log":"        \u003cstyle\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997403883Z"}
{"log":"            html, body {\n","stream":"stdout","time":"2021-01-07T03:04:06.997411255Z"}
{"log":"                background-color: #fff;\n","stream":"stdout","time":"2021-01-07T03:04:06.997417339Z"}
{"log":"                color: #636b6f;\n","stream":"stdout","time":"2021-01-07T03:04:06.997423934Z"}
{"log":"                font-family: 'Nunito', sans-serif;\n","stream":"stdout","time":"2021-01-07T03:04:06.997429878Z"}
{"log":"                font-weight: 100;\n","stream":"stdout","time":"2021-01-07T03:04:06.997435734Z"}
{"log":"                height: 100vh;\n","stream":"stdout","time":"2021-01-07T03:04:06.997442646Z"}
{"log":"                margin: 0;\n","stream":"stdout","time":"2021-01-07T03:04:06.997449508Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:04:06.997455064Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997460162Z"}
{"log":"            .full-height {\n","stream":"stdout","time":"2021-01-07T03:04:06.997465667Z"}
{"log":"                height: 100vh;\n","stream":"stdout","time":"2021-01-07T03:04:06.997473451Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:04:06.997479532Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997485292Z"}
{"log":"            .flex-center {\n","stream":"stdout","time":"2021-01-07T03:04:06.997491259Z"}
{"log":"                align-items: center;\n","stream":"stdout","time":"2021-01-07T03:04:06.997497171Z"}
{"log":"                display: flex;\n","stream":"stdout","time":"2021-01-07T03:04:06.997522269Z"}
{"log":"                justify-content: center;\n","stream":"stdout","time":"2021-01-07T03:04:06.997531576Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:04:06.997537428Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997543323Z"}
{"log":"            .position-ref {\n","stream":"stdout","time":"2021-01-07T03:04:06.997548575Z"}
{"log":"                position: relative;\n","stream":"stdout","time":"2021-01-07T03:04:06.997554404Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:04:06.997560037Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997565648Z"}
{"log":"            .code {\n","stream":"stdout","time":"2021-01-07T03:04:06.997571318Z"}
{"log":"                border-right: 2px solid;\n","stream":"stdout","time":"2021-01-07T03:04:06.997577402Z"}
{"log":"                font-size: 26px;\n","stream":"stdout","time":"2021-01-07T03:04:06.997583381Z"}
{"log":"                padding: 0 15px 0 15px;\n","stream":"stdout","time":"2021-01-07T03:04:06.99759047Z"}
{"log":"                text-align: center;\n","stream":"stdout","time":"2021-01-07T03:04:06.997596786Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:04:06.997602685Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997608667Z"}
{"log":"            .message {\n","stream":"stdout","time":"2021-01-07T03:04:06.997614669Z"}
{"log":"                font-size: 18px;\n","stream":"stdout","time":"2021-01-07T03:04:06.997621463Z"}
{"log":"                text-align: center;\n","stream":"stdout","time":"2021-01-07T03:04:06.997627589Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:04:06.997633633Z"}
{"log":"        \u003c/style\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997639647Z"}
{"log":"    \u003c/head\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997646163Z"}
{"log":"    \u003cbody\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997653124Z"}
{"log":"        \u003cdiv class=\"flex-center position-ref full-height\"\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997659621Z"}
{"log":"            \u003cdiv class=\"code\"\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997666196Z"}
{"log":"                404            \u003c/div\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997672604Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997681539Z"}
{"log":"            \u003cdiv class=\"message\" style=\"padding: 10px;\"\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997687936Z"}
{"log":"                Not Found            \u003c/div\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997695138Z"}
{"log":"        \u003c/div\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997701705Z"}
{"log":"    \u003c/body\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997710129Z"}
{"log":"\u003c/html\u003e\n","stream":"stdout","time":"2021-01-07T03:04:06.997717016Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:04:06.997723283Z"}
{"log":"   at OpenAlprWebhookProcessor.HeartbeatService.AgentRegistration.RegisterAgentAsync(Uri serverUrl, String username, String password, Boolean ignoreSslErrors) in /src/OpenAlprWebhookProcessor/HeartbeatService/Registration/AgentRegistration.cs:line 43\n","stream":"stdout","time":"2021-01-07T03:04:06.997729589Z"}
{"log":"   at OpenAlprWebhookProcessor.HeartbeatService.HeartbeatService.RegisterAgentAsync() in /src/OpenAlprWebhookProcessor/HeartbeatService/HeartbeatService.cs:line 155\n","stream":"stdout","time":"2021-01-07T03:04:06.997741336Z"}
{"log":"[03:04:07 INF] Now listening on: http://[::]:80\n","stream":"stdout","time":"2021-01-07T03:04:07.036626239Z"}
{"log":"[03:04:07 INF] Application started. Press Ctrl+C to shut down.\n","stream":"stdout","time":"2021-01-07T03:04:07.036989616Z"}
{"log":"[03:04:07 INF] Hosting environment: Production\n","stream":"stdout","time":"2021-01-07T03:04:07.037086475Z"}
{"log":"[03:04:07 INF] Content root path: /app\n","stream":"stdout","time":"2021-01-07T03:04:07.037242933Z"}
{"log":"[03:14:27 INF] Request starting HTTP/1.1 POST http://<REDACTED>:3859/webhook application/json 11791\n","stream":"stdout","time":"2021-01-07T03:14:27.084104302Z"}
{"log":"[03:14:27 INF] Executing endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-07T03:14:27.234450784Z"}
{"log":"[03:14:27 INF] Route matched with {action = \"Post\", controller = \"Webhook\"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.ActionResult] Post() on controller OpenAlprWebhookProcessor.WebhookProcessor.WebhookController (OpenAlprWebhookProcessor).\n","stream":"stdout","time":"2021-01-07T03:14:27.341969685Z"}
{"log":"[03:14:27 INF] request received from: ::ffff:54.165.211.244\n","stream":"stdout","time":"2021-01-07T03:14:27.703599992Z"}
{"log":"[03:14:27 INF] adding job for plate: D72R\n","stream":"stdout","time":"2021-01-07T03:14:27.711932541Z"}
{"log":"[03:14:27 INF] processing job for plate: D72R\n","stream":"stdout","time":"2021-01-07T03:14:27.717666145Z"}
{"log":"[03:14:27 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T03:14:27.754292222Z"}
{"log":"[03:14:28 INF] Executed DbCommand (14ms) [Parameters=[@p0='?', @p1='?', @p2='?', @p3='?', @p4='?', @p5='?', @p6='?' (Size = 3284), @p7='?' (Size = 4), @p8='?'], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T03:14:28.365453618Z"}
{"log":"INSERT INTO \"PlateGroups\" (\"Id\", \"AlertDescription\", \"IsAlert\", \"OpenAlprCameraId\", \"OpenAlprProcessingTimeMs\", \"PlateConfidence\", \"PlateJpeg\", \"PlateNumber\", \"ReceivedOn\")\n","stream":"stdout","time":"2021-01-07T03:14:28.365607797Z"}
{"log":"VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8);\n","stream":"stdout","time":"2021-01-07T03:14:28.37304688Z"}
{"log":"[03:14:28 INF] Attempting to relay webhook\n","stream":"stdout","time":"2021-01-07T03:14:28.487826038Z"}
{"log":"[03:14:28 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T03:14:28.668352711Z"}
{"log":"[03:14:29 INF] Executed DbCommand (2ms) [Parameters=[@___agentConfiguration_OpenAlprWebServer_Username_0='?' (Size = 22)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T03:14:29.441065573Z"}
{"log":"SELECT \"c\".\"Id\", \"c\".\"CompanyId\", \"c\".\"Username\"\n","stream":"stdout","time":"2021-01-07T03:14:29.441124524Z"}
{"log":"FROM \"Companies\" AS \"c\"\n","stream":"stdout","time":"2021-01-07T03:14:29.441137239Z"}
{"log":"WHERE \"c\".\"Username\" = @___agentConfiguration_OpenAlprWebServer_Username_0\n","stream":"stdout","time":"2021-01-07T03:14:29.441145532Z"}
{"log":"LIMIT 1\n","stream":"stdout","time":"2021-01-07T03:14:29.441155233Z"}
{"log":"[03:14:30 INF] Webhook relayed successfully to https://webhook.site/95f9f78a-fe89-4ac1-9f90-f481ecaf1186\n","stream":"stdout","time":"2021-01-07T03:14:30.077530883Z"}
{"log":"[03:14:30 INF] Executing HttpStatusCodeResult, setting HTTP status code 200\n","stream":"stdout","time":"2021-01-07T03:14:30.089272798Z"}
{"log":"[03:14:30 INF] Executed action OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor) in 2748.463ms\n","stream":"stdout","time":"2021-01-07T03:14:30.100732068Z"}
{"log":"[03:14:30 INF] Executed endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-07T03:14:30.10235223Z"}
{"log":"[03:14:30 INF] HTTP POST /webhook responded 200 in 3017.4078 ms\n","stream":"stdout","time":"2021-01-07T03:14:30.107309971Z"}
{"log":"[03:14:30 INF] Request finished in 3058.0677ms 200 \n","stream":"stdout","time":"2021-01-07T03:14:30.114115521Z"}
{"log":"[03:14:33 INF] clearing expired overlay for: 254963574\n","stream":"stdout","time":"2021-01-07T03:14:33.783156171Z"}
{"log":"[03:14:55 INF] Application is shutting down...\n","stream":"stdout","time":"2021-01-07T03:14:55.222821624Z"}
Screenshot from 2021-01-06 21-17-49.png
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
try setting WebRequestLoggingEnabled to true and see if we get anything more.. i'm at a loss now, if it says it is sending it correctly but it's not showing up..
 

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
Waiting for another car... I know that temp webhook address works because if I go to that address in a browser I see a GET result on that test site.
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
if you don't want to wait for a car every time you can download postman and send your own custom webhooks to the service
 

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
Yeah I figured it would be better to get the 'official' payload from OpenALPR.
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
oh, put a / on the end of
https://webhook.site/95f9f78a-fe89-4ac1-9f90-f481ecaf1186
in your appsettings then try it
 

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
Ok. I got a post when I put the / on the end of the site. It sent my username and password for the local OpenALPR server and it looks like it crashed after that.
 

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
Code:
{"log":"[03:35:25 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T03:35:25.808772111Z"}
{"log":"[03:35:26 INF] Executed DbCommand (17ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T03:35:26.035399933Z"}
{"log":"SELECT COUNT(*) FROM \"sqlite_master\" WHERE \"name\" = '__EFMigrationsHistory' AND \"type\" = 'table';\n","stream":"stdout","time":"2021-01-07T03:35:26.035438118Z"}
{"log":"[03:35:26 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T03:35:26.159787476Z"}
{"log":"SELECT \"MigrationId\", \"ProductVersion\"\n","stream":"stdout","time":"2021-01-07T03:35:26.159823437Z"}
{"log":"FROM \"__EFMigrationsHistory\"\n","stream":"stdout","time":"2021-01-07T03:35:26.159836104Z"}
{"log":"ORDER BY \"MigrationId\";\n","stream":"stdout","time":"2021-01-07T03:35:26.159844303Z"}
{"log":"[03:35:26 INF] Now listening on: http://[::]:80\n","stream":"stdout","time":"2021-01-07T03:35:26.319655118Z"}
{"log":"[03:35:26 INF] Application started. Press Ctrl+C to shut down.\n","stream":"stdout","time":"2021-01-07T03:35:26.320225396Z"}
{"log":"[03:35:26 INF] Hosting environment: Production\n","stream":"stdout","time":"2021-01-07T03:35:26.320366872Z"}
{"log":"[03:35:26 INF] Content root path: /app\n","stream":"stdout","time":"2021-01-07T03:35:26.320582066Z"}
{"log":"[03:35:27 ERR] failed to register Agent\n","stream":"stdout","time":"2021-01-07T03:35:27.5693583Z"}
{"log":"System.Text.Json.JsonException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Path: $ | LineNumber: 0 | BytePositionInLine: 0.\n","stream":"stdout","time":"2021-01-07T03:35:27.56940162Z"}
{"log":" ---\u003e System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0.\n","stream":"stdout","time":"2021-01-07T03:35:27.569409792Z"}
{"log":"   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader\u0026 json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)\n","stream":"stdout","time":"2021-01-07T03:35:27.569421199Z"}
{"log":"   at System.Text.Json.Utf8JsonReader.Read()\n","stream":"stdout","time":"2021-01-07T03:35:27.56942696Z"}
{"log":"   at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader\u0026 reader, ReadStack\u0026 readStack)\n","stream":"stdout","time":"2021-01-07T03:35:27.569431346Z"}
{"log":"   --- End of inner exception stack trace ---\n","stream":"stdout","time":"2021-01-07T03:35:27.569436213Z"}
{"log":"   at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack\u0026 readStack, JsonReaderException ex)\n","stream":"stdout","time":"2021-01-07T03:35:27.56944098Z"}
{"log":"   at System.Text.Json.JsonSerializer.ReadCore(JsonSerializerOptions options, Utf8JsonReader\u0026 reader, ReadStack\u0026 readStack)\n","stream":"stdout","time":"2021-01-07T03:35:27.569446467Z"}
{"log":"   at System.Text.Json.JsonSerializer.ReadCore(Type returnType, JsonSerializerOptions options, Utf8JsonReader\u0026 reader)\n","stream":"stdout","time":"2021-01-07T03:35:27.569451382Z"}
{"log":"   at System.Text.Json.JsonSerializer.Deserialize(String json, Type returnType, JsonSerializerOptions options)\n","stream":"stdout","time":"2021-01-07T03:35:27.569458292Z"}
{"log":"   at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)\n","stream":"stdout","time":"2021-01-07T03:35:27.569464821Z"}
{"log":"   at OpenAlprWebhookProcessor.HeartbeatService.AgentRegistration.RegisterAgentAsync(Uri serverUrl, String username, String password, Boolean ignoreSslErrors) in /src/OpenAlprWebhookProcessor/HeartbeatService/Registration/AgentRegistration.cs:line 45\n","stream":"stdout","time":"2021-01-07T03:35:27.569469534Z"}
{"log":"   at OpenAlprWebhookProcessor.HeartbeatService.HeartbeatService.RegisterAgentAsync() in /src/OpenAlprWebhookProcessor/HeartbeatService/HeartbeatService.cs:line 155\n","stream":"stdout","time":"2021-01-07T03:35:27.569476462Z"}
{"log":"[03:36:47 INF] Application is shutting down...\n","stream":"stdout","time":"2021-01-07T03:36:47.825060496Z"}
{"log":"[03:37:15 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T03:37:16.051478719Z"}
{"log":"[03:37:16 ERR] failed to register Agent\n","stream":"stdout","time":"2021-01-07T03:37:16.06532135Z"}
{"log":"System.Net.Http.HttpRequestException: \u003c!DOCTYPE html\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065362739Z"}
{"log":"\u003chtml lang=\"en\"\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065372853Z"}
{"log":"    \u003chead\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065380682Z"}
{"log":"        \u003cmeta charset=\"utf-8\"\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065388192Z"}
{"log":"        \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065396116Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.06540396Z"}
{"log":"        \u003ctitle\u003eNot Found\u003c/title\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065413229Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.065421049Z"}
{"log":"        \u003c!-- Fonts --\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065428039Z"}
{"log":"        \u003clink rel=\"dns-prefetch\" href=\"/fonts.gstatic.com\"\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065435829Z"}
{"log":"        \u003clink href=\"https://fonts.googleapis.com/css?family=Nunito\" rel=\"stylesheet\"\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065444078Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.06545214Z"}
{"log":"        \u003c!-- Styles --\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065459066Z"}
{"log":"        \u003cstyle\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.06546649Z"}
{"log":"            html, body {\n","stream":"stdout","time":"2021-01-07T03:37:16.065473716Z"}
{"log":"                background-color: #fff;\n","stream":"stdout","time":"2021-01-07T03:37:16.065480877Z"}
{"log":"                color: #636b6f;\n","stream":"stdout","time":"2021-01-07T03:37:16.065488298Z"}
{"log":"                font-family: 'Nunito', sans-serif;\n","stream":"stdout","time":"2021-01-07T03:37:16.065495783Z"}
{"log":"                font-weight: 100;\n","stream":"stdout","time":"2021-01-07T03:37:16.065502937Z"}
{"log":"                height: 100vh;\n","stream":"stdout","time":"2021-01-07T03:37:16.065510627Z"}
{"log":"                margin: 0;\n","stream":"stdout","time":"2021-01-07T03:37:16.065517643Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:37:16.06552479Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.065531688Z"}
{"log":"            .full-height {\n","stream":"stdout","time":"2021-01-07T03:37:16.065538449Z"}
{"log":"                height: 100vh;\n","stream":"stdout","time":"2021-01-07T03:37:16.065545676Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:37:16.065552942Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.065561067Z"}
{"log":"            .flex-center {\n","stream":"stdout","time":"2021-01-07T03:37:16.065567941Z"}
{"log":"                align-items: center;\n","stream":"stdout","time":"2021-01-07T03:37:16.06557545Z"}
{"log":"                display: flex;\n","stream":"stdout","time":"2021-01-07T03:37:16.065582929Z"}
{"log":"                justify-content: center;\n","stream":"stdout","time":"2021-01-07T03:37:16.065590735Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:37:16.065598114Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.065605132Z"}
{"log":"            .position-ref {\n","stream":"stdout","time":"2021-01-07T03:37:16.065612253Z"}
{"log":"                position: relative;\n","stream":"stdout","time":"2021-01-07T03:37:16.065637663Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:37:16.065645293Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.065651511Z"}
{"log":"            .code {\n","stream":"stdout","time":"2021-01-07T03:37:16.065657497Z"}
{"log":"                border-right: 2px solid;\n","stream":"stdout","time":"2021-01-07T03:37:16.065663659Z"}
{"log":"                font-size: 26px;\n","stream":"stdout","time":"2021-01-07T03:37:16.065670009Z"}
{"log":"                padding: 0 15px 0 15px;\n","stream":"stdout","time":"2021-01-07T03:37:16.065676264Z"}
{"log":"                text-align: center;\n","stream":"stdout","time":"2021-01-07T03:37:16.065682564Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:37:16.065688763Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.065694604Z"}
{"log":"            .message {\n","stream":"stdout","time":"2021-01-07T03:37:16.065700644Z"}
{"log":"                font-size: 18px;\n","stream":"stdout","time":"2021-01-07T03:37:16.065707131Z"}
{"log":"                text-align: center;\n","stream":"stdout","time":"2021-01-07T03:37:16.065713415Z"}
{"log":"            }\n","stream":"stdout","time":"2021-01-07T03:37:16.065719633Z"}
{"log":"        \u003c/style\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065725734Z"}
{"log":"    \u003c/head\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065732094Z"}
{"log":"    \u003cbody\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065738411Z"}
{"log":"        \u003cdiv class=\"flex-center position-ref full-height\"\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065744956Z"}
{"log":"            \u003cdiv class=\"code\"\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065751846Z"}
{"log":"                404            \u003c/div\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065758489Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.065764835Z"}
{"log":"            \u003cdiv class=\"message\" style=\"padding: 10px;\"\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065771152Z"}
{"log":"                Not Found            \u003c/div\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065779385Z"}
{"log":"        \u003c/div\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.06578595Z"}
{"log":"    \u003c/body\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065792301Z"}
{"log":"\u003c/html\u003e\n","stream":"stdout","time":"2021-01-07T03:37:16.065798623Z"}
{"log":"\n","stream":"stdout","time":"2021-01-07T03:37:16.065814752Z"}
{"log":"   at OpenAlprWebhookProcessor.HeartbeatService.AgentRegistration.RegisterAgentAsync(Uri serverUrl, String username, String password, Boolean ignoreSslErrors) in /src/OpenAlprWebhookProcessor/HeartbeatService/Registration/AgentRegistration.cs:line 43\n","stream":"stdout","time":"2021-01-07T03:37:16.065824535Z"}
{"log":"   at OpenAlprWebhookProcessor.HeartbeatService.HeartbeatService.RegisterAgentAsync() in /src/OpenAlprWebhookProcessor/HeartbeatService/HeartbeatService.cs:line 155\n","stream":"stdout","time":"2021-01-07T03:37:16.065839958Z"}
{"log":"[03:37:16 INF] Executed DbCommand (16ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T03:37:16.234615243Z"}
{"log":"SELECT COUNT(*) FROM \"sqlite_master\" WHERE \"name\" = '__EFMigrationsHistory' AND \"type\" = 'table';\n","stream":"stdout","time":"2021-01-07T03:37:16.234654028Z"}
{"log":"[03:37:16 INF] Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T03:37:16.282584328Z"}
{"log":"SELECT \"MigrationId\", \"ProductVersion\"\n","stream":"stdout","time":"2021-01-07T03:37:16.282635486Z"}
{"log":"FROM \"__EFMigrationsHistory\"\n","stream":"stdout","time":"2021-01-07T03:37:16.282645897Z"}
{"log":"ORDER BY \"MigrationId\";\n","stream":"stdout","time":"2021-01-07T03:37:16.282654383Z"}
{"log":"[03:37:16 INF] Now listening on: http://[::]:80\n","stream":"stdout","time":"2021-01-07T03:37:16.422535667Z"}
{"log":"[03:37:16 INF] Application started. Press Ctrl+C to shut down.\n","stream":"stdout","time":"2021-01-07T03:37:16.422792806Z"}
{"log":"[03:37:16 INF] Hosting environment: Production\n","stream":"stdout","time":"2021-01-07T03:37:16.422869347Z"}
{"log":"[03:37:16 INF] Content root path: /app\n","stream":"stdout","time":"2021-01-07T03:37:16.422987293Z"}
{"log":"[03:37:36 INF] Application is shutting down...\n","stream":"stdout","time":"2021-01-07T03:37:36.502191703Z"}
This is what was sent:
Code:
Raw Content
username=myemail&password=mypassword
I'm gonna log out for the evening. Hopefully I've given you something to work with!
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
Ya that's the service trying to register the agent, the call is going to fail, let the service keep running until a plate goes through and it will show up on the site.
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
Try putting a trailing slash on your local ip address "Endpoint": "https://10.200.200.54/",

i'm going to get some logic in here to handle these urls better.
 
Last edited:

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
So it was the trailing forward slash I was missing. You may want to update your appsettings.example.json and add the forward slash there to the Endpoint variable. Here is a log of the latest result. I'm getting the heartbeat sent to the server now every minute. I'm still not getting any plates showing up though on the local server. I'll point the Endpoint to the webhook test website next to capture that output.

JSON:
{"log":"[11:11:22 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T11:11:22.389873327Z"}
{"log":"[11:11:22 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T11:11:22.389951169Z"}
{"log":"[11:11:22 INF] Executed DbCommand (25ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T11:11:22.623764378Z"}
{"log":"SELECT COUNT(*) FROM \"sqlite_master\" WHERE \"name\" = '__EFMigrationsHistory' AND \"type\" = 'table';\n","stream":"stdout","time":"2021-01-07T11:11:22.623803945Z"}
{"log":"[11:11:22 INF] Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T11:11:22.664859988Z"}
{"log":"SELECT \"MigrationId\", \"ProductVersion\"\n","stream":"stdout","time":"2021-01-07T11:11:22.664917488Z"}
{"log":"FROM \"__EFMigrationsHistory\"\n","stream":"stdout","time":"2021-01-07T11:11:22.664928313Z"}
{"log":"ORDER BY \"MigrationId\";\n","stream":"stdout","time":"2021-01-07T11:11:22.664935618Z"}
{"log":"[11:11:22 INF] Executed DbCommand (9ms) [Parameters=[@__companyId_0='?' (Size = 36)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T11:11:22.777003704Z"}
{"log":"SELECT \"c\".\"Id\", \"c\".\"CompanyId\", \"c\".\"Username\"\n","stream":"stdout","time":"2021-01-07T11:11:22.777038489Z"}
{"log":"FROM \"Companies\" AS \"c\"\n","stream":"stdout","time":"2021-01-07T11:11:22.777048951Z"}
{"log":"WHERE \"c\".\"CompanyId\" = @__companyId_0\n","stream":"stdout","time":"2021-01-07T11:11:22.777055965Z"}
{"log":"LIMIT 1\n","stream":"stdout","time":"2021-01-07T11:11:22.777063797Z"}
{"log":"[11:11:22 INF] Now listening on: http://[::]:80\n","stream":"stdout","time":"2021-01-07T11:11:22.817832163Z"}
{"log":"[11:11:22 INF] Application started. Press Ctrl+C to shut down.\n","stream":"stdout","time":"2021-01-07T11:11:22.81787501Z"}
{"log":"[11:11:22 INF] Hosting environment: Production\n","stream":"stdout","time":"2021-01-07T11:11:22.817887597Z"}
{"log":"[11:11:22 INF] Content root path: /app\n","stream":"stdout","time":"2021-01-07T11:11:22.817899635Z"}
{"log":"[11:11:22 INF] Agent registered with server successfully\n","stream":"stdout","time":"2021-01-07T11:11:22.872270578Z"}
....SNIP
{"log":"[11:30:23 INF] hearbeat sent: {\"data_type\":\"heartbeat\",\"company_id\":\"c2290452-f26a-49af-9ff5-c3d297a45fbf\",\"agent_uid\":\"L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA\",\"agent_version\":\"2.8.101\",\"openalpr_version\":\"2.8.101\",\"agent_hostname\":\"fd26b158a116\",\"os\":\"linux\",\"agent_type\":\"alprd\",\"timestamp\":1610019023600,\"system_uptime_seconds\":1607340623600,\"daemon_uptime_seconds\":100,\"license_systemid\":\"11122233344455566677\",\"license_key\":\"\",\"license_valid\":true,\"recording_enabled\":false,\"cpu_cores\":1,\"cpu_last_update\":1610019023600,\"cpu_usage_percent\":50,\"disk_quota_total_bytes\":49993471488000,\"disk_quota_consumed_bytes\":1572864000,\"disk_quota_earliest_result\":1607340623600,\"disk_drive_total_bytes\":49993471488000,\"disk_drive_free_bytes\":7102922559488,\"memory_consumed_bytes\":67464105984,\"memory_last_update\":1610019023600,\"memory_swapused_bytes\":0,\"memory_swaptotal_bytes\":0,\"memory_total_bytes\":67464237056,\"processing_threads_active\":2,\"processing_threads_configured\":2,\"beanstalk_queue_size\":0,\"video_streams\":[{\"camera_id\":254963574,\"camera_name\":\"cyntfpsr\",\"fps\":15,\"is_streaming\":true,\"url\":\"http://10.200.200.14/cgi-bin/configManager.cgi?action=setConfig\\u0026VideoWidget[0].CustomTitle[1].Text=\",\"last_update\":1610019023600,\"last_plate_read\":1610018963600,\"total_plate_reads\":100,\"gps_latitude\":30.2026,\"gps_longitude\":-85.8045}]}\n","stream":"stdout","time":"2021-01-07T11:30:23.601865119Z"}
{"log":"[11:30:44 INF] Request starting HTTP/1.1 POST http://<redacted>:3859/webhook application/json 10502\n","stream":"stdout","time":"2021-01-07T11:30:44.338901657Z"}
{"log":"[11:30:44 INF] Executing endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-07T11:30:44.455782765Z"}
{"log":"[11:30:44 INF] Route matched with {action = \"Post\", controller = \"Webhook\"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.ActionResult] Post() on controller OpenAlprWebhookProcessor.WebhookProcessor.WebhookController (OpenAlprWebhookProcessor).\n","stream":"stdout","time":"2021-01-07T11:30:44.558596833Z"}
{"log":"[11:30:44 INF] request received {\"data_type\": \"alpr_group\", \"version\": 2, \"epoch_start\": 1610019040000, \"epoch_end\": 1610019040980, \"frame_start\": 1433263, \"frame_end\": 1433288, \"company_id\": \"527007ba-7dac-4160-b6d7-8a120d9889fe\", \"agent_uid\": \"L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA\", \"agent_version\": \"2.8.101\", \"agent_type\": \"alprd\", \"camera_id\": 254963574, \"gps_latitude\": 30.202640533447266, \"gps_longitude\": -85.80451965332031, \"country\": \"us\", \"uuids\": [\"L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610019040000\", \"L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610019040265\", \"L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610019040305\", \"L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610019040980\"], \"plate_indexes\": [0, 0, 0, 0], \"candidates\": [{\"plate\": \"CMDZ33\", \"confidence\": 87.27547454833984, \"matches_template\": 1}, {\"plate\": \"CND733\", \"confidence\": 74.92003631591797, \"matches_template\": 0}, {\"plate\": \"CMD733\", \"confidence\": 74.31150817871094, \"matches_template\": 0}], \"vehicle_crop_jpeg\": \"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA4KCw0LCQ4NDA0QDw4RFiQXFhQUFiwgIRokNC43NjMuMjI6QVNGOj1OPjIySGJJTlZYXV5dOEVmbWVabFNbXVn/2wBDAQ8QEBYTFioXFypZOzI7WVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVn/wAARCACPAOADASEAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDzaigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKAHxRNK2FGa2dU8LanpNmLq9tzFExAB3qecE4IBz2oAw6KACigAooAKKACigAooAKKACigAooAKKACigAooAKKAO0+HmmpeaujyYZIf3hB74x/Uiu0+IcPm+GmOcFZFxmgDxhhhiKSgAooAKKACigAooAKKACigAooAKKACigBVUscCrIsZim4KSPYUAV2Qr1FNoAKKAOz+Gt20XiCK3VQRMrgk9gFJ4/FRXRfFG9SOwtrUOfMZi7J2x2P55/WgDyqigAooAKKACigAooAKKACigAooAKKACigDofDOlLqWoQQtnDOAxHYd/0r2AaHpi2rWyWUKxt1wvP59aAPJfEOj/YbyWEDdsbAwOo6+vpXOTwvC+HRkzyAwxxQBHRQB0fgjWrTQ9aa5vUdo2iZAUAJUkg5/Qj8auePfENrrlzbfYiWijj5LLg7iTkfyoA5CigAooAKKACigAooAKKACigAooAKKAClXG4Z6UAei/DqCI33m4yyjAPuQf6A/lXplAHP+JtBg1K2eYyGF0UkkLndXAeOIsx2rNJvkRpYyQu1eCMY5J5oA4yigAooAKKACigAooAKKACigAooAKKACigAooAKKAPQPhtcKupfZyOZBvznoVVh/JjXqVAHnfjjWCbqW0SU7E+UqrcdOa47XbyO5tLII6EpEqFR1UhQDn6kUAYVFABRQAUUAFFABRQAUUAFFABRQAUUAFFABRQAUUAami6tPpd6lzA+2VM4yMjGMGuuT4i3wUhkgJZeDt6H86AON1G+kubl5JJWkZuSx6knr+tZ5OTQAUUAS2qxPdQrOWWEuocrjIXPOM8dK1Nc0ddLhgdS+ZZZEwxBwFCew/vEfhQBjUUAFFABRQAUUAFFABRQAUUAFFABRQAUUAFFABRQAUUAFLk7QMnA5AoASigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKAJIPL8z96cLg9s84OP1xXY66fDpu72SCWzdDADBHFGVBk246qOORnB45oA4qigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACigAooAKKACpIYHm3bDGNvJ3yKn5ZIzQA14zGcEqf91gf5VJFayzFhH5Z2qWOZFHA+p/SgCJRkgZA9zTjHj+NT+f+FAGlHoN1NpqXsLRyBwSIxndwSPTHapJfDl7Em7fCxxnarHP8sUAV/7E1AjKwhu/Dr/jVb7Bd7nUW0rFDhtqk4P4UAV6KACigAooAKKACigAooAKKACigAooAKKACigDofC9jaXcV/JdNhokBT8SAePxqjexxiQhT8ueKAN/RwRp+9bkpHBE7heMEgyEA8dyq/nUsM7zXEm+ZsBcrHsGB6nPHt+dAEkhkNsJYShkyF+cdSSABxjnJHNQS2010yq4QbJBu8qToDgDt1waAOMPU0lAEjR/u96NuQYBJ4wTnjH4Go6ACigAooAKKACigAooAKKACigAooAKKALNpcyQhkTPz9cUTNIWyyOD15GKANrTLqz+wRRy6j9nOMSRGEtnDMRz6HNOt9SsoL15EkPl/MFGwDvkd+mKALr6lD5ERjZZAzFsNkbccA8ZPXFSIJpIlma3UxyTCXcH4ULs559QrUAcTRQAdsUUAFFABRQAUpYkAHoBgUAJRQAUUAFFABRQAUUAFFAEkMrQyB1AJ9xVpr9n6jB7/MeaAKTYJ4pKAClycYycUAJRQAUUAFFABRQAUUAFFABRQAUUAFFABRQAUUAFFABRQAUUAFFABRQAUUAFFABRQAUUAFFAH/Z\", \"best_plate\": {\"plate\": \"CND733\", \"confidence\": 87.27547454833984, \"matches_template\": 0, \"plate_index\": 0, \"region\": \"us-fl\", \"region_confidence\": 99, \"processing_time_ms\": 22.6484375, \"requested_topn\": 10, \"coordinates\": [{\"x\": 1436, \"y\": 706}, {\"x\": 1526, \"y\": 712}, {\"x\": 1523, \"y\": 759}, {\"x\": 1434, \"y\": 753}], \"plate_crop_jpeg\": \"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\", \"vehicle_region\": {\"x\": 1227, \"y\": 416, \"width\": 594, \"height\": 381}, \"vehicle_detected\": true, \"candidates\": [{\"plate\": \"CND733\", \"confidence\": 87.27547454833984, \"matches_template\": 0}, {\"plate\": \"CMD733\", \"confidence\": 74.65751647949219, \"matches_template\": 0}, {\"plate\": \"CKD733\", \"confidence\": 74.6389389038086, \"matches_template\": 0}, {\"plate\": \"CD733\", \"confidence\": 74.20469665527344, \"matches_template\": 0}, {\"plate\": \"CHD733\", \"confidence\": 74.02023315429688, \"matches_template\": 0}, {\"plate\": \"CAD733\", \"confidence\": 73.9872817993164, \"matches_template\": 0}, {\"plate\": \"CWD733\", \"confidence\": 73.93451690673828, \"matches_template\": 0}, {\"plate\": \"CND33\", \"confidence\": 72.5603256225586, \"matches_template\": 0}, {\"plate\": \"CN733\", \"confidence\": 72.55785369873047, \"matches_template\": 0}, {\"plate\": \"ND733\", \"confidence\": 72.39562225341797, \"matches_template\": 0}]}, \"best_confidence\": 87.27547454833984, \"best_uuid\": \"L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610019040265\", \"best_plate_number\": \"CMDZ33\", \"best_region\": \"us-fl\", \"best_region_confidence\": 98.5, \"matches_template\": false, \"best_image_width\": 2688, \"best_image_height\": 1520, \"travel_direction\": 82.60299682617188, \"is_parked\": false, \"is_preview\": false, \"vehicle\": {\"color\": [{\"name\": \"black\", \"confidence\": 0}, {\"name\": \"white\", \"confidence\": 0}, {\"name\": \"blue\", \"confidence\": 0}, {\"name\": \"silver-gray\", \"confidence\": 0}, {\"name\": \"green\", \"confidence\": 0}], \"make\": [{\"name\": \"nissan\", \"confidence\": 0}, {\"name\": \"lincoln\", \"confidence\": 0}, {\"name\": \"chevrolet\", \"confidence\": 0}, {\"name\": \"ford\", \"confidence\": 0}, {\"name\": \"pontiac\", \"confidence\": 0}], \"make_model\": [{\"name\": \"nissan_versa\", \"confidence\": 0}, {\"name\": \"ford_f-150\", \"confidence\": 0}, {\"name\": \"ford_f-350\", \"confidence\": 0}, {\"name\": \"chevrolet_corvette\", \"confidence\": 0}, {\"name\": \"pontiac_firebird\", \"confidence\": 0}], \"body_type\": [{\"name\": \"tractor-trailer\", \"confidence\": 95.3647232055664}, {\"name\": \"trailer-utility\", \"confidence\": 1.5196177959442139}, {\"name\": \"truck-standard\", \"confidence\": 1.3169646263122559}, {\"name\": \"motorcycle\", \"confidence\": 0.8894680142402649}, {\"name\": \"sedan-standard\", \"confidence\": 0.3606950044631958}], \"year\": [{\"name\": \"2000-2004\", \"confidence\": 0}, {\"name\": \"1995-1999\", \"confidence\": 0}, {\"name\": \"2005-2009\", \"confidence\": 0}, {\"name\": \"1990-1994\", \"confidence\": 0}, {\"name\": \"2010-2014\", \"confidence\": 0}], \"orientation\": [{\"name\": \"180\", \"confidence\": 66.90565490722656}, {\"name\": \"135\", \"confidence\": 27.382543563842773}, {\"name\": \"225\", \"confidence\": 3.043245315551758}, {\"name\": \"0\", \"confidence\": 1.2027751207351685}, {\"name\": \"45\", \"confidence\": 0.5368463397026062}]}, \"web_server_config\": {\"camera_label\": \"LPR Cam\", \"agent_label\": \"Home\"}, \"direction_of_travel_id\": -1}\n","stream":"stdout","time":"2021-01-07T11:30:44.677686638Z"}
{"log":"[11:30:44 INF] request received from: ::ffff:18.206.234.148\n","stream":"stdout","time":"2021-01-07T11:30:44.770780961Z"}
{"log":"[11:30:44 INF] adding job for plate: CMDZ33\n","stream":"stdout","time":"2021-01-07T11:30:44.775254305Z"}
{"log":"[11:30:44 INF] processing job for plate: CMDZ33\n","stream":"stdout","time":"2021-01-07T11:30:44.776338469Z"}
{"log":"[11:30:44 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T11:30:44.897073191Z"}
{"log":"[11:30:45 INF] Executed DbCommand (2ms) [Parameters=[@p0='?', @p1='?', @p2='?', @p3='?', @p4='?', @p5='?', @p6='?' (Size = 3572), @p7='?' (Size = 6), @p8='?'], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T11:30:45.214641259Z"}
{"log":"INSERT INTO \"PlateGroups\" (\"Id\", \"AlertDescription\", \"IsAlert\", \"OpenAlprCameraId\", \"OpenAlprProcessingTimeMs\", \"PlateConfidence\", \"PlateJpeg\", \"PlateNumber\", \"ReceivedOn\")\n","stream":"stdout","time":"2021-01-07T11:30:45.214690208Z"}
{"log":"VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8);\n","stream":"stdout","time":"2021-01-07T11:30:45.214703899Z"}
{"log":"[11:30:45 INF] Attempting to relay webhook\n","stream":"stdout","time":"2021-01-07T11:30:45.309679407Z"}
{"log":"[11:30:45 INF] Entity Framework Core 3.1.10 initialized 'ProcessorContext' using provider 'Microsoft.EntityFrameworkCore.Sqlite' with options: None\n","stream":"stdout","time":"2021-01-07T11:30:45.334775335Z"}
{"log":"[11:30:45 INF] Executed DbCommand (1ms) [Parameters=[@___agentConfiguration_OpenAlprWebServer_Username_0='?' (Size = 22)], CommandType='Text', CommandTimeout='30']\n","stream":"stdout","time":"2021-01-07T11:30:45.343319586Z"}
{"log":"SELECT \"c\".\"Id\", \"c\".\"CompanyId\", \"c\".\"Username\"\n","stream":"stdout","time":"2021-01-07T11:30:45.343719485Z"}
{"log":"FROM \"Companies\" AS \"c\"\n","stream":"stdout","time":"2021-01-07T11:30:45.343924026Z"}
{"log":"WHERE \"c\".\"Username\" = @___agentConfiguration_OpenAlprWebServer_Username_0\n","stream":"stdout","time":"2021-01-07T11:30:45.350840605Z"}
{"log":"LIMIT 1\n","stream":"stdout","time":"2021-01-07T11:30:45.350954759Z"}
{"log":"[11:30:45 INF] Webhook relayed successfully to https://10.200.200.54/\n","stream":"stdout","time":"2021-01-07T11:30:45.434644381Z"}
{"log":"[11:30:45 INF] Executing HttpStatusCodeResult, setting HTTP status code 200\n","stream":"stdout","time":"2021-01-07T11:30:45.451662469Z"}
{"log":"[11:30:45 INF] Executed action OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor) in 893.2926ms\n","stream":"stdout","time":"2021-01-07T11:30:45.469098547Z"}
{"log":"[11:30:45 INF] Executed endpoint 'OpenAlprWebhookProcessor.WebhookProcessor.WebhookController.Post (OpenAlprWebhookProcessor)'\n","stream":"stdout","time":"2021-01-07T11:30:45.471462921Z"}
{"log":"[11:30:45 INF] HTTP POST /webhook responded 200 in 1133.6835 ms\n","stream":"stdout","time":"2021-01-07T11:30:45.481866519Z"}
{"log":"[11:30:45 INF] Request finished in 1172.5955ms 200 \n","stream":"stdout","time":"2021-01-07T11:30:45.492875882Z"}
{"log":"[11:30:50 INF] clearing expired overlay for: 254963574\n","stream":"stdout","time":"2021-01-07T11:30:50.632844527Z"}
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
set your openalprserver url to the webhook site and record one of the calls so we can look at the payload.
 

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
Cloud ALPR -> webhook test site:

JSON:
{
  "data_type": "alpr_group",
  "version": 2,
  "epoch_start": 1610025303708,
  "epoch_end": 1610025304985,
  "frame_start": 2353,
  "frame_end": 2375,
  "company_id": "527007ba-7dac-4160-b6d7-8a120d9889fe",
  "agent_uid": "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA",
  "agent_version": "2.8.101",
  "agent_type": "alprd",
  "camera_id": 254963574,
  "gps_latitude": 00.202640533447266,
  "gps_longitude": -00.80451965332031,
  "country": "us",
  "uuids": [
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025303708",
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025303789",
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025303857",
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025303928",
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025303990",
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025304062",
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025304332",
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025304495",
    "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025304985"
  ],
  "plate_indexes": [
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ],
  "candidates": [
    {
      "plate": "Z616SP",
      "confidence": 94.31678009033203,
      "matches_template": 1
    }
  ],
  "vehicle_crop_jpeg": "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",
  "best_plate": {
    "plate": "Z616SP",
    "confidence": 94.31678009033203,
    "matches_template": 1,
    "plate_index": 0,
    "region": "us-fl",
    "region_confidence": 99,
    "processing_time_ms": 44.94618606567383,
    "requested_topn": 10,
    "coordinates": [
      {
        "x": 1012,
        "y": 615
      },
      {
        "x": 1113,
        "y": 622
      },
      {
        "x": 1110,
        "y": 691
      },
      {
        "x": 1008,
        "y": 684
      }
    ],
    "plate_crop_jpeg": "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",
    "vehicle_region": {
      "x": 864,
      "y": 282,
      "width": 1574,
      "height": 732
    },
    "vehicle_detected": true,
    "candidates": [
      {
        "plate": "Z616SP",
        "confidence": 94.31678009033203,
        "matches_template": 1
      }
    ]
  },
  "best_confidence": 94.31678009033203,
  "best_uuid": "L5HG1OCHKCB2J2BG0WZCSS2AKAEZ3EO4JLLLADIA-254963574-1610025303928",
  "best_plate_number": "Z616SP",
  "best_region": "us-fl",
  "best_region_confidence": 99,
  "matches_template": true,
  "best_image_width": 2688,
  "best_image_height": 1520,
  "travel_direction": 82.421630859375,
  "is_parked": false,
  "is_preview": false,
  "vehicle": {
    "color": [
      {
        "name": "silver-gray",
        "confidence": 99.81582641601562
      },
      {
        "name": "white",
        "confidence": 0.15696008503437042
      },
      {
        "name": "gold-beige",
        "confidence": 0.015063359402120113
      },
      {
        "name": "black",
        "confidence": 0.008400797843933105
      },
      {
        "name": "blue",
        "confidence": 0.0027866861782968044
      }
    ],
    "make": [
      {
        "name": "ford",
        "confidence": 22.53554344177246
      },
      {
        "name": "toyota",
        "confidence": 18.3568058013916
      },
      {
        "name": "mini",
        "confidence": 8.813169479370117
      },
      {
        "name": "jeep",
        "confidence": 7.4132843017578125
      },
      {
        "name": "bentley",
        "confidence": 6.71981954574585
      }
    ],
    "make_model": [
      {
        "name": "ford_explorer",
        "confidence": 5.9391045570373535
      },
      {
        "name": "jeep_grand-cherokee",
        "confidence": 2.580145835876465
      },
      {
        "name": "toyota_4-runner",
        "confidence": 1.6210684776306152
      },
      {
        "name": "mini_cooper-s",
        "confidence": 1.5301092863082886
      },
      {
        "name": "jeep_compass",
        "confidence": 1.4200332164764404
      }
    ],
    "body_type": [
      {
        "name": "suv-standard",
        "confidence": 63.95018005371094
      },
      {
        "name": "suv-crossover",
        "confidence": 27.477678298950195
      },
      {
        "name": "sedan-compact",
        "confidence": 6.852950096130371
      },
      {
        "name": "tractor-trailer",
        "confidence": 0.5522668957710266
      },
      {
        "name": "sedan-wagon",
        "confidence": 0.44037652015686035
      }
    ],
    "year": [
      {
        "name": "2015-2019",
        "confidence": 71.17501831054688
      },
      {
        "name": "2010-2014",
        "confidence": 15.123287200927734
      },
      {
        "name": "2005-2009",
        "confidence": 9.49367904663086
      },
      {
        "name": "2000-2004",
        "confidence": 3.5961496829986572
      },
      {
        "name": "1995-1999",
        "confidence": 0.4058883488178253
      }
    ],
    "orientation": [
      {
        "name": "135",
        "confidence": 99.8639907836914
      },
      {
        "name": "180",
        "confidence": 0.08011430501937866
      },
      {
        "name": "225",
        "confidence": 0.04894278198480606
      },
      {
        "name": "315",
        "confidence": 0.0033808154985308647
      },
      {
        "name": "90",
        "confidence": 0.0014678192092105746
      }
    ]
  },
  "web_server_config": {
    "camera_label": "LPR Cam",
    "agent_label": "Home"
  },
  "direction_of_travel_id": -1
}
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
no not cloud alpr, set it in your appsettings for the service. either way i think i figured it out. pull latest and try again.
 

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
Where are the images stored? Are they actually held on the agent or are they encoded some where?
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
if you're running the agent in docker it stores them images in /var/lib/openalpr/
 

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
Amazing work man. I'm so excited we can host this locally and store plates! You need to put a link to a tip jar on the 1st page!

I'm sure you have features you want to add and polish but if you're open to suggestions we may need a way to set retention so the DB doesn't fill up. Also, can the images be "recreated" from that base64 jpeg data that is sent in the webhook??
 

mlapaglia

Getting comfortable
Joined
Apr 6, 2016
Messages
849
Reaction score
506
you know this might be even easier if you just edit your hosts file to point cloud.openalpr.com to your local ip address, the watchman agent doesn't do any kind of validation, it just sends the payload.

yes they can be recreated, find a base64 to jpg converter online.
 

biggen

Known around here
Joined
May 6, 2018
Messages
2,584
Reaction score
2,884
you know this might be even easier if you just edit your hosts file to point cloud.openalpr.com to your local ip address, the watchman agent doesn't do any kind of validation, it just sends the payload.

yes they can be recreated, find a base64 to jpg converter online.
Ahh, yeah I see. The host file on the machine that the agent is running? Yes, we could. That may be getting higher in the skill set for some others that will probably want to use this service once you get finished up.
 
Top