Seite 1 von 1

Dimmer Item mit Scale transformieren

Verfasst: 21. Mai 2021 16:41
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

Re: Dimmer Item mit Scale transformieren

Verfasst: 21. Mai 2021 21:53
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

Re: Dimmer Item mit Scale transformieren

Verfasst: 21. Mai 2021 23:24
von ralle
Herzlichen Dank an udo1toni,
das werde ich morgen ausprobieren.

Re: Dimmer Item mit Scale transformieren

Verfasst: 22. Mai 2021 11:40
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

Re: Dimmer Item mit Scale transformieren

Verfasst: 22. Mai 2021 17:52
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

Re: Dimmer Item mit Scale transformieren

Verfasst: 22. Mai 2021 20:10
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

Re: Dimmer Item mit Scale transformieren

Verfasst: 24. Mai 2021 13:39
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

Re: Dimmer Item mit Scale transformieren

Verfasst: 24. Mai 2021 17:53
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.

Re: Dimmer Item mit Scale transformieren

Verfasst: 14. Sep 2021 15:27
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!