#!/bin/python # Testovano na Python 2.7 na RPi zero # Vycitani impulzu z elektromeru pres rozhrani S0 do # RPi zero a nasledne odeslani na TMEP.cz # # Vycitame hodnotu impulzy a delime poctem impulzu na kWh # podle pouziteho elektromeru # # Pokud po vycteni impulzu uplynulo vice nez X minut od posledniho # odeslani na server, tak posleme # Nastaveni: domena = str("spotreba.tmep.cz") prepocetImpulzuNakWh = float(800) pinNaRPI = int(23) odeslatKazdychMinut = int(5) import time import RPi.GPIO as GPIO import requests GPIO.setmode(GPIO.BCM) GPIO.setup(pinNaRPI, GPIO.IN, pull_up_down = GPIO.PUD_DOWN) # INIT citacImpulzu = int(0) casOdeslani = time.time() # Vycitaci smycka while True: GPIO.wait_for_edge(pinNaRPI, GPIO.RISING) citacImpulzu += 1 print citacImpulzu/prepocetImpulzuNakWh, "kWh" GPIO.wait_for_edge(pinNaRPI, GPIO.FALLING) dobaOdOdeslani = time.time() - casOdeslani # Ubehl cas, kdy chceme odesilat na server? if dobaOdOdeslani > (odeslatKazdychMinut * 60): try: r = requests.get("http://" + domena + "/?kwh=" + str(citacImpulzu/prepocetImpulzuNakWh)) r.raise_for_status() if r.status_code == 200: citacImpulzu = 0 casOdeslani = time.time() print("Uspesne odeslano na " + domena) else: # Nepovedlo se odeslat? Priste to zkusime nejdriv za minutu casOdeslani += 60 print("Nepodarilo se odeslat na " + domena + ", zkusim to znovu za minutu, info:") print "Status: ", r.status_code print "Headers: ", r.headers print "Content: ", r.content except requests.exceptions.RequestException as err: print ("OOps: Something Else",err) casOdeslani += 60 except requests.exceptions.HTTPError as errh: print ("Http Error:",errh) casOdeslani += 60 except requests.exceptions.ConnectionError as errc: print ("Error Connecting:",errc) casOdeslani += 60 except requests.exceptions.Timeout as errt: print ("Timeout Error:",errt) casOdeslani += 60 GPIO.cleanup()