Z-Wave Thermostat Eurotronic Spirit

Begonnen von mthome, 06 Oktober 2017, 07:24:59

Vorheriges Thema - Nächstes Thema

trollmars

#90
Zitat von: krikan am 07 November 2018, 14:49:42

Sorry, verstehe jedoch Zusammenhang mit dem Zitat von mir nicht. Ich wollte nur klarstellen, dass man auch Temperaturwerte von Nicht-ZWave-Geräten an das Spirit per FHEM schicken kann.

Gruß, Christian

Thx.
Bin als neuling für jede Hilfe sehr dankbar.
Die ventilöffnung funktioniert schonmal  ;)

Jetzt nochmal zur externen Raumtemperatur Möglichkeit :
Hatte das so verstanden das dein link diese Möglichkeit aufzeigt.
Also den temperaturwert eines z. B mqtt items
an das spirit schicken.
Aber das müsste doch ein Befehl mit "Set" sein oder nicht?
Dazu finde ich aber nichts. Bzw verstehe es wohl noch nicht

Thx

rcmcronny

Schau mal weiter vorn, da ist eine Lösung, wie das zB machbar ist: (Antwort #43)

https://forum.fhem.de/index.php/topic,77598.msg710737.html#msg710737

HTH Ronny

trollmars

Zitat von: mdescher am 06 November 2017, 09:17:05
Wie man es programmatisch aus FHEM heraus setzen kann hatte ich weiter oben in diesem Thread mal beschrieben. Keine Garantie, dass es das tut was es soll, aber bisher verhält sich mein Spirit bei Temperaturänderungen plausibel. So richtig sehen was der Spirit bekommt und was er daraus macht kann man leider nicht, d.h. man findet nicht heraus was er denn nun intern verwendet (sprich ob der gesetzte Wert angekommen ist und auch verwendet wird).

Bei einem Z-Wave Temperaturfühler würde ich erwarten, dass eine direkte Assoziation vom Thermometer zum Spirit automatisch das richtige tut.

Da ich LaCrosse Temperatursensoren nutze habe mir in der 99_myUtils.pm eine Funktion gebaut um die Temperatur am Spirit zu setzen:

sub sendRoomTemperatureToSpirit($$) {
my ($device, $temperature) = @_;
if ($device ne "") {
my $ioDev = AttrVal($device, "IODev", "");
my $nodeIdHex = InternalVal($device, "nodeIdHex", "");
if ($ioDev ne "" && $nodeIdHex ne "") {
my $cmdTemp = substr("0000" . sprintf("%x", $temperature * 10), -4);
my $cmdCallbackId = substr("00" . sprintf("%x", int(rand(256))), -2);
my $fhemCommand = "get " . $ioDev . " raw 13" . $nodeIdHex . "0631050122" . $cmdTemp . "25" . $cmdCallbackId;
Log 3, "Heating Control - Room temperature for " . $device . " is " . $temperature . "°C.";
fhem($fhemCommand);
} else {
Log 3, "Heating Control - No ioDev or nodeIdHex found for " . $device . ".";
}
} else {
Log 3, "Heating Control - No device specified.";
}
}


Beispielaufruf für Spirit-Thermostat "EG.wz.THERM" mit einer Temperatur von 21.5 Grad Celsius wäre:

sendRoomTemperatureToSpirit("EG.wz.THERM", "21.5")

Das ganze wird dann über einen Notify bei Temperaturänderungen von mindestens 0.2 Grad gegenüber dem letzten Wert gesteuert.

Ich brauch da leider etwas hilfe.

Das 99_myUtils.pm ist mit Hilfe der Wiki Seite zu myUtils und dem Code von oben erstellt.

Zwei Fragen dazu:
- Muss ich den Code von oben noch mit meiner nodeIdHex ersetzen?
- Wie sieht der Notify zu dem Pearl Code von oben aus?
define ?????

mmh

trollmars

#93
Also ich antworte mir mal selber.

Ich denke die NodeID habe ich rausgefunden und im Code ersetzt.

Nur wie führe ich den Befehl aus?

wenn ich in der Befehlseingabe

sendRoomTemperatureToSpirit("MEINGERÄTENAME", "21.5")
eingebe kommt

Unknown command sendRoomTemperatureToSpirit("MEINGERÄTENAME",, try help.

Hat einer ne kleine Hilfestellung

rudolfkoenig

Perl Ausdruecke muss man in {} einschliessen, Shell-Befehle in "".
Siehe auch https://fhem.de/commandref_modular.html#command

trollmars

Zitat von: rudolfkoenig am 10 November 2018, 17:47:58
Perl Ausdruecke muss man in {} einschliessen, Shell-Befehle in "".
Siehe auch https://fhem.de/commandref_modular.html#command

Danke!! Fhem ist mächtig ...aber für neulinge auch anspruchsvoll  ;D

Ich hatte auch schon mit den Klammern gelesen.
Um auf das ZWave Beispiel in diesen Thread bezug zu nehmen.

ich möchte den sub aus dem Pearl script aufrufen ..um erstmal zu testen ob es läuft.
Also in der Befehl Box:

{sendRoomTemperatureToSpirit(,,spirit",,,17");;}

Bekomme ich :
Unrecognized character \xE2; marked by <-- HERE after eToSpirit(<-- HERE near column 30 at (eval 24) line 1.

sendRoomTemperatureToSpirit ist das sub aus dem Code vom User Mdescher.
spirit ist der Name des Zwave Thermostats.

Auch wenn ich die beiden Semikolons am Ende nicht verwende ist das Ergebniss das gleiche.

Ich gebe nicht auf ;-) ..das muss doch als einsteiger zu machen sein


rudolfkoenig

Zitat,,spirit"
Die "oben/unten" Anfuehrungszeichen sind falsch, es muessen auf beiden seiten die aus dem ASCII Zeichensatz sein.
Gibt es neben Word auch noch andere Programme, die das automatisch kaputtmachen?

trollmars

Danke für die Hilfe!!
...das war es.

Bei mir war es dummheit und der OSX Text-Editor.

Trotzdem nehme ich von dieses Lösung erstmal abstand.
Mir ist jetzt schon zweimal das Spirt Modul "abgeschmiert" mit Timeouts.
Es half nur das Modul zu löschen und neu.

Versuche jetzt doch mal das PID20 mit manual verfahren.


trollmars

#98
Zitat von: Deckoffizier am 05 November 2018, 23:52:09
Hallo  trollmars,

Denke mal kann Deine Frage mit ja beantworten weil ich diese Variante momentan mit 3 Spirit nutze .
Der Umweg ist bei mir das FHEM PID20 Modul in Verbindung mit HeatingControl.
Hat den Vorteil auch nicht ZWave Temperatursensor Fensterkontakt zur Ansteuerung des Spirit zu nutzen.
Natürlich ist hierzu der Spirit vorher in den Stellwertmodus zu versetzen.

hier mal ein List eines PID20

Internals:
   CHANGED   
   DEF        Badsensor:temperature Thermostat_Bad:dim
   NAME       heizung_bad
   NR         304
   NTFY_ORDER 50-heizung_bad
   STATE      processing
   TYPE       PID20
   VERSION    1.0.0.9
   Helper:
     DBLOG:
       actuation:
         myDbLog:
           TIME       1541457564.28846
           VALUE      11
       actuationCalc:
         myDbLog:
           TIME       1541457744.53322
           VALUE      10.8000000000019
       desired:
         myDbLog:
           TIME       1541457624.36823
           VALUE      20.0
       measured:
         myDbLog:
           TIME       1541457684.45655
           VALUE      20.9
       p_i:
         myDbLog:
           TIME       1541457624.36823
           VALUE      56.1600000000018
       p_p:
         myDbLog:
           TIME       1541457684.45655
           VALUE      -44.9999999999999
   READINGS:
     2018-11-05 23:42:24   actuation       11
     2018-11-05 23:42:24   actuationCalc   10.8000000000019
     2018-11-05 23:42:24   delta           -0.899999999999999
     2018-11-05 23:42:24   desired         20.0
     2018-11-05 23:42:24   measured        20.9
     2018-11-05 23:42:24   p_d             0
     2018-11-05 23:42:24   p_i             55.8000000000018
     2018-11-05 23:42:24   p_p             -44.9999999999999
     2018-11-05 23:42:24   state           processing
   helper:
     actor      Thermostat_Bad
     actorCommand dim
     actorErrorAction errorPos
     actorErrorPos 5
     actorInterval 180
     actorKeepAlive 1800
     actorLimitLower 0
     actorLimitUpper 99
     actorThreshold 1
     actorTimestamp 2018-11-05 23:39:24
     actorValueDecPlaces 0
     adjust     
     calcInterval 60
     deltaGradient 0
     deltaOld   -0.899999999999999
     deltaOldTS 2018-11-05 23:40:35
     deltaTreshold 0
     desiredName desired
     disable    0
     factor_D   0
     factor_I   0.2
     factor_P   50
     isWindUP   
     measuredName measured
     reading    temperature
     regexp     ^([\+,\-]?\d+\.?\d*$)
     reverseAction 0
     sensor     Badsensor
     sensorTimeout 7200
     stopped    0
     updateInterval 600
Attributes:
   DbLogExclude state,delta,p_d
   DbLogInclude measured,desired,actuation,p_p,p_i,actuationCalc
   alias      Heizung_Bad
   event-min-interval actuation:300,actuationCalc:300,delta:300,desired:300,measured:300,p_d:300,p_i:300,p_p:300
   event-on-change-reading actuation:1,actuationCalc:0.5,delta:0.2,desired,measured:0.2,p_d:0.1,p_i:1.0,p_p:1.0
   group      Thermostate
   pidActorErrorAction errorPos
   pidActorErrorPos 5
   pidActorInterval 180
   pidActorLimitUpper 99
   pidActorTreshold 1
   pidActorValueDecPlaces 0
   pidFactor_D 0
   pidFactor_I 0.2
   pidFactor_P 50
   pidSensorTimeout 7200
   room       Bad




Eventuell zur Erbauung ein list des zu gehörigen HeatingControl

Internals:
   COMMAND    {fhem("set Thermostat_Bad tmManual"); {fhem("set $NAME desired $EVENT")}}
   CONDITION 
   DEF        heizung_bad mo,di,mi,do,fr,$we|06:00|23 mo,di,mi,do,fr,$we|22:00|20  {fhem("set Thermostat_Bad tmManual"); {fhem("set $NAME desired $EVENT")}}
   DEVICE     heizung_bad
   GlobalDaylistSpec
   LANGUAGE   de
   NAME       HC_Bad
   NR         303
   Profil 0: Sonntag 06:00:00 23, 22:00:00 20
   Profil 1: Montag 06:00:00 23, 22:00:00 20
   Profil 2: Dienstag 06:00:00 23, 22:00:00 20
   Profil 3: Mittwoch 06:00:00 23, 22:00:00 20
   Profil 4: Donnerstag 06:00:00 23, 22:00:00 20
   Profil 5: Freitag 06:00:00 23, 22:00:00 20
   Profil 6: Samstag 06:00:00 23, 22:00:00 20
   Profil 7: Wochenende 06:00:00 23, 22:00:00 20
   STATE      20
   STILLDONETIME 0
   TYPE       Heating_Control
   READINGS:
     2018-11-05 22:00:00   currValue       20
     2018-11-05 08:31:09   disabled        0
     2018-11-05 22:00:00   nextUpdate      2018-11-06 06:00:00
     2018-11-05 22:00:00   nextValue       23
     2018-11-05 22:00:00   state           20
   SWITCHINGTIMES:
     mo,di,mi,do,fr,$we|06:00|23
     mo,di,mi,do,fr,$we|22:00|20
   TIMER:
     HC_Bad_1:
       HASH       HC_Bad
       MODIFIER   1
       NAME       HC_Bad_1
       immerSchalten 1
     HC_Bad_2:
       HASH       HC_Bad
       MODIFIER   2
       NAME       HC_Bad_2
     HC_Bad_SetTimerOfDay:
       HASH       HC_Bad
       MODIFIER   SetTimerOfDay
       NAME       HC_Bad_SetTimerOfDay
       SETTIMERATMIDNIGHT 1
     HC_Bad_delayed:
       HASH       HC_Bad
       MODIFIER   delayed
       NAME       HC_Bad_delayed
   dayNumber:
     !$we       8
     $we        7
     di         2
     do         4
     fr         5
     mi         3
     mo         1
     sa         6
     so         0
   helper:
     daysRegExp (so|mo|di|mi|do|fr|sa|\$we|\!\$we)
     daysRegExpMessage (so|mo|di|mi|do|fr|sa|$we|!$we)
     SWITCHINGTIME:
       0:
         06:00:00   23
         22:00:00   20
       1:
         06:00:00   23
         22:00:00   20
       2:
         06:00:00   23
         22:00:00   20
       3:
         06:00:00   23
         22:00:00   20
       4:
         06:00:00   23
         22:00:00   20
       5:
         06:00:00   23
         22:00:00   20
       6:
         06:00:00   23
         22:00:00   20
       7:
         06:00:00   23
         22:00:00   20
   longDays:
     de:
       Sonntag
       Montag
       Dienstag
       Mittwoch
       Donnerstag
       Freitag
       Samstag
       Wochenende
       Werktags
     en:
       Sunday
       Monday
       Tuesday
       Wednesday
       Thursday
       Friday
       Saturday
       weekend
       weekdays
     fr:
       Dimanche
       Lundi
       Mardi
       Mercredi
       Jeudi
       Vendredi
       Samedi
       weekend
       jours de la semaine
   profil:
     1:
       EPOCH      1541394000
       PARA       23
       TIME       06:00
       TAGE:
         1
         2
         3
         4
         5
         7
     2:
       EPOCH      1541451600
       PARA       20
       TIME       22:00
       TAGE:
         1
         2
         3
         4
         5
         7
   profile_IDX:
     0:
       06:00:00   1
       22:00:00   2
     1:
       06:00:00   1
       22:00:00   2
     2:
       06:00:00   1
       22:00:00   2
     3:
       06:00:00   1
       22:00:00   2
     4:
       06:00:00   1
       22:00:00   2
     5:
       06:00:00   1
       22:00:00   2
     6:
       06:00:00   1
       22:00:00   2
     7:
       06:00:00   1
       22:00:00   2
   shortDays:
     de:
       so
       mo
       di
       mi
       do
       fr
       sa
       $we
       !$we
     en:
       su
       mo
       tu
       we
       th
       fr
       sa
       $we
       !$we
     fr:
       di
       lu
       ma
       me
       je
       ve
       sa
       $we
       !$we
Attributes:
   DbLogExclude .*
   alias      Bad-Heizung-Solltemp
   commandTemplate set $NAME  $EVENT
   disable    0
   group      Heizung und Temperatur
   icon       sani_heating_automatic
   room       Bad
   sortby     2
   switchInThePast 1


sieht dann ungefähr so aus



Gruß
Hans-Jürgen

Hi Hans-Jürgen.

Das PID20 läuft soweit. Danke für den Tipp.
Jetzt wollte ich mich an die Heating Control machen.

Ich schaffe es einfach nicht die Heating Control zu erstellen das die Temperatur Zeitsteurung an das PID20 "desired" geht.
In allen Wiki ist ist beim Heating Control immer nur die rede von desired-temperature (Also direkt an das Device)
Das will ich aber nicht. sonder der Sollwert soll ja vom PID20 kommen.

Hast du einen Tipp?

Deckoffizier

#99
Hallo trollmars,

ZitatIch schaffe es einfach nicht die Heating Control zu erstellen das die Temperatur Zeitsteurung an das PID20 "desired" geht.

also wenn ich Deine Frage richtig verstehe habe ich beim HeatingControl am Anfang der DEF als Name des Devices den Namen des PID20 genommen,
wie:        heizung_bad mo,di,mi,do,fr,$we|06:00|23 mo,di,mi,do,fr,$we|22:00|20  {fhem("set Thermostat_Bad tmManual"); {fhem("set $NAME desired $EVENT")}}

Hierbei ist     heizung_bad   der Name des definierten PID20 im zusammen spiel.

Hierbei ist am Ende in dem Command Perlcode geschweifte Klammern das Thermostat_Bad der Name des Spirit welches ich zur Sicherheit immer nochmal in den Stellwertmodus setze
und dann die desired an das PID übergibt.

Und ja ich vermute Du hast auch am Ende der DEF vom PID dim statt default valve? gesetzt.
Auch nicht zu vergessen das attr. beim PID pidActorLimitUpper 99 zu setzen.
   


Habe die Sache u.a. mit DOIFs noch etwas ausgebaut um zu verhindern das jemand bei geöffneten Fenster die von mir ebenfalls mit DOIF abgesenkte Temperatur aus Versehen verstellt.

Gruß
Hans-Jürgen


FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

trollmars

#100
Danke Hans Jürgen.

Habs jetzt erstmal etwas anders gelöst.
Bin auch noch in der "Testphase". Da muss es noch nicht so gut gelöst sein wie bei dir.

Hab jetzt erstmal mit InlfuxDB und Grafana eine Visu gebaut um zu sehen wie gut der PID läuft.

Eine Frage.
Wie sieht das bei dir mit der Battery aus?
Wird die schneller leer als wenn das Thermostat selber regelt.

LG

Deckoffizier

Hallo trollmars,

auf die Schnelle da Handwerker im Anmarsch.

Als Bild mal die Einstellungen für SVG zu PID20 und die Ausgabe dazu.
Man sieht eigentlich ganz gut die Reaktion der Ventilstellung nach Temperaturänderung von HeatingControl um 6 Uhr und Fenster auf/zu.

Zur Regelgüte findet sich für mich eigentlich ganz lehrreich im Forum ein Thread.
An den P und I Einstellungen muss man eventuell noch etwas drehen um optimale Einstellungen zu bekommen, sieht man eigentlich
wenn soll und ist Linie fast auf einander liegen.
Interessant ist auch wie die Räume unterschiedlichen Einfluss haben(Dämmung,Heizkörpergröße etc.) und nicht zu vernachlässigen Vorlauftemperatur
bis zum hydr. Abgleich.

Gruß
Hans-Jürgen

FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

Deckoffizier

Hallo trollmars,

kurzer Nachtrag zu meinem vorherigen Post,
damit es was zu plotten gibt muss natürlich beim
PID20 als attr DbLogInclude
   
measured,desired,actuation,p_p,p_i,actuationCalc

gesetzt werden.

ZitatEine Frage.
Wie sieht das bei dir mit der Battery aus?
Wird die schneller leer als wenn das Thermostat selber regelt.

kann ich nur mit Vermutung dienen habe gerade erst vor kurzem 3 Thermostate von FS20 auf ZWave umgestellt.
Die FS20 Thermostate liefen eigentlich recht lange(dehnbarer Begriff?) mit pid Reglung ohne Probleme nur die Thermostate selber haben irgendwann die Macke bekommen.

Vermute eher bei entsprechenden Einstellungen wie ? pidActorInterval könnten sie nicht so oft zu tun bekommen, was sich sicherlich
mehr bemerkbar macht als der Funkverkehr ?

Ja und ob schon mal einer,eine so mutig war die Spirits mit aufladbaren Akkus(Eneloop?) zu betreiben  ;)  ?

Gruß
Hans-Jürgen



FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

trollmars

#103
Zitat von: Deckoffizier am 16 November 2018, 18:48:10
Hallo trollmars,

kurzer Nachtrag zu meinem vorherigen Post,
damit es was zu plotten gibt muss natürlich beim
PID20 als attr DbLogInclude
   
measured,desired,actuation,p_p,p_i,actuationCalc

gesetzt werden.

kann ich nur mit Vermutung dienen habe gerade erst vor kurzem 3 Thermostate von FS20 auf ZWave umgestellt.
Die FS20 Thermostate liefen eigentlich recht lange(dehnbarer Begriff?) mit pid Reglung ohne Probleme nur die Thermostate selber haben irgendwann die Macke bekommen.

Vermute eher bei entsprechenden Einstellungen wie ? pidActorInterval könnten sie nicht so oft zu tun bekommen, was sich sicherlich
mehr bemerkbar macht als der Funkverkehr ?

Ja und ob schon mal einer,eine so mutig war die Spirits mit aufladbaren Akkus(Eneloop?) zu betreiben  ;)  ?

Gruß
Hans-Jürgen

Cool!
Danke für die Screenshots. Das hilft einen anfänger mit fhem enorm.
Hier mal mein PLOT:
Im Anhang ;-)

Den blauen Plot (Ventilstellung) habe ich um den Faktor /2 geteilt damit es optisch einfacher zu sehen ist.

Zur Battery.
Hab da am anfang jetzt mal "Null Acht Fünzehn" Batterien drin. Bin jetzt schon auf 65 %  :o
Hab aber mit 75 % gestartet.

Hab jetzt ertstmal mit deinen pidActorInterval von vorherigen Posts angefangen.
Da werde ich aber nochmal ansehen.

Naja Akkus würde ich mir nur aus Umwelt gründen zulegen. Aber nicht im ersten Winter  :D

trollmars

Hans Jürgen

Was vewendest du den als Frostschutz Stellung? Also Ventilöffnungsstellung?

LG