Dimmer Item mit Scale transformieren

Geflasht oder ungeflasht ...

Moderatoren: Cyrelian, udo1toni

Antworten
ralle
Beiträge: 5
Registriert: 5. Aug 2017 18:02

Dimmer Item mit Scale transformieren

Beitrag von ralle »

Hallo Zusammen,
ich habe eine Sonoff-RF-Bridge mit Portisch-Software im RfRaw-Betrieb. Der Switch funktioniert. Ich möchte für den Dimmer nur 5 Werte für das Item Dimmer Dimmer_EG_Wohnzimmer (ON,OFF,0,50,100) verwenden. Wie ist die Schreibweise für Scale-Verwendung im Item?
.items:
Dimmer Dimmer_EG_Wohnzimmer "Sofa Strahler" (EG_Wohnzimmer)
Switch Strahler_EG_Wohnzimmer "Sofa Strahler ON/OFF" (EG_Wohnzimmer)

dimmer.scale:
[..20]=0
[21..70]=50
[71..]=100

rule "Fernbedienung"
when
Item Strahler_EG_Wohnzimmer received command or Item Dimmer_EG_Wohnzimmer received command
then
switch(receivedCommand) {
case 0 : sendCommand(RF_Send,"AAB0290508014003B600E600A012DE481819081819090908181818190908190A190A19090B1B19090A190A1855")
case 50 : sendCommand(RF_Send,"AAB0250308012C03CA1310281818190819090909090909081909081909090908190819090909081855")
case 100 : sendCommand(RF_Send,"AAB0250308012C03C0131A281819081819090909081909090818181818190909081909081909081855")
case OFF : sendCommand(RF_Send,"AAB0290508014003B600E600A012DE481819081819090908181818190908190A190A19090B1B19090A190A1855")
case ON : sendCommand(RF_Send,"AAB0250308012C03C0131A281819081819090909081909090818181818190909081909081909081855")
}
end

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Dimmer Item mit Scale transformieren

Beitrag von udo1toni »

Ich mag ja switch-case ganz gern, aber an dieser Stelle ist das eher unpraktisch. Sinnvoller ist es, in zwei Stufen das korrekte Kommando zu bestimmen:

Code: Alles auswählen

rule "Fernbedienung"
when
    Item Strahler_EG_Wohnzimmer received command or 
    Item Dimmer_EG_Wohnzimmer received command
then
    var myNum = 0                                     // Hilfsvariable
    if(receivedCommand instanceof Number)             // Kommando ist eine Zahl
        myNum = receivedCommand
    else                                              // Kommando ist keine Zahl
        myNum = if(receivedCommand == ON) 100 else 0

    var strCommand = "AAB0290508014003B600E600A012DE481819081819090908181818190908190A190A19090B1B19090A190A1855" // Default Befehl
    if(myNum > 20 && myNum < 71)                                                                                  // Falls Wert zwischen 21 und 70
        strCommand = "AAB0250308012C03CA1310281818190819090909090909081909081909090908190819090909081855"
    if(myNum > 70)                                                                                                // Falls Wert über 70
        strCommand = "AAB0250308012C03C0131A281819081819090909081909090818181818190909081909081909081855"

    RF_Send.sendCommand(strCommand)                                                                               // sende Kommando
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

ralle
Beiträge: 5
Registriert: 5. Aug 2017 18:02

Re: Dimmer Item mit Scale transformieren

Beitrag von ralle »

Herzlichen Dank an udo1toni,
das werde ich morgen ausprobieren.

ralle
Beiträge: 5
Registriert: 5. Aug 2017 18:02

Re: Dimmer Item mit Scale transformieren

Beitrag von ralle »

Hallo udo1toni,
ON/OFF funktioniert aber Dimmerwerte leider nicht.

2021-05-22 11:38:32.839 [ome.event.ItemCommandEvent] - Item 'Dimmer_EG_Wohnzimmer' received command 0.0

2021-05-22 11:38:32.850 [vent.ItemStateChangedEvent] - Dimmer_EG_Wohnzimmer changed from 98.0 to 0.0

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

2021-05-22 11:38:34.558 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'DimmerFernbedienung': An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null

ralle
Beiträge: 5
Registriert: 5. Aug 2017 18:02

Re: Dimmer Item mit Scale transformieren

Beitrag von ralle »

Hallo Zusammen,
ich habe mal den Dimmer separat angefasst. Das funktioniert.


rule "DimmerFernbedienungTest"
when
Item Dimmer_EG_Wohnzimmer received command

then
var strCommand = "AAB0290508014003B600E600A012DE481819081819090908181818190908190A190A19090B1B19090A190A1855"
//Loading from an Item
val dimVal = Dimmer_EG_Wohnzimmer.state as Number
//Convert to integer
val int myNum = dimVal.intValue
if(myNum < 21)
strCommand = "AAB0290508014003B600E600A012DE481819081819090908181818190908190A190A19090B1B19090A190A1855" // Aus Befehl
if(myNum > 20 && myNum < 71) // Falls Wert zwischen 21 und 70
strCommand = "AAB0250308012C03CA1310281818190819090909090909081909081909090908190819090909081855"
if(myNum > 70) // Falls Wert über 70
strCommand = "AAB0250308012C03C0131A281819081819090909081909090818181818190909081909081909081855"

RF_Send.sendCommand(strCommand) // sende Kommando
end

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Dimmer Item mit Scale transformieren

Beitrag von udo1toni »

Ja, da fehlt natürlich noch ein as Number hinter dem receivedCommand...

Code: Alles auswählen

rule "Fernbedienung"
when
    Item Strahler_EG_Wohnzimmer received command or 
    Item Dimmer_EG_Wohnzimmer received command
then
    var myNum = 0                                     // Hilfsvariable
    if(receivedCommand instanceof Number)             // Kommando ist eine Zahl
        myNum = receivedCommand as Number
    else                                              // Kommando ist keine Zahl
        myNum = if(receivedCommand == ON) 100 else 0

    var strCommand = "AAB0290508014003B600E600A012DE481819081819090908181818190908190A190A19090B1B19090A190A1855" // Default Befehl
    if(myNum > 20 && myNum < 71)                                                                                  // Falls Wert zwischen 21 und 70
        strCommand = "AAB0250308012C03CA1310281818190819090909090909081909081909090908190819090909081855"
    if(myNum > 70)                                                                                                // Falls Wert über 70
        strCommand = "AAB0250308012C03C0131A281819081819090909081909090818181818190909081909081909081855"

    RF_Send.sendCommand(strCommand)                                                                               // sende Kommando
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

ralle
Beiträge: 5
Registriert: 5. Aug 2017 18:02

Re: Dimmer Item mit Scale transformieren

Beitrag von ralle »

Leider funktioniert das so nicht. Im Log steht:
2021-05-24 13:37:05.393 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Fernbedienung': An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,int) on instance: null

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

2021-05-24 13:37:05.392 [ome.event.ItemCommandEvent] - Item 'Dimmer_EG_Wohnzimmer' received command 51.0

2021-05-24 13:37:05.401 [vent.ItemStateChangedEvent] - Dimmer_EG_Wohnzimmer changed from 0.0 to 51.0

Benutzeravatar
udo1toni
Beiträge: 13854
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Dimmer Item mit Scale transformieren

Beitrag von udo1toni »

Das kann nicht sein. Die Meldung besagt, dass beim Vergleich einer der beiden Parameter null (nicht 0!) ist. Die Rule stellt aber sicher, dass das nie der Fall ist.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

mild22
Beiträge: 1
Registriert: 14. Sep 2021 15:25

Re: Dimmer Item mit Scale transformieren

Beitrag von mild22 »

udo1toni hat geschrieben: 21. Mai 2021 21:53 Ich mag ja switch-case ganz gern, aber an dieser Stelle ist das eher unpraktisch. Sinnvoller ist es, in zwei Stufen das korrekte Kommando zu bestimmen:

Code: Alles auswählen

rule "Fernbedienung"
when
    Item Strahler_EG_Wohnzimmer received command or 
    Item Dimmer_EG_Wohnzimmer received command
then https://slotstory.de/
    var myNum = 0                                     // Hilfsvariable
    if(receivedCommand instanceof Number)             // Kommando ist eine Zahl
        myNum = receivedCommand
    else                                              // Kommando ist keine Zahl
        myNum = if(receivedCommand == ON) 100 else 0

    var strCommand = "AAB0290508014003B600E600A012DE481819081819090908181818190908190A190A19090B1B19090A190A1855" // Default Befehl
    if(myNum > 20 && myNum < 71)                                                                                  // Falls Wert zwischen 21 und 70
        strCommand = "AAB0250308012C03CA1310281818190819090909090909081909081909090908190819090909081855"
    if(myNum > 70)                                                                                                // Falls Wert über 70
        strCommand = "AAB0250308012C03C0131A281819081819090909081909090818181818190909081909081909081855"

    RF_Send.sendCommand(strCommand)                                                                               // sende Kommando
end
Herzlichen Dank!

Antworten