Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  3 857
Hei!

Jeg driver å ser på muligheter for å kunne styre hjemmekinoen i heimen fra et web-interface. I utgangspunktet er det da snakk om receiver (Yamaha RXV-1900) og projektor (Epson TW-3200). Begge disse kan kontrolleres fra serieporter. Jeg tenkte da at jeg kunne ha en PC som hele tiden var tilkoblet enhetene.

Jeg har sett på pyserial som ser ut som et greit utgangspunkt. Men jeg er veldig usikker på hvordan jeg skal legge det opp. Jeg tenkte å kjøre en tcp-server som mottok kommandoer fra web-interface og sendte disse videre til serieporten(e). Så tenkte jeg å kjøre en tråd som hele tiden leste fra serieporten, for receiveren sender også ut data om man trykker på fjernkontrollen. Når kommandoer sendes til receiveren vil det komme et resultat tilbake. Dermed trenger jeg å vente på retur når kommandoer blir sendt og være sikker på at ikke noe annet blir skrevet til eller lest fra porten før returen sendes (mutex?).

Ville det være lurt med en tråd som leste fra serieporten, en som skrev og en for å motta tcp-tilkoblinger? Noen som har gjort noe lignende, eller har noen innspill?
Er du sikker på at du må vente på svar før du sender en ny kommando? Jeg synes det høres litt merkelig ut, siden receiveren likevel kan generere asynkrone events ved at du trykker på fjernkontrollen. Hvis det skulle komme en melding om at en kommando allerede kjøres, så kan du vel bare ignorere denne eller sende den videre opp i systemet i form av en feilmelding til brukeren. Hvis du må ha kontroll på dette, så hadde det kansje vært bedre med den egen tråd som bare håndterer kommandoer, og fungerer som en slags "gatekeeper".

Ser at du har tenkt å bruke TCP, men for en applikasjon som dette er det kanskje bedre med UDP? Kommandoer og events kan enkelt mappes mot datagram, og du slipper å holde liv i noen "connection". Men dette er jo avhenging av hvilke muligheter du har på web-interface siden.
Nei, jeg trenger ikke å vente på svar, men da kan jeg tolke svaret og vite om kommandoen gikk greit. Jeg tror nok jeg også burde lage en form for cache så jeg slipper å spørre receiveren om instillinger for hver klient-tilkobling selv om ingenting har endret seg.

Når det gjelder TCP vs. UDP har jeg ikke nok greie på dette. Men tenkte at dette ville være greit slik at jeg kan koble til fra "klienter" på en enkel måte. Web-interfacet ville da være en slik klient. Så om jeg skriver det i f.eks php kan jeg bare opprette en socket-connection til serveren. Men jeg har som sagt ikke så mye peiling på dette.
Ok, mitt forslag er da å bruke en "gatekeeper" tråd til å håndtere kommandoer. Hvis alle klientene går gjennom denne, så slipper bare en kommando igjennom om gangen. (Siden den vil være opptatt med å vente på svar når en kommando kjører). Sørg da for å rute alle events som har med "kommandosvar" å gjøre til gatekeeper tråden, og andre events til andre steder (fra tråden som leser serieporten).

Når det gjelder kommunikasjon mellom tråder, så vil jeg anbefale "Queue" modulen (antar at du gjør dette i Python siden du nevner pyserial), og sette opp køer i hver tråd som håndterer inkommende data.