FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: rsteinkuhl am 10 September 2014, 10:50:32

Titel: AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: rsteinkuhl am 10 September 2014, 10:50:32
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
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: MadCat am 23 September 2014, 18:47:24
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
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: rsteinkuhl am 24 September 2014, 14:46:10
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
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: MadCat am 24 September 2014, 21:35:17
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
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: rsteinkuhl am 29 September 2014, 08:52:19
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
Titel: Unknown command ecmdtcp ???
Beitrag von: gelbwichtel am 28 Februar 2015, 23:42:04
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 
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag 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? Wenn ja, muss das in in den atmel rein geflasht werden ?
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: kpwg am 01 März 2015, 13:58:57
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 (http://www.ethersex.de/index.php/Nutzung_in_FHEM_%28Deutsch%29#digitale_Eing.C3.A4nge_-_proaktiv)

Viele Grüße, Ricardo
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: gelbwichtel am 02 März 2015, 19:48:12
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.
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: Tueftler1983 am 19 März 2015, 00:08:50
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
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: gelbwichtel am 23 März 2015, 22:12:54
@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.


Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: gelbwichtel am 23 März 2015, 22:33:22
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 ?
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: kpwg am 24 März 2015, 21:18:20
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.
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: gelbwichtel am 24 März 2015, 22:10:43
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 ?
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: kpwg am 25 März 2015, 17:05:31
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?
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: Tueftler1983 am 27 März 2015, 12:50:26
Hallo habe jetzt auch mein AVR NET IO in Fhem eingebunden klappt auch alles soweit aber ich hätte gerne das wenn der digitale Eingang 1 kurz high wird ich in Fhem 10 sek die meldung bekomme das der Eingang geschaltet wurde.

Hintergrund ist:
Eingang 1 ist mit meiner Türklingel gekoppelt und jetzt hätte ich im Floorplan gerne 10 Sek oder auch 30 sek die Meldung das es geklingelt hat ( im Floorplan ein Klingel Symbol das die Farbe ändert und eine Puschbullet Nachricht)

das klappt auch soweit aber halt nur für genau die zeit solange der Eingang geschlossen ist.

Jemand ne Idee??
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: kpwg am 28 März 2015, 17:14:56
Nicht so richtig, aber eine gut funktionierende Lösung für ein ähnliches Problem habe ich gefunden.

Dabei nutze ich "Steckdose_B", welche nur on oder off kennt. Dabei hilft mir readingsproxy, womit ich nun auch on-for-timer und toggle nutzen kann.

Ein Auszug aus der fhem.cfg:
define Luefter readingsProxy Steckdose_B
attr Luefter setList on off


Ich steuere also den Lüfter, der an Steckdose B hängt. Vielleicht kannst Du damit etwas anfangen?
Titel: Antw:AVR-Netio - ECMD - gezielte Abfrage der digitalen Eingänge
Beitrag von: Mr.1000V am 08 Januar 2020, 09:48:50
Ich habe ein AVR-NET-IO mit neuestem Ethersex am Start, Ausgänge samt Relais schalten funzt auch einwandfrei. Jetzt wollte ich die Eingänge abfragen.....

Bei mir funktioniert die Abfrage bzw. das aktive senden von Befehlen vom AVR-NET-IO an fhem nicht.
Habe alles genau so gemacht wie oben beschrieben. In der make menuconfig alles richtig gesetzt und mehrfach überprüft. Ich vermute den Fehler beim compilieren (make). Dort erscheint nämlich folgende Meldung während der Compilierung:

In file included from services/watchcat/watchcat.c:50:0:
services/watchcat/user_config.h:14:141: Warnung: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 0,  .rising = 1, .address = { HTONS((192 << 8) | 168), HTONS((178 << 8) | 47) }, .message = watchcat_text0, .func = ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:14:141: Anmerkung: (nahe der Initialisierung für »ecmd_react[0].func«)
services/watchcat/user_config.h:15:141: Warnung: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 0,  .rising = 0, .address = { HTONS((192 << 8) | 168), HTONS((178 << 8) | 47) }, .message = watchcat_text1, .func = ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:15:141: Anmerkung: (nahe der Initialisierung für »ecmd_react[1].func«)
services/watchcat/user_config.h:16:141: Warnung: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 1,  .rising = 1, .address = { HTONS((192 << 8) | 168), HTONS((178 << 8) | 47) }, .message = watchcat_text2, .func = ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:16:141: Anmerkung: (nahe der Initialisierung für »ecmd_react[2].func«)
services/watchcat/user_config.h:17:141: Warnung: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 1,  .rising = 0, .address = { HTONS((192 << 8) | 168), HTONS((178 << 8) | 47) }, .message = watchcat_text3, .func = ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:17:141: Anmerkung: (nahe der Initialisierung für »ecmd_react[3].func«)
services/watchcat/user_config.h:18:141: Warnung: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 2,  .rising = 1, .address = { HTONS((192 << 8) | 168), HTONS((178 << 8) | 47) }, .message = watchcat_text4, .func = ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:18:141: Anmerkung: (nahe der Initialisierung für »ecmd_react[4].func«)
services/watchcat/user_config.h:19:141: Warnung: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 2,  .rising = 0, .address = { HTONS((192 << 8) | 168), HTONS((178 << 8) | 47) }, .message = watchcat_text5, .func = ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:19:141: Anmerkung: (nahe der Initialisierung für »ecmd_react[5].func«)
services/watchcat/user_config.h:20:141: Warnung: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 3,  .rising = 1, .address = { HTONS((192 << 8) | 168), HTONS((178 << 8) | 47) }, .message = watchcat_text6, .func = ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:20:141: Anmerkung: (nahe der Initialisierung für »ecmd_react[6].func«)
services/watchcat/user_config.h:21:141: Warnung: initialization from incompatible pointer type [-Wincompatible-pointer-types]
     { .port = 0, .pin = 3,  .rising = 0, .address = { HTONS((192 << 8) | 168), HTONS((178 << 8) | 47) }, .message = watchcat_text7, .func = ecmd_sender_send_command },
                                                                                                                                             ^
services/watchcat/user_config.h:21:141: Anmerkung: (nahe der Initialisierung für »ecmd_react[7].func«)



Meine Watch IO changes (and react) sieht so aus:

ECMDTCP(PA0, RISING, 192.168.178.47, set PA0 on\n\n)
ECMDTCP(PA0, FALLING, 192.168.178.47, set PA0 off\n\n)
ECMDTCP(PA1, RISING, 192.168.178.47, set PA1 on\n\n)
ECMDTCP(PA1, FALLING, 192.168.178.47, set PA1 off\n\n)
ECMDTCP(PA2, RISING, 192.168.178.47, set PA2 on\n\n)
ECMDTCP(PA2, FALLING, 192.168.178.47, set PA2 off\n\n)
ECMDTCP(PA3, RISING, 192.168.178.47, set PA3 on\n\n)
ECMDTCP(PA3, FALLING, 192.168.178.47, set PA3 off\n\n)


Ich habe das Ganze schon mit einen ATMEGA32 als auch mit einem ATMEGA644 probiert, aber immer die gleiche Fehlermeldung beim Compilieren.

Wenn ich den Befehl
echo "set PA0 on" | nc 192.168.178.47 2701
absetze, dann wird mein PA0 auf on gesetzt, also auf fhem Seite ist alles ok.

Würde mich sehr freuen wenn hier jemand helfen kann, stecke nicht so tief in den Compilern, dass ich diese Meldung deuten oder gar beheben kann.....