Hallo zusammen,
ich habe hier Sensoren, die per Wlan mehrere Werte an einen Dummy im Fhem übertragen (mittels setreading),d h.
Readings
state 18B20_T:0.125 DHT22_T:0.2 DHT22_H:85.1 BMP180_P:957.87 BMP180_T:0.6
im Log sieht das ganze dann so aus:
2017-02-12_23:22:12 wifiSensorTHP1 18B20_T:3.375 DHT22_T:3.2 DHT22_H:73.3 BMP180_P:954.58 BMP180_T:3.9
2017-02-12_23:23:12 wifiSensorTHP1 18B20_T:3.375 DHT22_T:3.1 DHT22_H:73.9 BMP180_P:954.67 BMP180_T:3.7
2017-02-12_23:24:12 wifiSensorTHP1 18B20_T:3.125 DHT22_T:3 DHT22_H:74.6 BMP180_P:954.65 BMP180_T:3.6
2017-02-12_23:25:12 wifiSensorTHP1 18B20_T:3 DHT22_T:2.9 DHT22_H:75.1 BMP180_P:954.79 BMP180_T:3.4
2017-02-12_23:26:12 wifiSensorTHP1 18B20_T:2.8125 DHT22_T:2.8 DHT22_H:75.7 BMP180_P:954.63 BMP180_T:3.3
2017-02-12_23:27:12 wifiSensorTHP1 18B20_T:2.75 DHT22_T:2.7 DHT22_H:76.2 BMP180_P:954.77 BMP180_T:3
2017-02-12_23:28:12 wifiSensorTHP1 18B20_T:2.4375 DHT22_T:2.5 DHT22_H:77.1 BMP180_P:954.79 BMP180_T:2.9
Wie kann ich diesen String in Fhem zerlegen bzw. parsen um die einzelnen Werte weiterverwenden zu können?
Hi,
du kannst dir userReadings anlegen und diese per perl split aus dem state befüllen, oder per notify eine perl sub aufrufen, die einen Dummy befüllt, viele Wege führen nach Rom ;-)
Beschreib mal ein bisschen genauer, was mit den einzelnen Werten passieren soll.
Grüße,
Oli
Hallo Oli,
der String ist in der Form Variable1:Wert1 Variable2:Wert2 Variable3:Wert3 ...
18B20_T:3.375 DHT22_T:3.2 DHT22_H:73.3 BMP180_P:954.58 BMP180_T:3.9
Damit möchte ich in weiterer Folge z.B.
- aufgrund des Wertes von 18B20_T einen GPIO Pin schalten
- den Wert von BMP180_P für weitere Berechnungen nutzen
- den Wert von DHT22_H protokollieren und grafisch ausgeben
...
Angenommen, der Dummy heißt "test", dann definierst Du ein notify "n_test"
define n_test notify test {readingSplit($NAME,$EVENT)}
und in der 99_myUtils.pm legst Du per "Edit files" folgende Funktion an:
sub readingSplit($$) {
my ($name,$event) = @_;
my @paare = split(/ /,$event);
foreach my $p (@paare){
my ($r,$v) = split(/:/,$p);
fhem("setreading $name $r $v");
}
}
Danach kannst Du mit den einzelnen readings machen, was Du willst.
perfekt - vielen Dank für die Hilfe :)
Du könntest auch mit einfachem notify weiter kommen, in etwa so:
define n1 notify wifiSensorTHP1:.* tuWas_mit$EVTPART0;tuWas_mit$EVTPART0;
in den $EVTPARTn Variablen sollten die einzelnen Variable:Wert Paare stehen.
Die sub von Betateilchen ist natürlich flexibler :-)
Grüße,
Oli
Zitat von: chrii am 13 Februar 2017, 22:04:16
ich habe hier Sensoren, die per Wlan mehrere Werte an einen Dummy im Fhem übertragen (mittels setreading),d h.
kann man nicht hier schon direkt ansetzte, sodass gleich mehrere Readings gesetzt werden? Dafür müsste man natürlich wissen was es für ein Sensor ist und wie der das senden macht.