FHEM Forum

FHEM - Hausautomations-Systeme => MAX => Thema gestartet von: dematic am 12 Februar 2016, 20:35:22

Titel: FakeWT Anfängerfragen
Beitrag von: dematic am 12 Februar 2016, 20:35:22
Hallo,

seit ein paar tagen bastel ich mit meinen max heizungsthermostaten und fhem rum und habe auch die steuerung so weit hinbekommen wie ich es wollte. jetzt wollte ich die thermostate mit hilfe von fakewt und lacrosse sensoren steuern. allerdings scheitere ich schon am wiki. vermutlich überlese  einfach was oder verstehe ich einfach eine kleinigkeit nicht.

konkret geht es um http://www.fhemwiki.de/wiki/MAX#Externer_Temperatursensor_f.C3.BCr_Heizk.C3.B6rperregelung (http://www.fhemwiki.de/wiki/MAX#Externer_Temperatursensor_f.C3.BCr_Heizk.C3.B6rperregelung)

ich gebe beim entsprechnen den thermostat set HT_Arbeitszimmer associate fakeWallThermostat ein. und nun komme ich auch schon zum ersten problem. nun würde ich das ganze gerne mit set cm fakeWT Heizung 14.5 12.1 testen. nur wo gebe ich das ganze ein? verstehe ich das richtig das ich unter dem menü links unter unsorted gehe und dort auf cm unter CUL-MAX das ich es dort eingeben muss? da habe ich nämlich nur broadcastTime und pairmode zur auswahl und kein fakeWT.

auch wenn ich dann laut wiki define SendExtTemp notify
Arbeitszimmer_Temp:temperature.* {
MaxFakeWallThermostat(HT_Arbeitszimmer, %EVTPART1);
}
eingebe bekomme ich eine fehlermeldung. configfile: Unknown command MaxFakeWallThermostat(HT_Arbeitszimmer,, try help.
Unknown command }, try help


stehe ich auf dem schlauch oder verstehe ich das einfach nicht?

danke schon mal für die hilfe
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: dematic am 13 Februar 2016, 09:18:56
hallo,

mit frischen geist habe ich gerade rausgefunden das ich den befehl set cm fakeWT HT_Arbeitszimmer 14.5 12.1 einfach in die Befehlszeile in FHEM eintragen muss und es auch dann geht. ein problem mal wenniger.

Allerdings habe ich immer noch keinen plan wie ich nun die gemessene temperatur des lacrosse sensors automatisch zum thermostat an der heizung bekomme. da ist immer noch die gleiche fehlermeldung.
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: Wzut am 13 Februar 2016, 09:43:04
Zitat von: dematic am 12 Februar 2016, 20:35:22
bekomme ich eine fehlermeldung. configfile: Unknown command MaxFakeWallThermostat(HT_Arbeitszimmer,, try help.
Unknown command }, try help


und du hast auch wie im wiki beschrieben deine 99_myUtils erweitert ?
ZitatDazu die Funktion, bitte in 99_MyUtils.pm eintragen:

sub MaxFakeWallThermostat($$)
{
my ($heizung, $aktTemp)    = @_;
my $CULMAX     = $defs{$heizung}{LASTInputDev};
my $desiredTemp   = ReadingsVal($heizung, "desiredTemperature", undef);
my $windowOpenTemp = ReadingsVal($heizung, "windowOpenTemperature", undef);
my $lastTemp    = ReadingsVal($heizung, "LastExtTemperature", 0);
my $lastSet     = ReadingsTimestamp($heizung, "LastExtTemperature", 0);
if($desiredTemp && $windowOpenTemp &&
$desiredTemp != $windowOpenTemp &&
(time()-time_str2num($lastSet) >= 600 || abs($aktTemp-$lastTemp)>=0.2 )) {
  Log 3, "set $CULMAX fakeWT $heizung $desiredTemp $aktTemp";
  readingsSingleUpdate($defs{$heizung}, "LastExtTemperature", $aktTemp, 0);
  fhem("set $CULMAX fakeWT $heizung $desiredTemp $aktTemp");
}
}
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: dematic am 13 Februar 2016, 09:46:15
ja das habe ich da am ende eingefügt.

muss ich da noch was was anpassen? könnte das daran liegen?
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: willyk am 13 Februar 2016, 14:09:20
Zitat von: dematic am 12 Februar 2016, 20:35:22
define SendExtTemp notify
Arbeitszimmer_Temp:temperature.* {
MaxFakeWallThermostat(HT_Arbeitszimmer, %EVTPART1);
}
eingebe bekomme ich eine fehlermeldung.

Im Wiki steht es ein wenig anders:

define SendExtTemp notify \
Arbeitszimmer_Temp:temperature.* {\
MaxFakeWallThermostat(HT_Arbeitszimmer, %EVTPART1); \
}


Alternativ:

define SendExtTemp notify Arbeitszimmer_Temp:temperature.* { MaxFakeWallThermostat(HT_Arbeitszimmer, %EVTPART1);}

(beides ungetestet).

Gehts jetzt?

Gruss
willyk
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: dematic am 13 Februar 2016, 14:53:25
also zumindest ist bei beiden die fehlermeldung weg. allerdings habe ich jetzt eine andereconfigfile: Unknown command }, try help.
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: dematic am 13 Februar 2016, 20:08:36
Ok, inzwischen habe ich gar keine Fehlermeldung mehr. Allerdings habe ich am Thermostat immer einen rferror. Was meinen Recherchen nach dafür spricht, das es immer noch nicht funktioniert.
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: Wzut am 15 Februar 2016, 09:02:57
Zitat von: willyk am 13 Februar 2016, 14:09:20
Im Wiki steht es ein wenig anders:
%EVTPART1
[/code]
Alternativ:
%EVTPART1
@willyk : nach http://forum.fhem.de/index.php/topic,44094.0.html streiche %EVTPART1 und verwende $EVTPART1 :)
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: dematic am 15 Februar 2016, 09:29:47
ah ok daran könnte das liegen. und im wiki ist es auch schon geändert. schnell schnell   :D

werde das später mal testen ob es nun geht.
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: mahowi am 15 Februar 2016, 13:42:35
Ich hab jetzt auch schon alles probiert, aber irgendwie macht FakeWT genau nix.  :-\

Ich habe MaxFakeWallThermostat genau wie im Wiki in 99_myUtils angelegt, meine DEF fürs notify sieht auch genauso aus:

tado_temp:tempist:.* { MaxFakeWallThermostat("MAX_00ff6a", $EVTPART1); }

Auch ein trigger SendExtTemp ergibt keine Ausgabe im Log. Das associate hab ich auch schon mehrfach ausgeführt. (Hier wäre es schön, wenn die "associates" in irgendeinem Reading festgehalten würden.)

Es klappt!  :)

Ich hab zwar keine Ahnung, warum es jetzt auf einmal funktioniert, aber ich hatte gerade das im eventMonitor:
2016.02.15 15:26:40.673 3 : set cm fakeWT MAX_00ff6a 20.0 17.4
2016-02-15 15:26:40.738 CUL_MAX cm fakeWT MAX_00ff6a 20.0 17.4
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: dematic am 15 Februar 2016, 21:15:16
also, ich habe es getestet und ich habe festgestellt das die fehlermeldung configfile: Unknown command }, try help. auch wieder da ist.

ich hatte in der config datei eine } vergessen und dadurch tauchte der fehler nicht mehr auf. allerdings funktioniert mein fakewt weder mit define SendExtTemp notify Arbeitszimmer_Temp:temperature.* { MaxFakeWallThermostat(HT_Arbeitszimmer, $EVTPART1);} noch mit define SendExtTemp notify \
Arbeitszimmer_Temp:temperature.* {\
MaxFakeWallThermostat(HT_Arbeitszimmer, $EVTPART1); \
}
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: Wzut am 17 Februar 2016, 20:28:51
und was ist Arbeitszimmer_Temp für ein device ?
poste doch mal richtige relevante Abschnitte aus deiner fhem.cfg, dann muss man nicht jede Stecknadel einzeln hinterfragen .... 
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: andreas.lausser.1 am 17 Februar 2016, 23:27:02
Hi, den Fehler hatte ich auch. Du editierst bestimmt direkt in der fhem.cfg? Dann mach mal alle Zeilenumbrüche raus, dann ist der Fehler weg. Alternativ über die Weboberfläche Einträgen, dann gibts auch kein Problem.



Gesendet von meinem Nexus 5 mit Tapatalk
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: dematic am 18 Februar 2016, 08:11:25
hallo,

ich habe es inzwischen zum laufen gebracht und einiges neues dadurch lernen können. ich hatte mehrer fehler eingebaut gehabt die natürlich im log-file auftauchten. und dank google und dem forum hier konnte ich alle beheben.

das problem mit der } klammer war, das ich eine vergessen habe. als ich den internen editor aktiviert hatte, konnte ich durch die jeweilige verknüpfung der anfangs und endklammer feststellen das am ende der zeile eine fehlt und entsprechend setzen. das nächste problem war, dass ich die anführungszeichen in der config datei bei define SendExtTemp notify Arbeitszimmer_Temp:temperature.* { MaxFakeWallThermostat("HT_Arbeitszimmer", $EVTPART1);} weggelassen hatte. dachte das wäre nur als info im wiki das dieser teil angepasst werden muss.

nachdem ich dies getan hatte klappte auch trigger SendExtTemp

da das automatische temperatur senden immer noch nicht geklappt hat, und mich eine fehlermeldung auf die 99_MyUtils.pm hingewiesen habe, habe ich die nochmals angeschaut und festgestellt das dort auch noch was ab ändern musste. habe dort am ende die zwei einträge mit $CULMAX durch cm für meinen cul-stick ersetzt und schon funktioniert das ganze.

sub MaxFakeWallThermostat($$)
{
my ($heizung, $aktTemp)    = @_;
my $CULMAX     = $defs{$heizung}{LASTInputDev};
my $desiredTemp   = ReadingsVal($heizung, "desiredTemperature", undef);
my $windowOpenTemp = ReadingsVal($heizung, "windowOpenTemperature", undef);
my $lastTemp    = ReadingsVal($heizung, "LastExtTemperature", 0);
my $lastSet     = ReadingsTimestamp($heizung, "LastExtTemperature", 0);
if($desiredTemp && $windowOpenTemp &&
$desiredTemp != $windowOpenTemp &&
(time()-time_str2num($lastSet) >= 600 || abs($aktTemp-$lastTemp)>=0.2 )) {
  Log 3, "set cm fakeWT $heizung $desiredTemp $aktTemp";
  readingsSingleUpdate($defs{$heizung}, "LastExtTemperature", $aktTemp, 0);
  fhem("set cm fakeWT $heizung $desiredTemp $aktTemp");
}
}


nachdem das nun funktioniert werde ich die tage mal nach und nach die anderen räume mit fakeWT's austatten. dazu hätte ich noch ne kurze frage. muss ich dann für jeden fakeWT in der 99_MyUtils.pm einen eintrag machen die sich unterscheiden mit fakeWT1 usw?

vielen danke für die bemühungen und hilfe.  :)

@Wzut: Arbeitszimmer_Temp ist ein lacrosse temperatur sensor.
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: mahowi am 18 Februar 2016, 12:09:54
Zitat von: dematic am 18 Februar 2016, 08:11:25
da das automatische temperatur senden immer noch nicht geklappt hat, und mich eine fehlermeldung auf die 99_MyUtils.pm hingewiesen habe, habe ich die nochmals angeschaut und festgestellt das dort auch noch was ab ändern musste. habe dort am ende die zwei einträge mit $CULMAX durch cm für meinen cul-stick ersetzt und schon funktioniert das ganze.

sub MaxFakeWallThermostat($$)
{
my ($heizung, $aktTemp)    = @_;
my $CULMAX     = $defs{$heizung}{LASTInputDev};
my $desiredTemp   = ReadingsVal($heizung, "desiredTemperature", undef);
my $windowOpenTemp = ReadingsVal($heizung, "windowOpenTemperature", undef);
my $lastTemp    = ReadingsVal($heizung, "LastExtTemperature", 0);
my $lastSet     = ReadingsTimestamp($heizung, "LastExtTemperature", 0);
if($desiredTemp && $windowOpenTemp &&
$desiredTemp != $windowOpenTemp &&
(time()-time_str2num($lastSet) >= 600 || abs($aktTemp-$lastTemp)>=0.2 )) {
  Log 3, "set cm fakeWT $heizung $desiredTemp $aktTemp";
  readingsSingleUpdate($defs{$heizung}, "LastExtTemperature", $aktTemp, 0);
  fhem("set cm fakeWT $heizung $desiredTemp $aktTemp");
}
}


nachdem das nun funktioniert werde ich die tage mal nach und nach die anderen räume mit fakeWT's austatten. dazu hätte ich noch ne kurze frage. muss ich dann für jeden fakeWT in der 99_MyUtils.pm einen eintrag machen die sich unterscheiden mit fakeWT1 usw?

Eigentlichsollte das Ersetzen von $CULMAX durch cm überflüssig sein. my $CULMAX     = $defs{$heizung}{LASTInputDev}; definiert das IO-Device des übergebenen Thermostats. Also LASTInputDev sollte Dein cm sein, wenn das Thermostat vorher schonmal damit verbunden war.

Da Du ja die Bezeichnung des Thermostats an MaxFakeWallThermostat übergibst, brauchst Du auch keine weiteren Einträge in 99_MyUtils. Lediglich für jedes Thermostat ein notify.
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: dematic am 18 Februar 2016, 13:29:11
ok klingt logisch. habe das in der 99_MyUtils mal wieder auf $CULMAX geändert, und jetzt funkioniert es auch.

später werde ich dann mal noch die anderen notifys dann erstellen.
Titel: Antw:FakeWT Anfängerfragen
Beitrag von: Pa_CZ am 04 Januar 2017, 21:50:32
Being a beginner with FHEM I struggled a lot with the above. to all also struggling with making the fakeWT work based on the wiki and the above thread here is result of my efforts which acually works ok now: Hope this helps.

Note:
IODev named cm in wiki is in my case named as CULMAX0
MAX_111111 is a MAX! heatthermostat (radiator valve head)
DEV_999999 is some temperature sensor providing actual temperature


1/ to FHEM command prompt write this:
set MAX_111111 associate fakeWallThermostat


test to see if it worked - write to FHEM command prompt the following:

set CULMAX0 fakeWT MAX_111111 14.5 12.1

...and observe the changes on the given heatingthermostat or Event monitor


2/ to FHEM.cfg write the following

define SendExtTemp notify DEV_999999:temperature.* { MaxFakeWallThermostat("MAX_111111", $EVTPART1)}


3/  to 99_myUtils.pm write the following (use myUtilsTemplate.pm as a source if you have not used it until now)

sub MaxFakeWallThermostat($$)
{
my ($heizung, $aktTemp)    = @_;
my $CULMAX     = $defs{$heizung}{LASTInputDev};
my $desiredTemp   = ReadingsVal($heizung, "desiredTemperature", undef);
my $windowOpenTemp = ReadingsVal($heizung, "windowOpenTemperature", undef);
my $lastTemp    = ReadingsVal($heizung, "LastExtTemperature", 0);
my $lastSet     = ReadingsTimestamp($heizung, "LastExtTemperature", 0);

if($desiredTemp && $windowOpenTemp &&
$desiredTemp != $windowOpenTemp &&
(time()-time_str2num($lastSet) >= 600 || abs($aktTemp-$lastTemp)>=0.2 ))
{
  Log 1, "set CULMAX0 fakeWT $heizung dzrdtmp $desiredTemp akttemp $aktTemp lasttmp $lastTemp wot is $windowOpenTemp lastsettime is $lastSet";
  readingsSingleUpdate($defs{$heizung}, "LastExtTemperature", $aktTemp, 0);
  fhem("set CULMAX0 fakeWT $heizung $desiredTemp $aktTemp");
}
else
{
  Log 1, "conditions not fulfilled hence no action $heizung dzrdtmp $desiredTemp akttemp $aktTemp lasttmp $lastTemp wot is $windowOpenTemp lastsettime is $lastSet";
}

}


This code is enriched with ELSE statement - I wanted to see when the IF condition was not fulfilled  (to see actual reason for nothing happening)

Hint: for testing/trying of changes you do to the above the Eventlog will not say much, you have to observe the logfile

Do not forget to Restart FHEM after each step.

Hope this helps.