Homematic-Taster mit FHEM an Logo!8

Willkommen Foren LogoControl Homematic-Taster mit FHEM an Logo!8

12 Beiträge anzeigen - 1 bis 12 (von insgesamt 12)
  • Autor
    Beiträge
  • #2530
    elmo
    Teilnehmer

    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 Short

    Kann mir hier vielleicht jemand weiterhelfen

    #2537
    admin
    Administrator

    Hi,

    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.

    #2546
    admin
    Administrator

    Hast du deine Tasteranbindung mittlerweile schon hinbekommen oder gibts noch Probleme?

    #2548
    elmo
    Teilnehmer

    Hallo admin,
    danke für deine Tipps.
    da ich mit Perl Programmierung nicht so zurecht komme, habe ich deinen Tip mit

    define 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üße

    elmo

    #3075
    elmo
    Teilnehmer

    Hallo 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.
    #3228
    snowzone
    Teilnehmer

    Hallo,
    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ß
    Peter

    #3229
    elmo
    Teilnehmer

    Hallo 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.4

    Gruß Christian

    #3230
    snowzone
    Teilnehmer

    Hallo 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

    #3259
    eusebio
    Teilnehmer

    Hallo,

    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

    #3260
    elmo
    Teilnehmer

    Hallo 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.pm

    if ( 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ß
    Christian

    #3261
    eusebio
    Teilnehmer

    Hallo,

    das hat einwandfrei funktioniert.

    Vielen Dank.

    Gruß,

    Andreas

    #3557
    jailbreaker07
    Teilnehmer

    Hallo 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";
    	}
    
    

    Einstellungen Logo

12 Beiträge anzeigen - 1 bis 12 (von insgesamt 12)
  • Du musst angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.