Arduino/ATTiny 433 MHz Signale über RaspberryPi in FHEM bringen

Begonnen von noshi21, 10 Juni 2014, 16:09:33

Vorheriges Thema - Nächstes Thema

noshi21

Hallo zusammen,

aktuell baue ich mir Batteriebetriebene 433 MHz Temperatur- und Luftfeuchtesensoren. Dabei teste ich die Sensoren über einen Arduino Leonardo und möchte den Sketch später auf einem ATTiny AVR unterbringen. Dieser AVR stellt dann in Verbindung mit einem DHT22 Sensor und einem 433 MHz Sender den Wireless-Sender dar (an einem Batterieblock hängend).

Aktuell kann ich nun schon am Raspberry Pi (an diesem hängt der 433 MHz Empfänger) den RFSniffer aus den 433Mhz-Utils laufen lassen, und ich sehe manuell vom Arduino gesendete Daten. Demnach funktioniert die Wireless Kommunikation zwischen Arduino und Raspberry schon mal. Soweit, so gut.

Mein Problem ist nun, die späteren Sensordaten live im FHEM abzubilden. Den RFSniffer kann man ja leider nur "live" laufen lassen, nicht als Daemon, der die Daten dann in irgendeine Textdatei etc. schreibt. Hat jemand eine Idee, wie ich an die Daten vom FHEM aus dran komme? Mir würde schon ein Daemon ausreichen, der alle Daten die per 433 MHz rein kommen irgendwo hin packt.

Ansonsten bleibt mir wohl nicht anderes übrig, als selber was zu basteln. Gibt es vielleicht eine Raspberry Pi Variante der "Virtual Wire" Library des Arduino?

Danke

hexenmeister

So einen fertigen demon kenne ich nicht. Es dürfte aber nicht sehr schwer sein, so etwas zu bauen. Eine andere Möglichkeit wäre, einen arduino dafür zu nehmen. Als Vermittler zwischen der Funkschnittstelle und einem USB-Port.
Einen fhem-Modul zum interpretieren der Daten brauchst du noch in jedem Fall.

Ich habe paar ähnlichen Geräte an laufen. Basiert auf einem ATtyni84, DHT22 und rfm12b. Als Empfänger habe ich einen JeeLink genommen. Dafür gibt es schon ein fhem-Modul. Ein Modul für meine Sensoren habe ich dann selbst geschrieben.


noshi21

Hallo hexenmeister,

das klingt auch ziemlich interessant was du da bereits am laufen hast.

Die Idee mit dem Arduino als USB Empfänger ging mir auch schon mal durch den Kopf. Der Leonardo ist ja praktisch übrig, wenn die ATTiny's geflasht sind. Allerdings fehlt mir da irgendwie der Ansatz. Im Prinzip wird der Arduino ja als USB / Serial Device erkannt. Demnach kann ich ja einfach die seriellen Signale auslesen? Aber wie setze ich das am besten um? Einen Daemon fortlaufend in eine Datei schreiben lassen und dann per FHEM Modul auslesen, oder über das FHEM Modul direkt die Signale abgreifen lassen (geht sicher nicht...?)

Hm, aber prinzipiell sieht es so aus, als wartet da wohl noch ein wenig Programmieraufwand auf mich....

hexenmeister

Hallo noshi21,

der Arduino liest die Daten aus der Funk-Schnittstelle und schiebt sie (z.B. als Text) in die Serielle. Diese wird FHEM-Seitig aufgegriffen. Es macht Sinn ein 2-Teiliges Modul zu implementieren. Ein mal die IO-Schnittstelle (also zu Interpretieren einer Seriellen Schnittstelle) und dann noch je ein Modul pro spezifischen Divece (oder eben einen universällen für alle Deine Geräte). Dieses wird von dem Ersten angesprochen und hat die Aufgabe die Daten zu interpretieren.

Ich habe mich für rfm12b entschieden, weil die Teile relativ intelligent, sparsam und günstig sind. Außerdem existieren dafür Arduino-Libs und auch in FHEM ist das nicht unbekannt.
JeeLink ist so ein Arduino-RFM12b Device: http://www.digitalsmarties.net/products/jeelink
Diesen kann man auch relativ einfach selbst nachbauen. Dafür gibt es auch schon ein FHEM-Modul: 36_JeeLink.pm. Es bleibt ein Sketch auf den JeeLink zu flashen (ich habe den Beispiel-Sketch lediglich leicht angepasst) und ein FHEM-Modul zum Interpretieren der von Sensoren versendeten Daten zu schreiben. Auch hier gibt es schon ganz gute Beispiele.

ZitatHm, aber prinzipiell sieht es so aus, als wartet da wohl noch ein wenig Programmieraufwand auf mich....
Wenn Du bei Deinem eingenem Weg bleiben willst, dann eher ja. Wenn Du noch am Anfang stehst, könntest Du evtl. auch auf ein anderes Transmitter-Chip wechseln (CC1101, oder RFM12b), dann kannst Du von bereits fertigen Lösungen profitieren.

Was hast Du eigentlich als Sender/Empfänger genommen? Oder benutzst Du reine Funkteile ohne eigene (Prozessor-)Logik?

noshi21

Ja, ein 2-teiliges Modul klingt recht flexibel. Vielleicht setze ich mich da mal dran.
Mein Sender / Empfänger Paar ist dieses: http://www.ebay.de/itm/1-Set-MX-FS-03V-MX-05-433Mhz-WL-RF-Wireless-Modul-Transmitter-Empfanger-Hot-/301176129064?pt=LH_DefaultDomain_77&hash=item461f7f0628
Damit habe ich seit etwa einem halben Jahr gute Erfahrungen gemacht. Auch was die Reichweite betrifft.

Gibt es denn eine Möglichkeit ein "virtuelles" FHEM Device extern zu füttern, z.B. über einen Webserver Request ? Dann würde ich direkt vom Raspbian aus die Daten seriell abfangen (die kommen schon recht gut gefiltert an) und dann einem Device zuordnen. Allerdings werden das wahrscheinlich zu viele Hick Hack- Insellösungen, ohne roten Faden.  ;)

Von den Jeelinks habe ich auch schon mal gehört, allerdings ist das irgendwie im Sand verlaufen. Und natürlich versuche ich immer mit den gegebenen Sachen ans Ziel zu kommen. :)

hexenmeister

Ah, ja. Reine Funkteile, habe ich auch irgendwo rumliegen.
Der Vorteil von 'klugen' Transmitter ist,  dass sie (je nach Modell) schon Antennenanpassung, Flusskontrolle, Kollisionserkennung, Prüfsummen etc. selbständig übernehmen.
Aber gut, mit deinen musst du eben etwas mehr programmieren.

hexenmeister

Klar kannst du auch aus dem fhem-Modul auch Ergebnisse eines deamon etc. abfragen.

noshi21

Kurzes Status Review:

Der Arduino hängt nun per USB am Raspberry Pi und wird tadellos als Serial Device erkannt. Nun habe ich mir ein Python Script geschrieben, welches die im 5 Minuten Takt vom Arduino gesendeten Messwerte in eine entsprechende Datei (pro Sender-ID) packt. Das Klappt soweit alles wunderbar.

Nun stehe ich irgendwie auf dem Schlauch.

Gibt es denn bereits ein Modul, welches nach vorhandenen Werten in Textdateien sucht und diese einem Device zuordnet?
Oder macht es doch mehr Sinn FHEM den Arduino direkt seriell abzufragen? Da wären allem Anschein nach die ECMD oder DEVIO Module mein Einstieg.


hexenmeister

Der Umweg über eine Datei ist nicht sinnvoll, vor allem aus Performancegründen.
Schau dir als Beispiel für JeeLink Modul an.

MaJu

Zitat von: noshi21 am 11 Juni 2014, 15:31:54
Ja, ein 2-teiliges Modul klingt recht flexibel. Vielleicht setze ich mich da mal dran.
Mein Sender / Empfänger Paar ist dieses: http://www.ebay.de/itm/1-Set-MX-FS-03V-MX-05-433Mhz-WL-RF-Wireless-Modul-Transmitter-Empfanger-Hot-/301176129064?pt=LH_DefaultDomain_77&hash=item461f7f0628
Damit habe ich seit etwa einem halben Jahr gute Erfahrungen gemacht. Auch was die Reichweite betrifft.

Hallo noshi21,
ich habe mir das Set nun auch bestellt. Wie man den Sender anschließt, habe ich gefunden. Wie aber wird der Empfänger angeschlossen?
Du schreibst, du hast mit dem Set gute Erfahrungen gemacht. Doofe Frage: was empfängst du damit, und wie? Kann ich damit die Fernbedienung der Baumarkt-Steckdosen zum auslösen von notifys nutzen, wenn ja wie? (Vermutlich fehlt mir der passende Suchbegriff hier im Forum)

Danke!
Erlebnisreiche Grüße aus Leipzig!

Wzut

Zitat von: MaJu am 25 Juni 2014, 17:49:06
Kann ich damit die Fernbedienung der Baumarkt-Steckdosen zum auslösen von notifys nutzen, wenn ja wie?
(Vermutlich fehlt mir der passende Suchbegriff hier im Forum)
1 - kann gehen , kommt auf einen Versuch an
2 - schaust du hier : http://forum.fhem.de/index.php/topic,17196.0.html oder da http://forum.fhem.de/index.php/topic,22320.0.html
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

noshi21

#12
Hallo MaJu,

schön das du dich auch für dieses 433 MHz Pärchen entschieden hast. Ich hab mittlerweile auch schon wieder 2 Pärchen bestellt. :-)

Die Sendeleistung (also vom Sender) kannst du übrigens verbesseren, indem du am RPI auf 5V Vcc gehst. Der Sender verträgt bis zu 12 V. Dementsprechend geht dann auch die Reichweite nach oben.

Der Empfänger verträgt max. 5V. Im Prinzip schließt du den genauso an wie den Sender. 5V auf Vcc, GND auf Gnd, und dann suchst du dir noch nen freien DATA Pin am RPI (oder wo willst du den empfänger anschließen?). Es ist übrigens egal welchen DATA Pin vom Empfänger du nutzt. Es funktionieren beide.

Mein Empfänger hängt an einem Arduino, da dieser für solche Empfängergeschichten wesentlich besser geeignet ist. Beim Raspberry hast du das Problem, dass sich die CPU stets immer noch um das Betriebssystem und andere Prozesse kümmern muss und dadurch eine stets optimale Reaktionszeit nicht immer gegeben ist. Somit kann dir auch mal das ein oder andere Signal durch die Lappen gehen. Beim Arduino kümmert sich der Mikrocontroller um nichts anderes als die Daten vom Empfänger abzugreifen und diese dann z.B. an den Raspberry via Serieller Schnittstelle weiterzugeben (wie z.B. bei mir der Fall)

Ich nutze den Sender zum senden von eigenen Sensordaten (Temperatur, Luftfeuchte, etc.) über einen Attiny Chip, welche dann von einem Arduino mit Empfängermodul angefangen werden. Der Arduino sendet diese dann weiter an den Pi.

Ansonsten habe ich hier vielleicht noch einen schönen Link für dich: http://onkeloki.de/2013/12/16/raspberry-pi-funkfernbedienung-auslesen-und-senden/