AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge

Begonnen von rsteinkuhl, 10 September 2014, 10:50:32

Vorheriges Thema - Nächstes Thema

rsteinkuhl

Hallo alle miteinander,

ich wende den FHEM-Server im Moment noch in der Experimentierphase und bin absoluter Neuling in Perl.

Ich habe folgendes vor:
Ich habe einen AVR-Netio mit ECMD erfolgreich an FHEM angebunden, ADC-Werte bekomme ich auch so wie ich sie haben will, Relais kann ich ansteuern und Onewire funktioniert auch.
Mein Problem liegt darin, das ich keine Ahnung habe, wie ich die classdef für das gezielte Abfragen einzelner digitaler Eingänge schreiben muß. Ich suche seit ca. 2 Wochen im Internet nach Beispielen, habe aber nicht das richtige gefunden.
Als Ergänzung möchte ich noch anbringen, das ich den Zustand eines digitalen Einganges mit 0 bzw. 1 darstellen möchte.

Ist hier im Forum vielleicht jemand, der mir den entscheidenden Tip gibt, wie ich das realisieren kann.

Für alle Mühen im voraus Dankend

Rainer Steinkuhl

MadCat

Hallo Rainer,

bin zwar genau so wie Du noch Anfänger, aber wenn sich sonst keiner erbarmt, mache ich das mal.

Bin derzeit genau wie Du dabei mich in FHEM einzuarbeiten, läuft auf einem Cubietruck und soll meine Net-IO Steuern.
Schau mal hier, vielleicht hilft Dir das weiter. http://www.fhemwiki.de/wiki/AVR-NET-IO

rsteinkuhl

Hallo MadCat,

vielen Dank für deine Antwort.

Diesen Link kenne ich schon und habe ihn auch durchgelesen.
Ich bin mittlerweile einen Schritt weiter und kann die Zustände der Eingänge abfragen und bekomme die Antwort, die ich erwarte.
Was noch nicht funktioniert ist die automatische Darstellung des Pinzustandes, wenn ich den Eingangszustand physikalisch ändere.
Ich bin mir fast sicher, dass es am AVR-NETIO und den Einstellungen im Ethersex liegt, Stichwort "Watch IO changes". Ethersex bietet ja an, bei steigender oder fallender Flanke am Eingang, eine Meldung per TCP abzusetzen, die ich dann im FHEM (wie auch immer) verarbeite. Nur habe ich es noch nicht geschafft, meinen AVR-NETIO dahin zu bekommen.

Gruß Rainer

MadCat

Hallo Rainer,

da bist Du schon weiter als ich.

Mein erster Net-IO hat nicht funktioniert, kein Zugriff möglich, weder über TCP/IP noch Serial oder ISP, hab dann von Pollin einen ganz neuen Bausatz bekommen und der läuft seit gestern endlich so wie er soll.
Um ehrlich zu sein, fehlt mir derzeit nach all meinen Problemen etwas die Motivation, mal sehen ob ich mich am Sonntag mal wieder aufraffen kann weiter zu machen.

Gruß Ralph

rsteinkuhl

Hallo MadCat

ich habe das Wochenende genutzt und bin ein wenig weitergekommen.

Mein Avr-Netio läuft jetzt so wie ich es haben will, wenn am definierten Eingang ein Flankenwechsel stattfindet, sendet er über ECMTTCP ein Kommando  zu FHEM ab und steuert dort ein entsprechendes Dummy.
Das Problem lag beim Telnetport, FHEM sendet auf Port 2701 ECMD-Kommandos zum Netio und horcht auf Port 7072 auf eingehende Kommandos. Der AVR-Netio sendet aber auf Port 2701 seine generierten Kommandos, die ins nirgendwo verschwinden. Die erste Lösung sah bei mir so aus, dass ich im Ethersex den Sendeport auf 7075 geändert habe und in FHEM einen zusätzlichen Port 7075 definiert habe, dass funktionierte schon mal. Angeregt von KPWG habe ich dann den Sendeport im Ethersex wieder auf 2701 gesetzt und im FHEM den zusätzlichen Port 7075 auf 2701 geändert, jetzt ist es eine saubere Sache und man muß nicht in diversen Files rumbasteln.

Gruß Rainer

gelbwichtel

Hi rsteinkuhl,
bei der Suche im Forum bin ich auf deinen Beitrag gestossen. Eigentlich versuche ich genau das, was du gemacht hast ebenfalls bei mir einzusetzen. Ich bekomme aber schon direkt nach dem Schreiben der fhem.cfg den Fehler "Unknown command ecmdtcp(pa0,, try help Unknown command ecmdtcp(pa0,, try help". Was ich wundert ist, dass  ecmdtcp in der commandref gar nicht zu finden ist. Kannst du oder sonstjemand mir hier einen Tip geben, was bei mir falsch läuft ? Dann hätte ich noch eine Bitte: könntest du mir mal einen Auszug deiner fhem.cfg geben, in der die EMCD spezifischen Dinge wie die Ports und digital Eingänge des NetIO zu sheen sind ?
Vielen Dank vorab 
cu
gelbwichtel

gelbwichtel

Uups. Ich glaube da hab ich was missverstanden. Kann es sein das Ecmdtcp auf den netio selbst gehört? Wenn ja, muss das in in den atmel rein geflasht werden ?
cu
gelbwichtel

kpwg

Zitat von: gelbwichtel am 01 März 2015, 00:10:07
Uups. Ich glaube da hab ich was missverstanden. Kann es sein das Ecmdtcp auf den netio selbst gehört?
Genau. Das gehört zu E6. Lässt sich auch gut aus Control6-Skripten heraus verwenden- damit geht dann etwas mehr als nur auf Pinzustände zu reagieren.

Zitat von: gelbwichtel am 01 März 2015, 00:10:07
Wenn ja, muss das in in den atmel rein geflasht werden ?
Du musst "watch io changes and react" entsprechend der nötigen Abhängigkeiten im Menuconfig einrichten. Dazu muss noch Port-IO auf full-featured umgestellt werden, sonst meckert der compiler. In FHEM selbst muss nur ein zusätzlicher Port geöffnet werden- sonst nichts. Alsokeine Frickelei mit verbogenen Ports, editierten E6-Sourcen usw. Habe das hier mal kurz beschrieben: http://www.ethersex.de/index.php/Nutzung_in_FHEM_%28Deutsch%29#digitale_Eing.C3.A4nge_-_proaktiv

Viele Grüße, Ricardo

gelbwichtel

#8
Danke kpwg,
hab's jetzt dann doch auch Dank deines Beitrags auf der ethersex-site hinbekommen.
Die größten Schwierigkeiten hatte ich letztendlich damit das menuconfig sauber hinzubekommen. Für jemand der in der Thematik drin ist, ist das meist eh Pillepalle und Grundwissen, aber als Außenstehender da reinzukommen ist schon schwierig. Überall steht viel, aber nicht alles und da genau das zu finden worauf es ankommt ist sehr aufwendig. Ich wollte schon fast aufgeben, da hab ich gesehen dass ich die Watch IO Changes zwar konfiguriert, aber den Stern nicht gesetzt hatte.

Ich habe zumindest mal für die ECMDTCP Konfiguration das, was relevant ist zusammengeschrieben. Wenn du willst, kannst du das noch in deinem Artikel oder an geeigneterer Stelle unterbringen.

Eine Frage noch zum Beschalten der  Eingänge: Wenn ich einen potentialfreien Alarmkontakt an einen der EIngänge lege, sollte der dann vorher noch durch eine Schaltung entprellt werden, oder eher softwaremäßig in FHEM durch einen Timestamp und einer Toleranz oder ist das Ganze eh so träge, dass ein entprellen nicht notwendig ist.
cu
gelbwichtel

Tueftler1983

Hallo ich bin blutiger Anfänger in Fhem und etersex.
jetzt habe ich es geschafft meine funksteckdosen über pilight in Fhem einzubinden und die 8 Relais der Relais5 arte die am net io hängt zu schalten.
ABER mit der abfrage der digitalen Eingänge verzweifelt ich noch.
Ziel ist es erstmal das mir jeder digitale Eingang einen eigenen dummy in Fhem schaltet.

Frage 1: was muss ich dafür genau an welcher Stelle in etersex einstellen? ( make menuconfig)
Frage 2: was muss ich dann noch in fhem in der config.cfg eintragen?

Danke euch im vorraus

gelbwichtel

@Tueftler1983
Also für die Abfrage der digitalen Ports sollte das hier in der fhem.cfg reichen:

### Port 2701 freigeben
define telnetECMD telnet 2701 global

### Dummy anlegen hier Port 0
define PA0 dummy
attr PA0 room Ethersex
attr PA0 webCmd off::on
define FileLog_PA0 FileLog ./log/Port.log PA0

In Ethersex wäre relevant, was ich im letzten Post geschrieben hatte. Natürlich auf deinen Bedarf anzupassen.

Ob's auf fhem-Seite funktioniert kannst du separat checken, wenn du z.B. ein

echo "set PA0 on" | nc <ip von fhem> 2701

schickst. Aber Achtung im normalen Logfile wird da nichts reingeschrieben. Warum weiß ich nicht, bin selbst darauf reingefallen und hab eine ganze Zeitlang gedacht von Ethersex käme nichts rüber.


cu
gelbwichtel

gelbwichtel

Timíngprobleme ?
Mir ist gerade beim Testen aufgefallen, dass wenn ich mehrere Ports gleichzeitig auf High oder Low lege, dies in FHEM nur teilweise ankommt. Wenn ich z.B. die 4 Ports auf der Hauptplatine des NETIO gleichzeitig umschalte, kommen die Zustände mal von 2, mal von 3, selten von allen 4 Ports in FHEM an. Wenn ich die 4 set Anweisungen in einem Rutsch mit netcat an FHEM schicke werden auch alle 4 ausgewiesen. Sieht also nach einem Problem in Ethersex aus. Kennt jemand diese Problematik ?
cu
gelbwichtel

kpwg

Gute Frage, wem man hier die Schuld in die Schuhe schiebt.  ::)
Ob das ESEND mit \n\n so optimal ist, weiß ich nicht. Habe es nur mit einzelnen Pins getestet. Das funktionierte stets. Vielleicht ist das auch der falsche Ansatz? Eine Idee wäre, bereits in E6 ein passendes C6-Script zu gestalten (oder auch bei watch io anpasst?), was bei mehreren ausgelösten Pins einen zusammengefassten (einzelnen) Befehl sendet.

gelbwichtel

Hi Ricardo.
wäre das die Überarbeitung der Methode watchcat_edge(uint8_t pin) in ./services/watchcat/watchcat.c ?
Oder liege ich da total falsch ?
cu
gelbwichtel

kpwg

Zitat von: gelbwichtel am 24 März 2015, 22:10:43
wäre das die Überarbeitung der Methode watchcat_edge(uint8_t pin) in ./services/watchcat/watchcat.c ?

Solche Eingriffe müssten wir mit den Entwicklern absprechen, damit es auch sauber in den Code einfließt bzw. dann für alle zur Verfügung steht. Ich habe bereits ein ESEND mit Variablen angeregt. Vielleicht lässt sich bereits darüber die Statusänderung eines ODER mehrere Pins am Stück senden?