Feinstaubsensor bauen (luftdaten.info)

Begonnen von igami, 08 Februar 2017, 06:23:27

Vorheriges Thema - Nächstes Thema

igami

Normal sollte das nicht nötig sein, da die TemperaturSensorID eine Stelle größer ist als die FeinstaubSensorID. Ist das bei dir anders?
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

Pr3mut05

Zitat von: KyleK am 09 April 2017, 20:51:31
Hallo,

ich würde gerne einen SVG Plot aus den Luftdaten-Werten in FHEM anzeigen lassen, bin aber, was FHEM angeht, leider noch neu und unerfahren.
Kann mir hier jemand auf die Sprünge helfen?

Soweit ich sehen kann müsste erstmal ein FileLog für das Luftdaten Device angelegt werden, und dann braucht man noch ein gplot-File. Aber was soll da drin stehen?

Dafür könnte ich auch eine "Dummy" Anleitung brauchen :P
Mit den SVG Plot komm ich noch gar nicht zu Recht :/

igami

Zitat von: Pr3mut05 am 23 April 2017, 18:20:13
Dafür könnte ich auch eine "Dummy" Anleitung brauchen :P
Mit den SVG Plot komm ich noch gar nicht zu Recht :/
Das hat nun aber nix mit dem Thema hier zu tun, falls du wirklich nicht weiter kommst bitte einen neuen Thread erstellen.

1. FileLog oder DbLog vorhanden? Falls nein: erstellen. Wie das geht? Commandref, Wiki
2. im LogDevice auf 'Create SVG plot' klicken
3. im Plot Editor das SVG so zusammenklicken wie du es haben möchtest
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

Harst

Hallo igami,

Ich habe mir auch einen Sensor zugelegt und dabei gesehen, dass es im Sensor einen Punkt "Sende an eigene API" gibt. Hat es einen Grund, dass du pollst und dich nicht von dem Sensor triggern läßt?

Horst

igami

Zitat von: Harst am 01 Mai 2017, 09:53:33
Hallo igami,

Ich habe mir auch einen Sensor zugelegt und dabei gesehen, dass es im Sensor einen Punkt "Sende an eigene API" gibt. Hat es einen Grund, dass du pollst und dich nicht von dem Sensor triggern läßt?

Horst
Ich hatte das am Anfang vor, dann aber schnell festgestellt, dass ich nicht weiß wie man das programmieren soll :D
Weiterhin bietet die Pull Methode auch die Möglichkeit Daten von Luftdaten.info abzurufen, also auch fremde Sensoren zu verwenden. Auch muss man so nur die FHEM Seite einstellen und nicht noch zusätzlich was im Sensor.
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

JoWiemann

#95
Hallo,

ich benutze aktuell die "software_version": "NRZ-2017-078". Hier wird bei Aktivierung des BME280 folgendes json ausgegeben:


{"software_version": "NRZ-2017-078", "sensordatavalues":[{"value_type":"SDS_P1","value":"18.90"},{"value_type":"SDS_P2","value":"15.66"},{"value_type":"BME280_temperature","value":"22.27"},{"value_type":"BME280_humidity","value":"45.73"},{"value_type":"BME280_pressure","value":"101164.59"},{"value_type":"samples","value":"790124"},{"value_type":"min_micro","value":"180"},{"value_type":"max_micro","value":"27928"},{"value_type":"signal","value":"-74 dBm"}]}


Für die lokale Abfrage würde ich gerne die beigefügte Codeänderung vorschlagen:

    elsif($connection eq "local"){
      readingsBeginUpdate($hash);

      readingsBulkUpdate($hash, "software_version", $data->{software_version});

      my $sensor;
      foreach (@{$data->{sensordatavalues}}){
        $_->{value} =~ m/^(\S+)(\s|$)/; ???? Was macht diese Zeile. Habe ich nicht verstanden!
        $sensor = $1;

        readingsBulkUpdate($hash, $_->{value_type}, $sensor);

      }

      readingsBulkUpdate($hash, "state", "active");
      readingsEndUpdate($hash, 1);
    }
  }


Hinzugenommen habe ich noch die Ausgabe der Firmwareversion.

Grüße Jörg

PS: Ob die Änderung für die Remoteabfrage auch notwendig ist, habe ich noch nicht geprüpft.
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

igami

Zitat von: JoWiemann am 04 Mai 2017, 16:58:27
Für die lokale Abfrage würde ich gerne die beigefügte Codeänderung vorschlagen:

    elsif($connection eq "local"){
      readingsBeginUpdate($hash);

      readingsBulkUpdate($hash, "software_version", $data->{software_version});

      my $sensor;
      foreach (@{$data->{sensordatavalues}}){
        $_->{value} =~ m/^(\S+)(\s|$)/; ???? Was macht diese Zeile. Habe ich nicht verstanden!
        $sensor = $1;

        readingsBulkUpdate($hash, $_->{value_type}, $sensor);

      }

      readingsBulkUpdate($hash, "state", "active");
      readingsEndUpdate($hash, 1);
    }
  }

Wofür benötigst du die Software Version in FHEM? Kann das einchecken, sehe aber noch keinen Nutzen.
Die Abfrage der Luftdruck Werte funktioniert problemlos?
Welche Modul Version hast du? Bei der aktuellen Version 14070 sieht der code an der Stelle, mit eingebauter softwareVersion, so aus:

    elsif($connection eq "local"){
      readingsBeginUpdate($hash);
      readingsBulkUpdateIfChanged(
        $hash, "softwareVersion", $data->{software_version}
      );

      foreach (@{$data->{sensordatavalues}}){
        $_->{value} =~ m/^(\S+)(\s|$)/;

        if($_->{value_type} eq "temperature"){
          readingsBulkUpdate($hash, "temperature", $1);
        }
        elsif($_->{value_type} eq "humidity"){
          readingsBulkUpdate($hash, "humidity", $1);
        }
        elsif($_->{value_type} eq "pressure"){
          readingsBulkUpdate($hash, "pressure", $1);
        }
        elsif($_->{value_type} eq "SDS_P1"){
          readingsBulkUpdate($hash, "PM10", $1);
        }
        elsif($_->{value_type} eq "SDS_P2"){
          readingsBulkUpdate($hash, "PM2.5", $1);
        }
        elsif($_->{value_type} eq "signal"){
          readingsBulkUpdate($hash, "signal", $1);
        }
      }

      readingsBulkUpdate($hash, "state", "active");
      readingsEndUpdate($hash, 1);
    }


Die Zeile

$_->{value} =~ m/^(\S+)(\s|$)/;

belegt die Variable $1 mit dem Wert des Readings ohne einheit. Bei signal stände sonst "-74 dBm" was zu Problemen beim plotten oder so führen könnte. Einheiten gehören meiner Meinung nach nicht in die Readings, sondern nur in die commandref, damit man weiß welche Einheit das Reading hat.
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

JoWiemann

Hallo,

hm, ich habe eine Update gemacht. Bei mir gibt es die Softwareversion noch nicht.

Die Zuordnung der BME280 Werte funktioniert definitiv nicht, da das json immer BME280_ im value_type voran stellt.

Die Firmwareversion macht es nur einfacher bei der Fehleranalyse. Wenn jemand ein list vom Device postet ist sie dann halt sofort dabei. Jedenfalls machen das die meisten Devices in Fhem so.

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

igami

würde dann jetzt folgende Änderungen einchecken:

Index: FHEM/59_LuftdatenInfo.pm
===================================================================
--- FHEM/59_LuftdatenInfo.pm (Revision 14184)
+++ FHEM/59_LuftdatenInfo.pm (Arbeitskopie)
@@ -352,13 +352,13 @@
           foreach (@{$sensor->{sensordatavalues}}){
             $_->{value} =~ m/^(\S+)(\s|$)/;

-            if($_->{value_type} eq "temperature"){
+            if($_->{value_type} =~ /temperature$/){
               readingsBulkUpdate($hash, "temperature", $1);
             }
-            elsif($_->{value_type} eq "humidity"){
+            elsif($_->{value_type} =~ /humidity$/){
               readingsBulkUpdate($hash, "humidity", $1);
             }
-            elsif($_->{value_type} eq "pressure"){
+            elsif($_->{value_type} =~ /pressure$/){
               readingsBulkUpdate($hash, "pressure", $1);
             }
           }
@@ -370,17 +370,20 @@
     }
     elsif($connection eq "local"){
       readingsBeginUpdate($hash);
+      readingsBulkUpdateIfChanged(
+        $hash, "softwareVersion", $data->{software_version}
+      );

       foreach (@{$data->{sensordatavalues}}){
         $_->{value} =~ m/^(\S+)(\s|$)/;

-        if($_->{value_type} eq "temperature"){
+        if($_->{value_type} =~ /temperature$/){
           readingsBulkUpdate($hash, "temperature", $1);
         }
-        elsif($_->{value_type} eq "humidity"){
+        elsif($_->{value_type} =~ /humidity$/){
           readingsBulkUpdate($hash, "humidity", $1);
         }
-        elsif($_->{value_type} eq "pressure"){
+        elsif($_->{value_type} =~ /pressure$/){
           readingsBulkUpdate($hash, "pressure", $1);
         }
         elsif($_->{value_type} eq "SDS_P1"){

Damit wird die software_version als Reading softwareVersion bereitgestellt und es kann ein belibiges prefix vor den value_type stehen.
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

JoWiemann

Das mit dem beliebigen Präfix hatte ich auch erst überlegt, aber was ist wenn Du einen BMP180 und einen BME280 angeschlossen hast?

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

JoWiemann

PS: Ich würde auch nicht die Daten, die geliefert werden, selektiv behandeln, sondern alle Informationen in Readings ablegen. Ist allerdings meine private Meinung. Ggf. kann man das ja auch über ein Attribut regeln.

Grüße Jörg, ach ja und was wir immer vergessen: Danke für das Modul.
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

igami

Zitat von: JoWiemann am 04 Mai 2017, 20:14:47
PS: Ich würde auch nicht die Daten, die geliefert werden, selektiv behandeln, sondern alle Informationen in Readings ablegen. Ist allerdings meine private Meinung. Ggf. kann man das ja auch über ein Attribut regeln.
Da lässt sich drüber Streiten. vorallen wird dann bestimmt die Frage gestellt was min_micro und max_micro ist. Ich habe keine Ahnung. Könnte ich eigentlich mal in Erfahrung bringen. Und die Proben nummer, würde auch nur Events erzeugen ohne einen Nutzen zu bringen.

{"value_type":"samples","value":"790124"},{"value_type":"min_micro","value":"180"},{"value_type":"max_micro","value":"27928"}


Zitat von: JoWiemann am 04 Mai 2017, 20:14:47
Grüße Jörg, ach ja und was wir immer vergessen: Danke für das Modul.
Das hört man gerne. Eine gute Community ist aber auch wichtig um das Projekt voran zu bringen :)
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

JoWiemann

Die Werte min_micro und max_micro würde ich als kleinste und größte Zeit für einen Schleifendurchlauf (Probennahme) interprtieren. Sieht jedenfalls im Source danach aus.

Wie Werte, inkl. samples,  könnten hilfreich sein beim debuggen. Vielleicht dann doch wenigstens ab verbose 4 ins log schreiben?

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

JoWiemann

PS: Sofern noch nicht im Blick kannst Du bei $rv = readingsSingleUpdate($hash, $reading, $value, $do_trigger); und auch bei readingsEndUpdate($hash, $do_trigger); bestimmen ob ein Event ausgelöst wird , oder nicht.

Siehe auch:https://wiki.fhem.de/wiki/DevelopmentModuleAPI

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

igami

Zitat von: JoWiemann am 04 Mai 2017, 20:59:16
Die Werte min_micro und max_micro würde ich als kleinste und größte Zeit für einen Schleifendurchlauf (Probennahme) interprtieren. Sieht jedenfalls im Source danach aus.

Wie Werte, inkl. samples,  könnten hilfreich sein beim debuggen. Vielleicht dann doch wenigstens ab verbose 4 ins log schreiben?
Ab Verbose 4 wird das gesamte JSON ins Log gechrieben.

Zitat von: JoWiemann am 04 Mai 2017, 21:08:22
PS: Sofern noch nicht im Blick kannst Du bei $rv = readingsSingleUpdate($hash, $reading, $value, $do_trigger); und auch bei readingsEndUpdate($hash, $do_trigger); bestimmen ob ein Event ausgelöst wird , oder nicht.

Siehe auch:https://wiki.fhem.de/wiki/DevelopmentModuleAPI
Das ist mir bekannt. Trotzdem vielen dank
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