Ich möchte auf meinem vServer im Internet Temperaturdaten von zu hause speichern und dort ausgeben. Dafür möchte ich via JeeLink Sensoren auslesen. Das geht auch schon.
Was ich nun suche ist die Möglichkeit via Modul eine HTTP get oder post Adresse zu spezifizieren, und dorthin die Daten vom Sensor weiterzuleiten.
Aktuell hab ich ein python script, dass die Daten direkt vom JeeLink postet. Ich würd die aber auch gern im FHEM drin haben.
Gibts so ein Modul schon?
danke
Philipp
Wenn ich mich nicht irre nicht, sollte aber relativ einfach per notify und die GetFileFromURL() FHEM-Perl-Hilfsfunktion zu realisieren sein.
Hallo Rudolf,
ja danke für deinen Hinweis. Habs nun hinbekommen:
Ich hab ein Notify gesetzt, wo ich alle Sensoren drin hab:
define LaCrosseNotify notify Bad:humidity:.*|Bad:temperature:.*|SchlafZimmer:humidity:.*|SchlafZimmer:temperature:.* { p2kSubmit($EVENT, $NAME) }
Dann hab ich mir eine eigene Utils gemacht:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
# PK
use URI::Escape;
use JSON;
use HttpUtils;
my $p2kdata = {};
$p2kdata->{'lastsend'} = time;
sub
p2kUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
sub p2kSubmit($$) {
my ($event, $name) = @_;
my $hash = {};
$hash->{'name'} = $name;
my $v = Value("MyPI");
my $server='https://USER:PASSWORT@p2k.at/PFAD/fhem.php';
if (!defined $p2kdata->{$name}) {
$p2kdata->{$name} = {};
}
my ($eventname, $eventdata) = split /: /, $event;
if (!defined $p2kdata->{$name}{$eventname}) {
$p2kdata->{$name}{$eventname} = undef;
}
$p2kdata->{$name}{$eventname} = $eventdata;
# Daten nur maximal alle 30 Sekunden senden
if ($p2kdata->{'lastsend'} + 30 < time) {
$p2kdata->{'lastsend'} = time;
my $p2kjson = encode_json($p2kdata);
Log 1, "p2kSubmitJSON: ".$p2kjson;
my $param = {
url => $server."?json=".uri_escape($p2kjson),
timeout => 5,
hash => $hash, # Muss gesetzt werden, damit die Callback funktion wieder $hash hat
method => "GET", # Lesen von Inhalten
header => "agent: FHEM/1.0\r\nUser-Agent: FHEM/1.0\r\nAccept: application/json",
callback => \&p2k_response # Diese Funktion soll das Ergebnis dieser HTTP Anfrage bearbeiten
};
HttpUtils_NonblockingGet($param); # Starten der HTTP Abfrage. Es gibt keinen Return-Code.
$p2kdata = {};
$p2kdata->{'lastsend'} = time;
}
}
sub p2k_response($) {
my ($param, $err, $data) = @_;
my $hash = $param->{hash};
my $name = $hash->{NAME};
if($err ne "") # wenn ein Fehler bei der HTTP Abfrage aufgetreten ist
{
Log3 $name, 3, "error while requesting ".$param->{url}." - $err"; # Eintrag fürs Log
}
}
1;
Am Server habe ich mit dieser Funktion ca alle 30 bis 34 Sekunden die aktuellen Werte. Dies klappt nun seit einigen Tagen schon sehr gut.