Willkommen › Foren › LogoControl › Homematic-Taster mit FHEM an Logo!8
- Dieses Thema hat 11 Antworten sowie 5 Stimmen und wurde zuletzt vor vor 7 Jahren, 3 Monaten von jailbreaker07 aktualisiert.
-
AutorBeiträge
-
31. Oktober 2015 um 8:01 #2530elmoTeilnehmer
Hallo,
da ich als Anfänger FHEM und LogoControl am laufen habe und die Kommunikation zwischen der Logo!8 und Logocontrol einwandfrei funktioniert, hab ich nun folgendes Problem:
Ich habe einen Homematic 4 fach Taster HM-PBI-4-FM. Wie kann ich die Tastersignale an die Logo!8 senden. Mit der Anleitung hats nicht funktioniert.
Sende ich über den Webbrowser (z.B. http://*.*.*.*:8088/rest/bytes/0/bits/0) den Set Befehl, dann schaltet die Logo.Im Log von FHEM steht, wenn ich lang oder kurz taste:
015-10-31_07:40:48 HM_34BB12 battery: ok
2015-10-31_07:40:48 HM_34BB12 HM_34BB12_Btn_01 Long
2015-10-31_07:40:49 HM_34BB12 battery: ok
2015-10-31_07:40:49 HM_34BB12 HM_34BB12_Btn_01 ShortKann mir hier vielleicht jemand weiterhelfen
5. November 2015 um 9:09 #2537adminAdministratorHi,
ich habe bei mir bisher nur Homematic Fensterkontakte und Schaltsteckdosen per FHEM an die Logo angebunden. Dafür funktioniert auch das auf der Seite veröffentlichte Perl-Script für FHEM. Für einen Taster müsste das Script erst noch angepasst werden. Also prinzipiell musst du FHEM dazu bringen bei einem Tastendruck in der Logo ein Bit zu setzen und anschließend wieder zurück zu setzen (damit ein erneuter Tastendruck überhaupt möglich ist, und das Bit nicht dauerhaft gesetzt bleibt). So wie es aussieht liefert der Homematic Taster aber kein „gedrückt“ und „losgelassen“-Events, sondern nur ein „Long“ und „Short“ beim Drücken, ein Rücksetzen müsste also Zeitverzögert per Timer erfolgen oder aber auf Logo-Seite von selbst wieder zurückgesetzt werden. Das Schreiben eines Bits über den Aufruf von „http://logocontrol:8088/rest/bytes/x/bits/y“ fällt damit weg, dieser setzt ein Bit dauerhaft. Aber du kannst dir für diesen Zweck einfach ein Dummy-Device (z.B. Name=“Homematic 4-fach Taster“) in LogoControl definieren mit einer Methode „Short“ und „Long“. Bei einem Tastendruck rufst du diese Methode dann ganz einfach aus FHEM heraus auf:
http://logocontrol:8088/rest/devices/%5BDeine_Device_ID%5D/methods/1
Der Trick ist: bei Aufruf einer Methode wird durch LogoControl das zugehörige Bit in der Logo für 250ms auf 1 gesetzt und danach wieder auf 0, somit muss sich FHEM nicht um das Rücksetzen des Bits kümmern, sondern wird von LogoControl automatisch erledigt. Das Bit bindest du nun per Netzwerkeingang in dein Schaltprogramm ein und behandelst es wie einen Taster der für 250ms gedrückt wurde.
Nun der schwierige Part: der Aufruf der LogoControl-Methode aus FHEM bei Tastendruck auf dem Homematic-Taster. Du könntest zum einen das Script 99_logoUtils.pm so anpassen, dass es auf short und long Events reagiert und die Aufzurufenden Methoden (ähnlich wie das LogoStateAddress=… bei den Fensterkontakten) über das Comment-Attribut zu übermitteln. Wenn du mit Perl aber nicht so fit bist wäre es vielleicht am einfachsten für jeden Taster ein Notify in FHEM zu definieren, z.B. so:
define HM_34BB12_Btn_01_short_pressed notify HM_34BB12_Btn_01:Short.* { GetFileFromURL("http://localhost:8088/rest/devices/1/methods/1") }
Im obigen Fall würde bei einem kurzen Tastendruck die LogoControl-Methode 1 des Geräts 1 aufgerufen werden. Gerät 1 wäre dann wie gesagt ein DummyDevice mit beliebieg vielen Methoden für kurze und lange Tastendrücke der einzelnen Buttons.
13. November 2015 um 15:28 #2546adminAdministratorHast du deine Tasteranbindung mittlerweile schon hinbekommen oder gibts noch Probleme?
14. November 2015 um 6:17 #2548elmoTeilnehmerHallo admin,
danke für deine Tipps.
da ich mit Perl Programmierung nicht so zurecht komme, habe ich deinen Tip mitdefine HM_34BB12_Btn_01_short_pressed notify HM_34BB12_Btn_01:Short.* {
GetFileFromURL(„http://localhost:8088/rest/devices/1/methods/1“) }
verwendet.
Das funktioniert einwandfrei, nur der „long“ Status Pulsiert, solange der Taster gedrückt wird. Dieses Pulsieren hab ich in der Logo wieder abgefangen, damit ich den Long Status auch auswerten kann.
Soweit funktionierts jetzt zu meiner Zufriedenheit.
Danke und schöne Grüßeelmo
13. September 2016 um 17:15 #3075elmoTeilnehmerHallo admin,
vieleicht kannst du mir da helfen.
Hab bei meinem notify
define HM_34BB12_Btn_01_short_pressed notify HM_34BB12_Btn_01:Short.* {
GetFileFromURL(„http://localhost:8088/rest/devices/1/methods/1“) }
sporadisch das Problem, daß das Tastersignal über den Netzwerkeingang hängen bleibt mit Status 1 und ich dann nichts mehr schalten kann.
Erst nach öfteren drücken des Tasters hintereinander wird der Netzwerkeingang dann in der Logo wieder auf 0 geschrieben.Gruß elmo
- Diese Antwort wurde vor vor 8 Jahren, 3 Monaten von elmo bearbeitet.
27. Januar 2017 um 22:48 #3228snowzoneTeilnehmerHallo,
ich arbeite mich gerade in den FHEM Server ein. Die Kommunikation mit meiner Logo hat schon geklappt.
Jetzt sollte man doch eigentlich schon Netzwerkeingänge in der Logo antriggern können, so zumindest mein Verständnis.
Habe mit „define Kochinsel S7_DWrite NI 5.0“ versucht den NI5.0 in Logo8 anzutriggern, leider ohne Erfolg.Was habe ich übersehen ?
Im Log stehen folgende Einträge
2017.01.27 20:53:48 3: logo S7_connect: connect to PLC with maxPDUlength=240
2017.01.27 21:44:11 1: PERL WARNING: Use of uninitialized value in string eq at ./FHEM/44_S7_DWrite.pm line 398.Gruß
Peter28. Januar 2017 um 12:25 #3229elmoTeilnehmerHallo Peter,
hab bei mir die Adressen in FHEM wie folgt deklariert, weil der Aufruf mit NI auch nicht funktioniert hatte.
NI define Garage S7_DWrite db 0 7.7 (7.7 ist die Virtuelle Adresse vom NI)
Merker define Raspi_Leben S7_DRead db 0 1104.4Gruß Christian
28. Januar 2017 um 13:23 #3230snowzoneTeilnehmerHallo Christian,
Vielen Dank. Hat funktioniert.
In der FHEM Doku steht das für den Zugriff auf Logo8 NI Eingänge (NI) benutzt werden soll.
Was für eine Irreführung.
Egal.
Jetzt kann ich entlich weiter machen.Nochmals Danke und ein schönes WE.
Gruß Peter
3. Februar 2017 um 14:43 #3259eusebioTeilnehmerHallo,
Ich benutze auch logocontrol und fhem, Beides einzeln funktioniert.
Sobald ich jedoch in fhem das Modul S7 für die Logo8 mit S7_DWrite benutze und gleichzeitig logocontrol läuft kommen in fhem
folgende Fehlermeldungen im Sekundentakt:2017.02.02 18:26:34 3: Logo1 S7_ReadBlockFromPLC ReadArea error: -2=unknown errorcode
2017.02.02 18:26:34 2: Logo1 S7 disconnected
2017.02.02 18:26:37 3: Logo1 S7_connect: connect to PLC with maxPDUlength=240
DIE:send: Cannot determine peer address at FHEM/44_S7_S7Client.pm line 851.
2017.02.02 18:26:44 0: DIE:send: Cannot determine peer address at FHEM/44_S7_S7Client.pm line 851.Sobald logocontrol gestoppt ist funktioniert alles wie es soll.
Hat jemand eine Idee?
Danke und Gruß,
Andreas
3. Februar 2017 um 17:08 #3260elmoTeilnehmerHallo Andreas,
hab daß beimir so gelöst:
1. Im Logo Programm eine neue Serververbindung anlegen.
2. hab hier SERVER TSAP 21.00 CLIENT TSAP 3.00 eingestellt
3. In FHEM unter /opt/fhem/FHEM im Modul 44_S7.pm folgendes in Zeile 158 + 159 editieren
$LocalTSAP = 0x2100
$RemoteTSAP = 0x0300
Passt dann zur TSAP in LOGOSoft
Hier der Auszug aus der 44_S7.pmif ( uc $a[2] eq „LOGO7“ || uc $a[2] eq „LOGO8“ ) {
$ip_address = $a[3];
$LocalTSAP = 0x2100;
$RemoteTSAP = 0x0300;
$hash->{Interval} = 1;
if ( uc $a[2] eq „LOGO7“ ) {
$hash->{S7TYPE} = „LOGO7“;
}
else {
$hash->{S7TYPE} = „LOGO8“;Hab keinen anderen Weg gefunden oder versucht.
Nachteil: Bei einem FHEM Update muß dieses wieder manuell angepasst werden.Gruß
Christian3. Februar 2017 um 18:00 #3261eusebioTeilnehmerHallo,
das hat einwandfrei funktioniert.
Vielen Dank.
Gruß,
Andreas
16. September 2017 um 10:46 #3557jailbreaker07TeilnehmerHallo Christian,
das Modul 44_S7.pm aht sich ja etwas verändert. Ich habe es wie folgt geändert…. aber leider funktioniert das so nicht.
Wie hast du das gemacht, oder hast du noch das alte Modul?danke
Gruß
Thorsten
elsif ( uc $a[2] eq "LOGO7" || uc $a[2] eq "LOGO8" ) { $PLC_address = $a[3]; $LocalTSAP = 0x2500; $RemoteTSAP = 0x0300; if (@a > 4) { $hash->{Interval} = $a[4]; } else { $hash->{Interval} = 1; } if ( uc $a[2] eq "LOGO7" ) { $hash->{S7TYPE} = "LOGO7"; } else { $hash->{S7TYPE} = "LOGO8"; } $PDUlength = 240; } else { $PLC_address = $a[2]; $rack = int( $a[3] ); return "invalid rack parameter (0 - 15)" if ( $rack < 0 || $rack > 15 ); $slot = int( $a[4] ); return "invalid slot parameter (0 - 15)" if ( $slot < 0 || $slot > 15 ); $hash->{Interval} = 1; if ( int(@a) == 6 ) { $hash->{Interval} = int( $a[5] ); return "invalid intervall parameter (1 - 86400)" if ( $hash->{Interval} < 1 || $hash->{Interval} > 86400 ); } $LocalTSAP = 0x2500; $RemoteTSAP = ( &S7Client::S7_PG << 8 ) + ( $rack * 0x20 ) + $slot; $PDUlength = 0x3c0; $hash->{S7TYPE} = "NATIVE"; }
-
AutorBeiträge
- Du musst angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.