• Du musst dich registrieren, bevor du Beiträge verfassen kannst. Klicke auf Jetzt registrieren!, um den Registrierungsprozess zu starten. Registrierte User surfen werbefrei, können Suchen durchführen und sehen die volle Darstellung des Forums mit vielen anderen Unterforen!!!

Maverick zu Raspberry Pi

Bjoern

Grillkaiser
10+ Jahre im GSV
Ich wollte den anderen Thread nicht kapern, daher hier ein neuer Thread.
Da ich mit wiringPi nicht so ganz klar komme (verfolgt zwar eigentlich den richtigen Ansatz, funktioniert aber eher schlecht), habe ich pigpio bemüht. Dort wird nicht wirklich mit Interrupts gearbeitet, sondern an den DMA-Interrupt angehangen regelmäßig gesampelt. Ist zwar eigentlich nicht ganz so schön, scheint aber besser zu funktionieren. Wenn man das installiert, wird auch ein Daemon namens pigpiod kompiliert, der als root läuft, zu dem sich andere Programme verbinden können.
Das Programm ist in dem Fall zwar von mir unter Python 3 geschrieben, beruht aber auf der Arbeit vieler anderer Personen, u.a. auch auf maverick.c von @der_gute, sowie von "nibbler" aus dem Adafruit-Forum.
Daher kann das Skript auch mit der Prüfsumme umgehen und dadurch mehrere Empfänger auswerten.

Zu finden ist es unter
https://github.com/BjoernSch/MaverickBBQ

Ich hoffe das dieser Link i.O. ist, ist für Quellcode wohl die beste Möglichkeit, auch wenn man eventuell eigene Änderungen einbringen möchte. ZIP-File ist im Anhang.
 

Anhänge

  • maverick.zip
    3,8 KB · Aufrufe: 513
Also die Installation:
Hardwaremäßig wird ein Empänger für 433,92MHz benötigt und an einen freien GPIO-Pin des Raspberry Pi gehängt, siehe Schritt 1 und 2 im anderen Thread.
An Software wird folgendes benötigt:
Python 3:
installiere mit
apt-get install python3-all
pigpio installieren:
Wie auf der Seite beschrieben
wget abyz.co.uk/rpi/pigpio/pigpio.zip
unzip pigpio.zip
cd PIGPIO
make
sudo make install

pigpiod starten:
sudo pigpiod (am besten ein Startskript dafür erstellen, muss nach jedem Boot gestartet werden!)
Und natürlich das Skript:
wget https://raw.githubusercontent.com/BjoernSch/MaverickBBQ/master/maverick.py
chmod +x maverick.py


maverick.py --help zeigt die verfügbaren Optionen an
Als Ausgabe gibt es Meldungen auf die Konsole per --verbose
--html oder --json liefert etwas HTML bzw. JSON ähnliches, Dateiname kann man angeben (keine Header bzw. ein "," zu viel).
--nosync liefert Daten von allen empfangenen Sendern, ansonsten muss man den Sender neu einschalten oder RESYNC drücken bevor er erkannt wird.
--fahrenheit braucht eh niemand
--offset dient zum Feintuning des Empfangs, damit kann man die steigende Flanke in der Auswertung etwas verschieben, wenn man mit --debug --offset 0 startet kann man irgendwo in den durchlaufenden Zeilen etwas sehen wie:
430 0 = 430µs HIGH-Impuls (neues Signal ist LOW, daher die 0)
570 1 = 570µs LOW-Impuls (neues Signal ist HIGH, daher die 1)
ein --offset -70 verschiebt diese Zeiten jetzt auf 500/500, so wie es theoretisch sein sollte. Dies erleichtert die Auswertung etwas und erhöht die Reserven - 400 - 600µs Impulslängen erkennt das Programm aber ohne Probleme.
--pin setzt den Pin für den Empfänger am Raspberry nach offizieller Nummerierung (GPIOxx) , Liste hier
Ansonsten kann das Programm noch nicht all zu viel, mySQL und MQTT steht aber noch auf der Todo-Liste.
Die Konsolenausgabe sieht so aus:

./maverick.py --verbose --nosync
Mon Aug 17 01:40:54 2015: et732 - 14371 - Temperatur 1: 28 °C Temperatur 2: 30 °C
Mon Aug 17 01:40:59 2015: et732 - 38153 - Temperatur 1: 30 °C Temperatur 2: 29 °C
Mon Aug 17 01:41:07 2015: et732 - 14371 - Temperatur 1: 28 °C Temperatur 2: 30 °C
Mon Aug 17 01:41:11 2015: et732 - 38153 - Temperatur 1: 30 °C Temperatur 2: 29 °C
Mon Aug 17 01:41:18 2015: et732 - 14371 - Temperatur 1: 28 °C Temperatur 2: 30 °C
Mon Aug 17 01:41:23 2015: et732 - 38153 - Temperatur 1: 30 °C Temperatur 2: 29 °C
Mon Aug 17 01:41:30 2015: et732 - 14371 - Temperatur 1: 28 °C Temperatur 2: 30 °C

et732 ist der Typ und steht auch beim ET-733 dort. Im Adafruit-Forum ist in Punkto Checksumme/ID ein geändertes Protokoll beschrieben, dieser Code ist im Programm drin - nur nicht getestet. Das konnte ich mit meinem ET-733 aber auch nicht nachvollziehen. Der Code läuft sowohl mit meinem ET-733, als auch mit dem ET-732 von meinem Bruder. Unsere Sender sind bis auf den Siebdruck der Rückseite absolut identisch, beide vom Typ MAV221.
Die ID wird bei jedem neuem Einschalten/ Resync zufällig neu generiert. Beim ET-732 ist 1= Food und 2=Barbecue, 1 + 2 steht aber auch auf dem Sender mit drauf.
 
Ich habe dann meine vermutlich finale Version bei GitHub hochgeladen. Nicht weil es nicht besser geht, aber weil es gut genug (für mich) funktioniert.
Eine SQLite-Datenbank kann jetzt geschrieben werden, und eine rudimentäre PHP-Webseite (eher ein Proof-of-Concept) ist auch dabei.
Damit kann man mit dem Raspberry Pi und einem billigen Funkempfänger seine Daten vom Maverick ET-732 und ET-733 über das Internet auslesen.
Auch mehrere Sender sind kein Problem, diese werden vom System unterschieden.
Kommandozeilenoptionen sind jetzt wie folgt:
Code:
usage: maverick.py [-h] [--html [HTML]] [--json [JSON]] [--sqlite [SQLITE]]
  [--debug] [--pin PIN] [--nosync] [--offset OFFSET]
  [--fahrenheit] [--verbose]

Receives Wireless BBQ Thermometer Telegrams via RF-Receiver

optional arguments:
  -h, --help  show this help message and exit
  --html [HTML]  Writes a HTML file
  --json [JSON]  Writes a JSON file
  --sqlite [SQLITE]  Writes to an SQLite Database
  --debug  Generates additional debugging Output
  --pin PIN  Sets the Pin number
  --nosync  Always register new IDs
  --offset OFFSET  Sets the offset of the rising Edge (in µs)
  --fahrenheit  Sets the Output to Fahrenheit
  --verbose  Print more Information to stdout
 
Die Reichweite ist natürlich stark Empfängerabhängig.
Aber bei mir nur so ungefähr eine Elle (ernsthaft!).
Siehe auch im anderen Thread, dort kämpft man mit den gleichen Problemen.
 
Und ich habe dann doch noch mal eine Option für ThingSpeak hinzugefügt:
Code:
--thingspeak=[Write API Key]
Bis zu 4 Empfänger werden angezeigt, wenn ihr häufiger synct wird immer der älteste rausgeschmissen.

Sieht in der Ausgabe dann so aus: https://thingspeak.com/channels/56253
 
Die Reichweite ist natürlich stark Empfängerabhängig.
Aber bei mir nur so ungefähr eine Elle (ernsthaft!).
Siehe auch im anderen Thread, dort kämpft man mit den gleichen Problemen.

In den Datenblättern findet man den Hinweis das er 3,5--12V braucht.
Die Reichweite ist von der Spannung abhängig.
Der PI gibt 3,3V aus...

Hat einer von euch ein Logic Level Converter bzw. kann sich schnell einen bauen und schauen ob er mit 5V eine höhere Reichweite erreicht?
 
Ist ja nur der Ausgang, da reicht ein Spannungsteiler aus. Mach ich später.
Habs halt erst am Schreibtisch getestet und hat dann funktioniert (Und auch keine Infos mehr zum Modul was ich aus der Bastelkiste ausgegraben habe).
 
Geht sicht so gut:
2015-12-31 09.15.33.jpg
2015-12-31 09.15.47.jpg

Geht deutlich besser, im Moment gerade mit 8m:
2015-12-31 09.16.31.jpg
2015-12-31 09.17.06.jpg


Das Skript ist auch angepasst und kommt mit dem erhöhten Rauschen im empfindlicheren Modul deutlich besser zurecht.
 

Anhänge

  • 2015-12-31 09.15.33.jpg
    2015-12-31 09.15.33.jpg
    133 KB · Aufrufe: 2.662
  • 2015-12-31 09.15.47.jpg
    2015-12-31 09.15.47.jpg
    140,9 KB · Aufrufe: 2.780
  • 2015-12-31 09.16.31.jpg
    2015-12-31 09.16.31.jpg
    185,1 KB · Aufrufe: 2.669
  • 2015-12-31 09.17.06.jpg
    2015-12-31 09.17.06.jpg
    191,4 KB · Aufrufe: 2.737
Hi Björn,

super Arbeit! Mit 8Metern kann ich leben :P Hast du eine Bezugsquelle für mich?
8Meter waren auch nur das Ende vom Haus, draußen regnet es gerade.
Amazon hat da etwas. Ansonsten bei ebay nach “rxb6 433“ suchen, Kommt dann halt direkt aus China.
 
würde auch ein rfm12b modul funktionieren?
Jein.
Du müsstest das Modul erst per SPI initialisieren. Ich habe mich zwar schon einige zeit mit den RFM12 Modulen beschäftigt, aber nur zur Datenübertragung mit dem eingebauten Sender/ Empfänger mit FIFO usw. Das geht in diesem Fall nicht.
Daher hatte ich keine Lust noch eine zusätzliche Ebene einzuziehen, auf der alles mögliche schief gehen kann. Vielleicht hilf dir das hier weiter, falls du es versuchen möchtest.
 
Jetzt läuft es übrigens auch mit einem anderen GPIO als 4.
Hatte noch einen Bug drin.
 
Geht das auch ohne Löten? :confused:
Die Bilder hast du schon gesehen? Wobei ich die Antenne wie in den Bildern direkt anlöten würde.
Die Drähte direkt vom Raspberry zum Empfänger sollte genauso funktionieren.
 
Ich habe zwar einen Lötkolben, aber kann nicht wirklich löten, daher die Frage, ob das nicht auch mit Stecken geht. In der aktuellen c't ist z.B. ein Raspberry Pi Projekt, mit dem man 433 MHz Sachen ansprechen kann (z.B. Funksteckdosen) OHNE jegliches Löten. Wenn das auch hier ginge, wäre das super :-)
 
Kannst du genau so anschließen, aber es wundert mich wie der Autor Signale vom Nachbarn empfangen konnte. Das Modul hat bei mir nicht gut funktioniert.
Ich würde versuchen das o.g. Modul zu kaufen, und dann wie es dort auch gemacht wurde folgende Verbindungen mit Steckdrähten machen:

(Funkmodul) - (Raspberry)
GND - GND (6)
Data - GPIO 4 (7)
DER - frei
+5V - 3,3V (1)

+5V
GND
GND
ANT - 17,3cm langer Draht als Antenne
 
Zurück
Oben Unten