Modbus Leuchten und Taster

Telefisch

New member
Hallo Forum,
vor rund 20 Jahren habe ich in mein Haus eine SPS-Steuerung eingebaut, die u.a. das gesamte Licht steuert.
Sie hat digitale Eingänge, die mittels Tastern gesteuert werden und digitale Ausgänge, die mittels Relais einige Steckdosen und alle Leuchten steuern.
Auf diese beiden „Signale“ habe ich Zugriff mittels Modbus (TCP).
Die SPS übernimmt also bei einem kurzen Impuls auf einem Eingang das Umschalten des Ausgangs, im Prinzip wie ein „Eltako“.
Jetzt möchte ich von ioBroker auf HA umsteigen und beschäftige mich grade mit der Modbus Integration.
Da ich keinen direkten Datenpunkt habe, mit dem ich direkt einen SPS-Ausgang ansteuern kann habe ich das in meinem ioBroker wie folgt gelöst:

Es gibt einen Datenpunkt im ioBroker der Quasi die Leuchte darstellt.
Ändert sich ein Ausgang wird der Datenpunkt ebenfalls geändert.
Wird der Datenpunkt über eine Visualisierung (oder Sprachassistenten) geändert, vergleicht ein Script den Datenpunkt mit dem Ausgang und wenn beides nicht gleich ist, wird ein kurzer Impuls an den Digitaleingang gesendet (als ob jemand einen Taster drückt).

Jetzt habe ich mich mit der Modbus-Integration vom HA mal auseinandergesetzt und finde da Entitäten wie Light.
Können diese Entitäten das ganze gescripte obsolet machen?
Hat jemand eine ähnliche Konstellation mal umgesetzt und kann mir etwas Starthilfe geben?

Danke Euch
Gruß
Carsten
 
Nun ja, nach meinem Verständnis ist der Ausgang, der das Relais ansteuert für den Modbus ein Signal, wie ein Sensor. Den kann man aber meines Erachtens nur lesen und nicht schreiben, oder sehe ich das falsch?
Der Ausgang wird ja von der SPS gesteuert nicht vom Modbus…?

Die Eingänge der SPS (Taster) werden vom ioBroker-Modbus als Coils und die Ausgänge (Lampen) als Discrete Input interpretiert.
 
Zuletzt bearbeitet:
Kommt auf das Modbus Register an. Es gibt Eingangs- und Ausgangsbits (Coils und Discrete Inputs) alles andere sind 16-Bit Register.
Aus welchem Register die SPS Ihr Signal holt weis nur der Programmierer. Für Modbus bekommst Du auch Programme mit denen man die einzelnen Register beeinflussen kann.
Um das Ganze zu nutzen brauchst Du erst einmal die Information welches Gerät welchem Register zugeornet ist. Von daher gibt es schon einen festen Datenpunkt der dann auch direkt auf den SPS-Ausgang wirkt. Das wäre der "Normalfall".
Man kann natürlich auch nur irgendwelche Daten übertragen und die in der SPS interpretieren. Beispiel: Wenn eine 14 im Register steht wird Lampe 3 eingeschaltet und bei 27 wird sie ausgeschaltet.
Das findest Du alles im SPS-Programm. Was ist denn das für eine SPS und hast Du das Programm?
 
Wenn der Modbus nur verwendet wird um den Signalzustand anzuzeigen dann kannst Du darüber nichts steuern - das ist richtig.
Aber Programme kann man ja ändern.:cool:
 
Jeder DI und jeder DO hat seine eigene Adresse, soweit alles bekannt. Läuft im iobroker ja mit dem oben geschriebenen „Umweg“
Die DI sind als coil und die DO als Discrete Input definiert.
Ich muss mal schauen, ob ich da rein komme und das umprogrammieren kann.

Machen Register eigentlich Sinn, wenn es immer nur um einen einzelnen Status/Befehl geht?
Das ist doch mit einzelnen Adressen viel übersichtlicher…
 
Ja genau.
Nur wer schaltet 16 Lampen auf einmal.
Ganz im Gegenteil, ich muss mir für jede neue Aktion den aktuellen Zustand der 15 anderen Lampen holen um die nicht zu überschreiben.
Wie auch immer, ich versuche mal in die SPS zu kommen.
Danke erstmal
 
@amiko richtig! Man kann alles einzeln lesen/schreiben und es wird dann alles auf einmal aktualisiert. Und die Kommunikation hat weniger Overhead, Aber das nur am Rande. Zunächst muss es überhaupt funktionieren. Optimieren kann man es immer noch.
 
Genau, erstmal muss es funktionieren.
Also, ich bin im Programm.
Da hab ich vor 20 Jahren einen Funktionsbaustein „gebastelt“, der einen Trigger Eingang, einen Master ON-Eingang und einen Master OFF-Eingang hat.
Als Ausgang ist dann einmal der physische Ausgang verknüpft und die Modbus Input Coil (für den Modbus ist es ja ein Input).
Auf den Trigger Eingang habe ich jeweils einen Modbus Output Coil gelegt, parallel zu den physichen Tastern (Oder-Verknüpft).

Also der FB erwartet einen Triger-Impuls und schaltet dann einen Ausgang.
Wenn ich versuche am Ausgang auch ein mb_Output_Coil anzulegen bekomme ich in der HA-Automation zu sehen, dass die Entität nicht bereitgestellt ist.

Für HA ist es ja im Prinzip gleichzeitig sowohl ein Ein- als auch ein Ausgang
Jetzt die Masterfrage… wat nu?
Wie gesagt, im ioBroker habe ich es mittels Script hinbekommen, aber das scheint mir irgendwie nicht richtig.
 
Zuletzt bearbeitet:
Hallo @Telefisch,
ok noch einmal von vorne: Es gibt eine SPS mit Modbus. Die Ausgänge der SPS schalten Geräte. Hierfür gibt es einen FB dessen Eingänge über Modbus betätigt werden. Steuerungsaufgabe ist wenn in HA die Taste gedrückt wird das entsprechende Modbus Register zu setzen damit das Gerät geschaltet wird. Richtig?
Mit der Modbus Integration habe ich noch nichts gemacht aber das könnte ich mal mit einer Steuerung testen. Ich hätte hier eine Siemens Logo oder eine S7-1200. Beide können Modbus.
 
Also den Weg, wie ich Modbus ansteuere kenne ich, das ist nicht mein Problem.

Das eigentliche Problem ist, dass in einer Visualisierung ein Schalter eingesetzt wird um eine Lampe einzuschalten.
Ich muss also bei Einschalten und Ausschalten jeweils einen Impuls senden. Der Status des Schalter ist aber die Lampe, also das, was von der SPS geschaltet wird.

Ich hatte gehofft, dass man das evtl. mit dem Modbus doch anders hinbekommt.

So funktioniert es seit Jahren im ioBroker:

//Büro-Licht
//Reaktion auf Softtaster
on({id: 'Beckhoff.0.EG.Büro-Licht.state'}, function (obj) {
if (getState("Beckhoff.0.EG.Büro-Licht.state").val != getState("modbus.0.discreteInputs.32769_Licht_Buero_unten").val)
{
setState("modbus.0.coils.32769_Taster_Buero_unten", true);
setState("modbus.0.coils.32769_Taster_Buero_unten", false);
}
});
//Reaktion auf Steuerung
on({id: 'modbus.0.discreteInputs.32769_Licht_Buero_unten'}, function (obj){
setState("Beckhoff.0.EG.Büro-Licht.state", getState("modbus.0.discreteInputs.32769_Licht_Buero_unten").val);
});

Im Einzelnen:
Beckhoff.0.EG.Büro-Licht ist eine binäre Variable, die als Schalter in die Visu eingesetzt wird.
modbus.0.discreteInputs.32769_Licht_Buero_unten ist der Ausgang, den die SPS setzt.
Ich vergleiche Also, Ist Variable ungleich Ausgang SPS, schalte den SPS Eingang einmal ein und wieder aus.
unten setze ich dann bei Änderung des SPS-Ausgang nochmal die Variable für den Schalter auf den gleichen Status, damit der echte Zustand angezegt wird, wenn mal jemand den normalen Taster verwendet.

Mittlerweile glaube ich, dass ich auch hier den Weg gehen muss, muss also das Script als Template-Switch realisieren.
Damit komme ich allerdings noch gar nicht klar.

HTH
Carsten
 
Und das ist der Licht-Baustein:
1749193383938.png

Da hab ich damals einen Timereingang implementiert, weil meine Tochter im Bad das Licht gerne vergessen hat.
Mit Doppelclick wird der Timer dann quasi deaktiviert.
Das hat aber nichts mit dem gesamten Prinzip zu tun.
 
Entschuldigung, ich muss kurz etwas fragen: Du sprichst über Modbus-Integration. Ich kenne keine Modbus-Integration bei HA. Modbus muss über die Datei modbus.yaml konfiguriert werden (zumindest ist es bei mir so). Zudem muss eine physikalische Verbindung zwischen SPS und dem Gerät, auf dem HA läuft, bestehen. Bekommst du die Signale von der SPS in HA und umgekehrt von HA an die SPS?
 
Ja, da hab ich vielleicht einige Begriffe verwechselt. Sorry Anfängerfehler.
Natürlich habe ich Modbus in YAML konfiguriert.
Ich bekomme auch die Signale von der SPS und kann auch die Eingänge der SPS setzen.

Es geht nur darum ob es möglich ist, den Tast-Impuls und den Relais-Zustand in einem Schalter zu kombinieren.
Ich hab gestern den ganzen Abend versucht hinter die Template-Programmierung zu steigen, bin da aber noch ratlos.
 
Ich hab mich grade an einem Switch Template versucht:

YAML:
switch:
  - platform: template
    switches:
      Esstisch-Lampe:
        value_template: "{{ is_state('binary_sensor.relais_esstisch', 'on') }}"
        turn_on:
          action: switch.turn_on
          target:
            entity_id: switch.trigger_esstisch
        turn_off:
          action: switch.turn_off
          target:
            entity_id: switch.trigger_esstisch

Das funktioniert soweit nur dass der Trigger-Impuls natürlich nicht zurück genommen wird.
Wie bekomme ich es hin, dass bei action: switch.turn_on das target einmal ein und wieder ausgeschaltet wird?
Gleiches dann für Switch.turn_off.
 
Zuletzt bearbeitet:

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.749
Beiträge
64.903
Mitglieder
7.037
Neuestes Mitglied
DerHuhuu
Zurück
Oben