Hauptmenü

Substr outside of String

Begonnen von Puschel74, 30 März 2013, 21:26:19

Vorheriges Thema - Nächstes Thema

Puschel74

Hallo zusammen,

ich habe ein kleines Problemchen.

Mit einem
my $result = system("sudo i2cget -y 1 0x48 0x00 w &");
lese ich mir den Wert eines I2C-Temp-Sensors aus.

Ein
print $result;
liefert mir auch brav ein
Zitat0x8013
Allerdings bekomme ich bei einem
my $wert1 = substr($result,3,2);
ein
Zitatsubstr outside of String
und ich hatte eigentlich erhofft das $wert1 danach 80 beinhaltet.

Jemand ne zündende Idee für mich wie ich die 80 und die 13 in 2 Variablen bekomme wenn substr schon nicht klappt?

Danke schonmal für Tipps.

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!

define S dummy define n notify S {\
 my $Test = 0x8013;;\
my $result = substr($Test,3,2);;\
Log 3, "$Test, $result";;\ }      

liefert im Log:
32787, 87

D.h. 0x8013 wird zu 32787......

dagegen:

define S dummy define n notify S {\
my $Test = '0x8013';;\
my $result = substr($Test,3,2);;\
Log 3, "$Test, $result";;\ }

liefert im Log dagegen: 0x8013, 80......

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

Puschel74

Hallo,

das ganze passiert bei mir noch in meiner test.pl

Wie im RasPi-UF beschrieben bin ich per I2C am RPi einen TWI am auslesen.

Der System-Befehl lässt sich per Skript durch fhem schonmal mittels at dazu bewegen den Hex-Wert

hartcodiert in eine Datei zu schreiben.

Da der Hex-Wert vor der Wandlung nach Dezimal aber erst in HighByte und LowByte zerlegt werden muss wollte ich das

später evtl. per twi_i2c.pm machen, daher meine ersten Gehversuche mit Perl.

Leider spuckt mir substr ein bischen in die Suppe.

Ich bin noch am knobeln warum.

Wenn ich mit my $wert1 = substr($result,-2,2) rangehe bekomme ich 130 zurück wobei ich noch nicht weiß
wo sich die 0 herschleicht. Die steht bei jeder Abfrage ganz links in der Zeile.

Ich bin nur grad am Tablet und kann keinen Printscreen machen.  
Den reiche ich aber gerne morgen nach.

Eine Abfrage mit ,3,2) liefert nur leider die Fehlermeldung und nicht die letzten beiden Zeichen.

Ich such mal weiter. Danke für die Hilfe.

Grüße

Edith: Die 0 ist der Rückgabewert des Aufrufes und nicht der Wert des Sensors *grübel*
Klar das substr dann einen Fehler auswirft.
#!/usr/bin/perl -w

use strict;

my $wert_vk;
my $wert_nk;
my $result;
$result = system("sudo i2cget -y 1 0x48 0x00 w &");
print "Der eingelesene Wert lautet ".$result;
print lenght($result);


So sieht der Code in der test.pl bisher aus.

Und so die Ausgabe:

(siehe Anhang / see attachement)


Wie gesagt: Perl-Anfänger und mein Perl-Buch ist in der Firma und ich hab frei *heul*
Ich muss mit der 0xc012 weiter arbeiten - wie komm ich an die ran?

Edith2: Tomaten auf den Augen *grummel*
Mit
$result = `sudo i2cget -y 1 0x48 0x00 w &`;
bekomm ich genau das was ich will - juhuuu.
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,

der Beitragstitel hat sich erledigt.

Fehler gefunden und behoben.
Nun noch ein schönes fhem-konformes Logfile basteln und die Temperatur kann hart-codiert schonmal geloggt werden.

Danke für die Hilfe.

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.