[gelöst] Berechnetes WebCmd funktioniert nicht

Begonnen von rolizer, 23 September 2021, 22:08:07

Vorheriges Thema - Nächstes Thema

rolizer

Hallo zusammen,

Edit: mein erster Beitrag hier.. ich fühle mich, wie wenn ich schon Jahre dabei bin.. also "Hallo erstmal, ich bin schon ne Weile dabei - als Mitleser und Lernender".

aber hier steh ich auf dem Schlauch:
Ich lese einerseits die aktuelle Sollwertverschiebung aus einem KNX-TempController und will schrittweise (+1/-1) die Sollwertverschiebung anpassen.
Das folgende WebCmd funktioniert nicht; ersetze ich aber das "+1" durch ein "-1" gibt es keine Syntaxfehler und es funktioniert. Wo liegt mein Denkfehler mit dem +1?

attr EG_AZ_raumcontroller webCmd sollwertversch_set {(ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0))+1}:sollwertversch_set {(ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0)-1)}

Fehlermeldung im Log:
2021.09.23 21:40:40 1: PERL WARNING: Number found where operator expected at (eval 6290) line 1, near ") 1"
2021.09.23 21:40:40 3: eval: my $DEV=   $evalSpecials->{'%DEV'};ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0) 1
2021.09.23 21:40:40 1: ERROR evaluating my $DEV=   $evalSpecials->{'%DEV'};ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0) 1: syntax error at (eval 6290) line 1, near ") 1"


Hier gern noch das komplette List:
Internals:
   DEF        0/4/42:dpt9.001:ist_temp:listenonly:nosuffix
0/4/43:dpt9.001:soll_temp:set:nosuffix
0/4/41:dpt5.001:stellwert_heizung::nosuffix
0/4/45:dpt9.001:basis_sollwert_temp::nosuffix
0/4/46:dpt6.010:sollwertversch_set:set:nosuffix
0/4/47:dpt6.010:sollwertversch_get:get:nosuffix
   DEVNAME    EG.AZ.raumcontroller
   FIRSTGADNAME ist_temp
   FUUID      61407f82-f33f-b7b6-6c48-588a9c0ac0d8ff46
   FVERSIONE  04.67 18-08-2021
   GETSTRING  stellwert_heizung:noArg sollwertversch_get:noArg basis_sollwert_temp:noArg
   IODev      KNX
   KNX_MSGCNT 147
   KNX_RAWMSG C0112fw0042a0c40
   KNX_TIME   2021-09-23 21:51:20
   LASTInputDev KNX
   MSGCNT     147
   NAME       EG_AZ_raumcontroller
   NOTIFYDEV  global,EG.AZ.raumcontroller
   NR         183
   NTFY_ORDER 50-EG.AZ.raumcontroller
   SETSTRING  sollwertversch_set:slider,-127,2,127 soll_temp:slider,-274,6710,670760 stellwert_heizung:slider,0,1,100 basis_sollwert_temp:slider,-274,6710,670760
   STATE      IST: 21.76 °C SOLL: 20.50 °C HEIZUNG: 0 % BasisTemp: 21 °C Sollwert: 20.50 &degC;
   TYPE       KNX
   GADDETAILS:
     basis_sollwert_temp:
       CODE       0042d
       GROUP      0/4/45
       MODEL      dpt9.001
       NO         4
       OPTION     
       RDNAMEGET  basis_sollwert_temp
       RDNAMEPUT  basis_sollwert_temp
       RDNAMESET  basis_sollwert_temp
       SETLIST    :slider,-274,6710,670760
     ist_temp:
       CODE       0042a
       GROUP      0/4/42
       MODEL      dpt9.001
       NO         1
       OPTION     listenonly
       RDNAMEGET  ist_temp
       RDNAMEPUT  ist_temp
       RDNAMESET  ist_temp
       SETLIST    :slider,-274,6710,670760
     soll_temp:
       CODE       0042b
       GROUP      0/4/43
       MODEL      dpt9.001
       NO         2
       OPTION     set
       RDNAMEGET  soll_temp
       RDNAMEPUT  soll_temp
       RDNAMESET  soll_temp
       SETLIST    :slider,-274,6710,670760
     sollwertversch_get:
       CODE       0042f
       GROUP      0/4/47
       MODEL      dpt6.010
       NO         6
       OPTION     get
       RDNAMEGET  sollwertversch_get
       RDNAMEPUT  sollwertversch_get
       RDNAMESET  sollwertversch_get
       SETLIST    :slider,-127,2,127
     sollwertversch_set:
       CODE       0042e
       GROUP      0/4/46
       MODEL      dpt6.010
       NO         5
       OPTION     set
       RDNAMEGET  sollwertversch_set
       RDNAMEPUT  sollwertversch_set
       RDNAMESET  sollwertversch_set
       SETLIST    :slider,-127,2,127
     stellwert_heizung:
       CODE       00429
       GROUP      0/4/41
       MODEL      dpt5.001
       NO         3
       OPTION     
       RDNAMEGET  stellwert_heizung
       RDNAMEPUT  stellwert_heizung
       RDNAMESET  stellwert_heizung
       SETLIST    :slider,0,1,100
   GADTABLE:
     00429      stellwert_heizung
     0042a      ist_temp
     0042b      soll_temp
     0042d      basis_sollwert_temp
     0042e      sollwertversch_set
     0042f      sollwertversch_get
   Helper:
     DBLOG:
       ist_temp:
         DBLogging:
           TIME       1632426680.43083
           VALUE      21.76
       soll_temp:
         DBLogging:
           TIME       1632426636.05229
           VALUE      20.50
       state:
         DBLogging:
           TIME       1632426680.43083
           VALUE      21.76
       stellwert_heizung:
         DBLogging:
           TIME       1632425964.47551
           VALUE      0
   READINGS:
     2021-09-23 16:11:12   IODev           KNX
     2021-09-23 16:11:12   basis_sollwert_temp 21 °C
     2021-09-23 21:51:20   ist_temp        21.76 °C
     2021-09-23 21:51:20   last-sender     1.1.47
     2021-09-23 21:50:36   soll_temp       20.50 °C
     2021-09-23 21:50:36   sollwertversch_get -1
     2021-09-23 21:50:35   sollwertversch_set -1
     2021-09-23 21:51:20   state           21.76 °C
     2021-09-23 21:39:24   stellwert_heizung 0 %
Attributes:
   DbLogExclude .*
   DbLogInclude state,soll_temp,ist_temp,stellwert_heizung
   alias      Raumcontroller Arbeitszimmer
   comment    GAs: { dev=>{"^ist_temp:.(.*)"=>'soll_temp: $1'}, usr=>{"^soll_temp(.*)"=>'value $1 g1'}, fw=>{"^soll_temp(.*)"=>'soll_temp: $1'} }

devstateicon: /:control_minus:sollwertversch_set {(ReadingsNum("EG.AZ.raumcontroller","sollwertversch_get",0)-1)}/:control_plus:sollwertversch_set {(ReadingsNum("EG.AZ.raumcontroller","sollwertversch_get",0)+1)}

webcmd: sollwertversch_set {(ReadingsNum("EG.AZ.raumcontroller","sollwertversch_get",0)-1)}:sollwertversch_set {(ReadingsNum("EG.AZ.raumcontroller","sollwertversch_get",0) + 1)}
   room       EG_AZ
   stateFormat {"IST: ".ReadingsVal("$name","ist_temp", "0")." SOLL: ".ReadingsVal("$name","soll_temp", "0")." HEIZUNG: ".ReadingsVal("$name","stellwert_heizung", "0")." BasisTemp: ".ReadingsVal("$name","basis_sollwert_temp", "0").sprintf(" Sollwert: %.2f &degC;", (ReadingsNum("$name","basis_sollwert_temp", 0))+(0.5*(ReadingsNum("$name","sollwertversch_get", 0))));}
   webCmd     sollwertversch_set {(ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0))+1}:sollwertversch_set {(ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0)-1)}

Beta-User

Vorab mal: Willkommen!

Das mit dem "Plus" im FHEMWEB-Kontext ist hin und wieder seltsam, weil es teils als Platzhalter für Leerzeichen verwendet wird...

Wenn es überhaupt auf diesem Weg geht, muss man das Plus vermutlich irgendwie escapen, wobei ich entweder auf \ oder ein weiteres + tippen würde. Ist aber eine recht vertrackte Sache, die du da haben willst. Evlt. kannst du im für FHEMWEB passenden Bereich (ausnahmsweise) einen neuen Thread aufmachen, darin nach hierhin verlinken und dann gleich wieder schließen? (Ungewohntes Vorgehen, aber sonst bekommt es Rudi evtl. nicht mit...).

Ansonsten: Funktion nach myUtils auslagern und dann nur "up" oder "down" übergeben?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rolizer

Hallo,

vielen Dank, verschiedene Maskierungen hatte ich schon versucht: \+ , ++, Leerzeichen + Leerzeichen. Kein Erfolg.

Dann werde ich mich mal an der Funktion versuchen - Zielszenario wird ja irgendwann ohnehin eine Darstellung als <+> oder <-> sein und somit wird auch das WebCmd nicht mehr benötigt. In der Kommandozeile oben funktioniert es ja.
Dachte nur, ich hätte was übersehen.

Schöne Grüße
Oli

xenos1984

Zitat von: rolizer am 23 September 2021, 23:11:26
\+ , ++, Leerzeichen + Leerzeichen. Kein Erfolg.
Da es scheinbar an der FHEMWEB-Übergabe liegt, würde ich statt des + mal %2B versuchen. Sieht im Code sicher seltsam aus, sollte aber als + übertragen werden.

rolizer

Zitatwürde ich statt des + mal %2B versuchen
top, das wars. Vielen Dank für die Hilfe!

rolizer

Nur, falls jemand in der Suche drauf stößt: Am Ende sieht es jetzt so aus und funktioniert mit einem + und - Knopf. Warum ich in der eventMap 3 Zeilen benötige, hab ich nicht verstanden. Ohne die mittlere Zeile geht es aber nicht.

defmod EG_AZ_raumcontroller KNX 0/4/42:dpt9.001:ist_temp:listenonly:nosuffix \
0/4/43:dpt9.001:soll_temp:set:nosuffix \
0/4/41:dpt5.001:stellwert_heizung::nosuffix \
0/4/45:dpt9.001:basis_sollwert_temp::nosuffix \
0/4/46:dpt6.010:sollwertversch_set:set:nosuffix \
0/4/47:dpt6.010:sollwertversch_get:get:nosuffix
attr EG_AZ_raumcontroller DbLogExclude .*
attr EG_AZ_raumcontroller DbLogInclude state,soll_temp,ist_temp,stellwert_heizung
attr EG_AZ_raumcontroller alias Raumcontroller Arbeitszimmer
attr EG_AZ_raumcontroller eventMap /sollwertversch_set {((ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0))-1)}:sollwertversch_set -/\
/sollwertversch_set {((ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0))-1)}:sollwertversch_set..*/\
sollwertversch_set {((ReadingsNum("EG_AZ_raumcontroller","sollwertversch_get",0))+1)}:sollwertversch_set/
attr EG_AZ_raumcontroller icon temp_control@#FFFF00
attr EG_AZ_raumcontroller room EG_AZ
attr EG_AZ_raumcontroller stateFormat {"IST: ".ReadingsVal("$name","ist_temp", "0")." SOLL: ".ReadingsVal("$name","soll_temp", "0")." HEIZUNG: ".ReadingsVal("$name","stellwert_heizung", "0")." BasisTemp: ".ReadingsVal("$name","basis_sollwert_temp", "0").sprintf(" Sollwert: %.2f &degC;;", (ReadingsNum("$name","basis_sollwert_temp", 0))+(0.5*(ReadingsNum("$name","sollwertversch_get", 0))));;}
attr EG_AZ_raumcontroller webCmd sollwertversch_set
attr EG_AZ_raumcontroller widgetOverride sollwertversch_set:uzsuSelect,+,-


Schönen Gruß
Oli