Heizungs-Werte nach Homematic bringen?

Begonnen von duffy6, 14 November 2017, 17:18:44

Vorheriges Thema - Nächstes Thema

MadMax-FHEM

Zitat von: duffy6 am 16 November 2017, 08:36:03
Hallo zusammen,

hab den EventMonitor gestern mal laufen lassen und diese Meldungen bekommen:


2017-11-16 00:09:07 Wcmcom HzAnlage Betriebsphase: Brenner aus
2017-11-16 00:11:06 Wcmcom HzAnlage Vorlauftemperatur: 56
2017-11-16 00:19:06 Wcmcom HzAnlage Abgastemperatur: 46
2017-11-16 00:23:06 Wcmcom HzAnlage Abgastemperatur: 47
2017-11-16 00:25:06 Wcmcom HzAnlage Aussentemperatur: 8
2017-11-16 00:25:06 Wcmcom HzAnlage Hk1-Soll-Temp-System: 54.0
2017-11-16 00:25:06 Wcmcom HzAnlage Vorlauftemperatur: 57
2017-11-16 00:27:06 Wcmcom HzAnlage Hk1-Warmwassertemperatur: 35.0


Davon sollen nun die Werte


Betriebsphase: Brenner aus/Brenner ein
Vorlauftemperatur
Abgastemperatur
Hk1-Warmwassertemperatur


an die CCU "transferiert" werden.

Hat da jmd eine Vorgehensweise/Codeschnipsel für mich?

Danke und viele Grüße
duffy6

Vorgehensweise mehrfach genannt: im EventMonitor die gewünschte Zeile markieren und dann "Create/Modify" -> Notify erzeugen und den set Befehl ergänzen.

Dann sollte etwas in der Art rauskommen:

define ccuVorlaufNotify notify HzAnlage:Vorlauftemperatur:.* set WIE_IMMER_DAS_BEI_DIR_HEIßT var WIE_IMMER_DEINE_SYSTEMVARIABLE_HEIßT $EVTPART1

(wobei ob nun $EVTPART0 oder $EVTPART1 etc. musst du kucken)

Ungetestet, klar, hab ja kein HMCCU und auch kein was mit der Vorlauftemperatur von dir...

Aber wie geschrieben: du bist doch schon fast fertig...
Was hindert dich daran einfach mal einen Event im EventMonitor zu markieren und dir ein Notify generieren zu lassen.
Jetzt ist es eh schon sooo einfach.
(Früher musste man sich noch selbst ein Regex "zusammenbasteln")

Siehe:

https://wiki.fhem.de/wiki/Event_monitor

https://wiki.fhem.de/wiki/Notify

Und nat commandref zu notify...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

duffy6

heeeeey! Danke Euch allen!

Es funktioniert!!!

Here we go (für andere Nachahmer) :)

fhem.cfg:
#Anbindung an CCU konfigurieren (devicename=ccu)
define ccu HMCCU 192.168.133.40
attr ccu stateFormat rpcstate/state

#Notify für Weiterleitung an CCU (devicename=ccu)
define ccuVorlauftemperaturNotify notify HzAnlage:Vorlauftemperatur:.* set ccu var Vorlauftemperatur $EVTPART1
define ccuLaststellungNotify notify HzAnlage:Laststellung:.* set ccu var Laststellung $EVTPART1
define ccuAbgastemperaturNotify notify HzAnlage:Abgastemperatur:.* set ccu var Abgastemperatur $EVTPART1


Danke nochmal und Gruß an alle
duffy6


duffy6

Eine Frage hätte ich aber noch:

Ein Parameter ("Betriebsphase") kann verschiedene String-Werte annehmen ("Brenner aus", "Brenner in Betrieb").

2017-11-16 14:38:07 Wcmcom HzAnlage Betriebsphase: Brenner aus

Wie kann ich denn bei der Übergabe an die CCU diese Werte in 0 (Brenner aus) und 1 (Brenner an) ändern?

Danke und Gruß
duffy6

MadMax-FHEM

Evtl. so:

$EVTPART0/1/2/3 eq "aus" (oder "Brenner aus") ? 0 : 1

oder mit if (perl)

oder mit IF (fhem)

oder

oder

Wird Zeit für ein wenig perl oder fhem ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

duffy6

Zitat$EVTPART0/1/2/3 eq "aus" (oder "Brenner aus") ? 0 : 1

Wo soll diese Zeile denn hin?
Direkt in den Notify?

zap

Zitat von: duffy6 am 16 November 2017, 14:36:59
#Anbindung an CCU konfigurieren (devicename=ccu)
#Notify für Weiterleitung an CCU (devicename=ccu)
define ccuVorlauftemperaturNotify notify HzAnlage:Vorlauftemperatur:.* set ccu var Vorlauftemperatur $EVTPART1
define ccuLaststellungNotify notify HzAnlage:Laststellung:.* set ccu var Laststellung $EVTPART1
define ccuAbgastemperaturNotify notify HzAnlage:Abgastemperatur:.* set ccu var Abgastemperatur $EVTPART1


Die ganzen Notifies kannst Du durch ein einziges ersetzen:


attr ccu stripchar :
define ccuWerte notify HzAnlage:.* set ccu var $EVTPART0 $EVTPART1


Die Variablen in der CCU müssen in dem Fall den gleichen Namen haben wie die Readings in FHEM. In $EVTPART0 steht der Readingname drin, blöderweise mit einem : am Ende. Das Attribut stripchar sorgt dafür, dass das : entfernt wird. Den Wert HzAnlage:.* musst Du noch durch einen geeigneten regulären Ausdruck ersetzen, der alle Readings einfängt, die du als Variablen in der CCU haben möchtest. z.B. HzAnlage:(Vorlauftemperatur|Abgastemperatur):.* oder HzAnlage:.*temperatur.* oder ...

2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

duffy6

Sorry, muss nochmal stören  8)

Ich habe eine Variable Brennerlaufzeit, die bei Betriebszustand "ein" aufsummiert wird.
Nun würde ich um 23:59 Uhr eines jeden Tages diesen aufsummierten Wert gerne an eine Homematic-Variable übergeben.
Man beachte dabei, dass es natürlich sein kann, dass um genau 23:59 Uhr der Brenner evtl. gerade nicht läuft.

Wie kann ich denn um genau diese Uhrzeit einen Parameter übergeben?

Danke und Gruß
duffy6

MadMax-FHEM

Zitat von: duffy6 am 17 November 2017, 11:28:00
Sorry, muss nochmal stören  8)

Ich habe eine Variable Brennerlaufzeit, die bei Betriebszustand "ein" aufsummiert wird.
Nun würde ich um 23:59 Uhr eines jeden Tages diesen aufsummierten Wert gerne an eine Homematic-Variable übergeben.
Man beachte dabei, dass es natürlich sein kann, dass um genau 23:59 Uhr der Brenner evtl. gerade nicht läuft.

Wie kann ich denn um genau diese Uhrzeit einen Parameter übergeben?

Danke und Gruß
duffy6

indem du ein 'at' für genau diese Uhrzeit anlegst:

define aSummeUebertragen at *23:59:00 set ...

https://wiki.fhem.de/wiki/At

oder wie immer: commandref...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

duffy6

Soweit bin ich auch, aber dann?

hab das hier probiert, das funktioniert aber nicht:

define Brennerdauer at *11:16:00 { define Brennerlaufzeit-heuteNotify notify HzAnlage:Brennerlaufzeit-heute:.* set ccu var Brennerlaufzeit_gestern $EVTPART1 }

gruß
duffy6

MadMax-FHEM

#24
Wozu brauchst du das notify?

Also entweder Notify, dann Reaktion auf einen Event...
...oder 'at' dann eben zu einer bestimmten Zeit.

Du musst nur das set Kommando absetzen, welches ich nicht kenne und nicht genau weiß wie sich der zu übertragende Wert zusammensetzt/aufbaut.

Evtl. brauchst du halt noch sowas wie ReadingsVal / ReadingsNum...
...zum Auslesen von Werten anderer Readings (anderer Geräte)...
...bevor du frägst: ja man kann auch damit "rechnen" etc. ;)

Und dann wird es (langsam) wirklich Zeit sich mit den Dingen zu beschäftigen...
...zum einen fehlen die Infos für copy/paste "code" und zum anderen ist das nicht Sinn und Zweck (des Forums)...

...zumindest meine Meinung.

Denn wenn mal irgendwas umgestellt wird, sich ändert, ...
...dann kannst du (wieder) nichts machen (außer hier fragen nach neuem copy/paste "Code" fragen)...

Wenn du es selbst erstellst/lernst kannst du selber erweitern, umbauen, optimieren, ...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

duffy6

Schon klar, was du meinst - ich gelobe Besserung sobald ich beruflich etwas mehr Zeit habe!

Ich verstehe wie ich mittels set Befehl einen Wert in der CCU setzen kann:

set ccu var Brennerlaufzeit 20.5

aber wenn ich den Wert eines Parameters aus FHEM in einen Paramter in der CCU schreiben will, dann steh ich auf dem Schlauch... :-[


MadMax-FHEM

Wie geschrieben:

ReadingsVal / ReadingsNum

Beispiel:

define aSummeUebertragen at *23:59:00 set ccu var Brennerlaufzeit {ReadingsNum("GERÄTENAME", "READINGSNAME", ErsatzWert)}

Ob "setMagic" (oder wie das heißt) auch geht weiß ich nicht, nutze ich (bislang noch) nicht:

define aSummeUebertragen at *23:59:00 set ccu var Brennerlaufzeit [GERÄTENAME:READINGNAME]

Wie geschrieben lässt sich damit auch rechnen und auch mit Werten aus verschiedenen Geräten etc.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

duffy6

#27
Mit ReadingNum klappt es wunder bar! Danke!

Ich habe einen ähnlichen Parameter, an dem ich mir die Zähne ausbeiße: Betriebsphase
Es gibt mehrer Zustände, die allesamt längere Strings sind wie bspw. "Brenner befindet sich in Abkühlphase", also aus mehreren Worten besteht.

Diesen String möchte ich an eine Systemvariable weitergeben, was einfach nicht klappen will.

Das habe ich probiert:

set ccu var Betriebsphase {ReadingsVal("HzAnlage","Betriebsphase","0")}

In Homematic sehe ich nun, dass die dortige Systemvariable den Wert "Betriebsphase: {ReadingsVal(" angenommen hat.

Wenn ich es mit  "setMagic" probiere:

set ccu var Betriebsphase [HzAnlage:Betriebsphase]

nimmt die Homematic-Variable den Wert "Betriebsphase: Brenner" an.

Was mache ich denn hier falsch?




zap

Vielleicht so:

{fhem(,,set ccu var Betriebsphase ".ReadingsVal("HzAnlage","Laststellung","0")}
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

duffy6

Hallo zusammen,

ich habe das Skript seit längerem in Gebrauch und hab siedend heiß festgestellt, dass ich ja gar keinen Solarkollektor habe und das Skript die Minimal-Laststellung berechnet.
Das führt momentan bspw. dazu, dass die berechnete Laststellung 43% beträgt, was viel zu hoch ist (was ich an den DIagrammen Wärmeanforderung/Vorlauf sehe).

Kann ich das Skript betreiben NUR um die Werte auszulesen OHNE irgendwelche Werte zu berechnen?

Oder was mir auch schon helfen würde: Den Parameter "Min-Laststellung" manuell auf 32% zu setzen.

In der Datei "99_myUtilsHeizung.pm" gibt es in Zeile 1598 den Bereich:


# Mit alten Werten vorbelegen, falls in foreach - Schleife keine Zuweisung erfolgte
$flamme = $rhash->{'Flamme'}{VAL};
$last   = $rhash->{'Laststellung'}{VAL};

# nun spezielle Werte berechnen
if ( $flamme =~ m/1|ein/ ) {
if ($lasttime) {
my $diffbrenn =
  ( $lastlast / 100 ) * ( ( $akttime - $lasttime ) / 60 );
$brennerzeit += $diffbrenn;
readingsBulkUpdate( $hash, 'Brennerlaufzeit-heute', $brennerzeit,
1 );
readingsBulkUpdate( $hash, 'Gas-Verbrauch', $brennerzeit * $kalib,
1 )
  if ( $kalib > 0 );
$rhash->{'.lastlast'}{VAL} = $last;
$rhash->{'.lasttime'}{VAL} = $akttime;
}
else    # Flamme ein, aber gerade erst gestartet
{
$rhash->{'.lasttime'}{VAL} = $akttime;
$rhash->{'.lastlast'}{VAL} = $last;
readingsBulkUpdate( $hash, 'BrennerEinAusZeit', Wcmcom_EventZeit(2),
1 );
if ( open( BRENNERFILE, $filename ) ) {
printf( BRENNERFILE "%s Flamme ein\n", Wcmcom_EventZeit(3) );
close BRENNERFILE;
}    # File schreiben

# ev. in Kollektorfile eintragen
if (   $kollektorlog
&& $kollektorfilename
&& open( KOLLEKTORFILE, $kollektorfilename ) )
{
printf( KOLLEKTORFILE
  "%s\tBrenner ein\t\t%s °C\t%s °C\t%s °C\t\t%.1f kWh\n",
Wcmcom_EventZeit(2),
$rhash->{'Temp-Puffer-oben'}{VAL},
$rhash->{'Temp-Puffer-unten'}{VAL},
$rhash->{'Temp-Solar-unten'}{VAL},
$brennerzeit * $rhash->{'Kalibrierung'}{VAL} * 10
);
}    # if Kollektorfile
}    # if Flamme erstmalig  ein

# Hier noch die max und mins für die Laststellung berechnen
my $minlast = 100;
$minlast = $rhash->{'Min-Laststellung'}{VAL}
  if ( exists( $rhash->{'Min-Laststellung'} ) );
my $maxlast = 0;
$maxlast = $rhash->{'Max-Laststellung'}{VAL}
  if ( exists( $rhash->{'Max-Laststellung'} ) );
readingsBulkUpdate( $hash, 'Max-Laststellung', $last, 1 )
  if ( $last > $maxlast );
readingsBulkUpdate( $hash, 'Min-Laststellung', $last, 1 )
  if ( ( $last > 0 ) && ( $last < $minlast ) );
}       # if flamme
else    # Flamme aus, aber letzter Slice noch nicht verarbgeitet
{
if ( $lasttime > 0 ) {
my $diffbrenn =
  ( $lastlast / 100 ) * ( ( $akttime - $lasttime ) / 60 );
$brennerzeit += $diffbrenn;
readingsBulkUpdate( $hash, 'Brennerlaufzeit-heute', $brennerzeit,
1 );
readingsBulkUpdate( $hash, 'Gas-Verbrauch', $brennerzeit * $kalib,
1 )
  if ( $kalib > 0 );
$rhash->{'.lastlast'}{VAL} = 0;
$rhash->{'.lasttime'}{VAL} = 0;
readingsBulkUpdate( $hash, 'BrennerEinAusZeit', Wcmcom_EventZeit(3),
1 );

# aktriem brenner
if ( open( BRENNERFILE, $filename ) ) {
printf( BRENNERFILE
"%s Flamme aus, gew. Brennerzeit: %d letzte-Laststellung: %d\n",
Wcmcom_EventZeit(3), $brennerzeit, $lastlast );
close BRENNERFILE;
}

# ev. in Kollektorfile eintragen
if (   $kollektorlog
&& $kollektorfilename
&& open( KOLLEKTORFILE, $kollektorfilename ) )
{
printf( KOLLEKTORFILE
  "%s\tBrenner aus\t\t%s °C\t%s °C\t%s °C\t\t%.1f kWh\n",
Wcmcom_EventZeit(2),
$rhash->{'Temp-Puffer-oben'}{VAL},
$rhash->{'Temp-Puffer-unten'}{VAL},
$rhash->{'Temp-Solar-unten'}{VAL},
$brennerzeit * $rhash->{'Kalibrierung'}{VAL} * 10
);
close KOLLEKTORFILE;
}    # if Kollektorfile
}    # letzten slice berechnen

  # Brennerlaufzeit-heute und Max/Min-Werte  gegen Mitternacht zurücksetzen
my ( $sec, $min, $hour ) = localtime( time() );
if (   ( ( $hour >= 23 ) && ( $min >= 50 ) )
|| ( ( $hour < 1 ) && ( $min < 15 ) ) )
{
if ( $rhash->{'.reset'}{VAL} ne 'done' ) {
Log3( $name, 3, "Wcmcom_BrennerDaten: Werte zurücksetzen." );
my $br = 0;
$br = $rhash->{'Brennerlaufzeit-heute'}{VAL}
  if ( exists( $rhash->{'Brennerlaufzeit-heute'} ) );
$br = sprintf( "%.2f", $br / 60 );
my $brennerlaufzeit_total = 0;
$brennerlaufzeit_total =
  sprintf( "%.2f", $rhash->{'Brennerlaufzeit-total'}{VAL} )
  if ( exists( $rhash->{'Brennerlaufzeit-total'} ) );
Log3( $name, 3,
"Wcmcom BrennerDaten:  heute in h: $br total: $brennerlaufzeit_total"
);
readingsBulkUpdate( $hash, 'Brennerlaufzeit-total',
$brennerlaufzeit_total + $br, 1 );
my $brennerzeitges = 0;
$brennerzeitges = $rhash->{'Brennerlaufzeit-Gesamt'}{VAL}
  if ( exists( $rhash->{'Brennerlaufzeit-Gesamt'} ) );
Log( 3,
"Wcmcom BrennerDaten:  heute in h: $br ges: $brennerzeitges"
);
readingsBulkUpdate( $hash, 'Brennerlaufzeit-Gesamt',
$brennerzeitges + $br, 0 );

# Gasverbrauch zurücksetzen und zum Gas-End addieren
my $gasverbrauchheute =
  ReadingsVal( $name, 'Gas-Verbrauch', 0 );
my $gasend = ReadingsVal( $name, 'Gas-End', 0 );
readingsBulkUpdate( $hash, 'Gas-End',
$gasverbrauchheute + $gasend, 0 );
my $gasdiff = ReadingsVal( $name, 'Gas-Diff', 0 );
readingsBulkUpdate( $hash, 'Gas-Diff',
$gasverbrauchheute + $gasdiff, 0 );
readingsBulkUpdate( $hash, 'Gas-Verbrauch',         0, 0 );
readingsBulkUpdate( $hash, 'Brennerlaufzeit-heute', 0, 0 );

   # ev. laufende Flamme zurücksetzen -> neu Elektrolurch 23.1.2015
$rhash->{'.lastlast'}{VAL} = 0;
$rhash->{'.lasttime'}{VAL} = 0;
my $akttemp = $rhash->{Aussentemperatur}{VAL};
readingsBulkUpdate( $hash, 'Min-Aussentemperatur', $akttemp,
0 );
readingsBulkUpdate( $hash, 'Max-Aussentemperatur', $akttemp,
0 );

# Temperatur in WetterPuchheim zurücksetzen
# ReadingsVal('WetterPuchheim','Max-Temperatur',-100);
my $whr = $defs{WetterPuchheim}{READINGS};
$whr->{'Max-Temperatur'}{VAL}  = -100;
$whr->{'Min-Temperatur'}{VAL}  = 100;
$whr->{'Max-Temperatur'}{TIME} = TimeNow();
$whr->{'Min-Temperatur'}{TIME} = TimeNow();
$akttemp = $rhash->{'Temp-Kollektor'}{VAL};
readingsBulkUpdate( $hash, 'Max-Kollektortemperatur', $akttemp,
0 );
readingsBulkUpdate( $hash, 'Min-Kollektortemperatur', $akttemp,
0 );

# Laststellungen
delete( $rhash->{'Max-Laststellung'} );
delete( $rhash->{'Min-Laststellung'} );

# readingsBulkUpdate($hash,'Max-Laststellung',0,0);
# readingsBulkUpdate($hash,'Min-Laststellung',100,0);
Log3( $name, 4,
"Wcmcom_BrennerDaten: Brennerdaten zurückgesetzt" );
Wcmcom_ResetSolarDatenTmps($hash);
$rhash->{'.reset'}{VAL} = "done";
}    # if reset Min/Max Werte
}         # if Mitternacht
else {    # nicht Mitternacht
$rhash->{'.reset'}{VAL} = 'not done';
}    # else nicht Mitternacht
}    # Flamme aus

# updatezeit vermerken
readingsBulkUpdate( $hash, 'UpdateTime-GAS_P', Wcmcom_EventZeit(3), 1 );
readingsEndUpdate( $hash, 1 );
return undef;
}    # end Wcmcom_UpdateBrennerDaten


Könnt ihr mir helfen diesen zu editzieren, das Min-Laststellung immer 32% (weniger kann meine Weishaupt nicht) ist?