Stap 25: Hoe de Python programma's werken
Er zijn twee klant Python programma's gebruikt in dit instructable maken de Raspberry Pi Internet Monitor.
RPI-internet-monitor.py
Het eerste programma "rpi-internet-monitor.py" is gestart met de opdracht:
post-up python /home/pi/python_programs/rpi-internet-monitor.py
in het systeembestand "/ etc/network/interfaces'. De 'post-up' opdracht wordt uitgevoerd wanneer de netwerkinterfaces gebruiksklaar zijn.
Aanbiedingen 1 tot 5 tonen de broncode voor de rpi-internet-monitor.py-programma:
Lijnen 3-17 (tekstvak 1) invoer nodig bibliotheken en constanten die zullen worden gebruikt binnen het programma definiëren.
- Lijnen 3-6 importeren de bibliotheken die zijn vereist om commando's systeem, de tijd, en opdat het programma kan lezen en schrijven van de GPIO pinnen.
- Lijn 8 definieert de GPIO pin gebruikt om te vertellen of de knop op de afsluiten-schakelaar is ingedrukt.
- Lijn 9 definiëren de GPIO pin gebruikt om te bepalen van de verlichting van het licht op de afsluiten-switch.
- 10-12 regels definieert de GPIO pinnen gebruikt om te bepalen van de verlichting van de LED's in de toren-lamp.
- Lijn 14 Hiermee stelt u het aantal seconden moet worden gewacht tussen de opdracht 'ping'.
- Regel 15 wordt het aantal seconden moet worden gewacht tussen de afgifte van de tests van hoe goed de internetverbinding werkt.
- Regel 17 hier staan de sites die worden gepingd om te zien hoe goed de internetverbinding werkt. Google is altijd een goede keuze. Ik koos voor Comcast omdat ze mijn internet-provider. Dit kunnen worden aangepast aan wat je wilt en kunt u extra sites aan de lijst zo goed.
19-22 lijnen (tekstvak 1) de "debug_message"-functie definiëren. Deze functie wordt gebruikt om het uitprinten van berichten die ertoe bijdragen dat het "rpi-internet-monitor.py" Python programma debug, als het niet goed werkt. Foutopsporing is ingeschakeld door het programma uit te voeren met de - schakeloptie debug als volgt:
python /home/pi/python_programs/rpi-internet-monitor.py -debug
- Lijnen 21-22 controleren om te zien als de invoervariabele "debug_indicator" is ingesteld op "True" en zo ja, het bericht afdrukken opgegeven "output_message", anders die geen berichten worden afgedrukt.
Regels 24-34 (lijst 2) definiëren de "ping"-functie. De ping-functie kwesties de opdracht "ping" systeem om te bepalen of de site opgegeven door "site" bereikbaar. Deze functie retourneert een nul als het pingen gelukt is en een één als de ping succesvol was.
- Regel 26 construeert het bevel Linux te doen van de ping.
- Lijn 28 kwesties de opdracht met behulp van de functie van "check_output" uit de "subprocess" bibliotheek.
- Regel 29 vertelt de python program uit te voeren regels 30 en 31 als de opdracht mislukt (de site is bijvoorbeeld niet bereikbaar).
- Regel 30 wordt afgedrukt op een debugging bericht dat de site is niet bereikbaar.
- Regel 31 retourneert een nul op de functie die aangeroepen 'pingen'.
- Lijn 32 is waar uitvoering blijft als de ping succesvol was.
- Lijn 33 drukt een debugging bericht dat aangeeft dat de website bereikbaar.
- Lijn 34 geeft als resultaat een aan de functie die aangeroepen 'ping'.
Lijnen van 36-46 (opsomming 2) de "ping_sites"-functie definiëren. De "ping_sites" functie pings elk van de sites vermeld in "site_list" het aantal keren dat is opgegeven door de "times" met een vertraging in seconden tussen de pings opgegeven door "wait_time".
- Lijn 39 wordt het aantal succesvolle pings ingesteld op nul.
- Lijn 40 sets het totale aantal pings dat wordt vermenigvuldigd met het aantal zal worden geprobeerd opgegeven door "times" door het getal van sites vermeld in "site_list probeert".
- Regel 41 creëert een lus die zal worden uitgevoerd van het aantal keren dat is opgegeven door de "times".
- Regel 42 creëert een andere lus die voor elke site in "site_list" uitgevoerd zal worden.
- Lijn 43 roept ping en voegt de resultaatwaarde van de "ping" (nul als dit niet lukt, een als succesvolle) aan het aantal succesvolle pings.
- Lijn 44 roept de systeemfunctie "time.sleep" te wachten voor het aantal seconden dat is opgegeven door "wait_time".
- Lijn 45 wordt uitgevoerd nadat alle lussen hebben voltooid en prints een debug-bericht dat aangeeft welk percentage van de pings geprobeerd succesvol waren.
- Lijn 46 geeft als resultaat het percentage van pings die succesvol naar de functie die waren "ping_sites" genoemd.
Lijnen van 48-53 (lijst 3) de "lamp_amber_on"-functie definiëren. Deze functie wordt aangeroepen als u wilt de amber lamp inschakelen om aan te geven wanneer de internet-verbinding werkt, maar is niet optimaal.
- Lijn 50 drukt een debugging bericht weergegeven dat aangeeft dat de functie heette.
- Lijn 51 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de rode lamp is uitgeschakeld.
- Lijn 52 gebruikt de functie "uitvoer" in de GPIO bibliotheek om te schakelen de amber lamp is ingeschakeld.
- Lijn 53 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de groene lamp is uitgeschakeld.
Lijnen 55-60 (lijst 3) de "lamp_green_on"-functie definiëren. Deze functie wordt aangeroepen om te schakelen het groene licht om aan te geven wanneer de internet-verbinding werkt.
- Regel 57 drukt een debugging bericht weergegeven dat aangeeft dat de functie heette.
- Lijn 58 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de rode lamp is uitgeschakeld.
- Lijn 59 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de amber lamp is uitgeschakeld.
- Lijn 60 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek de groene lamp inschakelen.
Lijnen 62-67 (lijst 3) de "lamp_red_on"-functie definiëren. Deze functie wordt aangeroepen om te schakelen van het rood licht op om aan te geven wanneer de internet-verbinding werkt niet.
- Lijn 64 wordt afgedrukt op een debugging bericht weergegeven dat aangeeft dat de functie heette.
- Lijn 65 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek de rode lamp inschakelen.
- Lijn 66 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de amber lamp is uitgeschakeld.
- Regel 67 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de groene lamp is uitgeschakeld.
69-74 regels (aanbieding 4) de "lamp_all_off"-functie definiëren. Deze functie heet alle de lampen om uit te schakelen.
- Lijn 71 wordt afgedrukt op een debugging bericht weergegeven dat aangeeft dat de functie heette.
- Lijn 72 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de rode lamp is uitgeschakeld.
- Lijn 73 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de amber lamp is uitgeschakeld.
- Lijn 74 maakt gebruik van de functie "uitvoer" in de GPIO bibliotheek om ervoor te zorgen dat de groene lamp is uitgeschakeld.
Regels 76-88 definiëren de "lamp_test"-functie. Deze functie is opgebruikt tijdens het starten van het programma voor het testen van de lampen. De functie flitsen alle lampen in serie vijf keer met een tiende van een tweede vertraging tussen flitsen.
- Lijn 78 drukt een debugging bericht dat detest lamp begint.
- Regel 79 wordt de vertraging tussen flitsen aan een tiende van een seconde.
- Lijn 80 maakt een lus dat zal uitvoeren uitvoeren lijnen 81-86 vijf keer.
- Lijn 81 maakt gebruik van de functie van systeem "time.sleep" te wachten op een tiende van seconde.
- Lijn 82 oproepen "lamp_red_on" als u wilt gewoon de rode lamp inschakelen.
- Lijn 83 wacht op een tiende van een seconde.
- Lijn 84 oproepen "lamp_amber_on" als u wilt gewoon de amber lamp inschakelen.
- Lijn 85 wordt gewacht tot een tiende van een seconde.
- Regel 86 oproepen "lamp_green_on" als u wilt gewoon de groene lamp inschakelen.
- Lijn 87 wordt uitgevoerd nadat de lus eindigt en noemt het "lamp_all_off" alle de lampen om uit te schakelen.
- Regel 88 drukt een debugging bericht dat de lamp-test is voltooid.
Lijnen 90-127 (opsomming 5) is het hoofdprogramma.
Lijnen 92-99 Controleer de opties die doorgegeven aan het programma om te bepalen als foutopsporing berichten moeten worden afgedrukt.
- Regel 93 wordt ingesteld "debug" op False waarmee wordt aangegeven dat als de opdracht beschikt niet over de debug optie opgegeven dat foutopsporing berichten moet niet worden afgedrukt.
- Lijn 94 gebruikt de systeemvariabele "sys.argv" om te kijken als eventuele opties zijn opgegeven op de opdrachtregel. Als ze waren, worden lijnen 95-99 uitgevoerd.
- Lijn 95 controleert of "-debug" is opgegeven.
- Lijn 96 is uitgevoerd als "-debug" is opgegeven en de waarde voor "debug" ingesteld op True die aangeeft Foutopsporingsberichten moeten worden afgedrukt.
- Lijn 97 maakt lijnen 98 en 99 uitgevoerd als iets anders dan "-debug" is opgegeven.
- Regel 98 drukt een foutmelding dat een onbekende optie was gespecificeerd en wat het was.
- Lijn 99 stopt het programma met een foutcode van 1 vanwege de onbekende optie.
Lijnen 101-105 setup de GPIO pinnen door het programma gebruikt om te controleren van de lampen.
- Lijn 102 wordt de "setmode"-functie uit de bibliotheek GPIO ingesteld het nummeringsschema dat wordt gebruikt voor de GPIO pinnen
- Lijn 103 wordt de "setup"-functie uit de bibliotheek GPIO ingesteld van de pin gebruikt om te controleren de groene lamp tot een uitgang Pins.
- Lijn 104 wordt het "setup"-functie uit de bibliotheek GPIO ingesteld van de pin gebruikt om te controleren de amber lamp tot een uitgang Pins.
- Lijn 105 maakt gebruik van de "setup"-functie uit de bibliotheek GPIO instellen van de pin gebruikt om te bepalen van de rode lamp tot een uitgang Pins.
Lijnen 107-111 flash de lampen om aan te geven het programma begint en laat de amber lamp op totdat het programma wordt gestart voor het testen van de status van de internet-verbinding.
- Lijn 108 maakt gebruik van de functie van "turn_all_off" alle de lampen uitschakelen.
- Lijn 109 maakt gebruik van de "lamp_test"-functie te knipperen de lampen in de reeks vijf keer.
- Lijn 110 wacht op een halve seconde.
- Lijn 111 maakt gebruik van de functie van "lamp_amber_on" de amber lamp inschakelen.
Lijnen 113-126 is de hoofdlus die gepingd sites, Hiermee schakelt u de juiste lamp op basis van de herhalingen, de pings en wacht totdat de afsluiten-schakelaar is ingedrukt of stroom is uitgeschakeld.
- Regel 114 wordt het aantal proeven uitgevoerd op nul.
- Regel 115 creëert een lus wordt uitgevoerd totdat de afsluiten-schakelaar is ingedrukt of stroom is uitgeschakeld.
- Lijn 116 toegevoegd aantal tests uitvoeren.
- Lijn 117 drukt een debugging bericht weergegeven dat aangeeft dat een test begint.
- Lijn 118 roept de functie van de "ping_sites" opgeven van de lijst van sites om te testen, de vertraging tussen pings, en het aantal pings te doen.
- Lijnen 119 en 120 controleren om te zien of het percentage van geslaagde tests nul waren en, zo ja, de "lamp_red_on"-functie gebruiken om te schakelen de rode lamp.
- Lijnen 121 en 122 controleren om te zien of het percentage van geslaagde tests kleiner dan of gelijk aan 50 was % en, zo ja, de "lamp_amber_on"-functie gebruiken om te schakelen de amber lamp.
- Lijnen 123 en 124 worden uitgevoerd als het percentage van geslaagde tests tussen 51% en 100 werden % en de "lamp_green_on" gebruiken om te schakelen de groene lamp.
- Lijn 125 drukt een debugging bericht weergegeven dat aangeeft dat het programma met het opgegeven aantal seconden wacht voordat de volgende test worden uitgevoerd.
- Lijn 126 maakt gebruik van de functie van "time.sleep" systeem te wachten op het opgegeven aantal seconden. Na afloop van de vertraging, gaat het programma terug tot de lijn 116.
RPI-halt toe te roepen-btn.py
Het tweede programma "rpi-halt toe te roepen-btn.py" wordt gestart tijdens het opstarten door de opdracht
python /home/pi/python_programs/rpi-halt-btn.py&
in het systeembestand "/ etc/rc.local". De "&" toe aan het einde van de opdracht wordt het programma uitvoeren als een afzonderlijk proces dat draaien blijft totdat het programma wordt afgesloten.
Aanbieding 6 bevat de broncode voor de rpi-halt toe te roepen-btn.py-programma:
Lijnen 2-13 initialiseren het programma.
- Lijnen 2-3 importeren de bibliotheken die nodig zijn voor het bedienen van de apparaten aangesloten op de GPIO pinnen, kwestie systeemopdrachten, kan het programma om te slapen.
- Lijnen 6-7 definiëren de pin die op de afsluiten-schakelaar toezien zal en de PIN-code waarmee de verlichting van de LED in de schakelaar.
- Lijn 8 wordt het "setmode"-functie uit de bibliotheek GPIO ingesteld wat nummering schema het programma zal gebruiken voor de GPIO pinnen.
- Lijn 9 wordt de "setup"-functie uit de bibliotheek GPIO ingesteld de GPIO pin voor het beheersen van de LED in de schakelaar om de pin van een uitgang.
- Lijn 10 wordt de "setup"-functie uit de bibliotheek GPIO de GPIO pin voor de controle van de switch voor persen als een input pin ingesteld.
- Lijn 11 functie "uitvoer" uit de GPIO-bibliotheek voor het verlichten van de LED in de schakelaar door de waarde van de pin op true.
- Lijn 13 wordt een bericht weergegeven dat aangeeft dat de switch nu wordt gecontroleerd afgedrukt.
Regel 18 maakt gebruik van de functie van "wait_for_edge" uit de GPIO bibliotheek tot het programma te wachten op de schakelaar ingedrukt worden.
19-21 lijnen worden gebruikt voor foutopsporing. Wanneer het programma wordt uitgevoerd vanaf de opdrachtregel en Ctrl/C wordt gedrukt op deze lijnen worden uitgevoerd.
- Lijn 20 wordt een bericht weergegeven dat aangeeft dat de gebruiker wordt gestopt afgedrukt.
- Lijn 21 maakt gebruik van de functie "cleanup" uit de GPIO bibliotheek om te stoppen met het toezicht op de GPIO pinnen.
Lijnen 22-26 uitgevoerd wanneer de schakeloptie afsluiten heeft gedrukt.
- Lijn 23-25 oorzaak de LED op de schakelaar kort uitschakelen zodat de feedback van de gebruikers dat de schakelaar is ingedrukt.
- Lijn 22 geeft een bericht weergegeven dat aangeeft dat de afsluiten-schakelaar is ingedrukt.
- Lijn 23 functie "uitvoer" van de GPIO bibliotheek uitschakelen van de LED.
- Lijn 24 veroorzaakt het programma om te slapen voor een halve seconde.
- Lijn 25 schakelt de LED weer in.
- Regel 26 wordt de functie van de "subprocess.call" het commando "sudo halt toe te roepen" waardoor de Raspberry Pi aan sluiting.
Toen de Raspberry Pi heeft zal afsluiten de LED op de schakelaar afsluiten uitschakelt met vermelding van dat het is veilig om de stekker uit de camera uit het stopcontact.