Jump to content
Unskilled

Background Application (IOT)

Recommended Posts

Unskilled

Como posso ligar uma função em c# a  javascript num ficheiro .html ?

Nessa função esta codigo para ligar e desligar leds e abrir e fechar um portao.

Todo isto com os Gpios do raspberry pi que corre em Windows Iot

Edited by Unskilled

Share this post


Link to post
Share on other sites
M6

Não percebo o sentido deste post.

É uma afirmação? Há alguma dúvida?


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
M6

Não consegues ligar o quê?

Tens de colocar as tuas dúvidas/problemas de forma clara e concreta. Se tens um erro coloca a mensagem que estás a obter.

Só por dizer que não consegues fazer algo ninguém vai adivinhar o que não consegues fazer muito menos a forma e a razão.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Unskilled

Como posso ligar uma função em c#  a javascript num ficheiro .html? 

 

Share this post


Link to post
Share on other sites
M6

Depende da tua definição de "ligar".

Se no HTML fazes a função javascript e esta invoca, por exemplo, um serviço JSON ao qual a função C# está ligada.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Unskilled

Eu queria que no meu javascript consegui-se executar uma funçao c# que está numa pagina a parte,em que  essa funçao vai ligar um led e abrir o portão.

Share this post


Link to post
Share on other sites
M6

As funções de C# não podem ser executadas em páginas, correm apenas no lado do servidor. Se tiveres um IIS a correr com uma aplicação ASPX podes fazer isso.

Mas parece-me que estás a complicar desnecessariamente a coisa.

Porque é que tem de ser uma função Javascript a chamar uma função C#? Parece-me que o que tu queres é mesmo só a função de C#...


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Unskilled

Não posso usar ASPX porque não a consigo correr como startup no raspberry, tinha mesmo de ser html, porque é a unica que me é permitida numa Background Application (IOT), mas se não dá para a mandar correr a função por javascript não sei como a posso fazer.

Não fiz uma app só em c# porque me foi dado este projeto e tinha de ser em web nao tem a haver com complicar desnecessariamente a coisa.

Share this post


Link to post
Share on other sites
M6

Um ASPX pode arrancar no startup do Rasp Pi, só tens de ter, por exemplo, um serviço de sistema que faça uma chamada ao site para o "levantar".
Mas, a bem da verdade, ter um site como background service de um sistema operativo não me parece uma boa escolha.

Não sei onde foste buscar que uma background application de IoT tem de ser HTML. IoT é um termo genérico que se aplica à interligação de "coisas", a forma como controlas ou comunicas com a "coisa" é contigo, não há nenhuma obrigação em teres de usar html ou javascript para tal.

Acho que há ai alguma confusão nesse projeto, em especial na arquitetura e desenho do mesmo. Devias clarificar isso.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Unskilled
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Http;
using Windows.ApplicationModel.Background;
using Windows.System.Threading;
using Windows.Networking.Sockets;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Storage.Streams;
using System.IO;
using System.Threading.Tasks;
using Windows.System.Threading;
using Windows.Devices.Gpio;

namespace MyWebServer2
{
   

    public sealed class StartupTask : IBackgroundTask
    {
           
        
        private static BackgroundTaskDeferral _Deferral = null;
       

        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            _Deferral = taskInstance.GetDeferral();
            var webserver = new MyWebserver();

            await ThreadPool.RunAsync(workItem =>
            {
               
                webserver.Start();
            });
        }

        

    }
}

internal class MyWebserver
{
    private const uint BufferSize = 8192;

    public async void Start()
    {
        InitGPIO();------------------------------------------------------
        var listener = new StreamSocketListener();

        await listener.BindServiceNameAsync("8081");

        listener.ConnectionReceived += async (sender, args) =>
        {
            var request = new StringBuilder();

            using (var input = args.Socket.InputStream)
            {
                var data = new byte[BufferSize];
                IBuffer buffer = data.AsBuffer();
                var dataRead = BufferSize;

                while (dataRead == BufferSize)
                {
                    await input.ReadAsync(
                         buffer, BufferSize, InputStreamOptions.Partial);
                    request.Append(Encoding.UTF8.GetString(
                                                  data, 0, data.Length));
                    dataRead = buffer.Length;
                }
            }

            string query = GetQuery(request);

            using (IOutputStream output = args.Socket.OutputStream)

            {

                using (System.IO.Stream response = output.AsStreamForWrite())

                {

                    string page = "";

                    var folder = Windows.ApplicationModel.Package.Current.InstalledLocation;

                    // acquire file
                   
                    var file = await folder.GetFileAsync("index.html");
                    
                    var readFile = await Windows.Storage.FileIO.ReadLinesAsync(file);

                    foreach (var line in readFile)

                    {

                        page += line;

                    }


                    byte[] bodyArray = Encoding.UTF8.GetBytes(page);

                    var bodyStream = new MemoryStream(bodyArray);



                    var header = "HTTP/1.1 200 OK\r\n" +

                                $"Content-Length: {bodyStream.Length}\r\n" +

                                    "Connection: close\r\n\r\n";

                    byte[] headerArray = Encoding.UTF8.GetBytes(header);

                    await response.WriteAsync(headerArray, 0, headerArray.Length);

                    await bodyStream.CopyToAsync(response);

                    await response.FlushAsync();

                }

            }




        };
    }
    private static string GetQuery(StringBuilder request)
    {
        var requestLines = request.ToString().Split(' ');

        var url = requestLines.Length > 1
                          ? requestLines[1] : string.Empty;

        var uri = new Uri("http://localhost" + url);
        var query = uri.Query;
        return query;
    }

    private const int LED_PIN = 6;
    private GpioPin pin;
    private GpioPinValue pinValue;

    public void CloseGPIO()
    {
        GpioController gpio = GpioController.GetDefault();
        pin = gpio.OpenPin(LED_PIN);
        pinValue = GpioPinValue.Low;
        pin.Write(pinValue);
        pin.SetDriveMode(GpioPinDriveMode.Output);
    }

    public void InitGPIO()
    {
        GpioController gpio = GpioController.GetDefault();
        pin = gpio.OpenPin(LED_PIN);
        pinValue = GpioPinValue.High;
        pin.Write(pinValue);
        pin.SetDriveMode(GpioPinDriveMode.Output);
    }
}

C#  

Aqui eu chamo o codigo dos leds quando a pagina "arranca" porque numa pagina posterior esta mesma é chamada para  ligar o led. 

Existe outro problema que é as paginas de ligar e apagar entram em conflito no raspberry e so funciona uma de cada vez, como o raspberry corre em windows Iot nao sei como ao clicar no botao em html manda-la executar.

(As duas paginas estao como startuptask)

Nunca fiz um projeto destes e sim foi me dado um bocado ao "Tenta lá isso" se não funcionar vou para linux onde não tenho dificuldade mas a prioridade é ser em windows IOT 

Edited by Unskilled

Share this post


Link to post
Share on other sites
M6

Sinceramente, não percebi os aparentes vários problemas que relatas...

O código que comunica com a GPIO funciona?

Não percebo o que dizers com as páginas de ligar e desligar só funcionam à vez, não podes ligar e desligar um interruptor ao mesmo tempo.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Unskilled

Os GPIOS estam a funcionar bem, o que da conflito é ter o as paginas de ligar e desligar a correr em background, porque ambas estam a enviar codigo para o mesmo GPIO. e eu não sei como fazer para ao clicar no meu butao em html  executa-la estando ela parada.

Supostamente só com powershell.

 

Share this post


Link to post
Share on other sites
M6

Ah, agora já começo a perceber.

Creio que a questão não é enviar código para o mesmo GPIO mas sim ambas tentarem dominar/ter aberto/controlar o mesmo GPIO ao mesmo tempo.
Experimenta usar um semáforo para controlar se podes enviar o comando ou se tens de esperar. E abre só a porta quando tiveres de enviar o comando e fecha-a de seguida.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
M6

Lamento, mas isso não.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
Unskilled

As conclusões tiradas deste post são de facto de uma imensidão brutal, todos estas 17 respostas valeram a pena 3 dias de espera.

Mas tambem vindo do Moderador Fernado o que se à de esperar verdade seja dita.

Como é referido no seu perfil.

De facto existe algo de "Espercial" aqui .

"Espercialmente interessado em migrações de dados, integração de informação, lígua natural, comércio eletrónico, domótica e sistemas de comando e controlo  ".

Quando tiver disponivel para ajudar concretamente em vez de mandar metodos para o ar é só apitar.

Já agora não  faço ideia do que seja a "ligua" mas deve ser algo de maravilhoso/Espercial.

Continuação do "Bom Trabalho".

 

 

Edited by Unskilled

Share this post


Link to post
Share on other sites
HappyHippyHippo
2 hours ago, Unskilled said:

As conclusões tiradas deste post são de facto de uma imensidão brutal, todos estas 17 respostas valeram a pena 3 dias de espera.

Mas tambem vindo do Moderador Fernado o que se à de esperar verdade seja dita.

Como é referido no seu perfil.

De facto existe algo de "Espercial" aqui .

"Espercialmente interessado em migrações de dados, integração de informação, lígua natural, comércio eletrónico, domótica e sistemas de comando e controlo  ".

Quando tiver disponivel para ajudar concretamente em vez de mandar metodos para o ar é só apitar.

Já agora não  faço ideia do que seja a "ligua" mas deve ser algo de maravilhoso/Espercial.

Continuação do "Bom Trabalho".

 

 

primeiro, foram dois dias e não três.

segundo, este tópico não é mais do que mais uma prova que o problema não é de quem responde, mas sim de quem pergunta. Isto é claro porque quem coloca a questão nem se dá ao trabalho de pensar que, apesar de ser ele que tem o problema e/ou o erro, a solução não passa por uma avaliação do que ele já fez, mas sim algo extra que lhe passa ao lado. Conclusão, se o problema tivesse sido bem esplanado à partida, o @M6 não tinha de andar aqui a adivinhar o que se passava. Problema normal de quem tenta ajudar pessoas que não percebem que este e um meio escrito, e como tal, é necessário escrever toda a informação relevante ao problema para o resto das pessoas possam ter o mínimo de conhecimento de causa (vais ao medico e dizes que te dói a barriga sem dizer mais nada?)

e já que estas numa de gozar com as pessoas dando uma volta ao perfil, basta olhar para o teu handler e apreciar a tua arte na programação. Deve estar ao nível do escultor que fez o busto do Ronaldo

 


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Unskilled

Como posso ligar uma função em c# a  javascript num ficheiro .html ?

E se soubesse de melhor de programação não estava aqui a perguntar a gente mais velha que eu uns 20,30 anos.

Não vejo dificuldade em perceber a pergunta e ele pareceu ter percebido no final do que se tratava.

Sim,gozei com a situação porque desde quando dão uma instrução e não a explicam totalmente, eu adivinho como a colocar no meu protejo?

Nas procuras que fiz encontrei código mas não sei como o adaptar ao meu código.

Share this post


Link to post
Share on other sites
HappyHippyHippo
30 minutes ago, Unskilled said:

Como posso ligar uma função em c# a  javascript num ficheiro .html ?

 

On 5/24/2017 at 10:14 AM, M6 said:

As funções de C# não podem ser executadas em páginas, correm apenas no lado do servidor. Se tiveres um IIS a correr com uma aplicação ASPX podes fazer isso.

Apesar disso, o  @M6 deu-se ao trabalho de saber que isso não seria solução, e que irias continuar sem solução ao problema, e de boa vontade continuou:

On 5/24/2017 at 10:42 AM, M6 said:

Um ASPX pode arrancar no startup do Rasp Pi, só tens de ter, por exemplo, um serviço de sistema que faça uma chamada ao site para o "levantar".
Mas, a bem da verdade, ter um site como background service de um sistema operativo não me parece uma boa escolha.

...

Acho que há ai alguma confusão nesse projeto, em especial na arquitetura e desenho do mesmo. Devias clarificar isso.

agora, se ele não pode fazer o teu trabalho, é algo que nunca o poderás culpar, porque ou ele tem mais que fazer, ou simplesmente acha que terás de ser tu a (pelo menos) fazer o código.

Ele nunca se recusou a ajudar, simplesmente se recusou a fazer código


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.