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. ;-)
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.
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
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 ???
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.
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
Alle Werte unterschiedlich.
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.
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
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
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.
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
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.
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 :)