Python Key error

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • klump4u
  • Registratie: Februari 2008
  • Niet online

klump4u

Gasloos in Zuid-Limburg

Topicstarter
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,
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&param=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🔋

Beste antwoord (via klump4u op 09-12-2023 20:46)


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 19:40
Assumption is the mother of all... Meten is weten. Simpele log regel toevoegen met de inhoud en je weet het zeker

[ Voor 53% gewijzigd door Webgnome op 09-12-2023 19:46 ]

Strava | AP | IP | AW

Alle reacties


Acties:
  • +1 Henk 'm!

  • Illusion
  • Registratie: November 2000
  • Nu online

Illusion

(the art of)

Je variable res heeft geen key met de naam ‘result’


Kijk eens in de faq bij de tips voor zelf debuggen: Softwareontwikkeling FAQ - Algemeen

Soms ben ik er wel, en soms ook weer niet.


Acties:
  • 0 Henk 'm!

  • klump4u
  • Registratie: Februari 2008
  • Niet online

klump4u

Gasloos in Zuid-Limburg

Topicstarter
Illusion schreef op zaterdag 9 december 2023 @ 18:06:
Je variable res heeft geen key met de naam ‘result’


Kijk eens in de faq bij de tips voor zelf debuggen: Softwareontwikkeling FAQ - Algemeen
Ik heb dat doorgelezen maar kom er niet wijs uit, ik snap niet dat de andere scripts wel werken en deze niet.
Geef ik in de code een beginwaarde door dan krijg ik geen melding en wordt die waarde netjes geupload naar domoticz, haal ik dan de # weg voor de betreffende regel dan krijg ik weer die foutmelding

18950Wp🌞, Atlantic 270V3💧, Pana 5J🔥. Zendure 7,6🔋


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:50

Creepy

Tactical Espionage Splatterer

Je res variable bestaat daar nog helemaal niet. Waar had die res variabele vandaan moeten komen?
Of wel, want scope en Python.. affijn. Dus of dat of res bevat gewoon niet wat je denkt, wat illusion ook al zegt.

[ Voor 39% gewijzigd door Creepy op 09-12-2023 19:36 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 19:40
@klump4u wat is de inhoud van 'res'?

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • klump4u
  • Registratie: Februari 2008
  • Niet online

klump4u

Gasloos in Zuid-Limburg

Topicstarter
Ik neem aan de stand van de counter.

18950Wp🌞, Atlantic 270V3💧, Pana 5J🔥. Zendure 7,6🔋


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 19:40
Assumption is the mother of all... Meten is weten. Simpele log regel toevoegen met de inhoud en je weet het zeker

[ Voor 53% gewijzigd door Webgnome op 09-12-2023 19:46 ]

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • klump4u
  • Registratie: Februari 2008
  • Niet online

klump4u

Gasloos in Zuid-Limburg

Topicstarter
Ik heb alles verwijdert, pi opnieuw gereboot en toen weer script toegevoegd en nu doet hij het.
Ik maar een beginner en moet het vaak hebben van knippen en plakken maar ik kan weer vooruit.
Ooit zal dit ook nog eens naar python3 moeten.

18950Wp🌞, Atlantic 270V3💧, Pana 5J🔥. Zendure 7,6🔋

Pagina: 1