Hallo zusammen
Um die Abweichung zwischen der von der Heizung gemessenen Vorlauftemperatur und der von mir mittels HomeMatic Sensor gemessenen zu korrigieren, habe ich drei Dummys erstellt.
In den ersten <1_Vorlauftemperatur > schreibt eine Notification die gemessene Vorlauftemperatur. Der STATE enthält die richtige Zahl.
Der zweite <1_Vorlauftemperaturkorrekturwert> enthält den Offset. Auch hier ist im STATE die gewünschte Zahl.
In <1_Vorlauftemperatur_korrigiert> soll das Ergebnis der Summe geschrieben werden. Enthält nur ???
Dazu habe ich diese Notification erstellt
DEF: { fhem("set 1_Vorlauftemperatur_korrigiert".(Value("1_Vorlauftemperaturkorrekturwert")+Value("1_Vorlauftemperatur"))) }
Kann den Fehler leider nicht finden, Syntax, groß/klein. :(
Vielleicht wäre jemand so nett und schaut mal drüber.
Zitat von: Jupedi am 20 Dezember 2017, 16:10:44
DEF: { fhem("set 1_Vorlauftemperatur_korrigiert".(Value("1_Vorlauftemperaturkorrekturwert")+Value("1_Vorlauftemperatur"))) }
Ist das die vollständige DEF?
PS: bitte code-Tags verwenden (das # über den Smileys)
Warum das wieder so viele Dummies sein sollen (und keine userattr), erschließt sich mir mal wieder nicht, aber der Fehler scheint mir daher zu kommen, dass ein Leerzeichen fehlt, der das Zieldevice vom Wert trennt (wieder die Frage, warum das Ergebnis nicht in einem userattr landet oder das ganze mit userreadings gelöst wird).
{ fhem("set 1_Vorlauftemperatur_korrigiert ".(Value("1_Vorlauftemperaturkorrekturwert")+Value("1_Vorlauftemperatur"))) }
Ansonsten: Code gehört in code-tags (# oberhalb der smilies) und testen kann man perl-code, indem man ihn in das command-Feld eingibt - dann erhält man ggf. auch eine Rückmeldung...
Gruß, Beta-User
sorry für die code Geschichte!
Ja, das ist die ganze DEF.
Warum Dummy? Ganz einfach, weil zur Zeit noch froh bin überhaupt einen Weg zu haben, der mich ans Ziel bringt.
Für die Feinheiten reichte noch es nicht.
Leerzeichen nach dem Pkt hinter dem Ziel meinst du? Du meinst hier: ... korrigiert". hier(Value(...
Für ein Notify fehlt Dir aber noch einiges, so zum Beispiel die RegEx zum triggern. Am besten noch mal in der Commandref blättern wie der allgemeine Aufbau eines Notify DEF ist.
ja, klar es fehlt das <Suchmuster>, aber wie formuliere ich das jetzt in dem Fall?
1_Vorlauftemperatur:1.TEMPERATURE.* { fhem("set 1_Vorlauftemperatur_korrigiert"(Value("1_Vorlauftemperaturkorrekturwert")+Value("$EVENT"))) }
so gehts wohl nicht. Hätte gern, dass jede Änderung der Vorlauftemperatur übergeben und korrigiert wird
Was genau heißt geht nicht? Löst das Notify nicht aus?
Gib Mal bitte ein list von 1_Vorlauftemperatur
Internals:
NAME 1_Vorlauftemperatur
NR 183
STATE 1.TEMPERATURE: 52.5
TYPE dummy
READINGS:
2017-12-20 22:47:54 state 1.TEMPERATURE: 52.5
Attributes:
room Heizung,dummies
Kann es sein, dass nicht nur der Zahlenwert, sondern auch <1.TEMPERATURE:> mit übergeben wird und damit natürlich nicht gerechnet werden kann?
das ist die Fehlermeldung:
Unknown command 1_Vorlauftemperatur:1.TEMPERATURE.*, try help.
Bitte Log oder Code oder solche lists immer in Codetags. Oben in der Symbolleiste das Rautezeichen.
Da ist vieles durcheinander. Der Wert von state ist nicht zu gebrauchen. Wer wie oder was setzt diesen Wert? Gib Mal bitte davon ein list.
Uups, wenn man das schon so kompliziert macht, dann doch in die 99_myUtils auslagern, da lässt sich so etwas recht entspannt anlegen und zurück schreiben. Kann iMo kein Beispiel posten da ich mit dem Tablett unterwegs bin. Aber du kannst in der Utils über ReadingsVal deine Daten auslesen, berechnen und zurück schreieben oder wie schon erwähnt über eun User Reading.
Vg
Frank
Der Wert kommt vom Homematic Sensor
Internals:
DEF OEQ0802459
IODev d_ccu
NAME HM_Heizung_VorRuecklauf_Messer
NR 219
STATE Initialized
TYPE HMCCUDEV
ccuaddr OEQ0802459
ccudevstate active
ccuif BidCos-RF
ccuname HM-Heizung_VorRuecklauf-Messer
ccutype HM-WDS30-OT2-SM-2
channels 6
firmware 1.2
statevals devstate
READINGS:
2017-12-20 23:10:45 0.LOWBAT 0
2017-12-20 23:10:45 1.LOWBAT 0
2017-12-20 23:10:45 1.TEMPERATURE 46.7
2017-12-20 23:10:45 2.LOWBAT 0
2017-12-20 23:10:45 2.TEMPERATURE 46.5
2017-12-20 23:10:45 3.LOWBAT 0
2017-12-20 23:10:45 3.TEMPERATURE 0.2
2017-12-20 23:10:45 4.LOWBAT 0
2017-12-20 23:10:45 4.TEMPERATURE -0.2
2017-12-20 23:10:45 5.LOWBAT 0
2017-12-10 18:10:49 5.TEMPERATURE 0.0
2017-12-10 18:10:49 activity false
2017-12-20 23:10:45 hmstate Initialized
2017-12-10 18:10:16 state Initialized
hmccu:
dp:
0.CONFIG_PENDING:
OVAL false
VAL false
0.DEVICE_IN_BOOTLOADER:
OVAL false
VAL false
0.LOWBAT:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
0.RSSI_DEVICE:
OVAL 1
VAL 1
0.RSSI_PEER:
OVAL 180
VAL 180
0.STICKY_UNREACH:
OVAL false
VAL false
0.UNREACH:
OSVAL false
OVAL false
SVAL false
VAL false
0.UPDATE_PENDING:
OVAL false
VAL false
1.LOWBAT:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
1.TEMPERATURE:
OSVAL 47.8
OVAL 47.800000
SVAL 46.7
VAL 46.700000
2.LOWBAT:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
2.TEMPERATURE:
OSVAL 47.5
OVAL 47.500000
SVAL 46.5
VAL 46.500000
3.LOWBAT:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
3.TEMPERATURE:
OSVAL 0.3
OVAL 0.300000
SVAL 0.2
VAL 0.200000
4.LOWBAT:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
4.TEMPERATURE:
OSVAL -0.3
OVAL -0.300000
SVAL -0.2
VAL -0.200000
5.LOWBAT:
OSVAL 0
OVAL 0
SVAL 0
VAL 0
5.TEMPERATURE:
OSVAL 0.0
OVAL 0.000000
SVAL 0.0
VAL 0.000000
Attributes:
IODev d_ccu
ccureadingfilter TEMPERATURE
room HomeMatic
stripnumber 1
wird mit der Notification
Internals:
CFGFN
DEF HM_Heizung_VorRuecklauf_Messer:1.TEMPERATURE.* set 1_Vorlauftemperatur $EVENT
NAME n_1_Vorlauftemperatur
NOTIFYDEV HM_Heizung_VorRuecklauf_Messer
NR 5119
NTFY_ORDER 50-n_1_Vorlauftemperatur
REGEXP HM_Heizung_VorRuecklauf_Messer:1.TEMPERATURE.*
STATE 2017-12-20 23:15:57
TYPE notify
READINGS:
2017-12-20 22:22:36 state active
Attributes:
room Heizung,notifications
an 1_Vorlauftemperatur.
Internals:
NAME 1_Vorlauftemperatur
NR 183
STATE 1.TEMPERATURE: 44.4
TYPE dummy
READINGS:
2017-12-20 23:18:14 state 1.TEMPERATURE: 44.4
Attributes:
room Heizung,dummies
übergeben.
Hilft das so?
Bleiben wir der Einfachheit halber erstmal bei Deinem mehrfach Dummy bau. Können es später ja noch ändern.
HM_Heizung_VorRuecklauf_Messer:1.TEMPERATURE.* set 1_Vorlauftemperatur $EVENT
Dein Problem ist das Du das ganze Event mit übergibst. Das beinhaltet aber hier auch den Namen des Readings. Am besten hier gleich nur den 2 Teil des Events mit geben.
HM_Heizung_VorRuecklauf_Messer:1.TEMPERATURE.* set 1_Vorlauftemperatur $EVTPART1
Und dann sollte das gehen
1_Vorlauftemperatur.* { fhem("set 1_Vorlauftemperatur_korrigiert " . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
Erst mal vielen Dank!
Ich probiere es morgen (heute) aus und sage bescheid.
Also der erste Teil hat geklappt, das 1.TEMPERATURE ist weg.
Der Zweite leider noch nicht. :-\
Habe zuerst genau deine Zeile mit copy/paste genommen, kein Zahlenwert nur das ???
Dann hab ich die Leerstelle nach <...korrigiert hier "> noch entfernt, aber das hat es auch nicht gebracht.
Das aktuelle List:
Internals:
CFGFN
DEF 1_Vorlauftemperatur.* { fhem("set 1_Vorlauftemperatur_korrigiert" . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
NAME 1_n_Vorlaufkorrektur
NOTIFYDEV 1_Vorlauftemperatur.*
NR 4738
NTFY_ORDER 50-1_n_Vorlaufkorrektur
REGEXP 1_Vorlauftemperatur.*
STATE 2017-12-21 12:08:45
TYPE notify
READINGS:
2017-12-21 11:02:03 state active
Attributes:
room Heizung,notifications
Das ist noch mal das Listing des Korrekturwertdummy.
Internals:
NAME 1_Vorlauftemperaturkorrekturwert
NR 234
STATE 3
TYPE dummy
READINGS:
2017-12-20 15:10:34 state 3
Attributes:
room Heizung,HomeMatic,dummies
vielleicht gibts hier ein Problem
Das Leerzeichen ist Pflicht, das muss da wieder rein sonst geht es in der Tat gar nicht.
Schau mal bitte im Log nach was er meldet. Auch ist interessant wie der Event ausschaut vom 1_Vorlauftemperatur. Also Eventmonitor auf machen
Könnte da auch was mit der Variablendeklaration im Argen zu liegen? ...isnt numeric...
Und auch unknown command scheint noch auf Probleme zu deuten
1_Vorlauftemperatur_korrigiert" . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
2017.12.21 12:24:35 3: 52.4 : Unknown command 52.4, try help.
2017.12.21 12:24:35 3: 1_n_Vorlaufkorrektur return value: Unknown command 52.4, try help.
2017.12.21 12:29:36 2: HMCCU: Received no events from CCU since 300 seconds
2017.12.21 12:29:41 1: PERL WARNING: Argument "set 1_Vorlauftemperatur_korrigiert3" isn't numeric in addition (+) at (eval 191595) line 1.
2017.12.21 12:29:41 3: eval: my $NAME='1_Vorlauftemperatur';my $TYPE='dummy';my $EVENT='51.2';my $SELF='1_n_Vorlaufkorrektur';my $EVTPART0='51.2';{ fhem("set 1_Vorlauftemperatur_korrigiert" . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
2017.12.21 12:29:41 3: 51.2 : Unknown command 51.2, try help.
2017.12.21 12:29:41 3: 1_n_Vorlaufkorrektur return value: Unknown command 51.2, try help.
2017.12.21 12:31:55 1: PERL WARNING: Argument "set 1_Vorlauftemperatur_korrigiert 3" isn't numeric in addition (+) at (eval 191638) line 1.
2017.12.21 12:31:55 3: eval: my $NAME='1_Vorlauftemperatur';my $TYPE='dummy';my $EVENT='49.5';my $SELF='1_n_Vorlaufkorrektur';my $EVTPART0='49.5';{ fhem("set 1_Vorlauftemperatur_korrigiert " . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
2017.12.21 12:31:55 3: 49.5 : Unknown command 49.5, try help.
2017.12.21 12:31:55 3: 1_n_Vorlaufkorrektur return value: Unknown command 49.5, try help.
hier noch ein Abschnitt aus den Events
2017-12-21 12:44:34 LaCrosse LaCrosse_24 battery: ok
2017-12-21 12:44:34 LaCrosse LaCrosse_24 temperature: 4
2017-12-21 12:44:34 LaCrosse LaCrosse_24 humidity: 77
2017-12-21 12:44:36 dummy 1_Vorlauftemperatur 45.7
2017-12-21 12:44:36 dummy 2_Ruecklauftemperatur 40.4
2017-12-21 12:44:36 dummy 3_Vorlauf_Ruecklauf_Temperaturdifferenz 5.3
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 4.LOWBAT: 0
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 4.TEMPERATURE: -5.3
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 3.TEMPERATURE: 5.3
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 3.LOWBAT: 0
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 1.TEMPERATURE: 45.7
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 1.LOWBAT: 0
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 0.LOWBAT: 0
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 2.TEMPERATURE: 40.4
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 2.LOWBAT: 0
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer 5.LOWBAT: 0
2017-12-21 12:44:36 HMCCUDEV HM_Heizung_VorRuecklauf_Messer hmstate: Initialized
2017-12-21 12:44:42 dummy Aussentemperatur temperature: 4
2017-12-21 12:44:42 LaCrosse LaCrosse_24 battery: ok
2017-12-21 12:44:42 LaCrosse LaCrosse_24 temperature: 4
2017-12-21 12:44:42 LaCrosse LaCrosse_24 humidity: 77
mehr? Da kommen Unmengen von Einträgen.
Wie bekomme ich nur die Events eines bestimmten Device? (1_Vorlauftemperatur)
Des Leerzeichen muß in die Hochkommata mit rein, nicht irgendwo danach - wie bei meinem ersten Beitrag bereits angemerkt.
Und für den Event-Monitor solltest du mal das Wiki konsultieren, da steht noch vieles interessantes mehr neben dem Hinweis, dass man das ".*" auch ändern kann, das standarmäßig als Devspec verwendet wird ;) .
Und WO DU einen "." hingesetzt hast, kommt auch keiner...
Die Syntax vom set (Siehe doku)
set device wert
Als Wert verwendest Du in diesem Falle natürlich Deinen Errechneten Ausdruck
Ist der Punkt nicht an der Stelle als Binde-Anweisung wichtig? Conce...irgendwas?
Ja ist er. Der Punkt muss schon bleiben. Er verbindet zwei Strings mit einander.
@Jupedi
Zeig mal bitte jetzt ein list vom Notify
List vom Notify: 1_n_Vorlaufkorrektur
Internals:
CFGFN
DEF 1_Vorlauftemperatur.* { fhem("set 1_Vorlauftemperatur_korrigiert " . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
NAME 1_n_Vorlaufkorrektur
NOTIFYDEV 1_Vorlauftemperatur.*
NR 4738
NTFY_ORDER 50-1_n_Vorlaufkorrektur
REGEXP 1_Vorlauftemperatur.*
STATE 2017-12-21 13:32:30
TYPE notify
READINGS:
2017-12-21 12:31:20 state active
Attributes:
room Heizung,notifications
@CoolTux:
Stimmt .. ist ja perl ebene .. sorry
Zitat von: Wernieman am 21 Dezember 2017, 13:37:59
@CoolTux:
Stimmt .. ist ja perl ebene .. sorry
Null Problemo :)
Zitat von: Jupedi am 21 Dezember 2017, 13:35:52
List vom Notify: 1_n_Vorlaufkorrektur
Internals:
CFGFN
DEF 1_Vorlauftemperatur.* { fhem("set 1_Vorlauftemperatur_korrigiert " . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
NAME 1_n_Vorlaufkorrektur
NOTIFYDEV 1_Vorlauftemperatur.*
NR 4738
NTFY_ORDER 50-1_n_Vorlaufkorrektur
REGEXP 1_Vorlauftemperatur.*
STATE 2017-12-21 13:32:30
TYPE notify
READINGS:
2017-12-21 12:31:20 state active
Attributes:
room Heizung,notifications
Gib mir etwas Zeit. Ich muss das nachbauen
1_Vorlauftemperatur.* { fhem("set 1_Vorlauftemperatur_korrigiert " . (Value("1_Vorlauftemperaturkorrekturwert") + $EVENT)) }
So funktioniert es bei mir
die Fragezeichen sind weg, und es erscheint ein Zahlenwert.
Er verändert sich auch, allerdings ist das Ergebnis nicht richtig.
In der korrigierten Ausgabe erscheinen sogar Werte die erheblich kleiner sind als der Ausgangswert, obwohl er ja um den Korrekturwert größer sein müsste. Z.B. 50+3 => 30
In dem Haufen von Zeug was ich gelesen habe, standen irgendwo Einschränkung wie etwas beginnen darf. Kann mich nicht mehr entsinnen wo und was das war. Variablen und Notify dürfen aber schon mit einer Zahl beginnen?
Das Log enthält noch immer so was:
2017.12.21 16:46:45 3: eval: my $SELF='1_n_Vorlaufkorrektur';my $EVTPART0='47.8';my $NAME='1_Vorlauftemperatur';my $EVENT='47.8';my $TYPE='dummy';{ fhem("set 1_Vorlauftemperatur_korrigiert " . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
2017.12.21 16:46:45 3: 47.8 : Unknown command 47.8, try help.
2017.12.21 16:46:45 3: 1_n_Vorlaufkorrektur return value: Unknown command 47.8, try help.
2017.12.21 16:49:41 1: PERL WARNING: Argument "set 1_Vorlauftemperatur_korrigiert 3" isn't numeric in addition (+) at (eval 194928) line 1.
2017.12.21 16:49:41 3: eval: my $NAME='1_Vorlauftemperatur';my $TYPE='dummy';my $EVENT='48.4';my $SELF='1_n_Vorlaufkorrektur';my $EVTPART0='48.4';{ fhem("set 1_Vorlauftemperatur_korrigiert " . Value("1_Vorlauftemperaturkorrekturwert")+$EVENT) }
2017.12.21 16:49:41 3: 48.4 : Unknown command 48.4, try help.
2017.12.21 16:49:41 3: 1_n_Vorlaufkorrektur return value: Unknown command 48.4, try help.
@CoolTux
Haben bei dir die Zahlenwerte gestimmt?
Buchstaben am Namensbeginn der Variablen haben nix gebracht. :-\
Herrlich... ein Popcorn Thread, der mal wieder mein Gemüt erheitert...
(Denn sie wissen nicht, was sie tun)
@betateilchen
Ich (nur für mich) kann leider nicht wirklich widersprechen. :-[
Warum, weiß ich nicht, aber folgendes Verhalten der Werte lässt sich beobachten:
Gebe ich für den 1_Vorlauftemperaturkorrekturwert z.B. 4 ein, so zeigt 1_Vorlauftemperatur_korrigiert im nächsten Moment den dreifachen Wert
des Korrekturwertes an, also 12.
Nach der nächsten Änderung der Vorlauftemperatur durch den Sensor (Vorlauftemperatur jetzt z.B. 50) springt 1_Vorlauftemperatur_korrigiert auf einen Wert von Vorlauftemperatur + 2 X Korrekturwert, also 58.
Habe das jetzt einige male so durchprobiert.
1_Vorlauftemperatur.[0-9]+ { fhem("set 1_Vorlauftemperatur_korrigiert " . (Value("1_Vorlauftemperaturkorrekturwert") + $EVENT)) }
Deine Dummys heißen einfach zu ähnlich, es gab mehrere trigger auf das Notify. Hier ein angepasster Code, bitte 1 zu1 übernehmen.
@CoolTux
Habe es per copy/paste übernommen. Leider wird der Zielwert dann nicht mehr korrigiert.
Bin daraufhin zu deiner vorherigen DEF zurückgewechselt und jetzt wird er wieder korrigiert, wenn auch wiederum um den doppelten Betrag.
Ich will ja niemand mehr als nötig die Zeit stehlen und würde deshalb jetzt einfach den halben Korrekturwert verwenden und gut ists.
Zumal das Ganze ja wohl ein eher uneleganter Ansatz ist und irgendwann neu gemacht gehört.
Wenn das ok ist, würde ich es an der Stellen beenden.
Vielen Dank für die Hilfe u. Geduld!!!