Berechnung von userReadings

Begonnen von maxritti, 31 Juli 2014, 19:39:55

Vorheriges Thema - Nächstes Thema

maxritti

Hallo zusammen,

eventuell kann mir einer das Brett vor dem Kopf wegnehmen?

Ich habe mir ein kleines Modul geschrieben, wo ich jede Minute den aktuellen Ertrag meiner Solaranlage abfrage.
Klappt auch wunderbar.
Allerdings ist nun bei unterschiedlichem Wetter die Ertragskurve rechts "zerpflückt".  Siehe Bild.

Da dachte ich mir, kann doch nicht so schwer sein. Summiere ich doch die letzten 3 Werte auf und teile die durch drei. Das sollte dann mathematisch eine Glättung 3. Ordnung oder so sein. Bin da nicht ganz so bewandert, sollte aber den Zweck erfüllen. :)

Also die UserReadings meines Devices so definiert:

Helper:
     Dblog:
       Pac:
         Mydblog:
           TIME       1406826982.13462
           VALUE      443
       Pac_cons:
         Mydblog:
           TIME       1406826982.13462
           VALUE      2517
       Pdc:
         Mydblog:
           TIME       1406826982.13462
           VALUE      491
       Va1:
         Mydblog:
           TIME       1406826982.13462
           VALUE      435
       Va2:
         Mydblog:
           TIME       1406826982.13462
           VALUE      435
       Va3:
         Mydblog:
           TIME       1406826982.13462
           VALUE      443
       Vaglatt:
         Mydblog:
           TIME       1406826982.13462
           VALUE      437.666666666667
   Readings:
     2014-07-31 19:16:21   Pac             443
     2014-07-31 19:16:21   Pac_cons        2517
     2014-07-31 19:16:21   Pdc             491
     2014-07-31 19:16:21   va1             435
     2014-07-31 19:16:21   va2             435
     2014-07-31 19:16:21   va3             443
     2014-07-31 19:16:21   vaGlatt         437.666666666667
Attributes:
   register   3502,Pac,3504,Pdc,3518,Pac_cons
   userReadings va1 {ReadingsVal('mySL', 'va2', 0)}, va2 {ReadingsVal('mySL', 'va3', 0)}, va3 {ReadingsVal('mySL', 'Pac', 0)}, vaGlatt {(ReadingsVal('mySL', 'va1', 0) + ReadingsVal('mySL', 'va2', 0) + ReadingsVal('mySL', 'va3', 0)) / 3}

   
Nur irgendwie ist va1 und va2 immer der gleiche Werte. Wobei die Werte eigentlich durchgereicht werden sollten.

va1 bekommt den von v2
va2 bekommt den von v3
va3 kommt aus dem Reading Pac
und vaGlatt ist der "geglättete" Wert von va1, va2 und va3.

Ich gehe mal davon aus, dass das an der Auswertreihenfolge meiner Userreadings liegt.
   
Geht das so gar nicht, was ich mir da so schön ausgedacht hatte?
Wenn nicht, wie könnte ich das denn anstellen?
Per notify und dann eine Funktion aufrufen, die die Werte setzt, wäre wohl eine Möglichkeit, wobei mir das mit den userReadings ganz gut gefallen würde, wenn es funktionieren würde. ;-)

Puschel74

Hallo,

ist mir grad aufgefallen (aber ich kann auch total daneben liegen):
va1 {ReadingsVal('mySL', 'va2', 0)}, va2 {ReadingsVal('mySL', 'va3', 0)}, va3 {ReadingsVal('mySL', 'Pac', 0)}
Du schreibst in va1 den Wert von va2,
in va2 den Wert von va3 und
in va3 den Wert deines Pac.

ZitatNur irgendwie ist va1 und va2 immer der gleiche Werte.
Immer nicht - aber wenn sich va3 2 "Abfragezyklen" lang nicht ändert dann stimmt deine Annahme.

Beispiel (va1 und va2 werden frisch mit unterschiedlichen Werten befüllt):
va1 = 1
va2 = 2
va3 = gerade eingelesen und hat Wert 5
Wenn die Zuweisung nun ausgelöst wird hat
va1=2
va2=5
va3=5
Nun wird das UserReading erneut ausgelöst aber va3 (resp. Pac) hat sich nicht geändert:
va1=5
va2=5
va3=5
Und nun nochmal - diesmal mit Pac = 8
va1=5
va2=5
va3=8
Und erst beim erneuten aktualisieren der userReadings sind va1 und va2 unterschiedlich.

Nun kommt es nur noch drauf an wie oft sich Pac ändert  ;)
Da du jede Minute abfragst müsste sich Pac mindestens alle 2 Minuten ändern - was sagt das Logfile?

Grüße

P.S.: Wie gesagt, ich kann auch total daneben liegen mit meiner Vermutung.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

maxritti

Von der Idee nicht schlecht.
Aber hier mal der Auszug aus dem Log mit den Werten, die auch oben im list aufgeführt sind.

Demnach hätten die Readings so aussehen müssen:

va1 - 454
va2 - 435
va3 - 443

stattdessen berechnen die sich zu:

va1 - 435
va2 - 435
va3 - 443

irgendetwas läuft doch da schief.  Wo ist die 454 für va1 hin?
Irgendwie bin ich gerade ein wenig verwirrt.  :o

Puschel74

#3
Hallo,

ZitatWo ist die 454 für va1 hin?
Die verschwindet und nimmt den Wert von va2 = 435 an.

Besser wäre die Frage: Wo ist va2=443 hin  ???

Grüße

Edith: Und wo ist der neue Wert von va3 ???
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

maxritti

#4
Ich sehe schon, wir stehen nun zu zweit hier mit den Fragezeichen auf der Stirn.   ;)

/EDIT:

Noch mal geschaut.

Um 19:16:21 ist doch (laut list mySL) Pac mit 443 entstanden.
Der soll nach v3. Der Wert vorher (435) soll nach va2 und der davor (454) soll nach va1.
Im Ergebnis ist aber va1 = va2 = 435 und va3 = 443.

Puschel74

Hallo,

ZitatIch sehe schon, wir stehen nun zu zweit hier mit den Fragezeichen auf der Stirn.   ;)

Nö, oder sagen wir so.
Ich hab nur solange ein Fragezeichen über meinem Kopf bis du das Reading von Pac nach 2014-07-31 19:16:22 zeigst.
Wenn das auch 443 beinhaltet dann ist mei nFragezeichen verschwunden  ;)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

maxritti


Puschel74

Hallo,

kam das nur einmalig vor oder schon öfters?

Grüße

P.S.: Ich hab grad oben dein Edith gelesen und jetzt so zurück betrachtet hast du Recht mit den Werten die sein sollten aber nicht waren.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

maxritti

Naja, vorhin kam ich erst auf die Idee das so zu bauen.
Da ist mir das beim 1. und 2. Durchlauf aufgefallen, dass da was nicht stimmt.

Ich werde das morgen mal beobachten, wenn hoffentlich der Planet Sonne wieder schön leuchtet.
Momentan gehen die Werte eh alle gegen 0, somit passt es momentan  ;D

Puschel74

Hallo,

ZitatNaja, vorhin kam ich erst auf die Idee das so zu bauen.
Das hättest du vielleicht vorher mal erwähnen bzw. im Screenshot deiner DB an"kringeln" können AB WANN du dieses UserReading eingebaut hast  ::)
Aber jetzt ist das schon egal - lass das mal laufen und schau morgen nochmal wenn die Sonne raus kommt.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

maxritti

Zitat von: Puschel74 am 31 Juli 2014, 21:06:42
Hallo,
Das hättest du vielleicht vorher mal erwähnen bzw. im Screenshot deiner DB an"kringeln" können AB WANN du dieses UserReading eingebaut hast  ::)
Grüße

Okay, um 19:02:14 kamen die userReadings das erste mal ins Spiel.
Bis 19:16 hatte ich dann 14 Berechnungen, wo das nicht passte.

Hatte dann zumindest für mich den Eindruck, dass meine grundlegenden Idee nicht die beste gewesen ist.
Daher dann die Frage hier.

Zitat von: Puschel74 am 31 Juli 2014, 21:06:42
Aber jetzt ist das schon egal - lass das mal laufen und schau morgen nochmal wenn die Sonne raus kommt.
Recht hast Du.
Schauen wir mal, was der Tag morgen bringt.

justme1968

schau doch mal ob dir eine art gleitender geometrischer mittelwert hilft. drei mal den alten wert plus ein mal den neuen und alles durch vier teilen. so brauchst du immer nur den alten und den neuen wert zum weiter rechnen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

maxritti

So, auch mit mehr Sonne passt das mit den Werten nicht.

Ich frage mich halt, wo da der grundlegende Denkfehler ist?

Aber wie dem auch sei.
Dann werde ich wohl mal eine andere Alternative probieren.
Vielleicht mal die von dir andre. Hört sich ja auch ganz gut an.

Wobei es mich doch wurmt, dass der erste Ansatz nicht klappt.


maxritti

Jetzt habe ich mein Solarlogmodul ein wenig geändert.
Und zwar wird nun der "alte" Pac Wert abgefragt und dann in ein neues Reading "Pac_old" geschrieben und Pac neu abgefragt und auch aktualisiert.

Dann noch nach Andres Vorschlag aufgrund des aktuellen Wertes und des alten den Mittelwert berechnet.

Pac_glatt {(ReadingsVal("mySL", "Pac_old", "") * 3 + ReadingsVal("mySL", "Pac", "")) / 4}

Allerdings sieht die Kurve nicht wirklich so aus, wie ich es wollte.

Ziel der ganzen Sache ist es halt die Kurve zu glätten um dicke Unterschiede des Ertrags auszubessern.
Anhand der Infos wollte ich dann Rollos hoch oder runterfahren lassen.

Ist aber eventuell gar nicht so der richtige Ansatz.

Naja, ich erkläre das hier dann wohl erst mal für geschlossen.
Wenn noch jemand eine Idee hat, wie da was zu machen ist... herzlich willkommen  :)