Seite 6 von 7

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 28. Mär 2021 10:23
von udo1toni
Der von mir gepostete Code ist normaler Rules DSL Code. Das hat nichts mit Java Script zu tun.

Mit dem Code hast Du zwei Möglichkeiten. Entweder legst Du eine *.rules Datei an und kopierst den Code dort hinein (manchmal ist das auch die einzige Möglichkeit, nämlich wenn eine Rule globale Variablen nutzt), oder Du legst die Rule über die Main UI an, dazu trennst Du den Trigger-Teil der Rule ab (der when-Teil), trägst die Trigger entsprechend im when-Block der Rule ein, der then-Teil der Rule landet dann als DSL-Rule Code im then-Block der Rule. Der but-not-Block wird dann gewöhnlich nicht gebraucht.

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 28. Mär 2021 22:49
von Galadriel13
Hallo Udo,

vielen Dank, das war es. ;)
Nun funktioniert das super.

Geht es eigentlich auch, dass ich eine dritte Rule für "Mittelpos" anspreche?
Ich habe im Logo-Programm eine Option "Z-Pos", die über eine definierte Zeit die Mitelposition anfährt.

Könnte man dann eben die drei Items anlegen und in der Rule das so aufbauen, dass mit dem Drücken des mittleren Buttons (eigentlich STOP) die Mittelposition angefahren wird?

Wie gesagt, kann ich jederzeit durch nochmaliges Drücken von Auf/Ab den Vorgang anhalten.

Ich freue mich, dass ich nun auch die Rollos überhaupt schon mal schalten kann, das ist ideal, wenn man mal nicht zu Hause ist, oder zum Beschatten.

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 29. Mär 2021 06:31
von udo1toni
Ja, das hatte ich ja schon in einem meiner vorigen Items angedeutet. Niemand hindert Dich daran, im Zweig, der die Stop-Taste auswertet stattdessen den Befehl zum Anfahren der Mittelposition auszulösen.

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 31. Mär 2021 00:22
von Galadriel13
Vielen Dank für deine Unterstützung.

Ich habe das heute getestet.
Sofern ich in der Rule bei case MITTELPOS das Item, dass den Eingang Mittelpos der Logo anspricht (hier Logo83RolloWCMittelpos_VB1001) eintrage, funktioniert die Mittelpos. nicht.
Ich glaube, ich habe dann nicht verstanden, wie du das gemeint hast.

Code: Alles auswählen

// Triggers:
// - When RollerShutter1 received a command

// context: Rollo_WC-1
switch(receivedCommand) {
    case UP  : {
        Logo83RolloWCAUF_VB1000.sendCommand(ON) 
        shutter_WC_Dir.postUpdate(-1) 
    }
    case DOWN: { 
        Logo83RolloWCAB_VB1002.sendCommand(ON) 
        shutter_WC_Dir.postUpdate(1) 
    }
    case MITTELPOS: { 
        if(shutter_WC_Dir.state == -1) 
            Logo83RolloWCMittelpos_VB1001.sendCommand(ON) 
        else if(shutter_WC_Dir.state == 1) 
            Logo83RolloWCMittelpos_VB1001.sendCommand(ON) 
        else
            return;
        shutter_WC_Dir.postUpdate(0)
    }
    default  : { 
        ShutterPosition.sendCommand(receivedCommand)
    }
}

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 31. Mär 2021 16:40
von udo1toni
Nein, ein Command MITTELPOS gibt es auch nicht. Du musst da schon das Command STOP stehen lassen, denn das sendet die mittlere Taste des Rollershutter Items.

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 1. Apr 2021 00:00
von Galadriel13
Ok, danke, das war der Fehler.
Die Schaltfunktionen lassen sich jetzt für jeden Rollo ausführen. ;)

Was aber nicht geht, ist die Icon-Anzeige für Mittelposition.
Sofern diese angefahren wurde, bleibt der Rollo, oder besser gesagt das Icon auf geschlossen/AB.

Folgende Rule habe ich verwendet:

Code: Alles auswählen

rule "control Shutter"
when
    Item RollerShutter2 received command
then
    switch(receivedCommand) {
        case UP  : {
            Logo83RolloHARAUF_VB1003.sendCommand(ON) 
            shutter_HAR_Dir.postUpdate(-1) 
        }
        case DOWN: { 
            Logo83RolloHARAB_VB1005.sendCommand(ON) 
            shutter_HAR_Dir.postUpdate(1) 
        }
        case STOP : { 
            Logo83RolloHARMittelpos_VB1004.sendCommand(ON)
            shutter_HAR_Dir.postUpdate(0)
        }
        default  : { 
            ShutterPosition.sendCommand(receivedCommand)
        }
    }
end
Es wäe super, wenn das auch noch passen würde.

Vielen Dank im Voraus.

VG.

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 1. Apr 2021 15:32
von dreamar
Bei mir läuft das über eine extra Rule.

Code: Alles auswählen

rule "Rollade Kueche Status"
when
    Item IT_EG_Rollo_Kueche_Status changed
then
    if (IT_EG_Rollo_Kueche_Status.state == 0) {
        EG_Kueche_Rollade.postUpdate(100)
    }
        if (IT_EG_Rollo_Kueche_Status.state == 1) {
        EG_Kueche_Rollade.postUpdate(50)
    }
        if (IT_EG_Rollo_Kueche_Status.state == 2) {
        EG_Kueche_Rollade.postUpdate(0)
    }
end

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 1. Apr 2021 15:54
von udo1toni
Du musst halt ein postUpdate 0, 50 oder 100 an das Rollerhutter Item schicken, damit der Status auf 0 (offen), 50 (mitte) oder 100 (geschlossen) wechselt.

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 1. Apr 2021 23:40
von Galadriel13
Danke udo1toni und dreamar für die Unterstützung.

Es klingt vielleicht banal, aber ich bin scheinbar doch zu doof dafür.

Ich muss zwangsläufig mit sendCommand(ON) arbeiten, sonst wird die Schaltfunktion gar nicht erst ausgelöst.

Wenn ich das so, wie du dreamar mache, passiert ebenso gar nichts (natürlich habe ich entspr. die Item-Bezeichungen geändert).
Das heisst, ich müsste meinem Verständnis nach bei meinem Beispiel bleiben, was ja auch funktioniert, nur die Anzeige für die Mittelposition funktioniert nicht:

Ursprungszustand AUF --> Mittelpos --> Icon zeigt AUF (Rollo fährt in Mittelpos.)
Ursprungszustand AB --> Mittelpos --> Icon zeigt AB (Rollo fährt in Mittelpos.)


Ich habe noch analog udo1toni`s Hinweis entspr. 0, 50, 100 angepasst:

Code: Alles auswählen

rule "control Shutter"
when
    Item RollerShutter3 received command
then
    switch(receivedCommand) {
        case UP  : {
            Logo83RolloSpeisAUF_VB1006.sendCommand(ON) 
            shutter_Speis_Dir.postUpdate(100) 
        }
        case DOWN: { 
            Logo83RolloSpeisAB_VB1010.sendCommand(ON) 
            shutter_Speis_Dir.postUpdate(0) 
        }
        case STOP : { 
            Logo83RolloSpeisMittelpos_VB1007.sendCommand(ON) 
            shutter_Speis_Dir.postUpdate(50)
        }
        default  : { 
            ShutterPosition.sendCommand(receivedCommand)
        }
    }
end
Gleiches Bild.


@ Dreamar: Mit meinen beiden 7er Logos waren keine Schaltfunktionen hinzubekommen-warum weiss ich nicht.
Die 7er habe ich gegen die 8er Baureihe getauscht-es funktionierte auf Anhieb.
Ich wollte schon alles beerdigen...

Re: Einrichten Siemens Logo <--> openHab2

Verfasst: 3. Apr 2021 11:55
von udo1toni
Oh, bitte nicht die Funktionen der Items durcheinander würfeln!

Du hast ein Item, welches in der Sitemap dargestellt wird. Das ist z.B. Das Item RollerShutter3.
Du hast drei Items, welche das Rollo auf die drei definierten Positionen fahren lassen, in diesem Fall dann Logo83RolloSpeisAUF_VB1006, Logo83RolloSpeisAB_VB1010 und Logo83RolloSpeisMittelpos_VB1007.
Du hast ein weiteres Item, welches wir eingeführt haben, damit die Stoptaste als Stoptaste funktioniert, das ist das Item shutter_Speis_Dir.
Dieses Item brauchst Du aber gar nicht, wenn Du die Stoptaste nicht als Stoptaste verwendest.
weiterhin untertützt Deine Steuerung offensichtlich kein direktes Positionieren, weshalb das Item ShutterPosition gar nicht gebraucht wird. Ich hatte das nur ursprünglich integriert, weil man das "halt so macht" ;) wenn der Rollladen direktes Positionieren unterstützt.
Deine Rule sollte also so aussehen:

Code: Alles auswählen

rule "control Shutter3"
when
    Item RollerShutter3 received command
then
    switch(receivedCommand) {
        case UP  : {
            Logo83RolloSpeisAUF_VB1006.sendCommand(ON) 
            RollerShutter3.postUpdate(0) 
        }
        case DOWN: { 
            Logo83RolloSpeisAB_VB1010.sendCommand(ON) 
            RollerShutter3.postUpdate(100) 
        }
        case STOP : { 
            Logo83RolloSpeisMittelpos_VB1007.sendCommand(ON) 
            RollerShutter3.postUpdate(50)
        }
    }
end
Ich habe von der Logo! keine Ahnung, könnte mir aber vorstellen, dass Du von vornherein hier ein anderes Programm implementieren könntest, welches dann direktes Positionieren erlaubt.

Abschließend noch der Hinweis: Da Du offensichtlich mehrere Rollläden in dieser Art ansteuerst, bietet es sich an, die Rule zu generalisieren. Das funktioniert aber nur gut, wenn Du die Itemnamen sinnvoll gestaltest.
Faustregel für Itemnamen: Gleichartige Items sollten gleichartige Namen haben. Die Itemnamen sollten nichts mit der Hardware zu tun haben, denn Items haben nichts mit der Hardware zu tun.
Hardware wird über die Bindings angebunden, in openHAB3 ausschließlich über Things und Channel, bei openHAB1 ausschließlich über die Konfiguration der Items (also das angegebene Binding), in openHAB2 abhängig vom Binding entweder mit der einen oder der anderen Methode.

Um die Rule generalisieren zu können, musst Du die Itemnamen voneinander ableiten können, z.B. so:
Shutter1 (für die Sitemap), Shutter1_UP (Steueritem hoch), Shutter1_DOWN (Steueritem runter) und Shutter1_MID (Steueritem Mittelposition), die Du alle in eine gemeinsame Gruppe schmeist, z.B. gShutters (NICHT typisiert, keine Funktion).
Dann kann die Rule so aussehen:

Code: Alles auswählen

rule "control Shutter"
when
    Member of gShutters received command
then
    gItems = gShutters.members.filter[i|i.name.contains(triggeringItem.name)]
    switch(receivedCommand) {
        case UP  : {
            gItems.filter[i|i.name.contains("UP")].head.sendCommand(ON) 
            triggeringItem.postUpdate(0) 
        }
        case DOWN: { 
            gItems.filter[i|i.name.contains("DOWN")].head.sendCommand(ON) 
            triggeringItem.postUpdate(100) 
        }
        case STOP : { 
            gItems.filter[i|i.name.contains("MID")].head.sendCommand(ON) 
            triggeringItem.postUpdate(50)
        }
    }
end
Diese Rule brauchst Du exakt einmal, egal, wieviele Rollläden Du verwendest. Es müssen nur alle Items in der Gruppe gShutters zusammengefasst sein und der Namenskonvention entsprechen, das heißt, das Item in der Sitemap hat einen Namen, die drei Steueritems haben den selben Namen, nur jeweils mit angehängtem _UP, _DOWN, bzw. _MID.
Man könnte auch die Steueritems in einer eigenen Gruppe zusammenfassen, um die Rule nicht zusätzlich triggern zu lassen (jedes sendCommand auf eines der Items in der Gruppe löst ja die Rule aus), die Rule läuft aber auch so fehlerfrei, denn die Steueritems erhalten ja nur den Befehl ON.