FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Kitt am 11 Juli 2017, 15:12:28

Titel: Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 11 Juli 2017, 15:12:28
Hallo an alle,

als Anfänger habe ich es geschafft, mir alle 15 Minuten Readings ausgeben zu lassen, die mir den aktuellen Benzinpreis anzeigen (HTTPMOD).
Nun würde ich diese Werte gleichzeitig bei jeder Messung nach Thingspeak hochladen, um sie dort zu loggen.

Ich dachte an das Attribut "event-on-update-reading"?

Aber wie sieht dann der Befehl dazu aus?

Danke und viele Grüße!
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: amenomade am 11 Juli 2017, 17:01:08
Kenne Thingspeak  nicht. Wie würdest Du (ausserhalb FHEM) einen Wert "hochladen"?
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 11 Juli 2017, 17:24:12
Ich lade dort Temperatur- und Luftfeuchtigkeitsdaten mit einem vorgefertigten Programm hoch (ohne FHEM).

Thingspeak gibt mir eine Adresse, mit der ich einzelne Werte hoch laden kann, das klappt auch, wenn ich die Adresse in
den Browser eingebe:

GET https://api.thingspeak.com/update?api_key=[ENTERAPI]&field1=0

Die "0" steht dann für den Wert, der hoch geladen werden soll.

Wie kann ich das nun in meine HTTPMOD einbauen und die "0" mit den jeweiligen Benzinpreisen ersetzen?
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Devender am 11 Juli 2017, 22:54:07
Hi,

dem httpmod String kannst du anstelle deiner "0" die Variablenzuweisung $val  übergeben.
Schau mal hier: https://wiki.fhem.de/wiki/HTTPMOD (https://wiki.fhem.de/wiki/HTTPMOD) und dort nach "Advanced configuration to define a set command and send data to a device".

Das sollte genau das sein, was du benötigst.

Grüße,
Dirk
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 00:43:25
Ok, danke für den Tipp.

Aber wie wird dann $val automatisch durch das Reading ersetzt?

Vielleicht ist das ganze für den Anfang dann doch etwas zu kompliziert für mich  :-\
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 12 Juli 2017, 05:43:55
In dem Du den Wert des Readings abfragst. Entweder mit ReadingsVal() oder als SetMagic mit set Device [DEVICE:READING]

Grüße
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 16:20:47
Ich denke, das ist genau das, was ich brauche!

Kann ich diese Befehle als Attribute direkt in meine HTTPMOD einbauen?
Mit dem Attribut "event-on-update-reading"?
Damit der $val mit jedem Update automatisch ersetzt wird?

Sorry, ich versuche mich gerade einzuarbeiten...  :D
Vielen Dank!
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 12 Juli 2017, 16:25:10
Kenne mich mit HTTPMOD nicht so aus, aber würde einfach mal ja sagen. Probiere es aus. Im besten Fall gibt es eine saubere Fehlermeldung.
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 20:32:33
Ich habe nun als Attribut eingefügt (event-on-update-reading):

POST https://api.thingspeak.com/update?api_key=S1CI1DR793JTX7U2&field1=ReadingsVal(OUT.Spritpreis, SuperE10)

Out.Spritpreis ist der Name der HTTPMOD und SuperE10 das Reading.(?)

Danach ließ sich FHEM nicht mehr öffnen.
Hat jemand einen konkreten Tipp, wie ich vorgehen muss?
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 12 Juli 2017, 20:36:12
Irgendwie sprichst du in Rätseln. Ich glaube Deine Halbsätze haben mich verwirrt. Das Attribut event-on-change-reading hilft Dir nicht Deinen wert aus zu lesen.

Mach mal bitte ein list vom HTTPMOD Device.
list ist ein FHEM Befehl
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 20:47:25
Ok...

Ich habe eine HTTPMOD, die mir alle 15 Minuten den Benzinpreis ausgibt.

Diesen Wert will ich dann automatisch zum Loggen bei Thingspeak hochladen.
Dazu gibt mir Thingspeak folgenden Link an:
GET https://api.thingspeak.com/update?api_key=S1CI1DR793JTX7U2&field1=0

Ich möchte nun bei Vorgänge miteinander verbinden.
Dazu brauche ich einen Vorgang, der den Preis ausliest, in den Link einfügt und dann
den Link abschickt.

LG
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 22:26:50
Falls es weiterhilft, hier noch die list:

Internals:
   BUSY       0
   DEF        http://www.clever-tanken.de/tankstelle_details/45725 900
   Interval   900
   LASTSEND   1499891059.50874
   MainURL    http://www.clever-tanken.de/tankstelle_details/45725
   ModuleVersion 3.3.5 - 29.9.2016
   NAME       OUT.Spritpreis
   NR         19
   STATE      E10: 1.49 €
   TRIGGERTIME 1499891959.50824
   TRIGGERTIME_FMT 2017-07-12 22:39:19
   TYPE       HTTPMOD
   addr       http://www.clever-tanken.de:80
   buf        HTTP/1.1 200 OK

Date: Wed, 12 Jul 2017 20:26:12 GMT

Server: Apache/2.2.22 (Ubuntu)

Vary: Accept-Encoding

Content-Type: text/html; charset=utf-8

Connection: close
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 12 Juli 2017, 22:35:07
Zitat von: Devender am 11 Juli 2017, 22:54:07
Hi,

dem httpmod String kannst du anstelle deiner "0" die Variablenzuweisung $val  übergeben.
Schau mal hier: https://wiki.fhem.de/wiki/HTTPMOD (https://wiki.fhem.de/wiki/HTTPMOD) und dort nach "Advanced configuration to define a set command and send data to a device".

Das sollte genau das sein, was du benötigst.

Grüße,
Dirk

Ich kann nicht sehen das Du irgendwas davon eingebaut hast
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 22:52:55
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=$val
   stateFormat E10: SuperE10 €
   userattr   readingsName_SuperE10 readingsRegex_SuperE readingsRegex_SuperE10 set01Name set01URL


Ich glaube, das macht so keinen Sinn. Ich kann mit allgemeinen Hinweisen nicht viel anfangen, weil ich von der Syntax
keine Ahnung hab. Dachte einfach nicht, dass es so kompliziert sein würde.
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 12 Juli 2017, 23:06:34

set01URL   https://api.thingspeak.com/update?api_key=S1CI1DR793JTX7U2&field1=[OUT.Spritpreis:SuperE10]


Kann aber nicht versprechen das es so klappt.

Und bitte wenn Du Ausgaben wie Log oder Code oder Konfig hast immer hier in Codetags posten.
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 23:13:12
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
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 12 Juli 2017, 23:18:03
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
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 23:24:56
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
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 12 Juli 2017, 23:41:23
Hmmm, der Wert wurde nicht gesendet.

Irgendwas stimmt wohl noch nicht.

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

Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 13 Juli 2017, 06:17:47
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
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 13 Juli 2017, 13:57:26
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.

Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 13 Juli 2017, 15:02:47
Warum möchtest Du einen nicht geänderten Wert noch mal hochladen?

Hast Du mehrere HTTPMOD Devices? Oder andere Spritsorten mit in diesem Device?
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 13 Juli 2017, 15:11:07
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.
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 13 Juli 2017, 15:17:43
Also im einfachsten Fall erstelle ein at welches alle x min diesen set Befehl ausführt. So ganz ohne triggern
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 13 Juli 2017, 15:24:46
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.
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 13 Juli 2017, 15:33:16
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.
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 13 Juli 2017, 15:47:47
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.

Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: CoolTux am 13 Juli 2017, 15:53:23
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.
Titel: Antw:Benzinpreise von FHEM nach thingspeak hochladen
Beitrag von: Kitt am 14 Juli 2017, 13:43:47
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!!