Even getwijfeld om dit te posten in het domoticz-topic, maar denk dat het hier meer op zijn plaats is.
Ik heb al sinds 2016 nadat er een nieuwe meter bij mij geplaatst is een script lopen die elke maand de standen uitleest en deze in een bestand wegschrijft.
Echter sinds deze maand werkt dit niet meer, of dit nu gekomen is na een update of iets anders kan ik helaas niet duidelijk achterhalen.
Kan iemand mij wellicht op weg helpen om het euvel te achterhalen.
Ik kom er niet achter wat er mis gaat.
Foutmelding:
File "/home/scripts/meterstanden_maandelijks.py", line 79
print "-- DOMOTICZ ENERGIE--"
Dit bleek zojuist achteraf makkelijk op te lossen, wat de oplossing stond erbij
Maar het script blijft vastlopen.
Wellicht komt dit doordat ik nu Python 3.9.2 draai en het script niet geüpgraded is.
De foutmelding die ik nu krijg is het volgende:
Traceback (most recent call last):
File "/home/mick/scripts/meterstanden_maandelijks.py", line 74, in <module>
ElectricityRateUsedPeak, ElectricityRateUsedOffPeak, ElectricityRateGeneratedPeak, ElectricityRateGeneratedOffPeak, ElectricityTotalUsed, ElectricityCurrentRateOut = get_el_values(domoticzurl, domoticzdeviceid_el)
File "/home/mick/scripts/meterstanden_maandelijks.py", line 40, in get_el_values
device_data = Domoticz(url).get_device(device_id)
File "/home/mick/scripts/meterstanden_maandelijks.py", line 31, in get_device
data = json.load(self.__execute__(url))
File "/home/mick/scripts/meterstanden_maandelijks.py", line 23, in __execute__
req = urllib2.Request(url)
NameError: name 'urllib2' is not defined
Hieronder mijn script die ik reeds jaren gebruik om mijn meterstanden uit te lezen.
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
| import sys
import json
import urllib2
import re
import time
import datetime
import httplib, urllib
def open_port():
pass
def close_port():
pass
class Domoticz():
def __init__(self, url):
self.baseurl = url
def __execute__(self, url):
req = urllib2.Request(url)
return urllib2.urlopen(req, timeout=5)
def get_device(self, xid):
"""
Get the Domoticz device information.
"""
url = "%s/json.htm?type=devices&rid=%s" % (self.baseurl, xid)
data = json.load(self.__execute__(url))
return data
def get_el_values(url, device_id):
"""
Get electricity meter readings.
"""
device_data = Domoticz(url).get_device(device_id)
data = device_data['result'][0]['Data']
ex = re.compile('^([0-9\.]+);([0-9\.]+);([0-9\.]+);([0-9\.]+);([0-9\.]+);([0-9\.]+)$')
groups = ex.match(data).group
meter_high = float(groups(1)) / 1000
meter_low = float(groups(2)) / 1000
out_high = float(groups(3)) / 1000
out_low = float(groups(4)) / 1000
actual_in = float(groups(5)) / 1000
actual_out = float(groups(6)) / 1000
return meter_high, meter_low, out_high, out_low, actual_in, actual_out
def get_gas_values(url, device_id):
"""
Get gasmeter reading.
"""
device_data = Domoticz(url).get_device(device_id)
data = device_data['result'][0]['Data']
ex = re.compile('^([0-9\.]+)$')
groups = ex.match(data).group
gasstand = float(groups(1)) #/ 1000
return gasstand
# example usage
domoticzurl = "http://192.168.1.120:8080"
domoticzdeviceid_el = 1
domoticzdeviceid_gas = 2
ElectricityRateUsedPeak, ElectricityRateUsedOffPeak, ElectricityRateGeneratedPeak, ElectricityRateGeneratedOffPeak, ElectricityTotalUsed, ElectricityCurrentRateOut = get_el_values(domoticzurl, domoticzdeviceid_el)
#ElectricityRateUsedOffPeak, ElectricityRateUsedPeak, ElectricityRateGeneratedPeak = get_el_values(domoticzurl, domoticzdeviceid_el)
GasMeterReading = get_gas_values(domoticzurl, domoticzdeviceid_gas)
print ("-- DOMOTICZ ENERGIE--")
print ("Meterstand piektarief (hoog):\t\t"+str(ElectricityRateUsedOffPeak)+"\tkWh")
print ("Meterstand daltarief (laag):\t\t"+str(ElectricityRateUsedPeak)+"\tkWh")
print ("Totaal:\t\t\t\t\t"+str(ElectricityRateUsedPeak + ElectricityRateUsedOffPeak)+"\tkWh")
print ("")
print ("- Teruggeleverd")
print ("Piektarief:\t\t\t\t"+str(ElectricityRateGeneratedOffPeak)+"\tkWh")
print ("Daltarief:\t\t\t\t"+str(ElectricityRateGeneratedPeak)+"\t\tkWh")
print ("")
print ("Gasmeterstand:\t\t\t\t"+str(GasMeterReading)+"\tm3")
print ("")
print ("Huidig verbruik:\t\t\t"+str(ElectricityTotalUsed))
# creeer een bestand met de waarde / create a file with the readings
name = '/home/mick/verbruik_maandelijks.txt' # Naam tekstbestand / Name of text file
now = datetime.datetime.now()
try:
file = open(name,'a') # create file / creeer bestand
# write the readings to the file / schrijf de waarde naar het bestand
#file.write('Meterstanden op ' + str(now.strftime("%Y-%m-%d %H:%M")) + ' waren als volgt: \n' 'Elektra laagtarief: ' +str(ElectricityRateUsedPeak) + '\n' 'Elektra hoogtarief: ' +str(ElectricityRateUsedOffPeak) + '\n' 'Gasmeter: ' +str(GasMeterReading) + '\n\n')
file.write('Meterstanden op ' + str(now.strftime("%d-%m-%Y %H:%M")) + ' waren als volgt: \n\n' 'Verbruikt:' + '\n\n' 'Elektra Hoogtarief: ' +str(ElectricityRateUsedOffPeak) + '\n' 'Elektra Laagtarief: ' +str(ElectricityRateUsedPeak) + '\n\n' 'Teruggeleverd:' + '\n\n' 'Elektra Hoogtarief: ' +str(ElectricityRateGeneratedOffPeak) + '\n' 'Elektra Laagtarief: ' +str(ElectricityRateGeneratedPeak) + '\n\n' 'Gasmeter: ' +str(GasMeterReading) + '\n\n' )
# close the file / sluit het bestand (vergelijkbaar met het 'save' en daarna 'close' commando in word)
#file.close()
except: # something went wrong / in het vorige blok is iets niet goed gegaan (error)
print('Something went wrong!')
sys.exit(0) # quit if something goes wrong Python / stop als er iets mis is gegaan |