Python - C - SQL -???

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
andpe
Inlägg: 98
Blev medlem: 13 januari 2011, 23:18:37

Python - C - SQL -???

Inlägg av andpe »

Hei, alle!
Godt nytt år.

Jeg holder på å lage et system hjemme som skal være adgangskontroll, ringeapparat og styre diverse alarmer og pushvarsler.

Det hele kjører idag på en Raspberry Pi, med php5, apache2 og SQL-server.

Har et web-grensesnitt som via php skriver logg til sql.
Python leser sql, og ser om det er noen oppgaver som skal utføres. (lås aktiv / deaktiv)
Python utfører styringen og leser innganger og sender pushvarsler via pushover.net, skriver logg osv.

Mitt spørsmål er :

Hvordan ville dere gjort dette ?
Er det fornuftig å bruke SQL som mellomledd mellom php/apache og python som utførende program?
Fordelen med dette tror jeg at det er enkelt å sjekke i loggen hvilken ip / mac /timestamp / brukernavn som ba om tilgang, samt om kommandoen ble utført.

1. Logger inn på www
2. php leser SQL for å se status på lås / dør / brukernavn (fra python)
3. du trykker på lås opp dør
4. php skriver ny rad i SQL med ip, mac, brukernavn, og hvilken kommando som skal endres.
5. python sjekker sql etter rader som har executed = 0, og utfører kommandoen, og rapporterer executed = 1, samt oppdaterer status på lås i sql
6. php leser status på dør i sql via ajax.
7. python låser dør etter hold-open-time er ferdig, og rapporterer til sql.
8. se punkt 6
osv...

Noen tanker?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Python - C - SQL -???

Inlägg av sodjan »

Pollning vs. triggning är ju alltid en stor fråga och ett viktigt design-beslut.

Om ditt Python script kan polla databasen tillräckligt ofta för att få en acceptabel
svarstid samtidigt som du inte laster ner servern i onödan, så fungerar det kanske.

Har din databas (det du, sannolikt lite felaktigt, kallar "SQL") tillgång till triggers?
I så fall kan kanske en INSERT från ditt PHP script trigga en rutin som kör Python scriptet...

Sen så är det lite oklart om du har full koll på var dina steg 1-6 faktiskt utförs.
Vad är klient/browser, webserver script och vad är andra script på servern.

Som jag ser det så är det:

1. Logger inn på www [Från en browser/klient alltså.]
2. php leser SQL for å se status på lås / dør / brukernavn (fra python)
3. du trykker på lås opp dør [Alltså en "button" på samma sida som punkt 2 skapade.]
4. php skriver ny rad i SQL med ip, mac, brukernavn, og hvilken kommando som skal endres. [I ett nytt web server script. Kan vara samma som i punkt 2, men en annan körning av det.]
5. python sjekker sql etter rader som har executed = 0, og utfører kommandoen, og rapporterer executed = 1, samt oppdaterer status på lås i sql [Vad får Python att göra det? Och var körs Python?]
6. php leser status på dør i sql via ajax. [??? Var körs denna PHP och varför? Vad kör/triggar den?]
7. python låser dør etter hold-open-time er ferdig, og rapporterer til sql. [OK. En funktion helt skild från web delen...]
8. se punkt 6 [Se punkt 6... :-) ]
andpe
Inlägg: 98
Blev medlem: 13 januari 2011, 23:18:37

Re: Python - C - SQL -???

Inlägg av andpe »

Hei.
Tusen takk for at du svarer meg.

SQL trigger / insert har jeg ikke lest noe om!

På web-serveren kjøres kun php.
Lokalt på maskinen kjøres python: python-programmet kjører i bakgrunnen og poller databasen hvert 2 sekund ca.

TODO : lese om sql-trigger/ inserts

Brukeren / anvendaren logger inn med webbrowser på siden (innlogging, cookies, session,js,php).
Kontrollpanelen vises, og layout / farger / tekst endres via responsen fra ajax-pollingen som kjøres på siden hver 2 sekund.
Hvis brukeren trykker på "lås" / "lås opp", så utføres et php-skript som skriver til databasen.
Python-programmet poller databasen og ser om det er noe som skal utføres, utfører dette, og oppdaterer databasen.

Håper det ble litt klarerer nå, du hadde ca 100 % riktig. :)

Jeg har også planer om å legge inn et par python-program jeg har skrevet som :

1.prater med en avr, som igjen leser wiegand-protokollen fra kortleseren. denne vil jeg at skal sjekke databasen for kortnummer, pin-kode og rettigheter.

2.leser dørklokken, vannlekkasjesensor og røykdetektor - logger dette - og sender pushmeldinger (via pushover.net)

Hvor mange connections kan sql ha samtidig? Vil det bli kollisjon hvis 4-5 program leser og skriver til samme database samtidig?

Jeg er mest redd for at det skal bli problemer med at flere system prøver å lese / skrive samme database samtidig.

Burde man prøve å samle alle funksjoner i ett python-program ?

Andreas
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43178
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Python - C - SQL -???

Inlägg av sodjan »

> python-programmet kjører i bakgrunnen og poller databasen hvert 2 sekund ca.

Ja, det är ju helt OK, om en 2 sek delay (1 sek i genomsnitt) är OK mellan
"kommando" och "utförande", det framgick inte riktigt.

> Hvor mange connections kan sql ha samtidig?

"SQL"? SQL är ett språk för att hantera databaser och det har inget med "connections" att göra alls.

> Vil det bli kollisjon hvis 4-5 program leser og skriver til samme database samtidig?

Vad är det för databas? Men genereellt nej. Du kan ha hundratals eller tusentals användare.
Databasen *ska* se till att alla får göra det de vill. Antingen samtidigt (om det inte är några
konflikter) eller i tur och ordning om det behövs.

> TODO : lese om sql-trigger/ inserts

Som sagt, jag vet inte vad du kör för databas, men lite googling kring MySQL gav:

http://www.mysqltutorial.org/mysql-trig ... ation.aspx
http://crazytechthoughts.blogspot.se/20 ... mysql.html

Lite mer googling ger att det finns metoder att för att köra shell script från en triggers
och där kan man köra valfritt program. Jag hittar dock ingen direkt enkel metod för att
köra just Python...
RoPa
Inlägg: 630
Blev medlem: 13 januari 2006, 10:32:06

Re: Python - C - SQL -???

Inlägg av RoPa »

När jag stod i samma situation efter att ha provat lösningar baserat på Long Polling och Ajax utan och med PHP så valde jag efter tips från en kollega att släppa tanken på en central databas för "kommunikation" och gå helt asynkront med hjälp av en RabittMQ message broker, nu är mitt system helt pushat (triggat) genom att alla delar gör subscribes till det de vill ha info om och gör publish på allt de vill ha gjort.
En MySQL server finns med som lagrar aktuellt state så att allt kan starta om och komma upp där det var innan, samt att loggen skrivs in i den. Enda biten som är pollad är visning av historik från loggen i web klinter som görs med PHP och därmed inte uppdateras i realtid.

Att använda message arkitektur har varit väldigt tacksamt att jobba med och jag har nu gjort MQTT/XMLhttpRequest adaptrar så jag kan dölja de andra delsystemen bakom messages. Dessa konverterar Json till Ajax med Curl och XML svaret till Json.

Dock en varning, fick SD-kort haveri på Rabbit MQ servern (Rpi), det kan vara så att loggningen i den skrev sönder kortet. Kör nu på en Debian (Intel) server.

Lycka till!
Skriv svar