Invio comando Trigger a Telecamera

di il
8 risposte

Invio comando Trigger a Telecamera

Buongiorno a tutto il forum,

mi trovo a dover gestire una telecamera.

(ho postato ieri un problema analogo sulla sezione VB6, ma data la fretta e l'incognita se si può fare o meno in vb6, cercherei di gestirla in vb net.)

VB.NET 2008

Per quanto riguarda il login, sono riuscito a risolverlo e vi posto il codice

        Dim Client As New WebClient
        Try
            txtToken.Clear()
            Me.Cursor = Cursors.WaitCursor
            Dim credentials As String = Convert.ToBase64String(Encoding.ASCII.GetBytes(txtUser.Text & ":" & txtPassword.Text))
            Client.Headers(HttpRequestHeader.Authorization) = String.Format("Basic {0}", credentials)
            txtToken.Text = Client.DownloadString("http://192.168.1.15/api/v1/security/login")
            Me.Cursor = Cursors.Default
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

Con questo comando faccio la login e la telecamera mi risponde con il token di autenticazione.

A questo punto dovrei inviare il Trigger, ovvero il comando di lettura targa

nella documentazione ho trovato questo, ma non sono ancora riuscito a metterlo sottoforma di codice…

POST  http://CAMERA_IP/api/v1/application/triggers/immediate/${trigger_id}

Headers : richiede il token ricevuto alla login

Body di tipo JSON

{
  "data": "",
  "lane_alias": "lane-1",
  "shift_ms": 0,
  "pre_ms": 200,
  "post_ms": 500
}
curl -X POST -H "x-user-token: ${x-user-token}" -d '${network_transit_trigger}' http://CAMERA_IP/api/v1/application/triggers/immediate/${trigger_id}

Qualcuno cortesemente sa darmi qualche preziosa  dritta/indicazione ?

Grazie 100

DG

8 Risposte

  • Re: Invio comando Trigger a Telecamera

    Sei riuscito a farlo “a mano” ???
    cioè, una volta che hai ricavato il token, usando il comando CURL ti funziona ???

    Comunque non lo vedo difficilissimo, è un comando POST dove sull'url mi sembra di capire c'è un parametro trigger_id, poi nell'header devi mettere il token, e nel body della richiesta metti il file JSON

    Non credo tu possa usare WebClient (non mi ricordo se gestisce gli header), per cui eventualmente dovrai usare la classe HttpWebRequest

  • Re: Invio comando Trigger a Telecamera

    11/09/2024 - DanieleG ha scritto:


    vi posto il codice

    Il ripristino del cursore a mio avviso andrebbe fatto nel blocco Finally… Come lo hai scritto tu, se qualcosa solleva eccezione, non lo ripristini.

    11/09/2024 - DanieleG ha scritto:


    Qualcuno cortesemente sa darmi qualche preziosa  dritta/indicazione ?

    Per inviare una POST da WebClient, prova ad usare il metodo UploadString.

  • Re: Invio comando Trigger a Telecamera

    Grazie SirJo.

    il comando curl onestamente non so come inviarlo.

    a “mano” sono riuscito tramite il software Postman, programmando le stringhe, ma non so se c'è un metodo (su postman per visualizzare la stringa completa che viene inviata).

    Grazie anche a Sgubak, si per il cursore hai ragione, ma sono solo righe di “test”

    DG

  • Re: Invio comando Trigger a Telecamera

    Sì, su Postman, sul menu a destra, puoi fargli creare il pezzo di codice a seconda del linguaggio che usi, ma per VB.NET 2008 non c'è nulla, per cui fai quello che più gli assomiglia, e cioè C#, poi lo pubblichi qui e vediamo come farlo in VB.NET

  • Re: Invio comando Trigger a Telecamera

    Grazie ancora !

    mi da 2 opzioni:

    C# HttpClient

    var client = new HttpClient();
    var request = new HttpRequestMessage(HttpMethod.Post, "http://192.168.1.15/api/v1/application/triggers/immediate/1");
    request.Headers.Add("x-user-token", "040fcbbf-6d10-4ec8-83aa-9f3d8a722dfe");
    var content = new StringContent("{\r\n    \"data\": \"\",\r\n    \"lane_alias\": \"lane-1\",\r\n    \"shift_ms\": 0,\r\n    \"pre_ms\": 200,\r\n    \"post_ms\": 500\r\n}", null, "application/json");
    request.Content = content;
    var response = await client.SendAsync(request);
    response.EnsureSuccessStatusCode();
    Console.WriteLine(await response.Content.ReadAsStringAsync());

    e C# RestSharp

    var options = new RestClientOptions("http://192.168.1.15")
    {
      MaxTimeout = -1,
    };
    var client = new RestClient(options);
    var request = new RestRequest("/api/v1/application/triggers/immediate/1", Method.Post);
    request.AddHeader("x-user-token", "040fcbbf-6d10-4ec8-83aa-9f3d8a722dfe");
    request.AddHeader("Content-Type", "application/json");
    var body = @"{
    " + "\n" +
    @"    ""data"": """",
    " + "\n" +
    @"    ""lane_alias"": ""lane-1"",
    " + "\n" +
    @"    ""shift_ms"": 0,
    " + "\n" +
    @"    ""pre_ms"": 200,
    " + "\n" +
    @"    ""post_ms"": 500
    " + "\n" +
    @"}";
    request.AddStringBody(body, DataFormat.Json);
    RestResponse response = await client.ExecuteAsync(request);
    Console.WriteLine(response.Content);
  • Re: Invio comando Trigger a Telecamera

    Ovviamente non posso provarlo, ma una cosa così dovrebbe abbastanza funzionare:

            Dim url As String = "http://192.168.1.15/api/v1/application/triggers/immediate/1"
    
            Dim request As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest)
            request.Method = "POST"
            request.ContentType = "application/json"
    
            request.Headers.Add("x-user-token", "040fcbbf-6d10-4ec8-83aa-9f3d8a722dfe")
    
            Dim jsonData As String = "{""data"": """", ""lane_alias"": ""lane-1"", ""shift_ms"": 0, ""pre_ms"": 200, ""post_ms"": 500 }"
            Dim byteArray As Byte() = Encoding.UTF8.GetBytes(jsonData)
    
            request.ContentLength = byteArray.Length
    
            request.GetRequestStream.Write(byteArray, 0, byteArray.Length)
    
            Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
            Using responseStream As Stream = response.GetResponseStream()
                Using reader As New StreamReader(responseStream)
                    Dim responseFromServer As String = reader.ReadToEnd()
                    ' qui hai la risposta del server
                    ' TODO: gestire la risposta
                End Using
            End Using
            response.Close()

    Ovviamente lascio a te fare il TRY…CATCH per tutti gli eventuali errori

    Facci sapere

    P.s: ovviamente tutti i "\r\n" sono stati volutamente tolti dalla stringa JSON perchè non servono a nulla

  • Re: Invio comando Trigger a Telecamera

    Che dire….dovrei farti un monumento.

    Secondo te, tutto questo, in vb6 potrebbe essere gestito ?

    Altrimenti (come dicevo, vista l'urgenza), farò un "piccolo eseguibile in vb.net che lancerò da software principale, al momento non vedo altre soluzioni.

    Se sei/capiti in quelli di Torino hai una bevuta offerta !

    Grazie 1000

    DG

  • Re: Invio comando Trigger a Telecamera

    In VB6 non ci lavoro da taaaanti anni e quindi non saprei dirti

Devi accedere o registrarti per scrivere nel forum
8 risposte