8 Kanal Relaiskarte - Ethernet - per FHEM ?

Begonnen von svenkoethe, 11 Februar 2013, 19:27:32

Vorheriges Thema - Nächstes Thema

svenkoethe

Hallo zusammen,

ich bin neu in der Materie FHEM und interessiere mich für eine Steuerung dieser Relaiskarte über FHEM.

Die Karte ist bereits bei mir im Einsatz und steuert 4 Rolläden über eine selbst erzeugte PHP/Ajax Oberfläche.

Um weitere Projekte (PV-Anlage,Heizungssteuerung(ggf. Regelung),usw.) Zentral anzugehen würde ich gerne auf FHEM umschwenken anstatt alles selbst programmieren zu müssen.

Habe auch dank Martin Fischers Paketen eine FHEM-Instanz 'unfallfrei' auf meinen Synology NAS bekommen.

Jetzt die eigentliche Fragen:
Wäre es mit FHEM möglich die TCP/IP Befehle zur Ansteuerung der Relaiskarte (genaue Struktur siehe Link zur Karte) direkt zu senden ?

Wäre es möglich die Statusmeldungen der Karte per TCP/IP Request mit FHEM auszulesen?

Vielen Dank im Voraus für Eure Mühe !

P.S.: Die Ethernetschnittstelle müsste ein Microchip-Produkt sein, zumindest wurde mir als Originalsoftware eine Microchip Javascriptdatei zur Demo-Ansteuerung mitgesendet.

TomNo

Hallo,
da noch keiner von den alten Hasen geantwortet hat, versuche ich das mal. Bin aber selber erst seit ca. 1 Woche dabei, mir FHEM anzusehen. Der Grund ist ähnlich wie bei Dir: Ich habe testweise einen Arduino im Einsatz, der sich um Rolläden und Markise kümmert. Nun werden demnächst noch ein paar Lampen usw. dazukommen. Bevor ich das auch im Arduino umsetze und mir dann eine Lösung für Web- und Mobilclient basteln muss, wollte ich mir ebenfalls mal FHEM ansehen. Da ist das ja schon zum großen Teil fertig.

Das Ansprechen Deines "Relaisservers" sollte kein Problem sein. FHEM kann ja Webseiten aufrufen, wenn ich das richtig gesehen habe (selbst noch nicht probiert). Damit kannst Du die Steuerbytes übermitteln. Notfalls geht immer der Aufruf eines "wget http://...".

Das Problem allerdings ist bei mir vergleichbar zu Deinem (man möge mich korrigieren, wenn ich da bislang etwas übersehen habe): FHEM geht normalerweise davon aus, dass die Steuerung vor Ort von einem Device gemacht wird, dem es einen Befehl schickt (FS20, HM usw). Dieser wird dann vor Ort vom Device im banalen Fall (Licht ein) einfach umgesetzt oder im komplexen Fall (Rolladen Nr. 3 von der aktuellen Position auf 60% fahren) in eine passende Sequenz von Relaisschaltbefehlen für den Rolladenmotor aufgelöst, die dann abgearbeitet wird. In Deinem Fall fehlt genau wie bei mir "vor Ort" das Device zur Berechnung der Schaltbefehle. Bei mir liegen alle Stromkabel in einer Zentrale auf und können via Hutschienenrelais einzeln geschaltet werden (das habe ich so gemacht, um mir teure Steuergeräte zu sparen - Kabel ist vergleichsweise billiger). Vor kurzem habe ich die Funktionalität testweise mal in Ruby-Scripten auf dem Raspberry gebaut: Er ermittelt nun nach Übergabe einer Rolladenbezeichnung und der gewünschten Zielposition, welche Fahrtrichtung und welche Fahrzeit der Rolladen haben muss, damit die Zielposition erreicht wird und führt die passende Schaltsequenz über die GPIO-Pins des Raspi aus. Zudem sorgt er dafür, dass beispielsweise bei Richtungsumschaltungen die notwendigen 100 ms Pause gemacht werden, bevor der Motor wieder Strom bekommt.

Die letzten Tage habe ich mir nun angesehen, wie ich mit FHEM in dieser Hinsicht weiterkommen könnte. Man (ich im Moment eher nicht) könnte die Schaltlogik natürlich auch in Perl umsetzen und als eigene Klasse ins FHEM-Verzeichnis legen. Da ich aber bei Ruby bleiben möchte, versuche ich zunächst mal, beides miteinander zu verbinden. Das scheint auch zu klappen: Ich habe mir aus der Dummy-Klasse eine neue Klasse gebastelt, mit der ich nun einen Aufruf einer beliebigen ausführbaren Datei veranlassen kann und inzwischen auch einen Rückgabewert bekommen kann. Den gebe ich als Reading-Variable an FHEM zurück und kann sie dort dann verwenden. Das ausführbare Programm ist mein angepasstes Ruby-Skript: Rufe ich
my $x = `roll 0 30 40 20`
auf, ermittelt Ruby die notwendigen Fahrbefehle für die 4 Rolläden, um sie auf 0%, 30%, 40% und 20% zu bringen, soweit sie nicht ohnehin dort stehen. Danach habe ich in $x eine Quittung zur Verfügung. Im Prinzip funktioniert das inzwischen, ein paar Ecken muss ich noch bearbeiten. In Deinem Fall ist das gleiche mit Deinem PHP-Programm auf Deinem NAS möglich. Da Du dann nicht über Pins steuerst, muss Dein PHP-Skript dann gleich die entsprechenden HTTP-Befehle absetzen und die Relais bedienen.

Ideal ist mein Ansatz mit der Nutzung unterschiedlicher Umgebungen nicht, aber nach meinem aktuellen Kenntnisstand für mich die beste Variante (vielleicht hat ja noch jemand einen guten Tipp für eine schöneren Parameteraustausch zwischen Perl und Ruby?). Ausserdem hoffe ich, dass ich damit nun auch die Vorteile der umfangreichen FHEM-Bibliothek einfach nutzen kann (Tages- und Sonnenstandabhängige Steuerung und eben der Zugriff über diverse Clients). Bislang bin ich dort aber erst bei den Grundlagen.

Ich hoffe, das etwas hilft bei der Einordnung.

Puschel74

Hallo,

ich hab jetzt bei deiner Relaiskarte auf die Schnelle nichts über den verbauten Microcontroller gefunden aber sollte
es ein ATMega xxy sein, kannst du versuchen Ethersex zu kompilieren (gibts ein Gutes Tutorial im Net) und drauf zu
flashen.
Aber erst ein Image der original Firmware erstellen ;-)

Andere hier und auch meiner Einer haben eine AVR-NET-IO mit 8-Kanal-Relaiskarte im Einsatz und das klappt
einwandfrei mit FHEM.
Und auch die 4 analogen Eingänge (0-5V) funktionieren bestens.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

svenkoethe

Vielen Dank Erstmal für deine ausführliche Antwort.

Habe ich das richtig verstanden, das FHEM nicht die Schaltlogik übernehmen kann?

Im Prinzip habe ich mir das bisher so vorgestellt, dass von FHEM selbst der Start- und der Stopp-Befehl gesendet wird.

Es würde ja folgende Prozedur genügen:

-Wenn (Startbedingung für {Rollo-ID}{Zustand_neu} erreicht)
--{Zustand_aktuell} von {Rollo-ID} aus Speicher (LOG-File / lieber Datenbank) auslesen
--Laden der {Lauzeitbedingungen} für {Rollo-ID} (Könnten in Array oder DB liegen)
--Berechnen der {Laufrichtung} und der {Laufzeit} für {Rollo-ID} anhand der {Lauzeitbedingungen} für {Zustand_neu}
-Wenn ({Laufrichtung},{Laufzeit},{Laufzeitbedingungen} berechnet)
--Startbefehl {$Rollo-ID}{Laufrichtung} / Starte Timer {Laufzeit}
---WHILE (Timer > {Laufzeit} & {Status} = Rollo läuft)
--Wenn Timer {Laufzeit} abgelaufen Sende Stopp-Befehl {Rollo-ID}
-Wenn ({Status} = Rollo steht)
--Schreibe Speicher (LOG-File /Datenbank) {Rollo-ID}{Zustand_alt} = {Rollo-ID}{Zustand_neu}

Ich hoffe, das war einigermaßen verständlich...

FHEM müsste also folgende Dinge unterstützen:
Speicherung/Lesen von Zuständen
If-Bedingungen
While/For Schleifen
Senden von TCP/IP Befehl

Das müsste doch funktionieren, oder liege ich da so falsch ?

Ggf. Könnte man auch immer einen definierten Zustand anfahren und dann die Laufzeit berechnen ?

Danke für Eure Mühe

TomNo

Hallo,
ZitatFHEM müsste also folgende Dinge unterstützen:
Speicherung/Lesen von Zuständen
If-Bedingungen
While/For Schleifen
Senden von TCP/IP Befehl

Das müsste doch funktionieren, oder liege ich da so falsch ?
Wie gesagt, möglich ist das schon, aber Du wirst das eben selber programmieren müssen. Natürlich bietet Perl wie jede andere Programmiersprache die notwendigen Konstrukte. In meinem Fall liegt das meiste in Ruby vor, deswegen nehme ich den Klimmzug mit dem Mischen von zwei Sprachen auf mich. Wenn Du ohnehin neu programmierst, wirt es vermutlich besser sein, das gleich in Perl zu machen.
Sieh Dir einfach mal die 98_dummy.pm im Verzeichnis fhem/FHEM an (im NAS möglicherweise woanders...). Da siehst Du, wie Paramter in das Modul hineinkommen und wie ein State und ein Reading zurückgegeben wird. Daran habe ich mich orientiert und das dann erweitert. Im Ergebnis wirst Du Dir dann eine Klasse 99_Rolladen.pm schreiben, die Du für Deine FHEM-Definition der Rolläden nutzen kannst.
ZitatGgf. Könnte man auch immer einen definierten Zustand anfahren und dann die Laufzeit berechnen ?
Ich bekomme von meinen Rolläden keine Positionsmeldung (ist einfach jeweils ein Motor mit einer 4-adrigen Leitung). Je nachdem auf welche der beiden Zuleitungen ich 230V gebe, dreht der Motor auf oder zu (Aufpassen beim Programmieren, ich mache die Leitung vor dem Umschalten immer 0.2 Sek. stromlos, da laut Handbuch der Rolläden sonst der Motor Probleme machen kann). Ich habe die Zeiten für Ein- und Ausfahren gemessen (die hoffentlich konstant bleiben) und damit den Bereich von 0 bis 100% normiert. Das Skript speichert die zuletzt angefahrene Position in einer Datei und kann so immer berechnen, wie die neue Position erreichbar ist. Beim Befehl 0% (also einfahren) gebe ich zur errechneten Fahrzeit immer noch 2 Sek. hinzu, damit die Endposition sicher erreicht ist. Der Motor wird dann durch den eingebauten Endlagenschalter abgeschaltet und ich setze die Ist-Position auf Null.

Zrrronggg!

Zitat-Wenn (Startbedingung für {Rollo-ID}{Zustand_neu} erreicht)
--{Zustand_aktuell} von {Rollo-ID} aus Speicher (LOG-File / lieber Datenbank) auslesen
--Laden der {Lauzeitbedingungen} für {Rollo-ID} (Könnten in Array oder DB liegen)
--Berechnen der {Laufrichtung} und der {Laufzeit} für {Rollo-ID} anhand der {Lauzeitbedingungen} für {Zustand_neu}
-Wenn ({Laufrichtung},{Laufzeit},{Laufzeitbedingungen} berechnet)
--Startbefehl {$Rollo-ID}{Laufrichtung} / Starte Timer {Laufzeit}
---WHILE (Timer > {Laufzeit} & {Status} = Rollo läuft)
--Wenn Timer {Laufzeit} abgelaufen Sende Stopp-Befehl {Rollo-ID}
-Wenn ({Status} = Rollo steht)
--Schreibe Speicher (LOG-File /Datenbank) {Rollo-ID}{Zustand_alt} = {Rollo-ID}{Zustand_neu}

Ich hoffe, das war einigermaßen verständlich...

FHEM müsste also folgende Dinge unterstützen:
Speicherung/Lesen von Zuständen
If-Bedingungen
While/For Schleifen
Senden von TCP/IP Befehl

Ist mir FHEM alles machbar. Bisschen PERL, paar Dummies... geht.
FHEM auf Linkstation Mini, CUL 868 SlowRF, 2xCUL 868 RFR, CUL 433 für IT, 2xHMLAN-Configurator mit VCCU, ITV-100 Repeater, Sender und Aktoren von FHT, FS20, S300, HM, IT, RSL