Raspberry und Arduino per RS485 verbinden? Protokoll HomeMatic Wired...

Begonnen von stonev, 09 November 2015, 23:43:15

Vorheriges Thema - Nächstes Thema

stonev

Hallo,

mir qualmt langsam der Kopf und es ist an der Zeit, dass ein Anfänger noch mal ein paar Anstöße braucht :-\

Ein Raspberry steht bereit. FHEM ist bereits installiert. An das GPIO soll nun ein Max485 anschlossen werden um anschließend eine RS485 (Protokoll: HMW) Verbindung zum einem Arduino (Ebenfalls mit Max485) aufzubauen.

Folgende Fragen:

1. Hardwareaufbau:
Sowohl der Arduino als auch der RPI sollen einen Max485 wie auf der angehängten Grafik bekommen und darüber kommunizieren können. Also nur den Max485 und sonst (abgesehen von Busabschluss) nix weiter.
Ich habe jetzt ein paar mal im Netz gelesen, dass Leute zwischen RPI und Max485 noch einen Pegelwandler schalten. Das verunsichert mich etwas. Was ist richtig?

2. Software:
Die Geräte müssen ja mitbekommen, dass da nun ein MAX485 an ihrer seriellen schnittstelle hängt. Da muss ich doch beim RPI bestimmt ein Paket installieren und beim Arduino ne Library einbinden?
Was genau muss ich da machen? Gibt es da vlt. irgendo eine Anleitung?

3. Protokoll:
Im HomeMatic Berich wird ein Homematic Wired Protokoll entlickelt. Die Lib für den Arduino habe ich gefunden, aber was muss ich alles in den Sketch schreiben, das es funktioniert. Der Arduino muss ja eine Adresse bekommen. Gleiches dürfte auch für den RPI gelten, wobei hier das Protokoll schon in FHEM implenentiert sein dürfte. Denke da brauch nicht nichts mehr machen, oder?

Es wäre toll, wenn mir jemand mal genau sagen könnte, was zu tun ist. Wenn es Links auf hilfreiche Quellen gibt, wäre ich sehr dankbar.

PeMue

Zitat von: stonev am 09 November 2015, 23:43:15
1. Hardwareaufbau:
Sowohl der Arduino als auch der RPI sollen einen Max485 wie auf der angehängten Grafik bekommen und darüber kommunizieren können. Also nur den Max485 und sonst (abgesehen von Busabschluss) nix weiter.
Ich habe jetzt ein paar mal im Netz gelesen, dass Leute zwischen RPI und Max485 noch einen Pegelwandler schalten. Das verunsichert mich etwas. Was ist richtig?
Hallo,

ich habe jetzt nicht geprüft, an welchen Pins der MAX385 hängt, aber der Raspberry Pi hat 3,3 V Pegel an den Ausgängen. Daher würde ich komplett auf 3,3 V (auf der Raspberry Pi Seite) umstellen und einen MAX3485 (3,3 V) nehmen. Im Proinzip machst Du über den RS485 Bus eine serielle Verbindung auf, d.h. Du solltest den MAX3485 an die seriellen Pins hängen (oder per GPIO Pin eine serielle Schnittstelle Senden bzw. Empfangen emulieren).

Zitat von: stonev am 09 November 2015, 23:43:15
2. Software:
Die Geräte müssen ja mitbekommen, dass da nun ein MAX485 an ihrer seriellen schnittstelle hängt. Da muss ich doch beim RPI bestimmt ein Paket installieren und beim Arduino ne Library einbinden?
Was genau muss ich da machen? Gibt es da vlt. irgendo eine Anleitung?
Stimmt, einfach mal nach serielle Schnittstelle Raspberry Pi freischalten hier im Forum bzw. auf Google suchen ...
Für Arduino kann ich nichts sagen.

Soweit mal, was ich weiß.

Gruß PeMue
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

Thorsten Pferdekaemper

Hi,
schau Dir mal den ganzen Kram zu Homematic Wired im Wiki an. Da steht eigentlich, wie es geht. Natürlich hängt da kein MAX485 direkt am RasPi.
Ich würde auch empfehlen, das ganze erst einmal mit einem Original HMW-Gerät zu machen, wenn Du Dich selbst als Anfänger bezeichnest.
Gruß,
   Thorsten
FUIP

stonev

OK, aber viel braucht der MAX485 auch nicht. Ich war halt unsicher bzgl. 3,3V / 5V.
Ich werde bei nächster Gelegenheit eine 3,3 V Version mitbestellen. Bis dahin behelfe ich mit dem 5V Max und leg nen Spannungsteiler aus zwei Widerständen zwischen Max und RX am RPI.

Ich habe heute noch ganz viel im WIKI gelesen. Verstehe einiges, weiß aber manchmal noch nicht, wie es praktisch umgesetzt wird. Ich wollte hier auch keine fertigen Lösungen von euch, sondern nur Denkanstöße....  ::)

Nach Installtion und Verkabelung der Hardware würde ich nun wie folgt weitermachen:


  • Einbinden des Max485 als Device:

    Um später auf die Schnittstelle zugreifen zu können muss sie z. B. als Device  (ttyAMA0?) eingebunden werden.
    sofern man einen USB <-> RS-485 Adapter verwendet läuft das Plug&Play, aber mit dem MAX vie GPIO wohl nicht.
    Nach dieser Anleitung kann man die serielle Schnittstelle als /dev/ttyAMA0 ansprechen. Da wird dann allerdings der P5 Header genutzt.

    Keine Ahnung, ob das der Königsweg ist, oder ob es bessere Lösungen gibt? Es ist sicher nicht der einzige Weg...


  • Einbinden des HMW-Protokolls in FHEM

    Die Notwendigige Bibliothek für den RPI gibt es im GIT.
    Der Inhalt vom Branch kommt in das Verzeichniss /FHEM/
    Ich nehme an, zur Konfiguration in FHEM.cfg kann man die Beispiel serial.cfg nehmen, muss nur das Device anpassen auf ttyAMA0

attr global logfile -
attr global modpath .
attr global motd ...
attr global statefile ./log/fhem.save
attr global userattr devStateIcon icon webCmd
attr global verbose 3

define telnetPort telnet 7073 global
define autocreate autocreate

define WEB FHEMWEB 8093 global
attr WEB plotmode SVG
attr WEB plotsize 800,240

### HM485 Interface (WIZ108SR)
#
define HM485_LAN HM485_LAN localhost:2000
attr HM485_LAN HM485d_device /dev/ttyAMA0
attr HM485_LAN hmwId 00000001
attr HM485_LAN HM485d_bind 1

# on slow servers like fritzbox or raspberry pi it should necessarry to increase this value
attr HM485_LAN HM485d_startTimeout 2

attr HM485_LAN room HM485
attr HM485_LAN HM485d_logVerbose 4

# Test webCmd
attr HM485_LAN webCmd RAW 000085CD 98 00000001 780F00:discovery start


    Ist das so richtig?

    Im Wiki steht auch, dass man den "hm485d.pm-Daemon einrichten" soll. Ichnehme an, damit das vorgenannte gemeint...?
    [/li]


Thorsten Pferdekaemper

Hi,

wie man das mit einem "nackten" MAX485 oder so hinbekommt musst Du wahrscheinlich selbst ausprobieren. Ich mache das bisher erfolgreich damit: http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187. Dafür könnte ich Dir auch eine fertige Konfiguration liefern.

Das Zeugs im git packt man einfach so wie es ist ins fhem-Verzeichnis, also normalerweise /opt/fhem. Du brauchst nicht nur das Unterverzeichnis FHEM, sondern auch www.

Das mit dem Daemon sollte automatisch passieren, wenn man nach der Anleitung hier vorgeht: http://www.fhemwiki.de/wiki/Serial/Netzwerk-RS485-Adapter. Allerdings wie gesagt: Mit einem nackten MAX485 über irgendwelche GPIOs hat das wahrscheinlich noch niemand versucht.

Gruß,
   Thorsten
FUIP

stonev

Dirk hat es scheinbar schon einmal gemacht:
http://forum.fhem.de/index.php/topic,12854.0.html

Dachte daher das wäre gängige Praxis und erprobt.
Ich will mir natürlich keine unnötigen Probleme einhandeln. Das könnte man dann irgendwann probieren, wenn die gesamte Konfiguration läuft.

Ich besorge mir dann den Digitus.

Zitat von: Thorsten Pferdekaemper am 10 November 2015, 22:19:39
Du brauchst nicht nur das Unterverzeichnis FHEM, sondern auch www.

Was meinst Du mit .www  ein weiteres Unterverzeichnis?


Zitat von: Thorsten Pferdekaemper am 10 November 2015, 22:19:39
Ich mache das bisher erfolgreich damit: http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187. Dafür könnte ich Dir auch eine fertige Konfiguration liefern.


Das wäre natürlich super, dann würde ich mal sehen, wie so etwas fertig aussieht für mich ggf. anpassen und verstehen. Wäre sehr nett.


Thorsten Pferdekaemper

Zitat von: stonev am 10 November 2015, 22:40:01
Dirk hat es scheinbar schon einmal gemacht:
http://forum.fhem.de/index.php/topic,12854.0.html
Soweit ich weiß hat Dirk einen einen Lan-Adapter gebastelt. An dem RasPi-Teil war nie ein MAX485 dran. Jedenfalls ist das nicht die gängige Praxis.

Zitat
Was meinst Du mit .www  ein weiteres Unterverzeichnis?
Du musst alles von hier runterladen: https://github.com/kc-GitHub/FHEM-HM485. Am besten unter "Download ZIP". Dann hast Du zwei Verzeichnisse drin: FHEM und www. Beide müssen nach /opt/fhem.

Zitat
Das wäre natürlich super, dann würde ich mal sehen, wie so etwas fertig aussieht für mich ggf. anpassen und verstehen. Wäre sehr nett.
Also das Teil mit dem Digitus sieht so aus:

define hm485 HM485_LAN localhost:2000
attr hm485 HM485d_bind 1
attr hm485 HM485d_device /dev/ttyUSB0
attr hm485 HM485d_startTimeout 5
attr hm485 hmwId 00000001

Ich habe noch eins mit einem Lan-Adapter, das sieht so aus:

define hm485 HM485_LAN localhost:2000
attr hm485 HM485d_bind 1
attr hm485 HM485d_device 192.168.178.164:5000
attr hm485 HM485d_startTimeout 5
attr hm485 hmwId 00000001

Gruß,
   Thorsten

FUIP

Ralf9

Zitat von: stonev am 10 November 2015, 21:37:30
Um später auf die Schnittstelle zugreifen zu können muss sie z. B. als Device  (ttyAMA0?) eingebunden werden.
sofern man einen USB <-> RS-485 Adapter verwendet läuft das Plug&Play, aber mit dem MAX vie GPIO wohl nicht.

Ich verwende als RS-485 Transceiver den LTC1487 direkt an der seriellen Schnittstelle. Ich bin einen Schritt weiter gegangen und habe noch den ADuM1301 (Triple-Channel Digital Isolators) dazwischen geschaltet (siehe Anlage).
Ich dürfte der einzigste sein, der den RS-485 Transceiver direkt an der seriellen betreibt.
Das Problem dabei ist die Ansteuerung des DE (Driver Output Enable) Pins mit dem GPIO, das Timing ist hierbei sehr zeitkritisch.
Ich kann dies für Anfänger nicht empfehlen. Du wirst Dir damit unnötige Probleme  einhandeln.

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

stonev

Zitat von: Thorsten Pferdekaemper am 10 November 2015, 22:52:37
Am besten unter "Download ZIP". Dann hast Du zwei Verzeichnisse drin: FHEM und www. Beide müssen nach /opt/fhem.

Ha, ha, runtergeladen hatte ich es schon. Hätte ich noch rein geschaut, hätte sich die Frage nicht gestellt. :-[

Zitat von: Thorsten Pferdekaemper am 10 November 2015, 22:52:37

define hm485 HM485_LAN localhost:2000
attr hm485 HM485d_bind 1
attr hm485 HM485d_device /dev/ttyUSB0
attr hm485 HM485d_startTimeout 5
attr hm485 hmwId 00000001

Gruß,
   Thorsten

Mille Gratie  :)

Solltest Du irgendwann auch noch ein Beispiel für das Einbinden der HMW Library im Setup vom Arduino haben...  :D


Zitat von: Ralf9 am 10 November 2015, 22:57:55
Ich kann dies für Anfänger nicht empfehlen. Du wirst Dir damit unnötige Probleme  einhandeln.

Gruß Ralf

Danke, es wird der Digitus.
Ich dachte ursprünglich nur mal. dass ein Anschluss am GPIO mechanisch stabiler wäre als der lange verschraubte USB Adater. Aber das rechtfertigt nicht, sich solche Probleme einzuhandeln.

Thorsten Pferdekaemper

Zitat von: stonev am 10 November 2015, 23:13:32Mille Gratie  :)
Du solltest ein bisschen an Deinem Italienisch arbeiten...

Zitat
Solltest Du irgendwann auch noch ein Beispiel für das Einbinden der HMW Library im Setup vom Arduino haben...  :D
Siehe Deinen anderen Thread.
FUIP

stonev

Zitat von: Thorsten Pferdekaemper am 10 November 2015, 23:31:03
Du solltest ein bisschen an Deinem Italienisch arbeiten...

;D Und das nach drei Italienurlauben ...  Grazie  ;D

stonev

Zitat von: Thorsten Pferdekaemper am 10 November 2015, 22:52:37
Am besten unter "Download ZIP". Dann hast Du zwei Verzeichnisse drin: FHEM und www. Beide müssen nach /opt/fhem.

Hab das gerade mit WinSCP erledigt. War aber ein wenig müselig, weil man die Dateien aus dem Brunch ja auch noch auf die jeweiligen Unterordner von FHEm und www verteilen muss.
Kann man das nicht irgendwie einfacher direkt aus dem Git haben? Z. B. mit Git Merge oder sowas? Kenne mich mit GIT nicht aus, aber wenn das mit einer Zeile in Putty zu erledigen wäre, wär´s eleganter i Hinblick auf ein Tutorial.

Thorsten Pferdekaemper

Hi,
ich ziehe einfach das ganze Verzeichnis ins WinSCP. Dafür muss ich noch nicht einmal das .zip auspacken.
Vorher muss man ggf. chmod bemühen.
Gruß,
   Thorsten
FUIP

stonev

Zitat von: Thorsten Pferdekaemper am 10 November 2015, 22:52:37

Also das Teil mit dem Digitus sieht so aus:

define hm485 HM485_LAN localhost:2000
attr hm485 HM485d_bind 1
attr hm485 HM485d_device /dev/ttyUSB0
attr hm485 HM485d_startTimeout 5
attr hm485 hmwId 00000001



Wenn ich die FHEM.cfg speichern will wird folgende Fehlermeldung ausgegeben:
HM485_LAN: unknown attribute HM485d_device. Type 'attr HM485_LAN ?' for a detailed list.

Allerdings hängt auch der Digitus USB Adapter noch nicht dran. Der steckt noch in der Post...  Ich glaube aber nicht, dass es daran liegt, oder doch? Neu gestartet hatte ich den RPI schon.


Thorsten Pferdekaemper

Zitat von: stonev am 11 November 2015, 23:10:00
Wenn ich die FHEM.cfg speichern will wird folgende Fehlermeldung ausgegeben:
HM485_LAN: unknown attribute HM485d_device. Type 'attr HM485_LAN ?' for a detailed list.

Ich habe mir jetzt mal das Coding dazu angeschaut. Jetzt wundert mich, dass es bei mir funktioniert.
Hast Du mal versucht, nachdem die Fehlermeldung kommt FHEM nochmal sauber durchzustarten, also mit "shutdown restart"?
Ggf. ist das auch zweimal notwendig.
Kannst Du mir außerdem mal die Ausgabe eines "list hm485" schicken?
Gruß,
  Thorsten
FUIP