Seite 2 von 3

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 24. Nov 2020 05:40
von udo1toni
Also, bis auf falsch und doppelt definierte GA? ;)

Das war mir oben leider durchgerutscht. Es ist extrem wichtig, GA nicht doppelt anzugeben, wenn es dafür keinen triftigen Grund gibt. Insbesondere gilt das für "ankommende" GA, da das knx Addon die Tabelle der Connections nur so lange durchläuft, bis es auf den ersten passenden Eintrag trifft.

Ich gehe davon aus, dass das Modul korrekt verbaut und konfiguriert ist, und dass es direkt am knx Bus problemlos funktioniert (also unabhängig von openHAB).
Dann sollte die funktionierende Konfiguration eher so aussehen:
Things:

Code: Alles auswählen

    Thing device Garagentor @ "KNX"[
        address="1.1.201",
        pingInterval=600
     ] {
        Type rollershutter : open_close            "Tor auf-zu"              [upDown="3/3/20",stopMove="3/3/21"]
        Type switch        : lueftung              "Tor Lüftung"             [ga="3/3/22+<3/3/28"]
        Type switch        : licht                 "Tor Licht"               [ga="3/3/23+<3/3/33"]
        Type contact       : status_offen          "Garagentor offen"        [ga="<3/3/24"]
        Type contact       : status_zu             "Garagentor zu"           [ga="<3/3/25"]
        Type contact       : status_bewegung       "Garagentor Bewegung"     [ga="<3/3/29"]
        Type contact       : status_bewegung_auf   "Garagentor Bewegung auf" [ga="<3/3/30"]
        Type contact       : status_bewegung_zu    "Garagentor Bewegung zu"  [ga="<3/3/31"]
    }
Die physikalische Addresse könnte (genau wie pingInterval) auch zunächst auskommentiert werden.

Für den rollershutter Channel gibt es keine gültige position als GA!
Für die Lüftungsstellung und das Licht gilt aber, dass die Rückmeldung wunderbar in den passenden Channel integriert werden kann. Die weiteren Status sind alle 1Bit-KO, man könnte hier auch switch Channel verwenden. Falls die GA nicht lesbar sind, müsste natürlich das < jeweils entfernt werden.
Der Status Error sollte laut Handbuch nicht mit einer GA verbunden werden.

Dazu passend die Items:

Code: Alles auswählen

Rollershutter Garagentor                     "Garagentor [%d %%]" <garagedoor> (gGA, gRO, gGaragentor) {channel="knx:device:bridge:Garagentor:open_close", autoupdate="false"}
Switch        Garagentor_lueftung            "Tor Lüftung [%s]"                (gGaragentor)           {channel="knx:device:bridge:Garagentor:lueftung", autoupdate="false"}
Switch        Garagentor_licht               "Tor Licht [%s]"                  (gGaragentor)           {channel="knx:device:bridge:Garagentor:licht", autoupdate="false"}

Contact       Garagentor_status_offen        "Garagentor offen [%s]"           (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_offen"}
Contact       Garagentor_status_zu           "Garagentor zu [%s]"              (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_zu"}
Contact       Garagentor_status_bewegung     "Garagentor Bewegung [%s]"        (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_bewegung"}
Contact       Garagentor_status_bewegung_auf "Garagentor Bewegung auf [%s]"    (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_bewegung_auf"}
Contact       Garagentor_status_bewegung_zu  "Garagentor Bewegung zu [%s]"     (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_bewegung_zu"}

String        Garagentor_status              "Garagentor [%s]"
autoupdate="false" ist nur bei bidirektionalen Items sinnvoll, nicht aber bei Contact Items, da diese ja niemals ein Command ausführen müssen.
Ich habe hier ein virtuelles Item Garagentor_status für die Anzeige der Status vorgesehen. Dazu braucht es dann noch eine Rule, die sich auch gleich um den Status des Rollershutter Items kümmern kann:

Code: Alles auswählen

rule "Update Garage Status"
when
    Item Garagentor_status_offen changed or
    Item Garagentor_status_zu changed or
    Item Garagentor_lueftung changed or
    Item Garagentor_status_bewegung changed or
    Item Garagentor_status_bewegung_auf changed or
    Item Garagentor_status_bewegung_zu changed
then
    var Integer nPos = null
    var String strStat = "zwischendrin"
    if(Garagentor_status_offen.state == CLOSED) {
        nPos = 0
        strStat = "offen"
    }
    if(Garagentor_status_zu.state == CLOSED) {
        nPos = 100
        strStat = "geschlossen"
    }
    if(Garagentor_status_lueftung.state == CLOSED) {
        nPos = 80
        strStat = "lüftet"
    }
    if(Garagentor_status_bewegung_auf.state == CLOSED) {
        strStat = "öffnet"
    }
    if(Garagentor_status_bewegung_zu.state == CLOSED) {
        strStat = "schließt"
    }
    Garagentor.postUpdate(if(nPos instanceof Number) nPos else NULL)
    Garagentor_status.postUpdate(strStat)
end
Eventuell irre ich mich mit der Logik des Contact Items, falls die Anzeige also nicht stimmt, müsste überall statt des CLOSED ein OPEN eingetragen werden.

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 25. Nov 2020 15:22
von HansDampf
udo1toni hat geschrieben: 24. Nov 2020 05:40 Also, bis auf falsch und doppelt definierte GA? ;)

Das war mir oben leider durchgerutscht. Es ist extrem wichtig, GA nicht doppelt anzugeben, wenn es dafür keinen triftigen Grund gibt. Insbesondere gilt das für "ankommende" GA, da das knx Addon die Tabelle der Connections nur so lange durchläuft, bis es auf den ersten passenden Eintrag trifft.

Ich gehe davon aus, dass das Modul korrekt verbaut und konfiguriert ist, und dass es direkt am knx Bus problemlos funktioniert (also unabhängig von openHAB).
Dann sollte die funktionierende Konfiguration eher so aussehen:
Things:

Code: Alles auswählen

    Thing device Garagentor @ "KNX"[
        address="1.1.201",
        pingInterval=600
     ] {
        Type rollershutter : open_close            "Tor auf-zu"              [upDown="3/3/20",stopMove="3/3/21"]
        Type switch        : lueftung              "Tor Lüftung"             [ga="3/3/22+<3/3/28"]
        Type switch        : licht                 "Tor Licht"               [ga="3/3/23+<3/3/33"]
        Type contact       : status_offen          "Garagentor offen"        [ga="<3/3/24"]
        Type contact       : status_zu             "Garagentor zu"           [ga="<3/3/25"]
        Type contact       : status_bewegung       "Garagentor Bewegung"     [ga="<3/3/29"]
        Type contact       : status_bewegung_auf   "Garagentor Bewegung auf" [ga="<3/3/30"]
        Type contact       : status_bewegung_zu    "Garagentor Bewegung zu"  [ga="<3/3/31"]
    }
Die physikalische Addresse könnte (genau wie pingInterval) auch zunächst auskommentiert werden.

Für den rollershutter Channel gibt es keine gültige position als GA!
Für die Lüftungsstellung und das Licht gilt aber, dass die Rückmeldung wunderbar in den passenden Channel integriert werden kann. Die weiteren Status sind alle 1Bit-KO, man könnte hier auch switch Channel verwenden. Falls die GA nicht lesbar sind, müsste natürlich das < jeweils entfernt werden.
Der Status Error sollte laut Handbuch nicht mit einer GA verbunden werden.

Dazu passend die Items:

Code: Alles auswählen

Rollershutter Garagentor                     "Garagentor [%d %%]" <garagedoor> (gGA, gRO, gGaragentor) {channel="knx:device:bridge:Garagentor:open_close", autoupdate="false"}
Switch        Garagentor_lueftung            "Tor Lüftung [%s]"                (gGaragentor)           {channel="knx:device:bridge:Garagentor:lueftung", autoupdate="false"}
Switch        Garagentor_licht               "Tor Licht [%s]"                  (gGaragentor)           {channel="knx:device:bridge:Garagentor:licht", autoupdate="false"}

Contact       Garagentor_status_offen        "Garagentor offen [%s]"           (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_offen"}
Contact       Garagentor_status_zu           "Garagentor zu [%s]"              (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_zu"}
Contact       Garagentor_status_bewegung     "Garagentor Bewegung [%s]"        (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_bewegung"}
Contact       Garagentor_status_bewegung_auf "Garagentor Bewegung auf [%s]"    (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_bewegung_auf"}
Contact       Garagentor_status_bewegung_zu  "Garagentor Bewegung zu [%s]"     (gGaragentor)           {channel="knx:device:bridge:Garagentor:status_bewegung_zu"}

String        Garagentor_status              "Garagentor [%s]"
autoupdate="false" ist nur bei bidirektionalen Items sinnvoll, nicht aber bei Contact Items, da diese ja niemals ein Command ausführen müssen.
Ich habe hier ein virtuelles Item Garagentor_status für die Anzeige der Status vorgesehen. Dazu braucht es dann noch eine Rule, die sich auch gleich um den Status des Rollershutter Items kümmern kann:

Code: Alles auswählen

rule "Update Garage Status"
when
    Item Garagentor_status_offen changed or
    Item Garagentor_status_zu changed or
    Item Garagentor_lueftung changed or
    Item Garagentor_status_bewegung changed or
    Item Garagentor_status_bewegung_auf changed or
    Item Garagentor_status_bewegung_zu changed
then
    var Integer nPos = null
    var String strStat = "zwischendrin"
    if(Garagentor_status_offen.state == CLOSED) {
        nPos = 0
        strStat = "offen"
    }
    if(Garagentor_status_zu.state == CLOSED) {
        nPos = 100
        strStat = "geschlossen"
    }
    if(Garagentor_status_lueftung.state == CLOSED) {
        nPos = 80
        strStat = "lüftet"
    }
    if(Garagentor_status_bewegung_auf.state == CLOSED) {
        strStat = "öffnet"
    }
    if(Garagentor_status_bewegung_zu.state == CLOSED) {
        strStat = "schließt"
    }
    Garagentor.postUpdate(if(nPos instanceof Number) nPos else NULL)
    Garagentor_status.postUpdate(strStat)
end
Eventuell irre ich mich mit der Logik des Contact Items, falls die Anzeige also nicht stimmt, müsste überall statt des CLOSED ein OPEN eingetragen werden.
Mega von Dir! Vielen Dank.
Habe oben in der Rule Garagentor_lueftung angepasst. Leider bekomme ich noch die Exception:

Code: Alles auswählen

Rule 'Update Garage Status': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.postUpdate(org.eclipse.smarthome.core.items.Item,org.eclipse.smarthome.core.types.State) on instance: null
Bild_2020-11-25_152208.png

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 25. Nov 2020 18:55
von udo1toni
Warum postest Du ein Bild? Bitte füge Code als Text ein (Text markieren, in Zwischenablage kopieren, ins Forum wechseln, Coed-Tags einfügen, Zwischenablage einfügen... das geht schneller, als ein Bild hoch laden)

Die angezeigte "Fehlermeldung" ist nur eine Warnung. Ich bin mir relativ sicher, dass der Code so korrekt ist...

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 25. Nov 2020 22:09
von HansDampf
udo1toni hat geschrieben: 25. Nov 2020 18:55 Warum postest Du ein Bild? Bitte füge Code als Text ein (Text markieren, in Zwischenablage kopieren, ins Forum wechseln, Coed-Tags einfügen, Zwischenablage einfügen... das geht schneller, als ein Bild hoch laden)

Die angezeigte "Fehlermeldung" ist nur eine Warnung. Ich bin mir relativ sicher, dass der Code so korrekt ist...
Der Fehler ist über dem Bild als Code eingefügt :)

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 25. Nov 2020 22:32
von udo1toni
Ändere mal diese Zeile:

Code: Alles auswählen

Garagentor.postUpdate(if(nPos instanceof Number) nPos else NULL)
gegen diese hier:

Code: Alles auswählen

Garagentor.postUpdate(if(nPos !== null) nPos else NULL)
das !== ist korrekt so.

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 25. Nov 2020 22:58
von HansDampf
udo1toni hat geschrieben: 25. Nov 2020 22:32 Ändere mal diese Zeile:

Code: Alles auswählen

Garagentor.postUpdate(if(nPos instanceof Number) nPos else NULL)
gegen diese hier:

Code: Alles auswählen

Garagentor.postUpdate(if(nPos !== null) nPos else NULL)
das !== ist korrekt so.
Das ist die Fehlermeldung zu:

2020-11-25 22:57:56.493 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Garage Status': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.postUpdate(org.eclipse.smarthome.core.items.Item,org.eclipse.smarthome.core.types.State) on instance: null

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 26. Nov 2020 15:27
von udo1toni
Ok, dann mit Logging:

Code: Alles auswählen

rule "Update Garage Status"
when
    Item Garagentor_status_offen changed or
    Item Garagentor_status_zu changed or
    Item Garagentor_lueftung changed or
    Item Garagentor_status_bewegung changed or
    Item Garagentor_status_bewegung_auf changed or
    Item Garagentor_status_bewegung_zu changed
then
    var Integer nPos = null
    var String strStat = "zwischendrin"
    if(Garagentor_status_offen.state == CLOSED) {
        nPos = 0
        strStat = "offen"
    }
    if(Garagentor_status_zu.state == CLOSED) {
        nPos = 100
        strStat = "geschlossen"
    }
    if(Garagentor_status_lueftung.state == CLOSED) {
        nPos = 80
        strStat = "lüftet"
    }
    if(Garagentor_status_bewegung_auf.state == CLOSED) {
        strStat = "öffnet"
    }
    if(Garagentor_status_bewegung_zu.state == CLOSED) {
        strStat = "schließt"
    }
    logInfo("garage","nPos = {}",nPos)
    Garagentor.postUpdate(if(nPos !== null) nPos else NULL)
    Garagentor_status.postUpdate(strStat)
end
Nun sollte es zwar immer noch eine Fehlermeldung geben, aber davor noch die Information, was nun tatsächlich in nPos steht.

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 27. Nov 2020 08:48
von HansDampf
udo1toni hat geschrieben: 26. Nov 2020 15:27 Ok, dann mit Logging:

Code: Alles auswählen

rule "Update Garage Status"
when
    Item Garagentor_status_offen changed or
    Item Garagentor_status_zu changed or
    Item Garagentor_lueftung changed or
    Item Garagentor_status_bewegung changed or
    Item Garagentor_status_bewegung_auf changed or
    Item Garagentor_status_bewegung_zu changed
then
    var Integer nPos = null
    var String strStat = "zwischendrin"
    if(Garagentor_status_offen.state == CLOSED) {
        nPos = 0
        strStat = "offen"
    }
    if(Garagentor_status_zu.state == CLOSED) {
        nPos = 100
        strStat = "geschlossen"
    }
    if(Garagentor_status_lueftung.state == CLOSED) {
        nPos = 80
        strStat = "lüftet"
    }
    if(Garagentor_status_bewegung_auf.state == CLOSED) {
        strStat = "öffnet"
    }
    if(Garagentor_status_bewegung_zu.state == CLOSED) {
        strStat = "schließt"
    }
    logInfo("garage","nPos = {}",nPos)
    Garagentor.postUpdate(if(nPos !== null) nPos else NULL)
    Garagentor_status.postUpdate(strStat)
end
Nun sollte es zwar immer noch eine Fehlermeldung geben, aber davor noch die Information, was nun tatsächlich in nPos steht.
Danke für die Ergänzung. Mit dem Log habe ich bemerkt das die states auf "open" sein müssen.

Das ist der aktuelle Code:

Code: Alles auswählen

rule "Update Garage Status"
when
    Item Garagentor_status_offen changed or
    Item Garagentor_status_zu changed or
    Item Garagentor_lueftung changed or
    Item Garagentor_status_bewegung changed or
    Item Garagentor_status_bewegung_auf changed or
    Item Garagentor_status_bewegung_zu changed
then
    var Integer nPos = null
    var String strStat = "zwischendrin"
    if(Garagentor_status_offen.state == OPEN) {
        nPos = 0
        strStat = "offen"
    }
    if(Garagentor_status_zu.state == OPEN) {
        nPos = 100
        strStat = "geschlossen"
    }
    if(Garagentor_lueftung.state == ON) {
        nPos = 80
        strStat = "lüftet"
    }
    if(Garagentor_status_bewegung_auf.state == OPEN) {
        strStat = "öffnet"
    }
    if(Garagentor_status_bewegung_zu.state == OPEN) {
        strStat = "schließt"
    }
    logInfo("garage","nPos = {}",nPos)
    Garagentor.postUpdate(if(nPos !== null) nPos else NULL)
    Garagentor_status.postUpdate(strStat)
end
Allerdings komme ich nicht drauf warum z.b. beim hochfahren der Error auftaucht.

Code: Alles auswählen

2020-11-27 08:42:39.061 [ome.event.ItemCommandEvent] - Item 'Garagentor' received command UP

2020-11-27 08:42:39.088 [ome.event.ItemCommandEvent] - Item 'Garagentor_status' received command 0

2020-11-27 08:42:39.106 [vent.ItemStateChangedEvent] - Garagentor_status changed from 100 to 0

2020-11-27 08:42:39.543 [vent.ItemStateChangedEvent] - Garagentor_status_zu changed from OPEN to CLOSED

==> /var/log/openhab2/openhab.log <==

2020-11-27 08:42:39.565 [INFO ] [clipse.smarthome.model.script.garage] - nPos = {}

==> /var/log/openhab2/events.log <==

2020-11-27 08:42:39.572 [vent.ItemStateChangedEvent] - Garagentor_status_bewegung changed from CLOSED to OPEN

2020-11-27 08:42:39.585 [vent.ItemStateChangedEvent] - Garagentor_status changed from 0 to zwischendrin

2020-11-27 08:42:39.608 [vent.ItemStateChangedEvent] - Garagentor_status_bewegung_auf changed from CLOSED to OPEN

==> /var/log/openhab2/openhab.log <==

2020-11-27 08:42:39.611 [INFO ] [clipse.smarthome.model.script.garage] - nPos = {}

==> /var/log/openhab2/events.log <==

2020-11-27 08:42:39.623 [vent.ItemStateChangedEvent] - Garagentor_licht changed from OFF to ON

2020-11-27 08:42:39.628 [vent.ItemStateChangedEvent] - Garagentor_status changed from zwischendrin to öffnet

==> /var/log/openhab2/openhab.log <==

2020-11-27 08:42:39.634 [INFO ] [clipse.smarthome.model.script.garage] - nPos = {}

==> /var/log/openhab2/events.log <==

2020-11-27 08:42:53.890 [vent.ItemStateChangedEvent] - Garagentor_status_offen changed from CLOSED to OPEN

2020-11-27 08:42:53.939 [vent.ItemStateChangedEvent] - Garagentor_status_bewegung changed from OPEN to CLOSED

==> /var/log/openhab2/openhab.log <==

2020-11-27 08:42:53.980 [INFO ] [clipse.smarthome.model.script.garage] - nPos = 0

==> /var/log/openhab2/events.log <==

2020-11-27 08:42:53.986 [vent.ItemStateChangedEvent] - Garagentor_status_bewegung_auf changed from OPEN to CLOSED

==> /var/log/openhab2/openhab.log <==

2020-11-27 08:42:53.992 [INFO ] [clipse.smarthome.model.script.garage] - nPos = 0

2020-11-27 08:42:54.003 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Garage Status': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.postUpdate(org.eclipse.smarthome.core.items.Item,org.eclipse.smarthome.core.types.State) on instance: null

2020-11-27 08:42:54.016 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Garage Status': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.postUpdate(org.eclipse.smarthome.core.items.Item,org.eclipse.smarthome.core.types.State) on instance: null

==> /var/log/openhab2/events.log <==

2020-11-27 08:42:54.035 [INFO ] [clipse.smarthome.model.script.garage] - nPos = 0

==> /var/log/openhab2/events.log <==

2020-11-27 08:42:54.047 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Update Garage Status': An error occurred during the script execution: Could not invoke method: org.eclipse.smarthome.model.script.actions.BusEvent.postUpdate(org.eclipse.smarthome.core.items.Item,org.eclipse.smarthome.core.types.State) on instance: null


Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 27. Nov 2020 11:56
von udo1toni
Gut, versuchen wir noch was anderes:

Code: Alles auswählen

rule "Update Garage Status"
when
    Item Garagentor_status_offen changed or
    Item Garagentor_status_zu changed or
    Item Garagentor_lueftung changed or
    Item Garagentor_status_bewegung changed or
    Item Garagentor_status_bewegung_auf changed or
    Item Garagentor_status_bewegung_zu changed
then
    var Integer nPos = -1                                              // ÄNDERUNG!
    var String strStat = "zwischendrin"
    if(Garagentor_status_offen.state == CLOSED) {
        nPos = 0
        strStat = "offen"
    }
    if(Garagentor_status_zu.state == CLOSED) {
        nPos = 100
        strStat = "geschlossen"
    }
    if(Garagentor_status_lueftung.state == CLOSED) {
        nPos = 80
        strStat = "lüftet"
    }
    if(Garagentor_status_bewegung_auf.state == CLOSED) {
        strStat = "öffnet"
    }
    if(Garagentor_status_bewegung_zu.state == CLOSED) {
        strStat = "schließt"
    }
    logInfo("garage","nPos = {}",nPos)
    if(nPos < 0)                                                       // ÄNDERUNG!
        Garagentor.postUpdate(NULL)                                    // ÄNDERUNG!
    else                                                               // ÄNDERUNG!
        Garagentor.postUpdate(nPos)                                    // ÄNDERUNG!
    Garagentor_status.postUpdate(strStat)
end

Re: KNX Ing. Budde Hörmann Garagentoröffner in Openhab einbinden

Verfasst: 27. Nov 2020 13:37
von HansDampf
udo1toni hat geschrieben: 27. Nov 2020 11:56 Gut, versuchen wir noch was anderes:

Code: Alles auswählen

rule "Update Garage Status"
when
    Item Garagentor_status_offen changed or
    Item Garagentor_status_zu changed or
    Item Garagentor_lueftung changed or
    Item Garagentor_status_bewegung changed or
    Item Garagentor_status_bewegung_auf changed or
    Item Garagentor_status_bewegung_zu changed
then
    var Integer nPos = -1                                              // ÄNDERUNG!
    var String strStat = "zwischendrin"
    if(Garagentor_status_offen.state == CLOSED) {
        nPos = 0
        strStat = "offen"
    }
    if(Garagentor_status_zu.state == CLOSED) {
        nPos = 100
        strStat = "geschlossen"
    }
    if(Garagentor_status_lueftung.state == CLOSED) {
        nPos = 80
        strStat = "lüftet"
    }
    if(Garagentor_status_bewegung_auf.state == CLOSED) {
        strStat = "öffnet"
    }
    if(Garagentor_status_bewegung_zu.state == CLOSED) {
        strStat = "schließt"
    }
    logInfo("garage","nPos = {}",nPos)
    if(nPos < 0)                                                       // ÄNDERUNG!
        Garagentor.postUpdate(NULL)                                    // ÄNDERUNG!
    else                                                               // ÄNDERUNG!
        Garagentor.postUpdate(nPos)                                    // ÄNDERUNG!
    Garagentor_status.postUpdate(strStat)
end
So gehts jetzt!