Hauptmenü

Rückgabewert bekommen

Begonnen von Puschel74, 02 April 2013, 12:10:03

Vorheriges Thema - Nächstes Thema

Puschel74

Hallo zusammen,

ich muss Euch leider mal wieder nerven.

Es geht nicht darum das Perl-Skript zu zerpflücken (auch wenn es nicht sauber programmiert ist), da das ja funktioniert.
Ich möchte nur den Wert, der in diesem Skript errechnet wird, an fhem zurück melden.

Ich habe ein Perl-Skript welches ich aus fhem aufrufen und ausführen lassen kann.

Messen:.* {
system('perl /opt/fhem/99_I2C_GetValue.pl');
}


#!/usr/bin/perl

use warnings;
use strict;

my $result;
my $wert_hex_vk;
my $wert_hex_nk;
my $wert_dez_vk;
my $wert_dez_nk;
my $temperatur;
my $datum;
open (DATUM,"date |");
$datum = <DATUM>;
close (DATUM);
chomp($datum);
$result = `sudo i2cget -y 1 0x48 0x00 w &`;
$wert_hex_nk = substr($result,2,2);
$wert_hex_vk = substr($result,4,2);
# print "Sensorwert ".$result;
# print "Wert vor Komma ".$wert_hex_vk."\n";
# print "Wert nach Komma ".$wert_hex_nk."\n";
$wert_dez_vk = hex($wert_hex_vk);
$wert_dez_nk = hex($wert_hex_nk);
# print "Der Wert lautet Vorkomma ".$wert_dez_vk." und Nachkomma (unbearbeitet) ".$wert_dez_nk."\n";
if ($wert_dez_nk > 128) {
  $wert_dez_nk = ".5";
}
else {
  $wert_dez_nk = ".0";
}
# print "Der Wert lautet Vorkomma ".$wert_dez_vk." und Nachkomma (bearbeitet) ".$wert_dez_nk."\n";
$temperatur = $wert_dez_vk.$wert_dez_nk;
# print "Temperatur :".$temperatur."\n";
open (DATEI, "/opt/fhem/log/twi-2013.log") or die $!;
  print DATEI $datum." ";
  print DATEI "temperatur: ".$temperatur." °C"."\n";
close (DATEI);


Das funktioniert zumindest soweit das mir der Temperaturwert brav in eine Datei geschrieben wird.
Wenn ich die ganzen # wegnehme bekomme ich in fhem diese Anzeige:


(siehe Anhang / see attachement)


In meiner jugendlichen Naivität dachte ich das ich mit einem simplen

Messen {
my $temp = {`sudo i2cget -y 1 0x48 0x00 w &`};
Log(3,$temp);
}

zumindest mal den hex-Wert des Sensors in die Variable $temp bekomme da ich nach Eingabe von
{`sudo i2cget -y 1 0x48 0x00 w &`}
in die FHEM-Befehlszeile diese Anzeige bekomme:

(siehe Anhang / see attachement)


Leider liefert mir aber das Skript nur das hier:

(siehe Anhang / see attachement)


Ich würde aber gern $temperatur an FHEM zurück liefern lassen und dies dann
a) in einen Dummy füttern und
b) in ein FHEM-Logfile schreiben lassen.

Hat jemand eine zündende Idee bitte?

Grüße

P.S.: Ich bin auf für einen Weg zur Lösungsfindung dankbar.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

MisterEltako

Hi!

Fehlt da nicht soetwas wie return???

...
# print "Der Wert lautet Vorkomma ".$wert_dez_vk." und Nachkomma (bearbeitet) ".$wert_dez_nk."\n"; $temperatur = $wert_dez_vk.$wert_dez_nk; # print "Temperatur :".$temperatur."\n";
open (DATEI, "/opt/fhem/log/twi-2013.log") or die $!; print DATEI $datum." ";
print DATEI "temperatur: ".$temperatur." °C"."\n";
close (DATEI);
return "$temperatur";

MfG, MisterEltako.
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Puschel74

Hallo,

danke schonmal für die Hilfe.

Wenn ich den Code so abändere

open (DATEI, "/opt/fhem/log/twi-2013.log") or die $!;
  print DATEI $datum." ";
  print DATEI "temperatur: ".$temperatur." °C"."\n";
close (DATEI);
return "$temperatur";


bekomme ich das zurück:

ZitatCan't return outside a subroutine at /opt/fhem/99_I2C_GetValue.pl line 39.
Sensorwert 0xc012
Wert vor Komma 12
Wert nach Komma c0
Der Wert lautet Vorkomma 18 und Nachkomma (unbearbeitet) 192
Der Wert lautet Vorkomma 18 und Nachkomma (bearbeitet) .5
Temperatur :18.5
2013.04.02 12:50:20 3: n_wecker return value: -1

zurück.

Ich vermute mal da ich in fhem keinen Rückgabewert erwarte kann return nichts zurück liefern.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

MisterEltako

Hi!

Wäre wohl zu einfach gewesen.... :o)


Was mir noch auffällt:

Ist das nur ein Auszug aus deiner Datei *.pl?

Es fehlt doch auch soetwas wie:

sub
Messwert() {

...
return "$temperatur";

1;


Aufrufbar mit:

define Test notify Test2 {\
my $temp = Messwert();;\
Log 3, "Temperatur gemessen: $temp");;\
}

Und in Kommandozeile: trigger Test2

MfG, MisterEltako
HMLAN-Konfigurations-Adapter, HM-Funkjalousieaktor/HM-Dimmaktor/HM-Schaltaktor f. Markenschalter, Jalousie-/Schaltaktor von Eltako, FT4 v. Eltako, TCM310

Puschel74

Hallo,

ZitatIst das nur ein Auszug aus deiner Datei *.pl?

Ja und Nein. Das IST meine *.pl
Allerdings habe ich das mit dem sub von dir noch nicht getestet - werde ich gleich mal machen und mich wieder melden.

Grüße

Edith: Zu früh gefreut.
In fhem habe ich folgendes:
Messen:.* {
system('perl /opt/fhem/99_I2C_GetValue.pl');
}

Damit rufe ich meine *.pl auf. Nur den Rückgabewert bekomme ich entweder so
Zitat2013.04.02 12:50:20 3: n_wecker return value: -1
oder so
Zitat2013.04.02 11:40:09 3: HASH(0x2699e08)
Ich vermute mal du möchtest das ich den Code in 99_MyUtils.pm einfüge und dann mal ausführen lasse?
Sorry für die Anfängerfragen aber dafür bin ich im richtigen Unterforum ;-)
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Puschel74

Hallo,

sorry wenn ich jetzt hier ein kleines bischen übterreibe aber:

Zitat2013.04.02 15:31:10 3: Temperatur gemessen: 20.0
2013.04.02 15:31:20 3: Temperatur gemessen: 20.5

meldet mir jetzt das fhem-Logfile.

Danke MiterEltako für den perfekten Tipp mit dem

sub
Messwert() {

...
return "$temperatur";
}

1;


Der war GOLD wert.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.