FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: NeuFehm am 24 Juli 2014, 19:41:07

Titel: Noch nicht unterstützte Fremdhardware
Beitrag von: NeuFehm am 24 Juli 2014, 19:41:07
Also: Ich versuche mal mein bisheriges Verständnis über FHEM darzustellen, habe aber sehr wenig Ahnung von Perl. Meist kopiere ich, änder ich den Code ab und freue mich, wenns klappt.
Und vorab: Ja, ich hätte lieber eine unterstützte Hardware nehmen sollen, aber irgendwie ist alles anders gekommen ;)

Jetzt will ich mich an ein eigenes Modul wagen.

Das Modul ist eine einfache Lampe, welche über einen seriellen Bus angeschlossen ist.
Hinzu kommt der Raspberry und ein USB2serial (hier RS485).

Ich habe dafür gesorgt, dass Schnittstelle und Rasp miteinander verbunden sind und auch kommunizieren können. Auch habe ich es geschafft den speziellen Lampenbefehl: #T"1AErn per PERL an die serielle Schnittstelle zu senden und siehe da, die Lampe leuchtet. Bis hierher ohne FHEM.
Der Befehl #T"1AErn besteht aus verschienden Funktionen #T" spricht den Typ an, die 1 die Nummer und das Nachfolgende die Funktion, hier "toggle".

Wenn ich nun an Fhem denke, so glaube ich wie folgt:
1. Ich muss die Schnittstelle (/dev/ttyUSB0) als CUL definieren und zum laufen bringen
2. Ich muss ein Modul "MeineLampe" erstellen welches den typischen Befehl set lamp1 on
als solchen versteht und dann den string an ein WriteIO Modul von Fhem sendet, welches wiederum mit Hilfe der definierten Schnittstelle das dann auf die RS485 sendet...

Sind meine Gedanken bis hier her richtig?

Kann jemand meine Gedanken lenken? ;)

LG Mirko
Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: justme1968 am 24 Juli 2014, 19:52:38
wenn du deine hardware per serieller schnittstelle ansprechen kannst schau dir mal das ECMD modul in fhem an.

gruss
  andre
Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: NeuFehm am 24 Juli 2014, 21:11:29
So habe die Rechte gesetzt:
$ sudo usermod -a -G tty pi
$ sudo usermod -a -G tty fhem

und anschließend in der fhem.cfg die Zeile eingefügt:
define MEINECUL CUL /dev/ttyUSB0@9600 1234

Das logfile sagte darauf hin:

2014.07.24 21:05:01 3: Opening MEINECUL device /dev/ttyUSB0
2014.07.24 21:05:01 3: Setting MEINECUL baudrate to 9600
2014.07.24 21:05:01 3: MEINECUL device opened

Das klingt doch schon mal gut oder?

Jetzt weiß ich nicht weiter.
Ich denke ich schau mir mal die besagte Datei an. Gefunden habe ich in /opt/fhem/FHEM die
66_ECMD.pm und die
67_ECMDDevice.pm



Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: NeuFehm am 24 Juli 2014, 21:16:28
Ohje... ich glaube ich verstehe nur Bahnhof.
Habe mir die Dateien mit einem Editor angeschaut und versucht zu verstehen.
In der ---device ist auch HTML-Code drin.
Soll ich das Modul einbinden/starten/???/bearbeiten/kopieren/umbenennen...
Ich brauch eine Richtung/Stichwort.

LG Mirko
Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: justme1968 am 24 Juli 2014, 21:23:44
schau dir die commandref zu ECMD und ECMD_DEVICE an. das sind die module die du statt CUL verwenden kannst. das CUL modul ist NUR für einen echten cul. nicht für irgend etwas anderes auf einer seriellen schnittstelle.

die commandref findest du auf deiner fhem installation in fhemweb unten links oder hier: http://fhem.de/commandref.html#ECMD (http://fhem.de/commandref.html#ECMD).

wenn du hier im forum nach ECMD suchst wirst du auch einiges finden.

ansonsten muss du dir normalerweise bei den fertigen modulen keinen quelltext ansehen sondern die dokumentation. die wird automatisch aus dem html teil generiert. eben die commandref.

die einsteiger pdf solltest du auch lesen: http://fhem.de/Heimautomatisierung-mit-fhem.pdf (http://fhem.de/Heimautomatisierung-mit-fhem.pdf).

gruss
  andre
Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: NeuFehm am 24 Juli 2014, 21:28:05
Hallo Andre,

Danke!
Vlt. ist alles einfacher, als man denkt...
Ich melde mich wieder :)

LG Mirko
Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: NeuFehm am 24 Juli 2014, 23:24:51
ALSO ;)
Ich habe recherchiert und tatsächlich einen Ansatz mit dem ECMD gefunden...
Ich habe in /etc eine fhem.classdef.m-modul erstellt

set on cmd {chr(35).chr(77).chr(35).chr(69).chr(53).chr(53).chr(49).chr(13).chr(10)}
set off cmd {chr(35).chr(77).chr(35).chr(69).chr(53).chr(53).chr(48).chr(13).chr(10)}

dann habe ich in fhem.cfg hinzugefügt:
define MEINECUL ECMD serial /dev/ttyUSB0@38400

define myrelais ECMD serial /dev/ttyUSB0@9600
attr myrelais classdefs myrelais=/etc/fhem.classdef.m-modul
attr myrelais room Garten

ich hoffte mit "set myrelais" on,
dass dann der set on befehl an die serielle Schnittstelle geschickt wird.
Stattdessen kommt:
Unknown argument on, choose one of reopen classdef

Mh.... ich glaube ich irre noch in den fhem-Welten umher ;)
Kann mir wieder jedmand einen Denkanstoss verpassen? ;)

LG Mirko
LG Mirko
Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: justme1968 am 24 Juli 2014, 23:36:41
dein ECMD device solltest du mit get raw testen können. dann brauchst du noch ein ECMD_DEVICE. damit sendest du dann on und off.

gruss
  andre
Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: NeuFehm am 06 August 2014, 23:01:41
Ist das geil!!!!

in fhem.cfg:
#Relais definieren
define myrelais ECMD serial /dev/ttyAMA0@9600
attr myrelais classdefs myrelaisdevice=/opt/fhem/relais.classdef

define AlleRelais ECMDDevice myrelaisdevice
attr AlleRelais room Garten

Meine relais.classdef enthält:
set on cmd {chr(35).chr(77).chr(35).chr(80).chr(59).chr(255).chr(59).chr(255).chr(59).chr(255).chr(59).chr(255).chr(59).chr(13).chr(10)}
set off cmd {chr(35).chr(77).chr(35).chr(80).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(0).chr(59).chr(13).chr(10)}

nun habe ich tatsächlich im Raum "Garten" ein ECMDDevice

mit dem Namen "AlleRelais", einem Lampensymbol und ein off-Link und ein on-Link

Wenn ich auf "on" klicke wird das on cmd an die Schnittstelle geschickt und alle Relais gehen an....
Das Gleich mit off, nur aus...
Wie GEIL ist das denn :)

DANKE an alle Tipps!!!!

PS: Ich habe vorher mit Perl getestet, bei welchem Befehl die Relais schalten.

Hier mein Test-Perl:
use strict;
use warnings;
use Device::SerialPort;

my $port = Device::SerialPort->new("/dev/ttyAMA0");
$port->databits(8);
$port->baudrate(9600);
$port->parity("none");
$port->stopbits(1);
$port->handshake("on");
$port->write_settings;
my $zeichen = chr(35).chr(77).chr(35).chr(80).chr(59).chr(255).chr(59).chr(255).chr(59).chr(255).chr(59).chr(255).chr(59).chr(13).chr(10);

$port->write($zeichen);
Titel: Antw:Noch nicht unterstützte Fremdhardware
Beitrag von: NeuFehm am 07 August 2014, 00:38:29
Mein Temperaturfühler liefert einen dezimalwert (0-255)
Ich habe eine Tabelle, wo jeder dezimalwert einer Temperatur zugewiesen ist.
wie binde ich sowas in FHEM ein?

meine classdef:
#Senden der Temperaturabfrage
set temp cmd {chr(35).chr(84).chr(34).chr(97).chr(13).chr(10)}
Aus dem Ergebnis die richtige Stelle lesen und in dezimal umwandeln
set temp postproc {ord(substr($_,5,1))}