Raspberry Pi Internet Monitor (25 / 25 stap)

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.

Gerelateerde Artikelen

Raspberry Pi Internet weerstation

Raspberry Pi Internet weerstation

Dit Instructable zal u tonen hoe te bouwen van een echt cool Raspberry Pi Internet gebaseerde weerstation. Eigenlijk, bel deze build een "weerstation" is een beetje een onder verklaring. Deze build kan eenvoudig worden uitgebreid om veel meer da
ESP8266 + Raspberry Pi elektriciteit Monitor

ESP8266 + Raspberry Pi elektriciteit Monitor

Ik heb altijd mijn utility meter in de ouderwetse manier volgen. Eerst schreef ik ze neer in een kleine grootboek (yep, ik ben zo oud), ik schreef later een werkblad voor it en de laatste jaren ben ik met behulp van de ECAS smartphone app te doen de
Raspberry Pi zonder Monitor of toetsenbord Setup

Raspberry Pi zonder Monitor of toetsenbord Setup

NOOBS vereist een monitor, toetsenbord en muis, die voegt ~ 60 dollar (USD) of meer in kosten. Echter zodra Wi-Fi werkt, zijn deze apparaten niet langer nodig.Elke keer als ik start een nieuw project van de Raspberry Pi, ik sjouwen uit de monitor, he
Raspberry Pi huisdier Monitor

Raspberry Pi huisdier Monitor

Dit Instructable begeleidt u bij de installatie van een (meestal) headless Raspberry Pi gebaseerd huisdier monitor. Deze pet monitor waarschuwt u wanneer uw huisdier luidruchtig wordt door een Pushbullet-bericht te sturen. Ook, als u wilt, kunt u spr
Roberts 747 - DIY Raspberry Pi internet radio/streamer

Roberts 747 - DIY Raspberry Pi internet radio/streamer

Roberts 747, grote radio uit 1990. Volledig werken in zeer goede staat. Vond het antieke uitverkoop na een lange speurtocht naar iets als dit.Ik heb een reserve Raspberry Pi model B V1 huis als een reserve en het was gewoon stof te vangen enkele jare
Lokale internet proxy-instellingen toevoegen aan Raspberry pi

Lokale internet proxy-instellingen toevoegen aan Raspberry pi

In deze tutorial ga ik je vertellen hoe verbinding met het internet via proxy. Waarom ik ben geïnteresseerd in dit is omdat de meeste hogescholen heeft internet verbinding via lokale ethernet en ethernet heeft het is eigen proxy-instellingen en gebru
Bouwen van robots met Raspberry Pi en Python

Bouwen van robots met Raspberry Pi en Python

het doel van deze tutorial is zodat u kunt beginnen met programmeren met Python om te controleren uw robots van de Arduino met een Raspberry PI. We gaan over de basics zoals installatie en enkele eenvoudige voorbeelden om te controleren uw robot van
Raspberry Pi - VNC & SSH

Raspberry Pi - VNC & SSH

Vandaag, ga ik u tonen hoe te gebruiken Raspberry Pi bestuur zonder gebruik te maken van een HDMI-monitor. Dit wordt over het algemeen genoemd als SSH toegang tot Raspberry Pi zonder gebruik te maken van HDMI-sleuf te zien het bureaublad van de Raspb
Zet uw Raspberry Pi in een Retro Arcade

Zet uw Raspberry Pi in een Retro Arcade

de Raspberry Pi is een verbazingwekkende miniatuur-computer die perfect is voor het experimenteren met persoonlijke projecten, maar soms de grootste uitdaging is het kiezen van een project. Met dit makkelijk te volgen gids ik zal u tonen hoe deze kle
Raspberry Pi orkestratie

Raspberry Pi orkestratie

In dit Instructable zou ik graag mijn persoonlijke werk-stroom voor het werken met headless Raspberry Pi.Als u geïnteresseerd bent in het automatiseren van de installatie en implementatie voor een Pi of dit veel de post voor u is.Alle code is beschik
Raspberry PI 007 "James vet" Hackbox

Raspberry PI 007 "James vet" Hackbox

Olá een todos. Esta é een minha primeira postagem aqui geen Instructables. O objetivo desta postagem não é exatamente ensinar een montar uma maleta igual een minha, mas sim sugerir uma alternativa para que todos possam modificar e incrementar o proje
Display met behulp van de Arduino en Raspberry Pi weer

Display met behulp van de Arduino en Raspberry Pi weer

Dit project is weer display systeem met behulp van 16 * 2 LCD-arduino, raspberry pi, internetDit bouwproject is zeer eenvoudig behoefte zeer minder vergaderingHet was het weer in een ware in wereld op 16 * 2 worden weergegeven, kunt u wat u wilt weer
Raspberry Pi micro SD kaarten

Raspberry Pi micro SD kaarten

Benchmark microSD-kaarten gebruikt in mijn Raspberry Pi-projecten.Ik benchmarks uitgevoerd op de Raspberry Pi, in plaats van op een laptop.De Raspberry Pi Forum Moderator schreef: "het is vermeldenswaard dat het gebruik patroon voor een Pi drastisch
Garage deuropener

Garage deuropener

Gebruik een Raspberry Pi en een smartphone (of laptop) om te openen, sluiten en bewaken van een garagedeur. Openen en sluiten van de deur veilig met behulp van zelf-ondertekende certificaten geïnstalleerd op familieleden mobiele telefoons maken Als d