FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: chrii am 13 Februar 2017, 22:04:16

Titel: Reading mit mehreren Werten
Beitrag von: chrii am 13 Februar 2017, 22:04:16
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?
Titel: Antw:Reading mit mehreren Werten
Beitrag von: KernSani am 13 Februar 2017, 22:14:20
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
Titel: Antw:Reading mit mehreren Werten
Beitrag von: chrii am 13 Februar 2017, 22:26:51
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
...

Titel: Antw:Reading mit mehreren Werten
Beitrag von: betateilchen am 13 Februar 2017, 22:44:41
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.
Titel: Antw:Reading mit mehreren Werten
Beitrag von: chrii am 13 Februar 2017, 22:52:42

perfekt - vielen Dank für die Hilfe  :)
Titel: Antw:Reading mit mehreren Werten
Beitrag von: KernSani am 13 Februar 2017, 22:56:46
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
Titel: Antw:Reading mit mehreren Werten
Beitrag von: igami am 14 Februar 2017, 06:15:42
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.