Ik draai op een raspberri pi 4 maal het onderstaande python script, allemaal op een andere gpio pin.
Nu wil ik dit scipt nogmaals erbij doen op een andere pin en krijg ik steeds de volgende foutmelding,
Wat gaat nu fout?
Nu wil ik dit scipt nogmaals erbij doen op een andere pin en krijg ik steeds de volgende foutmelding,
code:
1
2
3
4
5
6
| Traceback (most recent call last): File "kwhP.py", line 94, in <module> main() File "kwhP.py", line 55, in main ELEC_COUNTER = int(float(res['result'][0]['Data'][:-4]) * 1000) KeyError: 'result' |
Wat gaat nu fout?
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
| #!/usr/bin/env python import time import json import urllib2 import threading import logging import logging.handlers import os from gpiozero import DigitalInputDevice GET_URL = 'http://192.168.0.20:8080/json.htm?type=devices&rid=%d' SET_URL = 'http://192.168.0.20:8080/json.htm?type=command¶m=udevice&idx=%d&svalue=%d' ELEC_DELTA = 0 ELEC_IDX = 83 ELEC_GPIO = 27 ELEC_COUNTER_LOCK = threading.Lock() ELEC_LAST_TIME = 0 ELEC_POST_TIME = 0 def elec_intr(): tme = time.time() global ELEC_DELTA global ELEC_LAST_TIME global ELEC_POST_TIME with ELEC_COUNTER_LOCK: ELEC_LAST_TIME = tme if ELEC_POST_TIME == 0: ELEC_POST_TIME = ELEC_LAST_TIME else: ELEC_DELTA += 0.5 logging.debug( 'Electricity counter tick: %d' % ELEC_DELTA ) def main(): global ELEC_DELTA global ELEC_LAST_TIME global ELEC_POST_TIME global ELEC_COUNTER syslog = logging.handlers.SysLogHandler(address='/dev/log', facility='local1') syslog.setFormatter(logging.Formatter('local_sensors.py: %(levelname)s %(message)s')) logging.getLogger().addHandler(syslog) logging.getLogger().setLevel(logging.INFO) while True: try: res = json.load(urllib2.urlopen(GET_URL % ELEC_IDX)) if res['status'] != 'OK': raise Exception('Domoticz json error') break except Exception as e: logging.warning( e ) time.sleep(30.0) ELEC_COUNTER = int(float(res['result'][0]['Data'][:-4]) * 1000) # ELEC_COUNTER = <Your initial count here * 1000, don't forget to remove after Domoticz updated!> logging.info( 'Current electricity counter is: %d' % ELEC_COUNTER ) elecSensor = DigitalInputDevice(ELEC_GPIO, pull_up=True) elecSensor.when_deactivated = elec_intr os.nice(-20) logging.info('Polling loop starting') while True: time.sleep(60) with ELEC_COUNTER_LOCK: if ELEC_LAST_TIME > ELEC_POST_TIME: ELEC_LOAD = ELEC_DELTA * 3600 / ( ELEC_LAST_TIME - ELEC_POST_TIME ) else: ELEC_LOAD = 0 ELEC_COUNTER += ELEC_DELTA ELEC_DELTA = 0 ELEC_POST_TIME = ELEC_LAST_TIME ELEC_ZERO = 0 if ELEC_LOAD != 0: res = json.load(urllib2.urlopen((SET_URL+';%d') % (ELEC_IDX, int(ELEC_LOAD), ELEC_COUNTER))) if res['status'] != 'OK': raise Exception('Domoticz json error') logging.info('Elec load %.2f counter %d' % (ELEC_LOAD, ELEC_COUNTER) ) if ELEC_LOAD == 0: res = json.load(urllib2.urlopen((SET_URL+';%d') % (ELEC_IDX, int(ELEC_LOAD), ELEC_COUNTER))) if res['status'] != 'OK': raise Exception('Domoticz json error') logging.info('Elec load %.2f counter %d' % (ELEC_LOAD, ELEC_COUNTER) ) if __name__=="__main__": main( |
18950Wp🌞, Atlantic 270V3💧, Pana 5J🔥. Zendure 7,6🔋