neues Modul: SIEMENS Anbindung / S7 / Siemens Logo

Begonnen von charlie71, 12 August 2014, 15:33:23

Vorheriges Thema - Nächstes Thema

MadMax

Hallo Lee,

was für eine SPS hast du, mit CP? Dann die Konfiguration in Fhem? Alles was du gemacht hast um du Verbindung aufzubauen und das Bit in dem DB zu lesen.

So dann mal ne kleine Anleitung:
als erstes brauchst du einen Dummy der deine Schaltfläche ist.

define Schalfzimmer_LED_BUTTON dummy
attr Schalfzimmer_LED_BUTTON devStateIcon on:light_light_dim_100@yellow:klick off:light_light_dim_00@black:klick klick:light_light_dim_00@black
attr Schalfzimmer_LED_BUTTON event-on-change-reading state
attr Schalfzimmer_LED_BUTTON fp_Dachgeschoss 159,754,0,,
attr Schalfzimmer_LED_BUTTON room Schlafzimmer
attr Schalfzimmer_LED_BUTTON setList state:on,off,klick
attr Schalfzimmer_LED_BUTTON webCmd state

Dieser hat verschiedene Icons für die Zustände und dazu "Befehle".
Ist der Status on dann wird das Bild light_light_dim_100 in Gelb angezeigt, ist der Zustand off dann wird light_light_dim_00 in schwarz angezeigt. Beibeiden wird der wert "klick" gesetzt wenn du drauf drückst, bei klick wird das Bild light_light_dim_00 angezeigt damit überhaut was angeziegt wird.

Der Rest ist selbsterklärend oder?

Weiter gehts mit dem DRead:

define Schalfzimmer_LED S7_DRead Q1
attr Schalfzimmer_LED IODev LOGO_Dach
attr Schalfzimmer_LED event-on-change-reading state
attr Schalfzimmer_LED room Schlafzimmer

Wichtig "event-on-change-reading"!!!

Dann das notify das den Status der Lampe auf den Dummy schreibt.

define n_Schalfzimmer_LED notify Schalfzimmer_LED { my $VALUE = ReadingsVal("Schalfzimmer_LED", "state", 10);; fhem("set Schalfzimmer_LED_BUTTON ".$VALUE) }
attr n_Schalfzimmer_LED room Schlafzimmer


dann das DWrite das du beschreiben willst.

define Schalfzimmer_LED_Bit S7_DWrite db 0 200.0
attr Schalfzimmer_LED_Bit IODev LOGO_Dach
attr Schalfzimmer_LED_Bit room Schlafzimmer


und zum Schluss das notify das in meinem Falle das Bit Triggert wenn auf dem Dummy "geklickt" wurde.

define n_Schalfzimmer_LED_tip notify Schalfzimmer_LED_BUTTON:klick set Schalfzimmer_LED_Bit TRIGGER
attr n_Schalfzimmer_LED_tip room Schlafzimmer


habe das so mehrfach bei mir im Einsatz, würde mich aber auch für alternative Ideen begeistern.
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 6x SMA Wechselrichter, BYD HVM, BYD HVS, SMA EVCharger, KEBA Wallbox, 2x HMS800W, Daikin Wärmepumpe über CAN, viele ESPs

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

KOAL

Zitat von: pc1246 am 10 März 2016, 10:32:38
Hallo KOAL

Ich denke Dein Problem kommt von der VPN-Verbindung. Das macht das Ganze langsam. Soweit ich weiss ist kein Timeout von charly vorgesehen. Da Du aber doch eh eine RPI auf der anderen Seite hast, kannst Du doch dort auch ein fhem laufen lassen, und dann per fhem2fhem oder ser2net die eigentlichen Daten uebertragen. Ich habe aber beides noch nicht gemacht, bin dir da also keine Hilfe!

Gruss Christoph

Hallo, naja auf der anderen Seite läuft ein DDWRT Router als VPN Client, aber ich könnte einen alten RPi als fhem "Client" umfunktionieren,...hoffe das ist nicht zuviel Aufwand (Fhem2Fhem hab ich noch nie versucht),..die VPN hat eine Latenz von ca. 200-350ms.

Danke für den TIPP :)
..werde berichten

LG
KOAL
1X DEBAIN 11 ESXI VM, Openvpn-Server, FHEM, DHCP, HM-LAN W, USB-Enocean, Smartvisu V3.X
1X UBUNU 20.X LTS ESXI VM, AUTO-SERVER, Openvpn-Backup Server
1X UBUNU 20.X LTS ESXI VM, MAILSERVER, CLOUD
1X Lockerstor 4, NAS + APC CS650
1X WIN-10 ESXI VM, BLUEIRIS CAM Server

dbox2user

Hallo Leute!
Ich komme da gerade nicht weiter....

Ich habe erfolgreich meine LOGO8 mit dem S7-Modul in Fhem angebunden und kann problemlos meine Merker schalten und Eingänge/Ausgänge abfragen.
Soweit schonmal ein tolles Modul!!! :)

Im Wiki-Eintrag des S7-Moduls steht beim Thema LOGO-Anbindung:
"Anmerkung: Es wird defaultmäßig jede Sekunde geprüft ob ein Speicherblock zu lesen ist. "

Angelegt habe ich meine LOGO8  wie folgt:
define Teich_Logo S7 LOGO8 192.168.xxx.xxx

Die zugehörigen Eingänge/Ausgänge/Merker werden nun wirklich jede Sekunde abgefragt (->Jede Sekunde wird in Fhem ein Event gefeuert)
Um dies zu reduzieren habe ich bereits das Atribut "Event on change" benutzt.

Kann man irgendwie einstellen, dass die Abfrage der LOGO überhaupt nur z.B. alle 10Sekunden erfolgt??
In den "Internals" des Device gibt es ja "Interval 1" (also 1 Sekunde Abfrageinterval)
Das Interval kann man leider nicht verändern. Oder doch??

Bei der Kommunikation zu einer S7 kann man ja im define den Interval anpassen...
"define <name> S7 <ip_address> <rack> <slot> [<Intervall>]"
--> das klappt bei der LOGO8 leider nicht.

Wäre toll wenn ich den Abfrageintervall irgendwie anpassen könnte. ;)

Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

pc1246

Hallo dbox2user
http://www.fhemwiki.de/wiki/S7
Was denkst du bedeutet Intervall?
Gruss Christoph
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

dbox2user

Hallo Christoph

nachdem ich im letzten post bereits aus dem S7-Wiki-Eintrag zitiert habe, ist mir der Wiki Eintrag wohl bekannt.
Aber danke dass Du nochmal darauf hingewiesen hast.
Mir ist klar was Intervall bedeutet... Deshalb hab ich ja gefragt WIE man den Wert des Intervall ändert.??
Hierfür gibt es nämlich kein Attribut das man einfach setzen kann.

Und das das Beispiel aus dem Wiki Eintrag wo man den Intervall im define angibt ("define <name> S7 <ip_address> <rack> <slot> [<Intervall>]")
bezieht sich wie bereits erwähnt auf die Verbindung zu einer S7 und nicht wie in meinem Fall auf die LOGO8.
Bei der LOGO8 klappt das nicht im define... Oder muss es hier irgendwie anders eingegeben werden???

Gruß Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

pc1246

Sorry Christian
Ich hatte leider nach dem Satz "Das Interval kann man leider nicht verändern. Oder doch??" aufgehoert zu lesen!  :-[ :-[
Da ich keine Logo mehr habe, und auch keine mit Netzwerk hatte, kann ich Dir da nicht wirklich weiterhelfen. Hast Du versucht "define <name> S7 {LOGO7|LOGO8} <ip_address> [<Intervall>]"? Ansonsten musst Du auf Charlie warten, oder in das Modul gucken!
Gruss und nochmals sorry
Christoph
P.S.: Was stoert Dich an der sekuendlichen Abfrage?
HP T610
Onkyo_AVR;Enigma2; SB_Server; SB_Player; HM-USB; PhilipsTV; harmony hub; Jeelink mit PCA301; Somfy; S7-300; LGW; HUE; HM-IP auf Charly; div

dbox2user

Hallo,
"define <name> S7 {LOGO7|LOGO8} <ip_address> [<Intervall>]" hab ich probiert, funktioniert bei der Logo aber leider nicht. :(
Das Modul habe ich angeschaut, leider fehlen mir die nötigen Perl-Kenntnisse um richtig zu verstehen was da alles steht. :o
Warum ich das Intervall überhaupt ändern möchte.... Ich möchte unnötige Geräteanfragen/Traffic vermeiden. (Würde ja z.B. auch keinen Sinn machen, wenn man einen Raumtemperatursensor jede Sekunde abfragen würde)
Mit "Event on change" habe ich wenigstens schonmal keine dauernden Events, aber am liebstens wäre es mir wie gesagt wenn ich den Abrageintervall komlett reduzieren könnte.
Vielleicht liest ja Charlie oder jemand anders der Rat weiß das hier demnächst und kann weiterhelfen.

Gruß,
Christian
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

zicki

Hallo dbox2user

hierzu kannst du im Modul 44_S7.pm die Zeile 160 "$hash->{Interval} = 1;" von 1 auf 10 setzen dann sollten die Werte nur alle 10 Sekunden abgerufen werden.

#####################################
sub S7_Define($$) {
   my ( $hash, $def ) = @_;
   my @a = split( "[ \t][ \t]*", $def );

   my ( $name, $ip_address, $LocalTSAP, $RemoteTSAP, $res, $PDUlength, $rack,
      $slot );

   $name = $a[0];

   if ( uc $a[2] eq "LOGO7" || uc $a[2] eq "LOGO8" ) {
      $ip_address       = $a[3];
      $LocalTSAP        = 0x0100;
      $RemoteTSAP       = 0x0200;
      $hash->{Interval} = 1;
      if ( uc $a[2] eq "LOGO7" ) {
         $hash->{S7TYPE} = "LOGO7";
      }
      else {
         $hash->{S7TYPE} = "LOGO8";
      }
      $PDUlength = 240;


Gruß Zicki

Raspberry PI 2 Jessie mit FHEM; FritzBox 7580 FritzOS 06.83; S7 200 für Heizung und Solar;AVR-NET-IO informiert die S7 200 über das Wetter von morgen und die aktuellen Temperaturen (5x 1-Wire)im Solarspeicher sowie 1x AVR-NET-IO mit Ethersex 10x 1-Wire Raumtemperaturen und Status Fensterkontakte

dbox2user

Hallo Zicki,

danke schonmal für den Tip mit der Änderung direkt im Modul.
Ansich scheint das zu funktionieren, jedoch bekomme ich so ständige Einträge im Systemlog mit "connect / disconnect"...
Ich werde es erstmal so lassen wie bisher... da kann ich auch problemlos die Updates der Module machen.

Vielleicht kommt irgendwann die Eingabemöglichkeit des Intervalls ganz regulär im Modul.

Trotzdem DANKE! :)
Fhem 5.8 auf Raspberry Pi2; 1 Wire OWSERVER mit DS9490R und OWX DS2480;AVR-NET-IO mit 1Wire;  LOGO8; Kostalpiko; Selbstbau CUL; Arduino mit cFirmata; Denon AVR; Samsung TV; Fritzbox;

charlie71

Hallo Leute,

sorry für meine Abstinenz im Forum.
zuerst mal ein paar Infos zu den letzten Fragen:
@dbox2user:
Das Intervall kann in nächsten Version mit "set" verändert werden.
Alternativ kannst du deine Logo8 auch wie folgt konfigurieren:
Beispiel für Intervall = 5s
define mySlowLogo8 S7 SPS_IP 8 0 5

@DSchmndtk und alle anderen Logo8 Benutzer:
Das Problem mit den Netzwerk Ein-/Ausgängen NI, NQ, NAI, NAQ ist, das das Modul hier davon ausgeht dass die selben VM-Adressen wie im Handbuch (auf der Seite 110) beschrieben ist, verwendet wird. Leider ist dass nur die halbe Miete, es muss im Logo Programm die Adresse auch entsprechend gesetzt werden. Da dies immer wieder zur Verwirrung führt werde ich diese Config methode in der nächsten Release als Depricated (unerwünscht) kennzeichen.

Bessere Vorgehensweise (Erklärung an Hand eines NI):
In der Logo!Soft legt man für den NI den VM-Parameter fest. Im attachten Bild kann man sehen, dass der NI12 auf die Adresse VB106.0 gelegt wird.
Um nun den NI- Eingang vom FHEM zu verwenden, folgendes DWrite konfigurieren:
define myLogo8 S7_DWrite db 0 106.0

Das wars auch schon.

Ausblick auf die nächste Release:
Die nächste Release wird nun auch einen Support für die S5 enthalten, und wie immer alles in Perl geschrieben.
Aktuell bin ich beim Testen der Release.

lG
Charlie71






MaxPollin

Moin zusammen,

ich komme beim Auslesen von einem Zähler meiner Logo8 nicht weiter. Vielleicht kann mir jemand auf die Sprünge helfen?

Ich habe einen Zähler auf VM 120 eingerichtet. Im Logo Webinterface kann ich den Wert abfragen. Das klappt soweit. Wenn ich jetzt hier in FHEM den Wert abfragen möchte kommt leider kein Wert. Folgendes habe ich als Abfrage:

define Zustand_Rollo S7_ARead db 0 120 u32

Als Wert kommen nur Fragezeichen. Was muss ich als Baustein Nr. angeben? Lasse ich den Baustein weg, kommt eine Fehlermeldung...

charlie71

Hallo MaxPollin,

Bist du sicher das du den richtigen Datentyp hast. Bei meiner Logo7 lese ich Zählerstande mit mit u16 ein.

lG
Charlie71

MaxPollin

Ich habe den Fehler gefunden. Es lag daran, dass TSAP nicht auf 2.00 eingestellt war. Der Datentyp ist soweit mit u32 richtig.

GeRei77

Hallo Leute,

habe gerade wieder ein Problem mit zwei Logos 7.
Das eine zeigt immer disconnected und das andere wechselt immer zwischen disconnected und connected to PLC.

Habe meine Logos neu versorgt, wegen einer kleiner Änderung und komme nicht mehr drauf, woran es liegt.
Hat jemand eine Idee?

Vielen Dank schon mal

charlie71

Hallo GeRei77,

Gibt es mehrere Geräte die auf die Logos zugreifen?

Wenn du das log Level im FHEM erhöhst gibts mehr Infos im Logfile. (attr global verbose 5)

lG
Charlie71