Dimmer Item mit Scale transformieren
Moderatoren: Cyrelian, udo1toni
-
- Beiträge: 5
- Registriert: 5. Aug 2017 18:02
Dimmer Item mit Scale transformieren
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
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
- udo1toni
- Beiträge: 14830
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Dimmer Item mit Scale transformieren
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.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 5. Aug 2017 18:02
Re: Dimmer Item mit Scale transformieren
Herzlichen Dank an udo1toni,
das werde ich morgen ausprobieren.
das werde ich morgen ausprobieren.
-
- Beiträge: 5
- Registriert: 5. Aug 2017 18:02
Re: Dimmer Item mit Scale transformieren
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
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
-
- Beiträge: 5
- Registriert: 5. Aug 2017 18:02
Re: Dimmer Item mit Scale transformieren
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
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
- udo1toni
- Beiträge: 14830
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Dimmer Item mit Scale transformieren
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.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet
-
- Beiträge: 5
- Registriert: 5. Aug 2017 18:02
Re: Dimmer Item mit Scale transformieren
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
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
- udo1toni
- Beiträge: 14830
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Dimmer Item mit Scale transformieren
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.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet
-
- Beiträge: 1
- Registriert: 14. Sep 2021 15:25
Re: Dimmer Item mit Scale transformieren
Herzlichen Dank!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