Integrate Siemens Logo (plclogo) in OpenHAB 2

Does anyone know how to color the UP or DOWN buttons on a rolleshutter when an item is active? Or does that work with labelcolor? If yes how? it is enough for me if the label is green when the item is active.


how can I query the status of a flag? (Merker M8)

First of all Read
PLCLogo Documentation

but here is a summary

Bridge plclogo:device:<DeviceId> [ address="<ip>", family="<0BA7/0BA8>", localTSAP="0x<number>", remoteTSAP="0x<number>", refresh=<number> ] 
Thing digital <ThingId> "Label" @ "Location" [ kind="M", force=<true/false> ]

Contact itemname   { channel="plclogo:digital:<DeviceId>:<ThingId>:M8" }

Greetings Markus

Here a tutorial for rollershutters: PLCLogo Solution: Logo Rollershutter Control

Hi !

I’m still trying during last weeks with my logos (i have 4 of them) to migrate this from fhem (where its still working with memory bits , fhem does trigger 1s via web command)
Its seems for me that openhab does not pulse… plc program is similar to solutions (use comfort swithc with 2 OR Inputs)
I can see the states of Q and so on… but proxy switch does not follow the Output and also output is not switched…
Also i get folowing log in events.log
2020-01-10 01:46:04.602 [vent.ItemStateChangedEvent] - FF_Buero_Light changed from ON to OFF
2020-01-10 01:46:04.612 [ome.event.ItemCommandEvent] - Item ‘TEST_BUERO’ received command ON
2020-01-10 01:46:04.614 [ome.event.ItemCommandEvent] - Item ‘TEST_BUERO’ received command OFF
2020-01-10 01:46:04.615 [nt.ItemStatePredictedEvent] - TEST_BUERO predicted to become NULL
2020-01-10 01:46:04.616 [nt.ItemStatePredictedEvent] - TEST_BUERO predicted to become NULL

The difference between on and off is 1 ms regardless how much i set as pulse… and also the NULL is a misery…

Ciao Gerd

Look at this Post or the other Posts in this Topic. They may help you.

Greetings Markus

Hi ! I read all these posts (also yours)
I can’t use M’s because nearly all are in use
I tried the other solutions with the vb 0.1 or similar and for me it seems that vb is not pulsed otherwise light shoudl go on and off

Ciao Gerd

Than you have to provide some configs of yours. (.items / .things / .rules / .sitemap)


Bridge plclogo:device:logo_kg [ address=“”, family=“0BA7”, localTSAP=“0x2000”, remoteTSAP=“0x2400”, refresh=200 ]
Thing digital KG_Outputs “Logo KG Ausgaenge” [ kind=“Q” ]
Thing pulse TEST_BUERO “Buero_Test” [ block=“VB100.4”, observe=“VB100.4”, pulse=“600”]


Switch Licht_Buero “Buero Licht” { channel=“plclogo:digital:logo_kg:KG_Outputs:Q5” }
Switch TEST_OFFICE “Schalter Licht Essbereich” { channel=“plclogo:memory:logo_kg:TEST_BUERO:state” }
// virtual Switch
Switch FF_Buero_Light “Licht”


rule “Switch Light Buero through Logo”
Item Licht_Buero changed or // 1. light changed external
Item FF_Buero_Light received command // 2. light changed internal
if(receivedCommand==ON || receivedCommand==OFF) { // ensure there was a received command, so second item triggered rule
if (Licht_Buero.state != receivedCommand) { // only if state changed
// TEST_OFFICE.sendCommand(OFF) // send an OFF, maybe not required
else { // no trigger from proxy switch, so state changed externally
if (Licht_Buero.state != FF_Buero_Light.state) { // if state changed really
FF_Buero_Light.postUpdate(Licht_Buero.state) // update the state without triggering the rule


Group item=Buero label=“Buero” icon=“office”
Text item=Licht_Buero label=“Licht” icon=“light”
Default item=TEST_OFFICE label=“Debug NI1 (do not touch)”
Default item=FF_Buero_Light label=“EZ Licht (switch here)” icon=“light”

Hope this helps

Ciao Gerd


Bridge plclogo:device:logo_kg [ address="", family="0BA7", localTSAP="0x2000", remoteTSAP="0x2400", refresh=200 ]
Thing digital KG_Outputs  [ kind="Q" ]
Thing pulse Test_BUERO [ block="VB100.4", observe="VB100.4", pulse=600]


Switch Licht_Buero "Buero Licht" { channel="plclogo:digital:logo_kg:KG_Outputs:Q5" }
Switch Test_OFFICE "Schalter Licht Essbereich" { channel="plclogo:pulse:logo_kg:TEST_BUERO:state" }
// virtual Switch
Switch FF_Buero_Light "Licht" 


rule "Switch Light Buero through Logo"
    Item Licht_Buero changed or // 1. light changed external
    Item FF_Buero_Light received command // 2. light changed internal
    if(receivedCommand==ON || receivedCommand==OFF) { // ensure there was a received command, so second item triggered rule
        if(Licht_Buero.state != receivedCommand) { // only if state changed
    else { // no trigger from proxy switch, so state changed externally
        if (Licht_Buero.state != FF_Buero_Light.state) { // if state changed really
            FF_Buero_Light.postUpdate(Licht_Buero.state) // update the state without triggering the rule


sitemap default label="Home" {
Frame label="Light Switch" icon="office" {
        Switch item=FF_Buero_Light mappings=[OFF="AUS", ON="EIN"]
        Switch item=Licht_Buero label="Debug Test_BUERO (do not touch)"  // remove this line

try this

greetings Markus

Great it works… and i saw my mistake…

Switch TEST_OFFICE “Schalter Licht Essbereich” { channel=“plclogo:memory:logo_kg:TEST_BUERO:state” }

instead of

Switch Test_OFFICE “Schalter Licht Essbereich” { channel=“plclogo:pulse:logo_kg:TEST_BUERO:state” }

Shame on me… but sometimes you can’t see the forest… :slight_smile:

Ciao Gerd

Hi !
After my first tries i can resume some technical issues (i earn my money with programming plcs)
This setup is running now for 2 days (1 dayparallel with fhem)
From technical side

  1. i don’t use pulses , because when i quickliy switch in webgui, sometimes the memory bit hangs and does not go back… so i have to switch it manually.
    i use send ON then sleep for 500ms and then send an OFF
  2. I send an OFF to the memory bits when system stops
  3. for me (and also from my experience in plc programming) it seems that LOGO Interface does not crash when 2 applications are connected (1 day i use parallel fhem) because i connect to 2 diffenet TSAPs (on is for fhem the other one for openhab = you need at least 1 server connection to connect to (e.g. my central LOGO has now 5 (1x fhem 1x openhab 3xother Logos)
  4. Regarding Point 2… my LOGOs are setup for a refresh of 300ms (i tried also with 2000ms) when you switch quickly in webif you might get some discconnect failures it doesnt really matter which refresh time you set

Also i loaded one Logo very often during test and i never had a crash…

Ciao Gerd

On the binding information there is a line : " Different families of LOGO! devices should work also, but was not tested now due to lack of hardware" Do someone have tested a Logo 0BA6 ?
Thanks in advance.

How you will connect to network ? 0BA6 does not have an ethernet port… starting with 0BA7 the heve Ethernet.

Ciao Gerd

Rollershutter Reloaded!
Here comes a rollershutter solution that leaves no wishes open (I hope).

Example / Functionality / Operation:

  • short Down-button: Q2 drives down for 5s / press again, drives down for the same time
  • long Down-button: Q2 drives down for 10s
  • short Up-button: Q1 drives up for 15s
  • short press any button any time stops motor
  • 500ms delay between changing motor direction
  • long press opposite button changes motor direction
  • continue or change direction at any time
  • emergency stop down (for door open sensor), normally LOW
  • updates Position (0% - 100%) correctly for up/down direction
  • Feature: slow update of Position (at 1s or more) good enough for polling Logo by openHAB

FInd the UDF for Logo8 and a Logo test-program here (rename to zip): (31.7 KB)

The test-program looks like this:

Do not forget to configure the VM for the ‘Position’:


Bridge plclogo:device:Logo8 "Logo8 PLC" [ address="", family="0BA8", localTSAP="0x2700", remoteTSAP="0x0300", refresh=1000 ]
  Thing digital Inputs  "Logo8 Inputs"   [ kind="I" ]
  Thing digital Outputs "Logo8 Outputs"  [ kind="Q" ]
  // Rollo1
  Thing memory VW0 "Logo8 VW0"                 [ block="VW0"]      // rollo position memory value-word
  Thing memory NI1_VB100_0 "Rollo1 ButtonUp"   [ block="VB100.0", force=false ]  // NI1 rollo control-bit memory button up
  Thing memory NI2_VB100_1 "Rollo1 ButtonDown" [ block="VB100.1", force=false ] // NI2 rollo control-bit memory button down


// Rollo1
Number  Rollo1_Position "Rollo1 Position"   { channel="plclogo:memory:Logo8:VW0:value" }    // rollo's position (0% for completely open, 100% completely closed)
Switch  Rollo1_ButtonUp     { channel="plclogo:memory:Logo8:NI1_VB100_0:state" }        // for button up
Switch  Rollo1_ButtonDown   { channel="plclogo:memory:Logo8:NI2_VB100_1:state" }        // for button down
Switch  Rollo1_goingUp      "Q5"    { channel="plclogo:digital:Logo8:Outputs:Q5" }      // Logo relay for motor up
Switch  Rollo1_goingDown    "Q6"    { channel="plclogo:digital:Logo8:Outputs:Q6" }      // Logo relay for motor down
Rollershutter Rollo1 "Rollo Room1" <rollershutter>


// 3 imports otherwise error in the line with 'Direction == UP' (ref. openHAB log)
import org.eclipse.smarthome.core.types.Command
// import org.eclipse.smarthome.core.types.RefreshType
import org.eclipse.xtext.xbase.lib.Procedures

// you need this routine only once (for multiple rollerhuttrs)
val Procedures$Procedure4<Command, SwitchItem, SwitchItem, Command>
LogoRolloLogic = [ Command ReceivedCommand, SwitchItem Up, SwitchItem Down, Command Direction |
  switch(ReceivedCommand) {
    case UP: {
      Thread::sleep(100)              // create pulse
      logInfo("LogoRolloLogic", "Direction: " + Direction + ". UP received.")
    case DOWN: {
      Thread::sleep(100)              // create pulse
      logInfo("LogoRolloLogic", "Direction: " + Direction + ". DOWN received.")
    case STOP: { // depending on driving up or down, push the corresponding button (may avoids immediate direction change, if pulse is too long)
      logInfo("LogoRolloLogic", "Direction: " + Direction + ". STOP received.")
      if (Direction == UP) {
        Up.sendCommand(OnOffType.ON)  // perform stop by sending Up-command if going up
        Thread::sleep(100)            // create pulse
      } else if (Direction == DOWN) {
        Down.sendCommand(OnOffType.ON)  // perform stop by sending Down-command if going down
        Thread::sleep(100)            // create pulse
      } else if (Direction != STOP) {   // do not send an up/down command if already stopped
        logDebug("LogoRolloLogic", "Direction " + Direction + " is not supported.")

// repeat the following 2 rules for each additional rollerhutter
// Rollo1
rule "Rollo1PosChanged"
  Item Rollo1_Position changed
  var Number value = Rollo1_Position.state as Number
  Rollo1.postUpdate(value.intValue)  // return Position

rule "Rollo1Drive" // set direction and start driving up/down 
  Item Rollo1 received command
  var Command dir = STOP
  if (Rollo1_goingUp.state == OnOffType.ON) { dir = UP }
  else if (Rollo1_goingDown.state == OnOffType.ON) { dir = DOWN }
  LogoRolloLogic.apply(receivedCommand, Rollo1_ButtonUp, Rollo1_ButtonDown, dir)
// start_up rule will be added later


sitemap default label="Haus" {
    Frame label="Rollershutters" {
        // debug info
        Text item=Rollo1_ButtonUp   label="Rollo1_NI1_ButtonUp [%s]"    valuecolor=[OFF="red", ON="green"] icon=switch // this hides the switcher-control
        Text item=Rollo1_ButtonDown label="Rollo1_NI2_ButtonDown [%s]"  valuecolor=[OFF="red", ON="green"] icon=switch 
        Text item=Rollo1_goingUp    label="Rollo1_Q5_goingUp [%s]"      valuecolor=[OFF="red", ON="green"] icon=switch
        Text item=Rollo1_goingDown  label="Rollo1_Q6_goingDown [%s]"    valuecolor=[OFF="red", ON="green"] icon=switch
        Default item=Rollo1_Position
        // debug info
        Switch  item=Rollo1    

Here is what you get (sitemap):

This is considered perfect now (does not use pulse-thing). No flaws, no issues.
Please check and feedback before I post it in ‘Solutions, Tutorials’.


Hello All,

I new since begin this year to OpenHab an I wanted to level up my home automatisation with it.
My system is running on a Raspberry Pi 4 4Gb RAM with OpenHab 2.5.1.
OpenHab communicates with

  • 3x Logo7 via plclogo binding. (Pulse for input)
  • SMA Tripower via Modbus binding.
  • 2 chromecasts (1 audio, 1 normal)
  • Astro binding
  • Network binding
  • InFluxdb persistence to make graphs in Grafana.

Everything runs well, with in total 53 Items, 12 Items to Persistence, 4 simple rules.
CPU load is never more than 50% (normal 10%) Ram is average 35% loaded.

The 3 Logo7’s are controlling my home lightning and are running perfectly standalone (for the last 6 years), loaded with each a own programm which communicates with the others via network inputs, same as Openhab uses and also previously an HMI LOGO! app on my mobile phone.

BUT: only with openhab there are sometimes delays of 3 to 14s before an input is triggered.
I see in the log:
[ome.event.ItemCommandEvent] - Item ‘keuken_tafel’ received command ON
[vent.ItemStateChangedEvent] - keuken_tafel changed from OFF to ON

Normally there is about 200ms between these events, but that can run up to 13s.

I was looking at many other post but could not recognise the same issue/sollution.
Does anyone have an idea what could be the rootcause?

Thanks in advance,

An updated tutorial has arrived. Now finally LOGO! output-switching is possible using the Comfort-Switch block.


i want to connect the openhab to my Logo!8. The binding seems to be established because i get the system time of the Logo in the PaperUI

But the connection is not working with memory or pulse things. I just get the log:

2020-09-03 18:31:18.371 [INFO ] [ogo.internal.handler.PLCPulseHandler] - Wrong configurated LOGO! block VB1.0 found.
2020-09-03 18:31:18.372 [INFO ] [ogo.internal.handler.PLCPulseHandler] - Invalid channel plclogo:pulse:Logo4:VB1_0:state or client org.openhab.binding.plclogo.internal.PLCLogoClient@28d9576c found.

Here my config:

Any ideas what i’m doing wrong?

Have you tried with default localTSAP="0x0300" and remoteTSAP="0x0200" ?

It shall be

family="0BA8" instead of family="<0BA8>"