Hauptmenü

Reading mit mehreren Werten

Begonnen von chrii, 13 Februar 2017, 22:04:16

Vorheriges Thema - Nächstes Thema

chrii

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?

KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

chrii

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
...


betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

chrii


perfekt - vielen Dank für die Hilfe  :)

KernSani

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
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED