Modul zur Nutzung der Raspberry Pi GPIO

…was auch immer jetzt das Ergebnis Deines Tests sein wird, so ganz klar ist mir der Ansatz von diesem Code nicht.

Hier die Zeile die für mich insofern unverständlich ist weil es lediglich einen Bezug auf den Mittelwert der zehn Messungen hat:

 gas_score = (0.75/(gas_upper_limit-gas_lower_limit)*gas_reference -(gas_lower_limit*(0.75/(gas_upper_limit-gas_lower_limit))))*100;

Die Limits sind die Annahme das der Widerstand irgendwo zwischen 50kOhm und 500kOhm liegt und der Bezug auf gas_reference was den Mittelwert von zehn Messungen abbildet.
Meine Erwartung wäre gewesen, dass der jetzt gemessene Wert in ein Verhältnis zum Mittelwert gesetzt wird. Bei der Luftfeuchtigkeit passiert das zumindest:

hum_score = ((-0.25/(100-hum_reference)*current_humidity)+0.416666)*100;

Bin nachhaltig verwirrt!:confused:

Joachim

Ich habe den Code von hierum ein bischen UDP Senden erweitert und nehme die Werte dann im IPS an.

Ich habe das Gefühl, dass die Messrate viel höher sein muss und der Sensor extrem empfindlich ist.

Aktuell messe ich alle 3 Sekunden, angelehnt an Tabelle 13 (low power mode) im Bosch Dokument und berechne mir als Baseline in IPS den Median über die letzten 100 Werte.
Damit erhalte ich eine stabile Luftgüte in Prozent, die sehr schnell auf Aftershave reagiert und auch schnell wieder auf den Normalwert kommt, im Vergleich zum MH-Z14 deutlich besser.

Vermutlich wäre die schnelle Messung alle 3 Sekunden und die Medianbildung auf dem PI sinnvoll und dann alle 60 Sekunden eine Werteübermittlung, damit nicht so viele Daten durch’s Netz geschoben werden.

Update:
Ich habe die Formel falsch umgesetzt und hatte den gas_offset immer negativ, dadurch wurde beim Baseline meistens

$gas_score = 100 - ($hum_weighting * 100);

genutzt, also 75, da hum_weighting auf 0,25 steht.

Interessanterweise reagiert der Sensor bei Veränderungen (anblasen, Deo, …) extrem schnell.

Berücksichtigst du die Formeln aus Kapitel 3.4.1 und Tabelle 12 in deinem Ohm-Wert?

Hallo Ralf,

im Wesentlichen habe ich mich an die Umsetzung von Boschselbst gehalten, aber auch dieser Part ist dort - wie auch bei mir - enthalten:

// Gas Widerstand
		$var1 = ((1340 + (5 * $range_switching_error)) * ($lookupTable1[$gas_range])) / 65536;
		$var2 = ((($adc_gas_res * 32768) - (16777216)) + $var1);
		$var3 = (($lookupTable2[$gas_range] * $var1) / 512);
		$GasResistance = (($var3 + ($var2 / 2)) / $var2);

Hier das „Gegenstück“ aus dem Bosch-Code:

var1 = (int64_t) ((1340 + (5 * (int64_t) dev->calib.range_sw_err)) *
		((int64_t) lookupTable1[gas_range])) >> 16;
	var2 = (((int64_t) ((int64_t) gas_res_adc << 15) - (int64_t) (16777216)) + var1);
	var3 = (((int64_t) lookupTable2[gas_range] * (int64_t) var1) >> 9);
	calc_gas_res = (uint32_t) ((var3 + ((int64_t) var2 >> 1)) / (int64_t) var2);

Aber genau das ist z.B. eines der Punkte die auch an anderer Stelle bemängelt werden:
Die Werte in der Tabelle (im Datenblatt ist das Tabelle 12) sind selbst in der Umsetzung von Bosch anders als im Datenblatt, warum weiß ich nicht, habe mich aber auch dabei an die Umsetzung von Bosch gehalten, andere haben diese ebenfalls übernommen.

Was meinen Test angeht, so wechselt die Bewertung der Luftqualität zwischen den beiden schlechtesten Bewertungen. Nun mag das an dem Raum liegen in dem mein Testaufbau installiert ist, halte es aber für deutlich zu schlecht bewertet, ohne „echte“ Referenz aber nur ein Gefühl…

Joachim

Danke für die Info, ich hatte mir dann gestern auch den Quellcode angesehen.

Die Formel ist anders wie die im Kapitel 3.4.1, das PDF ist leider geschützt und ich kann nicht kopieren.

Anders wie in #663 geschrieben, berechne ich inzwischen wie folgt:
Alle 3 Sekunden messen, den Mittelwert von 20 Werten als „Gas“ und den Mittelwert von 100 Werten als Baseline. Damit erhalte ich relativ stabil Werte, die bei optimaler Luftqualität (gemäß MH-Z14) etwas pendeln zwischen 94 % und 97 %. Der MH-Z14 pendelt aber auch zwischen 565 ppm und 575 ppm, der misst aber auch seltener.

Die Reaktion des BME680 auf „schlechte Luft“ ist sehr schnell, unter 1 Minute und bei entsprechender Belüftung nach ca. 15 Minuten wieder auf dem Anfangswert. Der MH-Z14 benötigt ca. 30-40 Minuten bis er wieder auf dem Anfangwert ist.

Hallo Ralf,

wie ich schon sagte, das Datenblatt - was ich hier auch vorliegen habe - und der Beispielcode sind nicht immer gleich, zumindest ist es an einigen Stellen die andere Vorgehensweise nicht so trivial nachvollziehbar.

Neulich habe ich mich ja mit dem BMP180 beschäftigt, dort sind die Erläuterungen zur Funktionsweise noch sehr detailliert, diese nimmt mit dem Datenblatt des BME280 ab und im BME680 fehlen ganze Teile einfach…:frowning:

Im Übrigen habe ich ja oben bereits meine Verwunderung über die Vorgehensweise bei der jetzt verwendeten Methode zum Ausdruck gebracht. Meine Erwartungshaltung wäre auch eine Relativierung zwischen einem „Basiswert“ und den aktuellen Messwerten gewesen, leider findet das so nach dem Code nicht statt.

Warten wir mal ab was da noch kommt…

Joachim

Hallo Acer90,

beim dem Dimmer-Modul habe ich mal etwas gestrickt - ist doch ein wenig Mathematik gewesen…

Bevor ich das nun auf RGB und RGBW übertrage, sollte es erst einmal getestet werden. Hast Du auch den Dimmer in Benutzung?

Joachim

Der Ansatz mit dem Mittelwert über 20 Werte bei 3 Sekunden Messzyklus und Baseline über 100 Werte scheint ganz gut zu passen. Leider läuft mein zurechtgepfuschtes C-Programm nicht stabil und stürzt häufiger ab, aber folgende Verläufe zeigen die Werte bzw. Abweichungen ganz gut.

Der Raum war den ganzen Tag gut belüftet, es war niemand drin und hat die Luft verpestet. Die Sensoren liegen direkt unterhalb der Zuluftöffnung :).

Der errechnete Prozentwert pendelt zwar um 2-3 Prozentpunkte, aber doch in einem relativ engen Bereich.

Und im Vergleich zum MH-Z14 sieht das auch gut aus. Der pendelt auch ein wenig, ca. 8-10 ppm.

So ähnlich sahen die Werte über den ganzen Tag aus.

Die Sensoren liegen direkt unterhalb der Zuluftöffnung .

Und du weisst, was da rein kommt ?:smiley:
Ich habe immer noch die IAQ2000 am laufen, und da kommen oft mal komische Werte, wenn die Zuluft (Fenster) offen ist, aber das riecht man teilweise.

Der IAQ2000 hat zum Vergleich der IAQ Engine gleiche Werte ich Raum gehabt, daher würde ich den BME680 damit vergleichen wollen, um zu sehen was passiert.
Ich muss mir mal nen 680er besorgen, wenn mal viel Zeit ist.:frowning:
Und nein Ralf, neue Sensorik wird nicht mehr am LCN (IX) bei mir laufen.:confused:

.

Naja, ich wohne ja nicht auf dem Dorf :p.

Bei Nutzung des Raumes, hier duschen, also deutlich erhöhte Luftfeuchtigkeit, reagiert der BME680 etwas langsamer als der MH-Z14, aber der Normalwert wird schneller wieder erreicht, was auch der „gefühlten“ Luftqualität entspricht.

Ich werde noch ein wenig mit der Anzahl der jeweiligen Werte bei den Mittelwertbildungen spielen, um eventuell eine schnellere Reaktion zu erreichen.

In Summe gefällt mir der Lösungsansatz sehr gut, gerade auch im direkten Vergleich zum MH-Z14.

Hey mal einen Frage?

Kann ich folgende Raspberry-Pi Platinen mit deinen Module benutzen?

IOPi Plus
RPi Expansion Boards by Manufacturer - eLinux.org

Laut Herstellerwebseite sitzt da ein MCP23017 drauf.
ist eine Abfrage und Steuerung der Ports möglich?

Hallo Acer90,

wie Du auch in der Auflistung auf Seite 1 siehst, ist dieser (noch) nicht dabei. Selbst wenn, wäre es für mich nicht möglich dann eine Nutzung mit meinem Modul zu gewährleisten.

Der PCF8574 wäre da eine Möglichkeit der schon integriert ist.
Darüber hinaus wäre auch der Einsatz der I/O-Module von GeDaD möglich, die entsprechenden GeCoS-Module für In/Out könnte ich relativ schnell hier integrieren. Basis ist dort der PCA9655E.

Noch ein wichtiger Hinweis zur Nutzung von Eingängen: Diese sind nicht immer gut geeignet um zeitkritische Prozesse abzubilden. So würde ich diese z.B. nicht empfehlen um Taster in der Verbindung mit Beleuchtung zu verwenden. Die Zeit die der Taster betätigt werden muss - auch wenn er sich im ms-Bereich bewegt - „fühlt“ sich schon „ungewöhnlich“ an.

Joachim

Hallo Joachim

Habe seit ein paar Wochen Dein Modul im Einsatz (Raspi 3). Bisher lief alles Prima.
Heute habe ich das Modul aktualisiert, um die L298N Motorsteuerung zu testen.
Seit dem kann ich keine GPIO-Ports mehr setzten.

Im Debug des IPS2GPIO_Output steht:


TXT: 10.12.2017 16:14:18.00 |           Set_Status | Ausfuehrung
HEX: 10.12.2017 16:14:18.00 |           Set_Status | 41 75 73 66 75 65 68 72 75 6E 67 
TXT: 10.12.2017 16:14:19.00 |           Set_Status | Ergebnis: 0
HEX: 10.12.2017 16:14:19.00 |           Set_Status | 45 72 67 65 62 6E 69 73 3A 20 30 
TXT: 10.12.2017 16:14:19.00 |           Set_Status | Fehler beim Setzen des Status!
HEX: 10.12.2017 16:14:19.00 |           Set_Status | 46 65 68 6C 65 72 20 62 65 69 6D 20 53 65 74 7A 65 6E 20 64 65 73 20 53 74 61 74 75 73 21 


Ich setzte die IOs mit diesem kleinen Script:


$flap = GetValueBoolean(40681 /*[Garten \Frostschutz\Klappe\Klappe]*/);
I2GOUT_Set_Status(44909 /*[Garten \Frostschutz\Raspi\IPS2GPIO_Output Relais 1]*/,!$flap);
I2GOUT_Set_Status(54549 /*[Garten \Frostschutz\Raspi\IPS2GPIO_Output Relais 2]*/,!$flap);

Die Fehlermeldung:


Warning:  
Warning:  socket_connect(): unable to connect [10061]: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.
 in H:\IP-Symcon\modules\SymconModules\IPS2GPIO\module.php on line 1467
RESULT: in H:\IP-Symcon\modules\SymconModules\IPS2GPIO_Output\module.php on line 148

Warning:  
Warning:  socket_connect(): unable to connect [10061]: Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte.
 in H:\IP-Symcon\modules\SymconModules\IPS2GPIO\module.php on line 1467
RESULT: in H:\IP-Symcon\modules\SymconModules\IPS2GPIO_Output\module.php on line 148

pi.jpg

Die Temperaturmessung per 1Wire klappt einwandfrei.

Habe den Raspi (Jessy) upgedatet / rebootet leider ohne Erfolg .
Was könnte ich noch versuchen ??

Vielen Dank

Oliver

…das sieht so aus, als wenn PIGPIO sich verabschiedet hat, sollte sich aber dann nach ca. zwei Minuten fangen. Ist der Raspberry per WLAN angebunden?

Joachim

Jepp ist WLAN.
Ein Neustart des pigpio über das Modul bringt auch nix.
Evtl. versuche mal eine neuinstallaion des pigpio.

…warte noch mal mit der Neuinstallation , nicht das ich da irgendeinen Fehler gemacht habe…[emoji15]

Ok. Danke für Deine Hilfe

…bin noch unterwegs, daher wird es noch ein bisschen dauern.
Wenn Du auf dem entfernten Raspberry Pi mal „top“ laufen lässt, dann siehst Du ja ob PIGPIO läuft. Zum anderen solltest Du die Meldungen im IPS mal im Auge behalten.
Wenn PIGPIO sich selbst beendet, wird es vom Modul eigentlich wieder gestartet. Irgendwie passiert das bei WLAN aktuell öfters, gibt schon einige in diesem Thread die darüber berichtet haben. Einen Raspberry habe ich auch so angebunden, da passiert das leider auch öfters…[emoji17]

…was passiert denn, wenn Du PIGPIO „manuell“ startest? Gibt es eine Fehlermeldung? Was steht in den Meldungen? Was ggf. interessantes im Debug des Splitters?

Ich kann hier so im Skript erst einmal keinen Fehler feststellen… (was ja nicht immer etwas zu bedeuten hat…:wink: )

Joachim

Hi Joachim,

hab es gerade auf einem RasPi mit Stretch installiert und dann von einem Win7 IPS drauf zugegriffen.

Folgende Fehlermeldung erscheint im Windows IPS, obwohl ich dort nur das BT Modul nutze:

Parsing Error: syntax error, unexpected ‚{‘
Error in script …\SymconModules\IPS2GPIO_HCSR04\module.php on line 103

Kann es sein dass dort im Zuge von C&P eine schliessende Klammer fehlt?

mfg

BerndJ

Bernd, so war es! :wink:

Bitte mal updaten und noch mal probieren!

Joachim