attr Inhalt mit userReadings füllen

Begonnen von daheim, 18 Januar 2020, 18:21:31

Vorheriges Thema - Nächstes Thema

daheim

Guten Abend liebe Forengemeinde,

ich habe die Heizölpreisermittlung aus diesem Thead https://forum.fhem.de/index.php/topic,107189.0.html in FHEM eingebaut.
Soweit klappt alles. Ich würde das gerne erweitern und meine Liter dynamisch aus einem userReadings befüllen.

Dazu habe ich ein userReading angelegt

Nachtanken{4500-(split " ", (ReadingsVal("HeizoelReading","Heizoel","")))[10]}

Das funktioniert und es wird ein ein Zahlenwert in dem neuen Reading gespeichert.

Meine Frage, wie bekomme ich diesen Zahlenwert nun dynamisch in das attr replacement02Value vom Heizölpreis

Versucht habe ich

attr Heizoelpreis replacement02Value .ReadingsVal("Heizoelpreis", "Nachtanken","0")


Dann wird leider  .ReadingsVal("Heizoelpreis", "Nachtanken","0") im attr gespeichert....

Was kann ich machen?

Daniel

amenomade

Mit
replacement02Mode reading
replacement02Value Nachtanken

Aber replacement02Value ohne Punkt sollte auch funktionieren:attr Heizoelpreis replacement02Value ReadingsVal("Heizoelpreis", "Nachtanken","0")
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

daheim

Guten Morgen amenomade,

Danke für deine Antwort. Leider habe ich wohl noch was falsch gemacht. In der modifizierten URL wird die Variable %%MENGE%% jetzt zwar nicht mehr mit dem ReadingsVal befüllt, aber auch der Inhalt des userReadings wird nicht eingetragen. Kann es sein, dass dieses einen falschen Datentype hat?

Viele Grüße

Daniel

amenomade

Poste bitte ein "list" von deinem HTTPMOD
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

yersinia

Zitat von: amenomade am 18 Januar 2020, 19:46:33
Mit
replacement02Mode reading
replacement02Value Nachtanken

Aber replacement02Value ohne Punkt sollte auch funktionieren:attr Heizoelpreis replacement02Value ReadingsVal("Heizoelpreis", "Nachtanken","0")
Kann FHEM so ohne Weiteres im Attribut Daten aus einem anderen Reading dynamisch übernehmen? Ich dachte, das würde nur über ein notify oä und perl code gehen?
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Bookworm (perl 5.36.0) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

amenomade

HTTPMOD kann aus seinen eigenen Readings Daten übernehmen, wenn er die Request baut. Dafür ist replacementXXmode "reading" da. Lies mal in CommandRef oder in Wiki

Jetzt weiss ich nicht genau, was er machen möchtet. Deswegen die Bitte an ein "list" vom HTTPMOD Device
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

daheim


amenomade

Du gibst "list Heizoelpreis" in der Kommandozeile von Fhem ein, und poste das Ergebnis davon
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

daheim

Hier das "list"


Internals:
   BUSY       0
   CFGFN      /opt/fhem/FHEM/Heizoel.cfg
   DEF        https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit= 1800
   FUUID      5e221c85-f33f-bfbc-af88-71e39709031ceebf
   Interval   1800
   LASTSEND   1579464542.16824
   MainURL    https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit=
   ModuleVersion 3.5.21 - 27.12.2019
   NAME       Heizoelpreis
   NOTIFYDEV  global
   NR         1385
   NTFY_ORDER 50-Heizoelpreis
   ReplacementEnabled 1
   STATE      <div>2020-01-19 21:09:03
<b>61.96&euro;</b>/100l</div>
   TRIGGERTIME 1579465447.97966
   TRIGGERTIME_FMT 2020-01-19 21:24:07
   TYPE       HTTPMOD
   addr       https://www.esyoil.com:443
   auth       0
   buf       
   code       200
   compress   1
   conn       
   data       
   displayurl https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=58454&pr-amount=3500&submit=
   header     
   host       www.esyoil.com
   httpheader HTTP/1.1 200 OK
Date: Sun, 19 Jan 2020 20:09:02 GMT
Server: Apache/2.4.41 (Ubuntu)
Content-Security-Policy: style-src 'unsafe-inline' 'self' https://stackpath.bootstrapcdn.com https://use.fontawesome.com https://fonts.googleapis.com https://cdnjs.cloudflare.com blob:; font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com https://use.fontawesome.com data:; report-uri /api.php?sid=570
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Set-Cookie: calc_arguments=58454%3B3500%3B1%3B8%3B2%3B0%3B%3B%3B%3B%242y%2410%244tLw%2FDC6Woigj9ddoguwJOFbsbjQrr0zC9rLuAorFjxMY8PYWgLvu; expires=Sun, 02-Feb-2020 20:09:02 GMT; Max-Age=1209600; path=/; secure
Set-Cookie: esyoil_com=hhev6jvtvbjqqapo2e95du81mj; expires=Sun, 19-Jan-2020 20:19:02 GMT; Max-Age=600; path=/; secure; HttpOnly
Set-Cookie: calc_arguments=58454%3B3500%3B1%3B8%3B2%3B0%3B%3B%3B%3B%242y%2410%24sJdv9Lr6zrw9IdNHBsFJEegDzAH3khcGOXLfkUZA3rnuCDP2mf6tO; expires=Sun, 02-Feb-2020 20:09:02 GMT; Max-Age=1209600; path=/; secure
Set-Cookie: calc_arguments=58454%3B3500%3B1%3B8%3B2%3B0%3B%3B%3B%3B%242y%2410%24ZJV7ysXUveWQRj0%2FTbTSB.E7oiH3tsiaNRp7Zmvzx94LKt.yYrOBS; expires=Sun, 02-Feb-2020 20:09:02 GMT; Max-Age=1209600; path=/; secure
Set-Cookie: calc_arguments=58454%3B3500%3B1%3B8%3B2%3B0%3B%3B%3B%3B%242y%2410%242m5mRfutZWbIiLGhnFHj5.lcM3vsA5ELpjc7qcWRFMo8ygdVvtJne; expires=Sun, 02-Feb-2020 20:09:02 GMT; Max-Age=1209600; path=/; secure
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Upgrade: h2
Connection: Upgrade, close
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control: public
Content-Language: de
Content-Length: 38181
Content-Type: text/html; charset="utf-8"
   httpversion 1.0
   hu_blocking 0
   hu_filecount 91
   hu_port    443
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=58454&pr-amount=3500&submit=
   protocol   https
   redirects  0
   timeout    2
   url        https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=58454&pr-amount=3500&submit=
   value      0
   CompiledRegexes:
   OLDREADINGS:
   QUEUE:
   READINGS:
     2020-01-19 21:09:03   Heizoelpreis    61.96
     2020-01-18 09:16:51   Nachtanken      1749
   REQUEST:
     data       
     header     
     ignoreredirects 0
     retryCount 0
     type       update
     url        https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=%%PLZ%%&pr-amount=%%MENGE%%&submit=
     value      0
   defptr:
     readingBase:
       Heizoelpreis reading
     readingNum:
       Heizoelpreis 010
     readingOutdated:
     requestReadings:
       update:
         Heizoelpreis reading 010
   sslargs:
Attributes:
   enableControlSet 1
   reading010Name Heizoelpreis
   reading010OExpr $val =~ s/,/\./; $val;
   reading010Regex <span class="fw_b ">([\d\,]+)
   replacement01Mode text
   replacement01Regex %%PLZ%%
   replacement01Value 58454
   replacement02Mode text
   replacement02Regex %%MENGE%%
   replacement02Value 3500
   room       Heizung
   stateFormat {"<div>".ReadingsTimestamp($name,"Heizoelpreis","-")."
<b>".ReadingsVal($name,"Heizoelpreis","-")."&euro;</b>/100l</div>"}
   userReadings Nachtanken{4500-(split " ", (ReadingsVal("HeizoelReading","Heizoel","")))[10]}
   userattr   reading010Name reading010OExpr reading010Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value
   webCmd     reread


Kannst du mir auch noch zufällig sagen, warum sich mein userRedings nicht aktualisiert?

daheim

Ich habe es jetzt nach langem hin und her geschafft...

Hier die Lösung:

Das replacement02Mode ist jetzt expression und das userRedings

Nachtanken {sprintf("%.0f",4500-(split " ",(ReadingsVal("HeizoelReading","Heizoel","")))[10],0)}


Jetzt geht es. Danke an alle fürs helfen  :)

Christoph Morrison

Ich hab das so gelöst (general.utilities.heating.oil.tank.meter ist ein Proteus Ölstands-Sensor):

defmod general.utilities.heating.oil.price.esyoil HTTPMOD https://www.esyoil.com/preisausgabe.php?pr-unloading-points=1&pr-product=8&pr-payment-type=2&pr-truck-type=&pr-hose-length=&pr-app=1&pr-zip=%%zip%%&pr-amount=%%needed_ltrs%%&submit= 1800
    attr general.utilities.heating.oil.price.esyoil userattr reading01Expr reading01Name reading01Regex reading02Name reading02Regex replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Value
    attr general.utilities.heating.oil.price.esyoil alias Ölpreis Esyoil
    attr general.utilities.heating.oil.price.esyoil enableControlSet 1
    attr general.utilities.heating.oil.price.esyoil eventMap reread:Aktualisieren reread:update
    attr general.utilities.heating.oil.price.esyoil group Heizöl
    attr general.utilities.heating.oil.price.esyoil icon measure_water_meter@black
    attr general.utilities.heating.oil.price.esyoil reading01Expr $val =~ s/,/\./;; $val;;
    attr general.utilities.heating.oil.price.esyoil reading01Name price
    attr general.utilities.heating.oil.price.esyoil reading01Regex <span class="fw_b ">([\d\,]+)
    attr general.utilities.heating.oil.price.esyoil reading02Name price_hr
    attr general.utilities.heating.oil.price.esyoil reading02Regex <span class="fw_b ">([\d\,]+)
    attr general.utilities.heating.oil.price.esyoil replacement01Mode text
    attr general.utilities.heating.oil.price.esyoil replacement01Regex %%zip%%
    attr general.utilities.heating.oil.price.esyoil replacement01Value 33330
    attr general.utilities.heating.oil.price.esyoil replacement02Mode reading
    attr general.utilities.heating.oil.price.esyoil replacement02Regex %%needed_ltrs%%
    attr general.utilities.heating.oil.price.esyoil replacement02Value general.utilities.heating.oil.tank.meter:UsedLiters
    attr general.utilities.heating.oil.price.esyoil room Allgemein->Energie
    attr general.utilities.heating.oil.price.esyoil stateFormat price_hr € / ℓ, price_calculated_hr € gesamt
    attr general.utilities.heating.oil.price.esyoil userReadings price_calculated:price:.* {\
        my $price   = ReadingsNum("$name", "price", 0);;\
        my $needed  = ReadingsNum("general.utilities.heating.oil.tank.meter", "UsedLiters", 0) / 100;;\
        return sprintf("%.2f", $price * $needed);;\
    },\
    price_calculated_hr:price_calculated:.* {\
        my $price = ReadingsNum("$name", "price_calculated", 0);;\
        $price =~ s/\./\,/;;\
        return $price;;\
    }
    attr general.utilities.heating.oil.price.esyoil webCmd Aktualisieren