Benzinpreise von FHEM nach thingspeak hochladen

Begonnen von Kitt, 11 Juli 2017, 15:12:28

Vorheriges Thema - Nächstes Thema

Kitt

#15
Danke, ich hätte es schon wieder falsch eingegeben.
Jetzt sieht es so aus:

Attributes:
   event-on-update-reading set01URL
   readingsName_SuperE10 SuperE10
   readingsRegex_SuperE10 <span>Super E10</span>[^0-9]+([0-9\.]+)
   room       Draußen
   set01URL   https://api.thingspeak.com/update?api_key=S1CI1DR793JTX7U2&field1=[OUT.Spritpreis:SuperE10]
   stateFormat E10: SuperE10 €
   userattr   readingsName_SuperE10 readingsRegex_SuperE readingsRegex_SuperE10 set01Name set01URL

CoolTux

Also du solltest wirklich ganz dringend bisschen Doku lesen.

event-on-update-reading hat damit nichts zu tun. Entferne das einfach mal.
Wenn das Reading SuperE10 einen Wert hat dann kannst du eigentlich ein set OUT.Spritpreis preissenden machen. Vorausgesetzt Du hast das Attribut set01Name noch
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kitt

Du hast Recht, das mit dem even-on-update-reading war eine blöde Idee, hatte ich gerade selbst gemerkt  ;)

Jetzt sieht es so aus:

Attributes:
   readingsName_SuperE10 SuperE10
   readingsRegex_SuperE10 <span>Super E10</span>[^0-9]+([0-9\.]+)
   room       Draußen
   set01Name  preissenden
   set01URL   https://api.thingspeak.com/update?api_key=S1CI1DR793JTX7U2&field1=[OUT.Spritpreis:SuperE10]
   stateFormat E10: SuperE10 €
   userattr   readingsName_SuperE10 readingsRegex_SuperE readingsRegex_SuperE10 set01Name set01URL

Kitt

Hmmm, der Wert wurde nicht gesendet.

Irgendwas stimmt wohl noch nicht.

"set OUT.Spritpreis preissenden" gibt die Fehlermeldung "set value is not numeric"


CoolTux

Guten Morgen

Jetzt habe ich auch kurz die Zeit gehabt mir mal das Wiki an zu schauen. Das ganze ist im Prinzip einfach. Du hättest nur die Infos zusammensetzen müssen.


set01Name  preissenden
set01URL   https://api.thingspeak.com/update?api_key=S1CI1DR793JTX7U2&field1=$val


So muß die Attributszeile aussehen. $val wird automatisch durch das Value ersetzt was Du ihm im set Befehl mit gibst.
Da Dein Set Befehl preissenden heißt, kommt also

set OUT.Spritpreis preissenden


So und jetzt fehlt uns nach preissenden nur noch das was wir senden wollen, und unser $val wird dann dadurch ersetzt. Also

set OUT.Spritpreis preissenden [OUT.Spritpreis:SuperE10]


Das wird also unser set Befehl. Dieser muß nun natürlich ausgeführt werden, immer wenn sich der Wert für SuperE10 ändert. Hierfür einfach ein Notify nehmen

[OUT.Spritpreis:SuperE10] ist ein so genannter SetMagic Befehl. Im Hintergrund macht er eigentlich ein auslesen des Readings SuperE10 vom Device OUT.Spritpreis.
Und noch mal kurz zum Thema ReadingsVal womit man Readings aus Perlebene raus auslesen kann. Die Funktion sieht dafür so aus

ReadingsVal($NAME,$READING,$DEFAULT);

ReadingsVal('OUT.Spritpreis','SuperE10',0);




Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kitt

Hey, danke für die Hilfe und die Geduld!

Wenn ich nun in die Befehleszeile "set OUT.Spritpreis preissenden [OUT.Spritpreis:SuperE10]"
eingebe, wird der aktuelle Wert hoch geladen.

Kann ich das mit dem Notify automatisch fachen, sobald sich die HTTPMOD aktualiesiert?
Ich bräuchte jeden Messwert, nicht nur, falls er sich geändert hat.


CoolTux

Warum möchtest Du einen nicht geänderten Wert noch mal hochladen?

Hast Du mehrere HTTPMOD Devices? Oder andere Spritsorten mit in diesem Device?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kitt

#22
Es wäre besser, wenn der Link automatisch gesenden wird, egal ob sich der Wert verändert hat.
Die Werte werden mit einem Zeitstempel verschickt und so könnte ich sie später besser auswerten.

Wäre der Vorgang mit FHEM so unterschiedlich?

Ich habe nur eine HTTPMOD im Moment und nur eine Spritsorte.

CoolTux

Also im einfachsten Fall erstelle ein at welches alle x min diesen set Befehl ausführt. So ganz ohne triggern
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kitt

Daran hatte ich auch schon gedacht.
Ich dachte nur, es würde etwas eleganteres geben, und man könnte das
direkt als Attribut irgendwo eingeben.

Mit dem Attribut "event-on-update-reading" komme ich da also nicht irgendwie weiter?
Sorry, falls das wieder keinen Sinn ergeben sollte.

CoolTux

Nein kommst du nicht.
Wenn sich ein Reading eines Devices ändert, so kann es ein Event geben. Auf dieses Event muss getriggert/reagiert/angesprochen werden.
Das macht DOIF, Notify,watchdog und so. Und notify,DOIF und Co lösen dann einen Befehl aus. Bei Dir ist es nun ausnahmsweise ein und das selbe Device worauf getriggert wird und was gleichzeitig einen Set Befehl auslösen soll.

Also entweder at, oder notify erstellen und alle event-on- ATTRIBUTE vom Device entfernen. Dann wird immer Event ausgelöst wenn HTTPMOD seine Readings aktualisiert. Egal ob der Wert sich ändert oder nicht.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kitt

Jaaaaaaaaaa, das mit dem Hochladen alle 15 Minuten scheint zu funktionieren!!

Danke, das wäre so eigentlich schon ok für meine Zwecke.

Aber es interessiert mich schon noch, wie du das mit dem Entfernen der
"event-on- ATTRIBUTE" gemeint hat.


CoolTux

Du hattest ja den Sinn glaube nicht ganz verstanden wo für das event-on-* also in unserem Fall das event-on-change-reading da ist.


attr DEVICENAME event-on-change-reading .*


Das .* ist ein RegEx und springt bei allen Readings dieses Devices an. Dem zu folge wird nur ein Event ausgelöst wenn sich ein Reading ändert. Du wolltest aber das immer ein Event ausgelöst wird, egal ob Änderung oder nicht. Dann kann man auch einfach das Attribut löschen. Welche Events ausgelöst werden kannst Du ja im Eventmonitor sehen. Damit kann man auch komfortabel ein Notify auf ein bestimmtes Event bauen. Was Du im übrigen machen solltest. Ansonsten sendest Du ein und den selben Befehl 2-3 mal hintereinander im Millisekunden Takt.
Am besten das Notify auf das Reading SuperE10 beschränken.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Kitt

Ich habe nun ein AT-Befehl eingebaut, der alle 15 Minuten die URL abschickt.

COMMAND set OUT.Spritpreis preissenden [OUT.Spritpreis:SuperE10]
DEF    +*00:15:00 set OUT.Spritpreis preissenden [OUT.Spritpreis:SuperE10]

Die HTTPMOD aktualisiert sich jeweils 3 Minuten vorher.

Es sieht so aus, als würde es gut funktionieren.
Danke nochmal an alle, die geholfen haben, ich habe einiges dabei gelernt!!