define's zur Laufzeit erzeugen

Begonnen von Fs79, 04 Oktober 2013, 15:53:12

Vorheriges Thema - Nächstes Thema

Fs79

Hallo zusammen,

ich arbeite derzeit daran mein HomeOffice automatisch hoch- und herunterzufahren wenn ich es brauche.
Nun möchte ich die Heizungssteuerung und das Anschalten der Telefone morgens um 00:01 anstossen.
Dazu möchte ich das Heating_Control löschen und neu einrichten und auch eine define fürs Anschalten der Telefone anlegen.
Aber das klappt nicht. Ich kann in meiner Funktion nur ein&- ausschalten oder löschen aber keine neuen "define" für Heating_Control oder Zeitsteuerung erstellen.

das funktioniert:[/u]
define HO_config_change notify HO_config_change { \
if ($value{HomeOffice} eq 'on') { \
   fhem "delete az_Heating_Control" ;; } \
else { \
   fhem "delete HO_ShoreTel230g_on" ;; \
   fhem "delete HO_OS80_on" ;; } \
}

das funktioniert, so stelle ich mir es aber vor[/u]
define HO_config_change notify HO_config_change { \
if ($value{HomeOffice} eq 'on') { \
   fhem "delete az_Heating_Control" ;; \
   fhem "define HO_ShoreTel230g_on at 08:00 { switchOn_timer_switchoff("az_ShoreTel230g","17:00:00","Arbeitszimmer","HomeOffice") }" ;; \
   fhem "define az_Heating_Control Heating_Control az_Thermostat 12345|06:00|21 12345|14:00|14 { set_temperature("@","%","all_atHome_Guests") }" ;; } \
else { \
   fhem "delete HO_ShoreTel230g_on" ;; \
   fhem "delete HO_OS80_on" ;; } \
}


Ich hoffe ich habe mich verständlich ausgedrückt.

Gruss
Frank

Fs79

So ,jetzt funktioniert es. Da müssen einzelne Gänsefüsse rein.

define HO_config_change notify HO_config_change { \
if ($value{HomeOffice} eq 'on') { \
   fhem "delete az_Heating_Control" ;; \
   fhem 'define az_Heating_Control Heating_Control az_Thermostat 12345|06:00|21 12345|14:00|14 12345|21:00|14 { set_temperature("az_Thermostat","%","HomeOffice") }' ;; \
   fhem 'attr az_Heating_Control room Arbeitszimmer,Heizung' ;; \
   if ($value{HO_ShoreTel230g_on}) { fhem "delete HO_ShoreTel230g_on" ;; } \
   if ($value{HO_OS80_on}) { fhem "delete HO_OS80_on" ;; } \
   fhem 'define HO_ShoreTel230g_on at 08:00 { switchOn_timer_switchoff("az_ShoreTel230g","17:00:00","Arbeitszimmer","az_structure") }' ;; \
   fhem 'define HO_OS80_on at 08:00 { switchOn_timer_switchoff("az_OpenStage80","17:00:00","Arbeitszimmer","az_structure") }' ;; } \
else { \
   if ($value{HO_ShoreTel230g_on}) { fhem "delete HO_ShoreTel230g_on" ;; } \
   if ($value{HO_OS80_on}) { fhem "delete HO_OS80_on" ;; } \
   fhem "delete az_Heating_Control" ;; \
   fhem 'define az_Heating_Control Heating_Control az_Thermostat 1234567|08:00|20 1234567|16:00|14 1234567|21:00|14 { set_temperature("az_Thermostat","%"',"all_atHome_Guests") }' ;; \
   fhem 'attr az_Heating_Control room Arbeitszimmer,Heizung' ;; } \
}
attr HO_config_change room Dummies,Arbeitszimmer


Weiss jemand wie ich das % Zeichen maskieren kann? Weil wenn FHEM das define erzeugt sieht es so aus. Das % ist weg und daher geht die Funktion dann auch schief.

So soll es aussehen
COMMAND    { set_temperature("az_Thermostat","%","all_atHome_Guests") }

So sieht es aus, % Zeichen macht Probleme
COMMAND    { set_temperature("az_Thermostat","","all_atHome_Guests") }

Fs79

Habs gefunden.
für @: @@
für %: %%

Schönen Tag noch.

rudolfkoenig

Oder man verwendet $EVENT statt % (was laut http://fhem.de/commandref.html#notify nicht Zukunftssicher ist), dann kann man das ganze %% bzw @@ sich sparen.

Fs79

Das funktioniert nicht. Habe ich das richtig verstanden.

Vorher so:
define bz_Heating_Control Heating_Control bz_Thermostat 12345|03:30|21 12345|06:30|16 12345|16:00|21 12345|18:00|16 67|07:30|21 67|09:30|19  6|16:30|21 7|16:30|22 67|18:30|16 1234567|21:00|16 { set_temperature("@","%","all_atHome_1") }

Jetzt so:
define bz_Heating_Control Heating_Control bz_Thermostat 12345|03:30|21 12345|06:30|16 12345|16:00|21 12345|18:00|16 67|07:30|21 67|09:30|19  6|16:30|21 7|16:30|22 67|18:30|16 1234567|21:00|16 { set_temperature(%NAME,%EVENT,"all_atHome_1") }

Kommt im EventLog ein Fehler:
syntax error at (eval 16441) line 1, near "15.0NAME"

Sieht aus als wenn aus % der Parameter wird und NAME ignoriert wird.

Puschel74

Hallo,

$EVENT und nicht %EVENT

Grüße

P.S.: Bei NAME natürlich auch mit $
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Fs79

Da habe ich beim Lesen wohl alles falsch verstanden.
Da stand auch was mit %.

Funktioniert aber noch nicht. Ich glaube ich lasse es so wie es ist und warte bis es nicht mehr funktioniert.

Befehl in der Configdatei
define bz_Heating_Control Heating_Control bz_Thermostat 12345|03:30|21 12345|06:30|16 12
345|16:00|21 12345|18:00|16 67|07:30|21 67|09:30|19  6|16:30|21 7|16:30|22 67|18:30|16 1
234567|21:00|16 { set_temperature("$NAME","$EVENT","all_atHome_1") }

Fehlermeldung
2013.10.04 21:36:43 3: Global symbol "$NAME" requires explicit package name at (eval 598) line 1.
Global symbol "$EVENT" requires explicit package name at (eval 598) line 1.

Puschel74

Hallo,

wie lange benutzt du schon fhem und wann hast du das letzte update gemacht?

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Fs79

Seit mehreren Jahren. Erst auf ner FritzBox mit einem eigenen VerwaltungsAddon für Freetz.
Nun auf einem PI und FHEM ist aktuell.
Update vorgestern glaube ich.

Die Heizungssteuerung und HomeEntertainment läuft drüber. Mit FS20 und HomeMatic.

Mit den @ und % läuft es auch. Wollte es bloss gleich so machen wie Rudi sagte, nicht das ich nach einem Update dumm da stehe.

Gruss
Frank

Dietmar63

Ich sehe mir das genau am Sonntag Abend an, und melde mich.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Fs79

Ok, vielen Dank.
Ich benutze das HeatingModul zur Zeitsteuerung der Heizung.
Dahinter läuft eine Routine die prüft ob jemand zu Haus ist und dann ggf. nicht heizt.

Mit meiner DebianMail Sub läuft es.
Siehe hier:
define all_Thermostat_MISSINGACK notify .*_Thermostat:(MISSING.ACK.*|.*NACK.*) {\
   Log 1, ">>>>>>>>> $NAME desired temp - missing ack/nack.\n" ;; \
   DebianMail('frank.schuster@os-pc.de' ('frank.schuster@os-pc.de'),"Problem: $NAME $EVENT","$NAME $EVENT");; \
}
Das funktioniert. Nur oben beim Heating_Control gibt es Probleme.
Vielleicht liegt es am Heating_Control Modul.

Schönes We zusammen.
Ich warte dann auf Rückmeldung.

Gruss
Frank

rudolfkoenig

Ich vermute dein fhem ist nicht up-to-date, zeig uns bitte die Ausgabe von version, bzw. die erste Zeile mit fhem.pl
Folgende Befehle in meinem FHEM
define d1 dummy
define n1 notify d1 { Log 1, "mail\@post.de %notReplaced devName:$NAME event:$EVENT" }
trigger d1 myEvent

produzieren folgende Ausgabe:
2013.10.05 08:14:11.301 1: mail@post.de %notReplaced devName:d1 event:myEvent

@ muss mit \ geschuetzt werden, sonst versucht Perl ein Array mit dem Namen zu finden. Das ist aber normale Perl-Syntax, und keine FHEM-Spezialitaet.

Fs79

Guten Morgen,

hier die Version:
Zitat# $Id: fhem.pl 3872 2013-09-07 11:58:33Z rudolfkoenig $

Hier die Ausgabe des Triggers:
Zitat2013.10.05 08:34:12 1: mail@post.de (mail@post.de) %notReplaced devName:d1 event:myEvent

Also prinzipiell funktioniert es.

Dietmar63

Zitatdefine bz_heating_control heating_control bz_Thermostat 12345|03:30|21 12345|06:30|16 12
 345|16:00|21 12345|18:00|16 67|07:30|21 67|09:30|19 6|16:30|21 7|16:30|22 67|18:30|16 1
 234567|21:00|16 { set_temperature("$NAME","$EVENT","all_atHome_1") }

Heating_Control kennt die Variablen "$NAME","$EVENT" zurzeit nicht.
Es funktioniert zur Zeit nur mit @ und %. Das ist auch weiterhin zukunftssicher. Vielleicht ergänze ich demnächst auch die Varianten $NAME","$EVENT"

Schalte mal bei Heating_Control verbose 5 ein. Dann kannst du sehen welcher Befehl von HC erzeugt wird. $event und $name werden zurzeit nicht ersetzt.
 
Nur @ und % werden durch das konkrete device bzw. Event ersetzt.
 
Mit verbose sollte dies sichtbar werden.

Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Dietmar63

Zitatdas funktioniert, so stelle ich mir es aber vor
 define HO_config_change notify HO_config_change { \
 if ($value{HomeOffice} eq 'on') { \
 fhem "delete az_Heating_Control" ;; \
 fhem "define HO_ShoreTel230g_on at 08:00 { switchOn_timer_switchoff("az_ShoreTel230g","17:00:00","Arbeitszimmer","HomeOffice") }" ;; \
 fhem "define az_Heating_Control Heating_Control az_Thermostat 12345|06:00|21 12345|14:00|14 { set_temperature("@","%","all_atHome_Guests") }" ;; } \
 else { \
 fhem "delete HO_ShoreTel230g_on" ;; \
 fhem "delete HO_OS80_on" ;; } \
 }

ich halte es für etwas zu kompliziert umgesetzt das Heating_Control az_Heating_Control immer wieder abhängig von irgendetwas zu löschen und wieder neu anzulegen. Du kannst den Inhalt eines dummy doch einfach in der Funktion set_temperature mit abfragen, dann wird alles ganz einfach.  

Bei mir funktioniert es so:

define HeizungKueche_wt       Heating_Control HeizungKueche 05:35|25   18:30|16 (heizungAnAus("An",  0))
define HeizungKueche_we       Heating_Control HeizungKueche 06:45|25   18:30|16 (heizungAnAus("An",  1))
define HeizungWohnen_wt       Heating_Control HeizungWohnen            22:00|16 (heizungAnAus("An",  0))
define HeizungWohnen_we       Heating_Control HeizungWohnen 12:00|25   22:00|16 (heizungAnAus("An",  1))
#
define HeizungKueche_uz_wt    Heating_Control HeizungKueche 05:35|25   18:45|16 (heizungAnAus("Ueb", 0))
define HeizungKueche_uz_we    Heating_Control HeizungKueche 06:45|25   18:45|16 (heizungAnAus("Ueb", 1))
define HeizungWohnen_uz       Heating_Control HeizungWohnen 18:00|22   22:00|16 (heizungAnAus("Ueb", undef))
#
define HeizungKueche_Aus      Heating_Control HeizungKueche So|00:05|off        (heizungAnAus("Off", undef))
define HeizungWohnen_Aus      Heating_Control HeizungWohnen So|00:05|off        (heizungAnAus("Off", undef))


99_utils:
sub heizungAnAus($$) {
   my ($myState, $testWe) = @_;

   #we ermitteln
   my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;
   my $we = (($wday==0 || $wday==6) ? 1 : 0);
   if(!$we) {
     my $h2we = $attr{global}{holiday2we};
     $we = 1 if($h2we && $value{$h2we} && $value{$h2we} ne "none");
   }
   $testWe = $we if (!defined($testWe));

   my $state = ReadingsVal("Heizung", "state", "Off");
   my $ret = ($state eq $myState && $testWe == $we);
   
   return $ret;
}


entscheidend ist:
my $state = ReadingsVal("Heizung", "state", "Off");

Mit dem dummy Heizung läßt sich meine Heizung in die Modi Off, Ueb, An versetzten. Alle drei Zustände haben andere Kennlinien.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm