(ERLEDIGT) Wie perl codeschnipsel im Fhem nutzen...?

Begonnen von misux, 21 Juni 2022, 09:21:15

Vorheriges Thema - Nächstes Thema

misux

Hi!

Ich versuche gerade zweigleisig zu fahren weil ich für mein Problem keine Lösung finde...

Ich habe aus einem PoolForum ein Perlcodeschnipsel welcher mir Daten von einem poolcontroller zieht...

Kann mir jemand sagen wie ich diesen Code im FHEM nutzen kann/einbinden soll?

Das ist der Code:
#!/usr/bin/perl
use CGI::Carp "fatalsToBrowser";
use LWP::Simple qw ($ua get);
$ua->timeout(5);
$ua->agent('Parser - mainFile');
$ua->credentials('demo.poolcontroller.de:80','NeedPassword','username'=>'passwort');
print "Content-type: text/html\n\n";

#### URL zur GetState.csv am Controller (http://IP-ADRESSE/GetState.csv)
$controllerip = "http://demo.poolcontroller.de/GetState.csv";

####Controller abfragen
@data = get($controllerip) || die print "timeout";
$data = "@data";


### Zeilen der GetState splitten
### 1. Zeile enthält System-Infos wie z.B. Firmwareversion, Uptime, Status der Dosierungen (AUS oder AUTO), etc...
### 2. Zeile enthält Namen der Sensoren/Aktoren
### 3. Zeile Einheiten der Messwerte
### 4. Zeile Offset um aus dem Rohmesswert einen fertigen Messwert zu berechnen
### 5. Zeile GAIN   um aus dem Rohmesswert einen fertigen Messwert zu berechnen
### 6. Zeile Rohmesswerte


($sys,$names,$units,$offset,$gain,$value) = split(/\n/,$data);

### Beispiel um alle Namen einzelnen Variablen zu zu ordnen
($controllertimen,$adc1n,$adc2n,$adc3n,$adc4n,$adc5n,$rdxn,$phn,$temp1n,$temp2n,$temp3n,$temp4n,$temp5n,$temp6n,$temp7n,$temp8n,$relais1n,$relais2n,$rrelais3n,$relais4n,$relais5n,$relais6n,$relais7n,$relais8n,$di1n,$di2n,$di3n,$di4n,$rel9n,$rel10n,$rel11n,$rel12n,$rel13n,$rel14n,$rel15n,$rel16n,$clkanistern,$phminuskanistern,$phpluskanistern)  = split(/,/,$names);


### Beispiel um alle Einheiten einzelnen Variablen zu zu ordnen
($controlelrtimeu,$adc1u,$adc2u,$adc3u,$adc4u,$adc5u,$rdxu,$phu,$temp1u,$temp2u,$temp3u,$temp4u,$temp5u,$temp6u,$temp7u,$temp8u,$relais1u,$relais2u,$rrelais3u,$relais4u,$relais5u,$relais6u,$relais7u,$relais8u,$di1u,$di2u,$di3u,$di4u,$rel9u,$rel10u,$rel11u,$rel12u,$rel13u,$rel14u,$rel15u,$rel16u,$clkanisteru,$phminuskanisteru,$phpluskanisteru)  = split(/\,/,$units);


### Beispiel um alle Rohwerte einzelnen Variablen zu zu ordnen
($controllertimev,$adc1v,$adc2v,$adc3v,$adc4v,$adc5v,$rdxv,$phv,$t1v,$t2v,$t3v,$t4v,$t5v,$t6v,$t7v,$t8v,$r1v,$r2v,$r3v,$r4v,$r5v,$r6v,$r7v,$r8v,$di1v,$di2v,$di3v,$di4v,$r9v,$r10v,$r11v,$r12v,$r13v,$r14v,$r15v,$r16v,$clkanisterv,$phminuskanisterv,$phpluskanisterv) = split(/\,/,$value);



### Beispiel um aus allen Rohwerten mit Hilfe von "OffSet" und "Gain" einen fertigen Messwert zu berechnen und aus zu geben
@names  = split(",", $names);
@units  = split(",", $units);
@value  = split(",", $value);
@offset = split(",", $offset);
@gain   = split(",", $gain);


### Controlleruhrzeit aus den Rohdaten ermitteln
if (($controllertimev & 0xFF) < 10) { $time = ($controllertimev>>8).":0".($controllertimev & 0xFF); }
else                                { $time = ($controllertimev>>8).":".($controllertimev & 0xFF); }


print "<table cellpadding=2>";
print "<tr><td> Uhrzeit: </td> <td> $time @units[0]</td></tr>";


for ($i=1;$i<$#value+1;$i++)
{
### fertigen Messwert berechnen
$wert = @offset[$i] + (@gain[$i] * @value[$i]);

### Messwert auf 2 Nachkommastellen runden
$wert = sprintf("%.2f", $wert);

###Ausgeben
print "<tr><td> @names[$i]: </td> <td> $wert @units[$i]</td></tr>";
}

print "</table>";
exit;

JoWiemann

Hallo,

das sollte mit dem Fhem-Modul: httpmod gut funktionieren.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM