[Erweiterung] Raspberry: 58_GPIO4 neben 1Wire jetzt auch für DHT11/DHT22

Begonnen von KölnSolar, 02 Juli 2021, 14:18:56

Vorheriges Thema - Nächstes Thema

KölnSolar

Hi Jörg,

habs nochmal neu angelegt. Diesmal war der erste Zugriff eigentlich erfolgreich und trotzdem
Zitat2021.10.18 20:03:11 1: Define init_done: KlimaKeller1 OneWire DHT-5
2021.10.18 20:03:12 5: KlimaKeller1: Finish: KlimaKeller1 error=empty_data
2021.10.18 20:04:11 5: KlimaKeller1: DeviceUpdate(KlimaKeller1), pollingInterval:60
2021.10.18 20:04:11 5: KlimaKeller1: BlockingCall for KlimaKeller1
2021.10.18 20:04:11 5: KlimaKeller1: Open /sys/devices/platform/dht11@5/iio:device0/in_temp_input
2021.10.18 20:04:11 5: KlimaKeller1: Open /sys/devices/platform/dht11@5/iio:device0/in_humidityrelative_input
2021.10.18 20:04:12 4: KlimaKeller1: No data found in /sys/devices/platform/dht11@5/iio:device0/in_humidityrelative_input
2021.10.18 20:04:13 5: KlimaKeller1: Finish: KlimaKeller1 error=empty_data
2021.10.18 20:05:11 5: KlimaKeller1: DeviceUpdate(KlimaKeller1), pollingInterval:60
2021.10.18 20:05:11 5: KlimaKeller1: BlockingCall for KlimaKeller1
2021.10.18 20:05:11 5: KlimaKeller1: Open /sys/devices/platform/dht11@5/iio:device0/in_temp_input
2021.10.18 20:05:11 5: KlimaKeller1: Read 16700
2021.10.18 20:05:11 5: KlimaKeller1: Open /sys/devices/platform/dht11@5/iio:device0/in_humidityrelative_input
2021.10.18 20:05:11 5: KlimaKeller1: Read 71500
2021.10.18 20:05:11 4: KlimaKeller1: Poll for dht took 0.027922 s
2021.10.18 20:05:11 1: ERROR: empty name in readingsBeginUpdate
2021.10.18 20:05:11 1: stacktrace:
2021.10.18 20:05:11 1:     main::readingsBeginUpdate           called by ./FHEM/58_OneWire.pm (518)
2021.10.18 20:05:11 1:     main::OneWire_FinishFn              called by (eval 3004870) (1)
2021.10.18 20:05:11 1:     (eval)                              called by fhem.pl (1160)
2021.10.18 20:05:11 1:     main::AnalyzePerlCommand            called by fhem.pl (1189)
2021.10.18 20:05:11 1:     main::AnalyzeCommand                called by fhem.pl (1116)
2021.10.18 20:05:11 1:     main::AnalyzeCommandChain           called by ./FHEM/98_telnet.pm (256)
2021.10.18 20:05:11 1:     main::telnet_Read                   called by fhem.pl (3847)
2021.10.18 20:05:11 1:     main::CallFn                        called by fhem.pl (773)
Das list dazu Internals:
   CFGFN     
   DEF        DHT-5
   FUUID      616db6df-f33f-49d8-ce91-6a9f061791e992a9
   NAME       KlimaKeller1
   NOTIFYDEV  global
   NR         634216
   NTFY_ORDER 50-KlimaKeller1
   STATE      T: 16.7 H: 70.9
   TYPE       OneWire
   family     DHT
   id         5
   model      DHT-5
   .attreocr:
     humidity
     temperature
     battery
   .attrminint:
     humidity:600
     temperature:600
   .userReadings:
     HASH(0x5a55728)
   READINGS:
     2021-10-18 20:26:13   Luftentfeuchter 0
     2021-10-18 17:12:56   dewpoint        11.4
     2021-10-18 20:26:13   failreason      empty_data
     2021-10-18 20:26:13   failures        15485
     2021-10-18 17:17:56   humidity        70.9
     2021-10-18 17:17:56   state           T: 16.7 H: 70.9
     2021-10-18 17:17:56   temperature     16.7
   getList:
     udev       noArg
   helper:
     write     
     RUNNING_PID:
       abortArg   
       abortFn   
       bc_pid     614465
       finishFn   OneWire_FinishFn
       fn         OneWire_Poll
       pid        DEAD:10479
       terminated 1
       timeout   
       arg:
   setList:
     update     noArg
Attributes:
   event-min-interval humidity:600,temperature:600
   event-on-change-reading humidity,temperature,battery
   room       Keller,Klima
   userReadings Luftentfeuchter { if (ReadingsVal($name,"dewpoint",0) > ReadingsVal("Feinstaub","dewpoint",0)) {1} else {0}}
   verbose    5


Grüße Markus

RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Adimarantis

Hi Markus,

Ich hab jetzt mal hardcoded erfolgreiche Daten bei mir simuliert und prompt zwei Fehler gefunden - die schauen allerdings anders als bei dir aus.
Habs im anderen Thread geupdated. Vielleicht hängt das ja doch zusammen.

Wie erstellt du das Device? Schaut so aus als wäre das irgendwie von deiner GPIO4 Instanz gecloned.
Wenn der Fehler immer noch besteht, könntest du auf jeden Fall mal ein "set update" machen. Da wird viel initalisiert - vielleicht hilfts (und gibt mit einen Hinweis)
Sonst wäre auch interessant ob es nach einem "shutdown restart" immer noch Probleme macht.

Gruß,
Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

KölnSolar

Hi Jörg,

ZitatWie erstellt du das Device? Schaut so aus als wäre das irgendwie von deiner GPIO4 Instanz gecloned.
Na klar. Ich bin ein fauler Mensch.  ;D Sorry für die Verwirrung.

Ich probier die neue Version....

Grüße Markus

Edit: Leider keine Veränderung mit der neuen Version. Auch nicht beim DS18B20-device bzgl. state. shutdown/restart muss ich überlegen, weil ich gerade auch zum leakage Thema teste.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Adimarantis

#33
Jetzt wirds klar: Hab gerade nochmal geschaut welchen "Weg" der Code wohl bei deinem Clone geht und hab was gefunden, das eher auf deine Fehlermeldung passt.
Ich spiel gleich nochmal ein update ein.

Edit: Gerade dein Edit gesehen - das mit dem "state" muss eigentlich jetzt passen - da hab ich schon vor paar Stunden eine Änderung zu gemacht.

Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Beta-User

Kurzer Senf noch bzgl. des Modulnamens: RPI_.* finde ich gut, dann sortiert sich das zu den anderen GPIO-Spielereien für Pi (obwohl es wohl auch auf anderen Plattformen gehen dürfte, die diese kernel-Modifikation verstehen). Ab da wäre ich persönlich relativ leidenschaftslos, und würde nur darüber nachdenken, beide (alle drei?) Schreibweisen entweder im Modulnamen oder der Kurzbeschreibung unterzubringen (damit man es beim suchen in der Webseite findet).

"Modular" wird wohl demnächst default, btw..

Just my (unmaßgebliche) 2ct.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

KölnSolar

Zitatdas mit dem "state" muss eigentlich jetzt passen - da hab ich schon vor paar Stunden eine Änderung zu gemacht
Erwischt. Ich hab einen Fehler beim Einspielen der neuen Version gemacht gehabt.  :o

Mit der aktuellen läuft der DHT u. state beim DS18B20 ist auch OK. Ich lass beide Sensoren nun dauerhaft laufen.

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Adimarantis

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Beta-User

Zitat von: Adimarantis am 19 Oktober 2021, 07:43:25
Was meinst du damit genau?
Zitat von: rudolfkoenig am 15 September 2021, 17:36:44
Ich wuerde gerne ein FHEM 6.1 Paket erstellen,  [...]
P.S.: Ich habe vor die Voreinstellung von "attr global commandref" von full auf modular zu aendern.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Adimarantis

So, jetzt sind meine DHT11 angekommen.
Erst dachte ich schon da funzt wieder was nicht, aber die müssen wohl erst mal "warm laufen". Erst nach etwa 5 Minuten kamen andere Ergebnisse als "0".
Entweder war mein DHT22 wirklich kaputt oder der geht mit dem DHT11 Kernel Treiber einfach doch nicht, denn ich habe den DHT11 einfach an die selbe Stelle ins Breadboard gesteckt und gut.

Ein kleiner Bug ist noch drin. Wenn nur einer der beiden Werte klappt, dann gibt es einen Stacktrace wegen undefined value, stört aber nur wenn man ins logfile schaut. Lohnt erstmal nicht deswegen ein Update einzuspielen.
Die wichtigere Frage ist ob man auf einfache Art und Weise diese device id rauskriegen kann (iio:device0). Wenn mehr als ein DHT11 dran hängen, dann steht hier ja eine laufende Nummer drin (ich vermute mal nach der Reihenfolge der Initialisierung, was schlimmstenfalls nichtmal immer gleich ist).
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

KölnSolar

Zitatder geht mit dem DHT11 Kernel Treiber einfach doch nicht
doch, doch. Ich hab den 22er laufen.

ZitatDie wichtigere Frage ist ob man auf einfache Art und Weise diese device id rauskriegen kann (iio:device0).
Finde ich nicht wichtig. Wer wird schon auf die Idee kommen, mehr als 1 drahtgebundene Klimasensor am Rpi zu betreiben. Für "nur Temperatur" wäre DS18.... die bessere Wahl.

Bin mal gespannt, was bei Dir der Fehlercounter macht.  ;D (Ein Grund warum kaum jemand mehr als 1 Sensor betreiben wird)

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Adimarantis

Also irgendwie ist da noch der Wurm drin. Ich denke ich habe eine Methode gefunden, fast immer Werte zu bekommen. Ich mach einfach bis zu 3 retries wenn ich keine Daten bekomme - erst temp dann humidity. Normal brauche ich einen retry auf temp und humidity geht eigentlich immer.
Allerdings: Die Werte werden fast nie aktualisiert - d.h. ich bekomme immer das selbe. Wenn ich in dmesg schaue dann sehe ich:
[  584.106816] dht11 dht11@5: Don't know how to decode data: 71 0 21 5
[  587.036381] dht11 dht11@5: Don't know how to decode data: 71 0 21 6
[  592.052977] dht11 dht11@5: Don't know how to decode data: 71 0 21 6
[  597.067236] dht11 dht11@5: Don't know how to decode data: 71 0 21 6
[  602.083851] dht11 dht11@5: Don't know how to decode data: 71 0 21 5
[  607.779939] dht11 dht11@5: Don't know how to decode data: 71 0 21 5
[  612.792483] dht11 dht11@5: Don't know how to decode data: 71 0 21 5
[  617.812519] dht11 dht11@5: Don't know how to decode data: 70 0 21 5

Für mich schaut das wie Humidity 71.0 und Temp 21.6 aus und die Werte ändern sich auch - nur kommt der Wert nicht in den in_temp_input/in_humidityrelative files an. Da bekomme ich immer den selben (alten) Wert oder sogar 0.

Steht bei dir was in dmesg?
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Adimarantis

Der Kernel-Treiber ist einfach Schrott. Vielleicht kommt der auch mit meinem Raspi 4(00) nicht zurecht (welchen hast du im Einsatz?)
Wenn ich die Python Library von adafruit oder ein perl Modul von cpan nehme, funktioniert es recht zuverlässig.

Vielleicht macht des Sinn auf das Perl Modul zu gehen. Magst du mal
sudo cpan install RPi::DHT11
installieren und mit folgendem Perl Programm testen ob das auch mit dem DHT12 geht:
use RPi::DHT11;

my $pin = 5;
my $env = RPi::DHT11->new($pin);

my $temp     = $env->temp;
my $humidity = $env->humidity;

print "T: $temp  H: $humidity\n"
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

KölnSolar

Kurzfassung, weil mein ausführliches Geschriebsel wieder "verschwunden" ist.

Ist bei mir auch alles so. Ich hab aber in meiner lokalen Version noch etwas zusätzliches error handling eingebaut.

Zitatinstallieren und mit folgendem Perl Programm testen ob das auch mit dem DHT12 geht:
Mach ich. Gibt's das auch per apt ?
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Adimarantis

Hi Markus,

apt gibt es leider keins.
Ich hab gestern noch ein wenig mit dem Teil rumgespielt und es hat ein Riesenproblem: Der liest so lange Werte bis er was hat - d.h. wenn du z.B. die falsche GPIO konfigurierst, dann geht er in eine Endlosschleife. Sowas kann ich natürlich nicht in einem Modul verwenden. Der Code ist aber so übersichtlich, dass man den ganz einfach umschreiben kann - hat halt einen Teil in "C".
Und irgendwie unterschlagen bei mir alle Lösungen (der Kernel Treiber wie auch diese RPi::DHT11 Teil) die Nachkommastellen bei der Temperatur - ist das bei dir auch so?
Dabei ist es ganz einfach zu fixen (meine umgebaute RPi:DHT11 Variante kann das jetzt).

Ist die Frage wie gross das Interesse hier ist. Ich denke ich könnte auch ein apt bauen und eben eine Version mit timeout und Nachkommastellen zur Verfügung stellen.
Du siehst schon, ich hab Spass an sowas rumzubasteln :)

Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

KölnSolar

Hi Jörg,
ZitatIst die Frage wie gross das Interesse hier ist.
Sicherlich gering, wie man an den Beiträgen schon sieht. Ob es über uns beide hinaus einen weiteren Anwender gibt ?  ;D

Zitatdie Nachkommastellen bei der Temperatur - ist das bei dir auch so?
Nein. Sowohl mit meinem GPIO4, als auch Deinem OneWire(es werden zwar 3 angezeigt, die sind aber immer 0) habe ich eine Nachkommastelle. Das liegt daher eher(glaub ich) an dem Unterschied DHT11/DHT22. Der 11er hat ja eine geringere Genauigkeit.
Gerade hab ich tatsächlich einen Wert 0 bei humidity mit OneWire beobachtet.

ZitatDu siehst schon, ich hab Spass an sowas rumzubasteln :)
Ja. Bei mir hört der Ehrgeiz da auf, wo ich eine halbwegs sinnvolle u. für meine Bedürfnisse funktionierende Lösung habe. Für mehr ist mir dann die Zeit zu schade, da die brach liegenden Projekte auch nach Erledigung schreien.  :)

Hier mal mein letzter Stand
Zitatelsif ($family eq "DHT") {
      return $return_array .= "|".(ReadingsVal($hash->{NAME},"failures",0)+1)."-open_failure_temp" if (!open DATA, "/sys/devices/platform/dht11@".$id."/iio:device0/in_temp_input");
      my $input = <DATA>;
      return $return_array .= "|".(ReadingsVal($hash->{NAME},"failures",0)+1)."-read_failure_temp" if (!defined($input));
      my $temp = $input/1000.0;
      if ($attr{$hash->{NAME}}{tempOffset}) {
         $temp+=$attr{$hash->{NAME}}{tempOffset};
      }
my $deviation = abs(1.0 - $temp/ReadingsVal($hash->{NAME},"temperature",50000));   # $temp
if ($temp > 19.5) {
   Log3 $hash->{NAME}, 1, "GPIO4: GPIO4_Poll($hash->{NAME}) temperature to high: $temp, old temp: ".ReadingsVal($hash->{NAME},"temperature",$temp).", deviation: ".$deviation;
}
return $return_array .= "|".(ReadingsVal($hash->{NAME},"failures",0)+1)."-value_failure_temp $temp" if ($deviation > 0.05); # $temp

      my @faultvalues = split(" ",AttrVal($hash->{NAME},"faultvalues",""));
      my $fault = 0;   
      for (my $i=0; $i < @faultvalues; $i++) {
         $fault = 1 if($temp == $faultvalues[$i]);
      }

Have fun
Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt