Ankündigung

Einklappen
Keine Ankündigung bisher.

Stromzähler: Umrechnungen (Durchschnitt über historische Werte)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • henfri
    antwortet
    1) klappt
    2) wird gemacht.

    Danke!

    Aber hier brauche ich nochmal Hilfe:
    Code:
    [Allgemein]
        name = Allgemein
        [[Stromzaehler]]
            [[[Counter]]]
                name = Counter
                type = num
                sqlite = yes
                knx_dpt = 12
                knx_send = 6/7/0
                knx_listen = 6/7/0
            [[[Zaehlerstand]]]
                name = Zaehlerstand
                type = num
                sqlite = yes
                knx_dpt = 14
                knx_send = 6/7/1
                eval = sh.Allgemein.Stromzaehler.Counter()/800.0
                eval_trigger = Allgemein.Stromzaehler.Counter
            [[[Momentanleistung_1min]]]
                name = Momentanleistung_1min
                type = num
                sqlite = yes
                knx_dpt = 14
                knx_send = 6/7/2
    #           eval = sh.Allgemein.Stromzaehler.Zaehlerstand()
                eval = sh.Allgemein.Stromzaehler.Zaehlerstand.db('avg', '2i', '1i')
    Die letzte Zeile mag er nicht.
    Das Sqlite Plugin scheint aber aktiv:
    Code:
    2013-07-12 17:27:16,488 SmartHome.py DEBUG    sqlite next time: 2013-07-13 03:02:00+02:00 -- scheduler.py:_next_time:238
    Dennoch gibt es einen Parse-Error in der letzten Zeile.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • Robert
    antwortet
    1. Python anweisen mit float zu teilen: /800.0
    2. mit Python auseinandersetzen - sonst wird das hier beliebig schmerzhaft

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    ja, so habe ich das auch verstanden:
    Code:
            [[[Zaehlerstand]]]
                name = Zaehlerstand
                type = num
                sqlite = yes
                knx_dpt = 13
                knx_send = 6/7/1
                eval = sh.Allgemein.Stromzaehler.Counter()/800
                eval_trigger = Allgemein.Stromzaehler.Counter
    Dadurch habe ich jetzt im log einmal:

    Code:
    2013-07-11 19:35:43.177,A_GroupValue_Write,0.0.0,6/7/1,00 00 00 1D,,,,0,low,7,T_DATA_XXX_REQ,0
    Die ETS hat daraus irgenwasE-44 gemacht..

    Aber danach wurde noch mehrmals getriggert, aber nix gesendet:
    Code:
    2013-07-11 20:00:14,413 SmartHome.py DEBUG    Allgemein.Stromzaehler.Counter = 24020 via KNX 1.0.5 -- item.py:_update:219
    2013-07-11 20:00:14,662 SmartHome.py DEBUG    Triggering Allgemein.Stromzaehler.Zaehlerstand - by: KNX source: 1.0.5 dest: 6/7/0 value: {'source': 'Allgemein.Stromzaehler.Count -- scheduler.py:trigger:117
    2013-07-11 20:00:18,720 SmartHome.py DEBUG    Allgemein.Stromzaehler.Counter = 24021 via KNX 1.0.5 -- item.py:_update:219
    2013-07-11 20:00:18,898 SmartHome.py DEBUG    Triggering Allgemein.Stromzaehler.Zaehlerstand - by: KNX source: 1.0.5 dest: 6/7/0 value: {'source': 'Allgemein.Stromzaeh
    Wird vielleicht nur gesendet, wenn der Wert wieder durch 800 teilbar ist?

    Edit: Ja, ich habe jetzt mal durch 8, statt durch 800 geteilt und so wird häufiger aktualisiert.
    Ich habe mittlerweile den DPT auf 14 gesetzt. Das sollte ja ein Gleitkomma Wert sein.

    Code:
    cat /usr/local/smarthome/items/allgemein.conf
    [Allgemein]
        name = Allgemein
        [[Stromzaehler]]
            [[[Counter]]]
                name = Counter
                type = num
                sqlite = yes
                knx_dpt = 12
                knx_send = 6/7/0
                knx_listen = 6/7/0
            [[[Zaehlerstand]]]
                name = Zaehlerstand
                type = num
                sqlite = yes
                knx_dpt = 14
                knx_send = 6/7/1
                eval = sh.Allgemein.Stromzaehler.Counter()/8
                eval_trigger = Allgemein.Stromzaehler.Counter
    Es kommen allerdings immer nur ganzzahlige Werte.
    In der ETS habe ich die GA 6/7/1 mit einer Dummyapplikation (Gira) verknüpft und auch den DPT 14 vergeben.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    mea culpa

    Nur zum Verständnis, bräuchte man nicht beim eval dann ein itemname.subname() um an den aktuelllen Wert zu kommen?

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Ah, ok.

    War für mich nicht intuitiv.

    Danke!

    Einen Kommentar schreiben:


  • Robert
    antwortet
    Ganz einfach:

    eval_trigger: OHNE "sh." - da diese Angabe durch einen gesonderten Parser beim Starten entsprechend behandelt wird (genau wie "watch_item").
    eval: MIT "sh." da der gesamte String einem "eval" zum Fraß vorgeworfen wird - halt alles genau so wie in der Doku.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    danke für den Tipp.
    Leider funktioniert es noch nicht.
    Er meckert bei der letzten Zeile. Aber lassen wir die mal weg, dann können wir das durch 800 teilen testen. Klappt aber auch nicht:
    Code:
    2013-07-11 19:01:20,659 SmartHome.py DEBUG    Triggering Allgemein.Stromzaehler.Zaehlerstand - by: Init source: None dest: None value: None -- scheduler.py:trigger:117
    2013-07-11 19:01:20,687 Allgemein.Stromzaehler.Zaehlerstand WARNING  Method Allgemein.Stromzaehler.Zaehlerstand exception: name 'Allgemein' is not defined -- scheduler.py:_task:295
    Was soll das heißen? Allgemein ist ganz offensichtlich definiert, siehe die Zeile darüber.

    Zu meinem vorherigen Fehler noch eine Frage:
    Aus der Doku:
    Code:
    # items/room.conf
    [room]
        [[temp]]
            type = num
        [[hum]]
            type = num
        [[dew]]
            type = num
            eval = sh.tools.dewpoint(sh.room.temp(), sh.room.hum())
            eval_trigger = room.temp, room.hum  # every change of temp or hum would trigger the evaluation of dew.
    warum heisst es einmal sh.room.temp() und einmal nur room.temp?


    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    1. Das "sh." bei den evals entfernen.
    2. Vernünftig formatieren

    Code:
    [Allgemein]
    	name = Allgemein
    	[[Stromzaehler]]
    		[[[Counter]]]
    			name = Counter
    			type = num
    			sqlite = yes
    			knx_dpt = 13
    			knx_send = 6/7/0
    			knx_listen = 6/7/0
    		[[[Zaehlerstand]]]
    			name = Zaehlerstand
    			type = num
    			sqlite = yes
    			knx_dpt = 13
    			knx_send = 6/7/1
    			eval = Allgemein.Stromzaehler.Counter/800
    			eval_trigger = Allgemein.Stromzaehler.Counter
    		[[[Momentanleistung_1min]]]
    			name = Momentanleistung_1min
    			type = num
    			sqlite = yes
    			knx_dpt = 13
    			knx_send = 6/7/2
    			eval = (Allgemein.Stromzaehler.Zaehlerstand)-(Allgemein.Stromzaehler.Zaehlerstand.db('avg', '2w', '1w'))
    Nun nochmal versuchen ... wobei ich keinen Plan habe wie das sql-Plugin arbeitet.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    ich habe mich jetzt noch einmal daran gemacht. Ich bin so weit:
    Code:
    ./items/allgemein.conf
    [Allgemein]
        name = Allgemein
        [[Stromzaehler]]
            [[[Counter]]]
            name = Counter
            type = num
            sqlite = yes
            knx_dpt=13
    #        knx_send=6/7/0
            knx_listen=6/7/0
            [[[Zaehlerstand]]]
            name = Zaehlerstand
            type = num
            sqlite = yes
            knx_dpt=13
            knx_send=6/7/1
            eval=sh.Allgemein.Stromzaehler.Counter/800
            eval_trigger=sh.Allgemein.Stromzaehler.Counter
            [[[Momentanleistung_1min]]]
            name = Mommentanleistung_1min
            type = num
            sqlite = yes
            knx_dpt=13
            knx_send=6/7/2
           eval=sh.Allgemein.Stromzaehler.Zaehlerstand-sh.Allgemein.Stromzaehler.Zaehlerstand.db('avg', '2w', '1w')
    Dabei habe ich zwei Probleme:
    -sh.Allgemein.Stromzaehler.Zaehlerstand wird nicht gesetzt. Ich sehe nix im Log dazu und per Gruppenmonitor kann ich es nicht lesen.
    -wenn ich die letzte Zeile nicht auskommentiere, dann bekomme ich eine Fehlermeldung (parse-error in dieser Zeile).

    Das Sqlite Plugin scheint aber aktiv zu sein:
    Code:
     DEBUG    sqlite next time: 2013-07-11 03:02:00+02:00 -- scheduler.py:_next_time:238
    Habe ich etwas falsch verstanden?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Ok.

    Was auch noch fehlen würde ist den Wert eines bestimmten Zeitpunkt zu bekommen.

    Momentan mache ich ja:
    Code:
    sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i')-sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i', '2i')
    Heute ginge auch:
    Code:
    sh.Allgemein.Stromzaehler.Zaehlerstand.value-sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i', '2i')
    aber mit dem ('max', '1i', '2i') will ich ja eigentlich nicht den maximalen Wert von vor 2min haben, sondern den Wert von vor Zwei Min.

    Also wäre etwas wie
    Code:
    sh.Allgemein.Stromzaehler.Zaehlerstand.db('value', '-2i')
    oder
    Code:
    sh.Allgemein.Stromzaehler.Zaehlerstand.db('value', '1981/12/24 18:00:00')
    nützlich, oder?

    Für mein jetziges Problem ist der Ansatz mit den Differenzen aber richtig, oder?
    Die Syntax mit eval&co ist auch richtig?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • 2ndsky
    antwortet
    Derzeit gibt es IMHO keine db Funktion dafür. Wäre aber durchaus sinnvoll für Zählerstände im allgemeinen (z.B. auch Wasserzähler) um z.B. auch den Verbrauch einer Woche festzustellen und mit letztem Jahr vergleichen zu können.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hm. Kann keiner was dazu sagen?

    Muss ich die Differenzen nun selbst bilden, oder macht die db-Funktion das?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    danke für eure Tipps.



    Zitat von Apollo Beitrag anzeigen
    Ja, da genügt es, wenn zum einem beliebiegen Zeitpunkt (je nach dem wann der Aktor sendet) einfach der Zählerstand "geloggt" wird.

    Die Umrechnung auf die Zeitintervalle erfolgt automatisch.
    Aber der Mittlere Zählerstand über eine Woche ist doch z.b. bei
    Heute =100
    Gestern=90

    95

    Was mich aber interessiert ist der Verbrauch in den letzten 24h, also 10.
    Woher weiss das Plugin, was ich mit "avg" meine?

    Ich hätte es jetzt so gemacht:

    Code:
    cat /usr/local/smarthome/items/allgemein.conf
    [Allgemein]
        name = Allgemein
        [[Stromzaehler]]
            [[[Counter]]]
            name = Counter
            type = num
            sqlite = yes
            knx_dpt=13001
    #        knx_send=6/7/0
            knx_listen=6/7/0
            [[[Zaehlerstand]]]
            name = Zaehlerstand
            type = num
            sqlite = yes
            knx_dpt=13010
            knx_send=6/7/1
            eval=sh.Allgemein.Stromzaehler.Counter/800
            eval_trigger=sh.Allgemein.Stromzaehler.Counter
            [[[Momentanleistung_1min]]]
            name = Mommentanleistung_1min
            type = num
            sqlite = yes
            knx_dpt=13010
            knx_send=6/7/2
            eval=sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i')-sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i', '2i')
            cycle=60
    
            [[[Momentanleistung_5min]]]
            name = Mommentanleistung_5min
            type = num
            sqlite = yes
            knx_dpt=13010
            knx_send=6/7/3
            eval=sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i')-sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i', '5i')
            cycle=60
    
            [[[VerbrauchWoche]]]
            name = VerbrauchWoche
            type = num
            sqlite = yes
            knx_dpt=13010
            knx_send=6/7/4
            eval=sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i')-sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i', '1w')
            crontab=0:00
    
            [[[VerbrauchMonat]]]
            name = VerbrauchMonat
            type = num
            sqlite = yes
            knx_dpt=13010
            knx_send=6/7/5
            eval=sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i')-sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i', '1m')
            crontab=0:00
    
            [[[VerbrauchJahr]]]
            name = VerbrauchJahr
            type = num
            sqlite = yes
            knx_dpt=13010
            knx_send=6/7/6
            eval=sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i')-sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i', '1y')
            crontab=0:00
    Ist das falsch?

    Mit sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i') hole ich mir den letzten Wert (ein "last" gibt es ja nicht... Aber mir fällt gerade ein dass da ich da das .db() weglassen kann, oder?! Da hätte ich drauf kommen können.

    Aber das Bilden einer Differenz aus jetzt und "vor einiger Zeit", also das -sh.Allgemein.Stromzaehler.Zaehlerstand.db('max', '1i', '1y') ist nötig, oder?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • Apollo
    antwortet
    Ja, da genügt es, wenn zum einem beliebiegen Zeitpunkt (je nach dem wann der Aktor sendet) einfach der Zählerstand "geloggt" wird.

    Die Umrechnung auf die Zeitintervalle erfolgt automatisch.

    Gruss

    Einen Kommentar schreiben:


  • 2ndsky
    antwortet
    Stromzähler: Umrechnungen (Durchschnitt über historische Werte)

    Schau dir mal das sqlite Plugin an, das bietet entsprechend dekorierten Items zusätzliche Methoden wie z.B. avg (= average) bei dem du dann einen Zeitbereich angeben kannst.

    Einen Kommentar schreiben:

Lädt...
X