Universelle Hardware-Basis für 868MHz Funksensoren und Aktoren

Begonnen von papa, 05 Juli 2017, 22:12:42

Vorheriges Thema - Nächstes Thema

Tom Major

Zitat von: kpwg am 25 August 2018, 10:02:07
Das schaut ja sehr gut aus, vielen Dank dafür! Der Sketch läuft problemlos durch. Was mir auffällt: da wir keinen Luftdruck mehr haben, wird ein Zufallswert im plausiblen Wertebereich geschrieben. Könnte man hier nicht stattdessen einen in der Realität nie vorkommenden Wert mitgeben, um dann in der HMConfig_UniSensor1.pm gezielt bei Auftreten dieses Wertes das entsprechende reading zu unterdrücken?

Nun warte ich (un)geduldig auf die Post, um mit den eintreffenden Bauteilen noch ein paar papa-Boards löten zu können 8)

Ein Zufallswert für den Luftdruck ohne BME280 wird nicht geschrieben, wenn du den SHT10 aktiviert hast, dafür sorgt das #else in Zeile 296.

Allerdings ist mir bei dieser Gelegenheit aufgefallen, das die unbenutzten Sensor-Messwerte nicht initialisiert werden, das habe ich gerade nachgeholt. Wenn du einen anderen Wert als 0 für den Luftdruck (ohne BME280) brauchst kannst du das jetzt in Zeile 234 erledigen.

Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

kpwg

Danke, das funktioniert so einwandfrei mit SHT10 und MAX44009. Luftdruck ist "planmäßig" bei null, Temperatur, Feuchte und Licht werden entsprechend übertragen.

Anbei das Setup, mit dem ich immer wieder experimentiere. Eine mechanisch ansehnliche Lösung für papa's Board mit i2c-Sensorboard und 2xAAA Batterieträger zeige ich hier dieser Tage noch.

FEHMPiDi

Hallo,

ich habe mir auf der HM-Sensor universal Hardware mit Step-up und 2 AAA Batterien, I2C board und einem SHT11 den HB-UNI-Sensor1 aufgebaut.
Ich habe den Config Pin und LED Pin angepasst:
#define CONFIG_BUTTON_PIN 8
#define LED_PIN 4


Sowie noch die Temperatur auch vom SHT11 geholt:

#elif defined SENSOR_SHT10
        sht10.measure();
        humidity = sht10.humidity();
        temperature10 = sht10.temperature();


Das funktioniert soweit schon mal super. iIch bekomme die Temp und Humidity vom SHT11 angezeigt.
Ich bekomme als Batteriespannung aber immer 3V angezeigt, egal wir ich mein Powersupply einstelle (Ersatzweise als Batterie angeklemmt). Habe es mal von 1,5V - 3V laufen lassen. Anzeige im Fhem ist aber immer 3,00V.
Ich habe das Messintervall für die Batteriespannung von 12h auf 2 min gesetzt um nicht immer 12h warten zu müssen :)
Muss ich für die verwendete Hardware noch etwas anpassen um die richtigen Spannungswerte zu bekommen oder mache ich etwas anderes falsch?

Danke

FHEM5.7@RaspPi.3|NanoCUL868-HM|NanoCUL868-Max|SDuino|DS18B20|1xHM-Sen-MDIR-WM55|   
2xHM-LC-Sw1PBU-FM|HM-LC-SW4-DR|I2C_MCP23017|2xMAX-ShutterContact|11xHM-LC-Bl1PBU-FM|CTW600|VCONTROL|1xHM-Sen-MDIR-O|2xMilight

gloob

#498
Ist das nicht gerade der Sinn des Step-Up Wandlers, immer 3V bereitzustellen?

Wenn du die Spannung vor dem Step-Up messen möchtest, musst du das Battery Device als

BatterySensorExt<5,6>

oder

BatterySensorUni<5,6>

definieren.

Falls du die Stelle im Sourcecode suchst:

Zitattypedef AskSin<LedType, BatterySensor, RadioType> BaseHal;

5 und 6 müssen natürlich gegebenfalls angepasst werden.

Nähere Infos gibt es hier: https://github.com/pa-pa/AskSinPP/blob/master/BatterySensor.h
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Tom Major

HB-UNI-Sensor1 verwendet aktuell die "Standard" Batt.messung, die Vcc misst. Der Step-up soll diese immer auf 3V stabilisieren.
Wie gloob schreibt, wenn man bei Einsatz eines Step-up die echte Batt.spannung messen will sollte man die Klasse BatterySensorUni verwenden und man braucht natürlich den 100k/470k Spannungsteiler.
Standard-Auflösung der zurückgelieferten Messwerte ist 100mV.

Ich übertrage im HB-UNI-Sensor1 die Batt.spannung übrigens mit 1mV. Das ist so vorgehalten da ich demnächst die Option "Echte Batteriezustandsmessung unter Last" auch für den Unisensor aktivieren werde, die hat dann 1mV Auflösung, siehe
https://github.com/TomMajor/AskSinPP_Examples/tree/master/HB-SEC-WDS-2
und
https://github.com/TomMajor/AskSinPP_Examples/tree/master/Info/Babbling%20Idiot%20Protection
Nur als Option wenn man den extra Mosfet spendieren möchte..
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

papa

Ich hätte da noch eine "bisher ungetestete" Idee zum Thema Messen unter Last. Könnte man nicht während des Sendens den ADC kontinuierlich die Batteriespannung messen lassen. Der AVR kann nach jeder erfolgten Messung einen ISR auslösen. Mit der ISR-Routine wird der kleinste gemessene Wert zwischengespeichert. Wenn das Senden abgeschlossen ist, wird der kleinste ermittelte Wert als aktuelle Batteriespannung vermerkt.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

FEHMPiDi

Danke es funzt. Nun Messe ich die Batteriespannung.
So wie ich den step up verstanden habe liefert er ziemlich genau die drei volt. Bricht dann aber schlagartig ein, wenn er nicht mehr genug Eingangsspannung hat. Ein langsames Absinken der Ausgangsspannung kann man bei einem step up nicht beobachten. Daher macht für mich die Messung der Batteriespannung mehr Sinn. Aber ich lasse mich gern belehren wenn ich das falsch verstanden habe.
FHEM5.7@RaspPi.3|NanoCUL868-HM|NanoCUL868-Max|SDuino|DS18B20|1xHM-Sen-MDIR-WM55|   
2xHM-LC-Sw1PBU-FM|HM-LC-SW4-DR|I2C_MCP23017|2xMAX-ShutterContact|11xHM-LC-Bl1PBU-FM|CTW600|VCONTROL|1xHM-Sen-MDIR-O|2xMilight

deimos

Hi,

wg. der Betterie hätte ich auch noch eine Idee, welche aber ebenfalls ungetestet ist:

Man misst vor einer stromfressenden Aktion (also primär vor dem Senden) die Spannung und danach. Wenn die Batterien voll sind dürfte die Spannung dabei nicht einbrechen und die Differenz beträgt max. die Messungenauigkeit vom ADC. Wenn aber eine signifikante Differenz vorliegt, dann wird die Batterie langsam leer sein. Dieser Mechanismus ggf. kombiniert mit dem absoluten Wert der Messung nach dem Senden dürfte doch auch schon einen recht guten Indikator abgeben, oder?

Viele Grüße
Alex

Tom Major

#503
Zitat von: papa am 30 August 2018, 20:50:27
Ich hätte da noch eine "bisher ungetestete" Idee zum Thema Messen unter Last. Könnte man nicht während des Sendens den ADC kontinuierlich die Batteriespannung messen lassen. Der AVR kann nach jeder erfolgten Messung einen ISR auslösen. Mit der ISR-Routine wird der kleinste gemessene Wert zwischengespeichert. Wenn das Senden abgeschlossen ist, wird der kleinste ermittelte Wert als aktuelle Batteriespannung vermerkt.

Ich hatte auch schon mal an was Ähnliches gedacht und Dich auch deswegen damals nach sendPeer() überladen gefragt, um Spannung direkt nach dem Senden zu messen, das hatte ich auch kurzzeitig implementiert.

class MyHalType : public HalType {
  ..
  void sendPeer () {
    battery.voltage();
  }


Nachträglich haben mich jedoch 2 Dinge an dem Konzept gestört:
- wenn der Babbling Idiot beim Senden eines Telegramms entsteht hilft das gleichzeitige oder nachträgliche Messen nicht wirklich (obwohl die vorherigen Messungen sicher ein besseres Bild ergeben als eine unbelastete Messung, also eine Verbesserung wäre es schon)
- die 35mA Transmit mode Strom des CC1101 sind mir für eine echte Batt.messung unter Last zu wenig, für 2000-3000 mAh Batt.kapazität hätte ich gern mehr Laststrom gehabt.
Deswegen die Lösung mit dem Mosfet.

Habe aus aktuellem Anlass mein HB-UNI-Sensor1 Beispiel um den Abschnitt "Messung der Batteriespannung" ergänzt um dort mal die Optionen zu dokumentieren.
Früher: FHEM 5.x
Jetzt: RaspberryMatic / ioBroker

mizu

Hallo

habe erfolgreich mit einer Stepup Platine mit 2AAA und dem PIR AM312 sowie dem
Arduinio Exempel HM-SEC-MDIR.ino das ganze zum laufen gebracht.
Und als HM-SEC-MDIR in FHEM eingebunden.
Da es aber zu wenig Arbeit für den ATMEL ist würde ich noch gerne den MAX44009 anstatt dem TSL2561 einsetzen.
Da ich aber im Augenblick (noch) komplett auf dem schlauch sitze, kann mir hoffentlich jemand sagen was ich
im Arduinio Skript ändern muss um aus dem Max440099 die Brightness werte an Fhem zu übertragen.

Gruß Mike

Living

Hallo,
habe gerade bei meinen  beiden HB-UNI-Sensor1  (auf der HMSensor StepUp Hardware)
zum Max44009 einen BME280 montiert und das ergänzte Ino-file geflashed.
Leider wird humidity mit 0 angezeigt.
Helligkeit, Temperatur und Luftdruck zeigen passende Werte an.
Wo muss ich suchen?

papa

BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

Living

Das ist der Fehler. Leider ein BMP280.
Danke für die schnelle Unterstützung.

kpwg

Hat jemand eine Gehäuse-Empfehlung für die Variante mit 2xAAA? Vielleicht passt etwas Fertiges...

Wenn noch wer Batteriehalter-Platinen für 1xAAA benötigt, gebe ich die gerne ab; am Liebsten im Tausch gegen 2xAAA Batteriehalter-Platinen.

Viele Grüße, Ricardo

gloob

Zitat von: kpwg am 29 Oktober 2018, 17:05:13
Hat jemand eine Gehäuse-Empfehlung für die Variante mit 2xAAA? Vielleicht passt etwas Fertiges...

Wenn noch wer Batteriehalter-Platinen für 1xAAA benötigt, gebe ich die gerne ab; am Liebsten im Tausch gegen 2xAAA Batteriehalter-Platinen.

Viele Grüße, Ricardo

Falls du einen 3D Drucker hast, ich hatte da mal was designed:

https://www.thingiverse.com/thing:2972598

Gruß
Stefan
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway