[NEU] EnOcean-Bereich auf fhemwiki.de erweitert / noch Einsatzbeispiele gesucht

Begonnen von krikan, 08 August 2014, 21:21:17

Vorheriges Thema - Nächstes Thema

krikan

Hallo Fhemler,

in den letzten Wochen haben 50watt und ich den EnOcean-Bereich im Wiki http://www.fhemwiki.de/wiki/Kategorie:EnOcean_Components überarbeitet und erweitert. Damit wird es hoffentlich -vor allem für die Einsteiger in Fhem/EnOcean- einfacher einen Überblick zu gewinnen und wir bekomme eine größere Nutzerbasis. Vielleicht findet auch noch ein Fortgeschrittener die eine oder andere Neuigkeit und Anregung.

Natürlich ist noch längst nicht alles perfekt. Deshalb wird Eure Hilfe gebraucht: Für Fehlerhinweise, Verbesserungsvorschläge und Erweiterung gibt es noch viel Raum. Also ändert es ab oder liefert Anmerkungen. Insbesondere (komplexere) EnOcean-Einsatzbeispiele sind noch mehr als rar. Vermisst werden u.a.:
- Beschattung mit unidirektionale Aktoren mit Steuerung per Tasteremulation (u.a. Peha-Aktoren)
- Fenster-/Türüberwachung
- Dimmer(-szenen)
Wenn ihr so etwas habt, immer her damit. Aber auch anderes gerne...

Ein (großes) Dankeschön an:
Peter (Ph1959de) für die schnelle und unermüdliche Hilfe bei der Wikibearbeitung sowie die Einbindung von EnOcan in die Wiki-Hauptseite
Und natürlich: klaus.schauer der nach Rudis Vorarbeit die EnOcean-Module unermüdlich erweitert und verbessert

Gruß, Christian

HINWEIS aus aktuellem Anlass: Ihr könnt auch gerne selbst Eure Ergebnisse/Änderungen im Wiki in begonnene und neue Seiten einpflegen. Das ist nicht MEINE alleinige Spielwiese und ich bin niemanden böse, wenn er von mir begonne Artikel ändert.  ;)

lrosebrock

So, dann will ich mal was zurückgeben:

gegeben sind folgende Fenstergriffe:
http://www.hoppe.com/de/de/fenstergriffe/hoppe-innovationen/secu100-secustik

gelöst habe ich das wie folgt:



### Küchenfenster links ###
define Kuechenfenster_links EnOcean xxxxxxxx
attr Kuechenfenster_links IODev TCM310_0
attr Kuechenfenster_links devStateIcon closed:fts_window_2w open:fts_window_2w_open_l tilted:fts_window_2w_tilt_l open_from_tilted:fts_window_2w_open_l
attr Kuechenfenster_links room EnOcean,Küche,Fenster
attr Kuechenfenster_links subType switch
define FileLog_Kuechenfenster_links FileLog ./log/EnO_switch_Kuechenfenster_links-%Y.log Kuechenfenster_links
attr FileLog_Kuechenfenster_links logtype text
attr FileLog_Kuechenfenster_links room EnOcean


Anmerkung:
Meine GöGa fand bei Fensterflügeln jeweils ein Bild pro Flügel übersichtlicher, daher habe ich auf eine Verknüpfung der beiden Fensterflügel in ein Bild verzichtet.

Christian, fehlt noch was an Info´s ? Ist schon wieder spät .... 8)

krikan

Hallo Lars,
bin begeistert; Du bist erst gerade hier aktiv und schon kommt Input. Hoffe, dass auch die "alten" Fhemler etwas liefern  ;).

Zu Deinem Code:
Mich wundert etwas der subType switch: eigentlich sollte das windowHandle oder windowHandle.10 sein!? Hast Du das per autocreate angelegt oder ist das ein Copy/Paste-Fehler?

Noch mal ein großes Danke, Christian


lrosebrock

Hallo Christian,

nur Geben und Nehmen ist nachhaltig ... und ich werde noch viele Fragen haben .....

Zu Deiner Frage - das Anlegen erfolgte mittels autocreate .

Gruß

Lars

krikan

Hallo Lars!

Zitatnur Geben und Nehmen ist nachhaltig ... und ich werde noch viele Fragen haben .....
Wenn das mal alle so sehen würden....

zum Thema: Habe mal aus meiner (zu) großen EnOcean-Grabbelkiste einen Hoppe-Secusignal-Fenstergriff  herausgesucht: Ja, du hast Recht; per autocreate wird tatsächlich ein subType switch für den Fenstergriff angelegt. Laut commandref sollte das aber subType windowHandle sein ("The device windowHandle or windowHandle.10 should be created by autocreate. "). Die Funktion in Fhem  ist aber dennoch gegeben.
@klaus.schauer: Könntest Du das mal bitte ansehen/erläutern und ggfs. Code bzw. commandref gerade ziehen. Würde das gerne richtig ins Wiki übernommen bzw. verstanden haben. Danke.

Gruß, Christian

buschmann88

Hallo

Ich bin noch sehr neu in der materie in FHEM und möchte gerne die Zustände des fenstergriffes an den KNX senden bekomme dieses leider aber nnicht zu stande könnte mir bitte einer helfen wo ich ansetzen muss

Danke im voraus

krikan

Könntest Du das bitte als separates Thema eröffnen, da dies nichts mit dem Wiki zu tuen hat. Wird sonst hier zu unübersichtlich
Bitte liefere auch noch ein paar mehr Informationen (http://www.fhemwiki.de/wiki/EnOcean_Starter_Guide#Welche_Infos_sollten_Anfragen_im_EnOcean-Forum_enthalten.3F), das hier gesagte ist ein bißchen knapp. Da kann man (ich) nur pauschal antworten.
Danke,
Christian

flurin

Hallo krikan,

Ich könnte ev. einen Beitrag leisten.
EnOcean-Produkte habe ich seit ca. 8 Jahren im Einsatz. Damals habe ich die Software dazu noch selbst in C# entwickelt inkl. EnOcean-Protokoll.
Zurzeit portiere ich mein altes System auf Fhem. Gateway USB 300, div. Switches, Temperatur-Sensoren, Magnetkontakt-Funkmudule und div. Aktoren, funktionieren bereits mit Fhem. Dazu habe ich noch ein Eltako FSM12-UC Funk-Sendemodul, das ich demnächst anbinden möchte. Hauptsächlich habe ich die Temperatur-Regelung mit konfigurierbaren Temperatur-Profilen für jeden Raum implementiert. Zusätzlich sind noch einfache Steuerfunktionen bereits umgesetzt.

Was wäre von Interesse?

Gruss
flurin

krikan

Hallo flurin,
nehmen würde ich alles, was Du zur Verfügung stellen magst. Gerne auch eine komplette Cfg mit Angaben zu den verwendeten Aktoren/Sensoren, die ich dann auseinanderpflücken könnte und Steuerungsfunktionen -soweit interessant- ins Wiki übernehmen kann. Kurze Hinweise zu den Steuerungsfunktionen, wären natürlich hilfreich.
Wenn ich damit -verständlicherweise- zu gierig bin ;), würde mich insbesondere die Temperatur-Regelung mit Steuerung interessieren. Wenn Du Dich mit Programmierung auskennst, würden Deine Ansätze sicherlich sehr hilfreich sein. Dinge, die für Dich selbstverständlich und "einfach" sind, hat der "simple" Anwender (ich) wahrscheinlich noch nie ansatzweise hinbekommen.
Freue mich über jegliche Infos.
Vielen Dank, Christian

krikan

@lrosebrock: Durch Deine Unterstützung ist eine erste Fassung der Wiki-Seite zum Fenstergriff entstanden: http://www.fhemwiki.de/wiki/EnOcean-SecuSignal-Fenstergriff. Danke und weiter so ;), Christian

flurin

Hier ist der erste Beitrag:

Einzelraum-Temperaturregelung

Es gibt unzählige Temperatur-Regelungen für Wohnräume, von einfachen Thermostaten bis zu ausgeklügelten Software-Lösungen.
Folgende Variante basiert auf FHEM und verwendet ausschliesslich EnOcean-Komponenten. Es handelt sich um einen ersten Entwurf und ist noch nicht endgültig (work-in-progress).

Begriffe:

Temperatur-Regelung (temperature control): 'Logik', um die Temperatur (in einem Raum) zu regeln
Istwert (sensor_temp) : gemessene Temperatur.
Sollwert (target_temp) : gewünschte Temperatur.
Sensor (sensor) : Gerät (Input) für die Erfassung des Istwertes (Temperatur).
Aktor (actuator) : Gerät (Output) um den Ventil-Stellantrieb zu steuern.
Profil (profile) : Ein Kurve, die den Sollwert im Verlauf des Tages liefert.
Offset (offset) : Ein Wert, der zum Sollwert dazugerechnet wird.

EnOcean Komponenten:

Gateway: USB 300
Sensoren: EnOcean STM 330, AWAG RTF, Thermokon SR04
Aktoren: PEHA, Easyclick, 4 Kanal-Reiheneinbaugerät Typ 454 FU-E REG, AWAG REG-Schaltaktor 8-Kanal, Typ REGS

Funktion:

Bei jedem Empfang eines Temperaturwertes (ca. alle 15 min) wird der Sollwert für die Raumtemperatur in Abhängigkeit eines Temperatur-Profils berechnet und den Offset dazugerechnet (der Wert kann auch negativ sein). Der Istwert wird mit dem Sollwert verglichen, um den Aktor zu steuern (Ventil auf oder zu). Es handelt sich also um eine einfache Ein/Aus-Regelung, die im Wohnbereich ausreichend ist, da die Temperatur-Veränderung insbesondere bei einer Bodenheizung träge ist.

Wie aus dem Bild im Anhang ersichtlich ist (leider ist es jetzt Sommer und die Ist-Temperatur ist entsprechend höher als im Winter), ändert sich der Sollwert teilweise linear also nicht sprunghaft.
Der Stellantrieb (Ventil) für die Heizung (Fussbodenkreis, Heizkörper) wird dadurch in Abhängigkeit von der Nachttemperatur früher oder später eingeschaltet. Damit wird die gewünschte Temperatur zu einer bestimmten Zeit erreicht. Wenn es in der Nacht sehr kalt ist, dann wird der Stellantrieb entsprechend früher eingeschaltet.

Subroutinen in 99_myUtils.pm:

{ #namespace Heating_Control

# room-settigs:
# key=room_name
# values = sensor, profile, offset, actuator
my %home = ();

# argument: room_name
# return value: target_temp
sub get_Target_Temp($)
{
  my ($room) =@_;
  my $target_temp;
 
  if (exists($home{$room})) {
    my @def = @{$home{$room}};
    my $profile_str = $def[1];
    my $offset = $def[2];
    $target_temp = calc_Target_Temp($profile_str) + $offset;
  } else {
    $target_temp = "room undefined";
  }
  return $target_temp;
}

# argument: room_name
# return value: offset
sub get_Offset($)
{
  my ($room) =@_;
  my $offset;
 
  if (exists($home{$room})) {
    my @def = @{$home{$room}};
    $offset = $def[2];
  } else {
    $offset = "room undefined";
  }
  return $offset;
}

# arguments: room_name,sensor,profile, offset, actuator
# return value: none
sub set_Heating_Control($$$$$)
{
  my ($room, @def) = @_;
  $home{$room} = \@def;
 
  Log(3, "set_Heating_Control: room = $room");
 
  #todo: error handling
 
  #my @hdef = @{ $home{$room}};
  #my $sensor = $hdef[0]; my $profile = $hdef[1];my $offset = $hdef[2];my $actuator = $hdef[3];
  #Log (3,"$sensor $profile $offset $actuator");
}

# arguments: none
# return value: none
sub Heating_Control()
{
  my $state = Value("heating_control");
  Log (3,"Heating_Control $state");

  if (Value("heating_control") eq "on") {
    for my $room (keys %home) {
      Temp_Control($room);
    }
  }
  #todo error handling
}

# arguments: room_name
# return value: target_temp
sub Temp_Control($)
{
  return if (Value("heating_control") eq "off");
 
  my ($room) = @_;
  my $target_temp;
 
  if (exists($home{$room})) {
    my @def = @{$home{$room}};
 
    my $sensor = $def[0];
    my $profile_str = $def[1];
    my $offset = $def[2];
    my $actuator = $def[3];
 
    my $sensor_temp = Value($sensor);
    $target_temp = calc_Target_Temp($profile_str) + $offset;

    #Log(3,"sensor_temp = $sensor_temp, target_temp = $target_temp");
 
    if ($sensor_temp > $target_temp) {
      fhem ("set $actuator off");
    } else {
      fhem ("set $actuator on");
    }
  } else {
    $target_temp = "room undefined";
  }
  #to do: error handling
  return $target_temp;
}

} # end namespace Heating_Control


# arguments: profile
# return value: target_temp
sub calc_Target_Temp($)
{
  my ($profile_str) = @_;
  my @profile = split(' ', $profile_str);
     
  my $prior_time = 0;
  my $prior_temp = 0;
  my $point_time;
  my $point_temp;
  my $target_temp;
  my @set_point;
 
  my @now = localtime;
  my $actual_time = $now[1] + $now[2]*60; # value in minutes
 
  foreach my $item (@profile) {
    @set_point = split('=', $item);   
    my @time = split(':', $set_point[0]);
    $point_time = $time[0]*60 + $time[1]; # value in minutes
    $point_temp = $set_point[1];
   
    if ($actual_time < $point_time) {
      $target_temp = $prior_temp + (($actual_time - $prior_time) * ($point_temp - $prior_temp) / ($point_time - $prior_time));
      last;
    }
    $prior_time = $point_time;
    $prior_temp = $point_temp;
  }
  $target_temp = sprintf("%.1f", $target_temp);
  # Log(3, $actual_time . " " . $target_temp);
  #todo error handling
  return $target_temp;
}


fhem.cfg Einträge (Beispiel für 2 Räume: dining, office):

# temp_dining
define temp_dining EnOcean 00003727
attr temp_dining IODev TCM310_FTUS8GG2
attr temp_dining group Temp
attr temp_dining room EnOcean,Testing
attr temp_dining subType tempSensor.05
attr temp_dining userReadings target_temp {get_Target_Temp("dining")}

define FileLog_temp_dining FileLog ./log/temp_dining-%Y.log temp_dining:temperature.*
attr FileLog_temp_dining logtype text
attr FileLog_temp_dining room EnOcean
define SVG_FileLog_temp_dining_1 SVG FileLog_temp_dining:SVG_FileLog_temp_dining_1:CURRENT
attr SVG_FileLog_temp_dining_1 label int($data{min1}-0.3)::$data{max1}+0.5
attr SVG_FileLog_temp_dining_1 room Ground_Floor
attr SVG_FileLog_temp_dining_1 title sprintf("Dining: actual %s °C target %s °C at %s",$data{currval1},ReadingsVal("temp_dining","target_temp","?"),substr($data{currdate1},11,5))

# temp_office
define temp_office EnOcean 0082CF95
attr temp_office IODev TCM310_FTUS8GG2
attr temp_office group Temp
attr temp_office room EnOcean,First_Floor,Testing
attr temp_office subType tempSensor.05
attr temp_office userReadings target_temp {get_Target_Temp("office")}

define FileLog_temp_office FileLog ./log/temp_office-%Y.log temp_office:temperature:.*
attr FileLog_temp_office logtype text
attr FileLog_temp_office room EnOcean
define SVG_FileLog_temp_office_1 SVG FileLog_temp_office:SVG_FileLog_temp_office_1:CURRENT
attr SVG_FileLog_temp_office_1 label int($data{min1}-0.3)::$data{max1}+0.5
attr SVG_FileLog_temp_office_1 room First_Floor
attr SVG_FileLog_temp_office_1 title sprintf("Office: actual %s °C target %s °C at %s",$data{currval1},ReadingsVal("temp_office","target_temp","?"),substr($data{currdate1},11,5),)

# dining_heating
define dining_heating EnOcean FFFFEF84
attr dining_heating IODev TCM310_FTUS8GG2
attr dining_heating eventMap AI:on A0:off
attr dining_heating group Actuator
attr dining_heating icon sani_floor_heating
attr dining_heating room Floor_Heating,EnOcean
attr dining_heating subType switch

# office_heating
define office_heating EnOcean FFFFEF87
attr office_heating IODev TCM310_FTUS8GG2
attr office_heating eventMap AI:on A0:off
attr office_heating group Actuator
attr office_heating icon sani_floor_heating
attr office_heating room EnOcean,Floor_Heating
attr office_heating subType switch

# macro to store the values in a hash
define set_hc notify set_hc {\
set_Heating_Control('dining','temp_dining','00:00=18.0 04:00=18.0 09:00=19.5 18:00=19.5 19:00=18.0 24:00=18.0','-0.5','dining_heating');; \
set_Heating_Control('office','temp_office','00:00=18.0 04:00=18.0 08:00=20.5 18:00=20.5 19:00=18.0 24:00=18.0','1.0','office_heating');; \
}
attr set_hc group Macro
attr set_hc room Testing

# notify dining
define n_hc_dining notify temp_dining:temperature.* { Temp_Control("dining") }
attr n_hc_dining group Notify

#notify office
define n_hc_office notify temp_office:temperature.* { my $temp = Temp_Control("office") }
attr n_hc_office group Notify

# dummy to switch-on heating control (main-switch)
define heating_control dummy
attr heating_control group Control
attr heating_control icon sani_heating_automatic
attr heating_control room Control
attr heating_control setList on off

# notify heating control
define n_heating_control notify heating_control { Heating_Control() }
attr n_heating_control group Notify

# trigger set_hc at start or fhem.cfg reread
define n_init_fhem notify global:(INITIALIZED|REREADCFG) { fhem("trigger set_hc")}
attr n_init_fhem group Notify
attr n_init_fhem room Testing


Ich hoffe, dass es einigermassen verständlich ist, sonst einfach fragen.

Gruss
flurin

krikan

Hallo flurin.
KLASSE!
Schaue ich mir in Ruhe durch. Also bitte nicht wundern, wenn ich einige Zeit brauche. Überlege derzeit auch separate EnOcean-Wiki-Bereiche für komplexer Einsatzbeispiele aufzuziehen. Mal schauen.
Immerhin habe ich schon einmal dank Internet herausgefunden, dass AWAG der Nachfolgher von Omnio ist.
Danke flurin, Christian

PS: Eine Bitte an alle Anderen: Auch einfache Beispiele sind weiterhin gesucht....

lrosebrock

Hallo Christian,

falls Du Produktphotos für den WIKI-Eintrag brauchst - ich hab hier noch einen Ersatzgriff - den könnte ich (zerlegt und/oder zusammengebaut) , mal photographieren und die Bilder zur Verfügung stellen

krikan

@lrosebrock: Hallo Lars, klar nehmen wir/ich Fotos. Zur Schande muss ich gestehen, dass ich selbst noch nie ein Foto ins Wiki eingebunden habe; um Fotos hat sich 50watt gekümmert. Aber irgendwie wirds schon klappen, kannst es gerne anhängen. Gruß, Christian

lrosebrock

Hallo Christian, mache ich bei Gelegenheit - hier nun der 2. Beitrag, wie im Fred "Anfängerfragen" angekündigt :

Steuerung Licht mittels Bewegungsmelder, in Abhängigkeit von der Helligkeit

Eingesetzte Komponenten:

Anforderungsprofil:

Geschaltet werden soll:
- Licht Grillschuppen per Taster und FHEM
- Ambilight Boden per Taster und FHEM
- Licht und Ambilight bei Bewegung ab einem Restlicht von ca. 70 Lux
- das "Bewegungslicht" soll manuell deaktivierbar sein, um selber im Garten sitzen zu können

Code:

Erstellen / Einlernen des PTM 210:


### Garten Schalter 2 Grillschuppen / Bodenbeleuchtung
###### physikalischer Schalter 2 ######
define 4TG2 EnOcean 00000000
attr 4TG2 IODev TCM310_0
attr 4TG2 room EnOcean
attr 4TG2 subType switch
define TG2_A dummy
attr TG2_A eventMap AI:on A0:off
attr TG2_A room EnOcean
define TG2_B dummy
attr TG2_B eventMap BI:on B0:off
attr TG2_B fp_Garten 50,200,1,
attr TG2_B room EnOcean
define FileLog_4TG2 FileLog ./log/EnO_switch_00000000-%Y.log EnO_switch_00000000
attr FileLog_4TG2 logtype text
attr FileLog_4TG2 room EnOcean

###### physikalischer Schalter Bewegungsmelder ######
define 4TG3 EnOcean 00000000
attr 4TG3 IODev TCM310_0
attr 4TG3 room EnOcean
attr 4TG3 subType switch
define TG3_B dummy
attr TG3_B eventMap BI:on B0:off
attr TG3_B room EnOcean
define FileLog_4TG3 FileLog ./log/EnO_switch_4TG3-%Y.log 4TG3
attr FileLog_4TG3 logtype text
attr FileLog_4TG3 room EnOcean

Erstellen / Anlernvorgang Bewegungsmelder:



define BM_Garten EnOcean 00001111
attr BM_Garten IODev TCM310_0
attr BM_Garten manufID 001
attr BM_Garten room EnOcean,Garten
attr BM_Garten subType lightTempOccupSensor.01
define FileLog_BM_Garten FileLog ./log/BM_Garten-%Y.log BM_Garten
attr FileLog_BM_Garten logtype text
attr FileLog_BM_Garten room EnOcean


Erstellen der "virtuellen" FHEM-Schalter


#Definition des Fhem Schalters Garten 2 links =====  FFFFFFFF  ======
define fh_garten02_li EnOcean FFFFFF
attr fh_garten02_li IODev TCM310_0
attr fh_garten02_li eventMap BI:on B0:off
attr fh_garten02_li icon icoBELEUCHTUNG.png
attr fh_garten02_li room EnOcean
attr fh_garten02_li subType switch

#Definition des Fhem Schalters Garten 2 rechts =====  FFFFFFFF +1  ======
define fh_garten02_re EnOcean FFFFFFFF+1
attr fh_garten02_re IODev TCM310_0
attr fh_garten02_re eventMap AI:on A0:off
attr fh_garten02_re icon icoBELEUCHTUNG.png
attr fh_garten02_re room EnOcean
attr fh_garten02_re subType switch

#Definition des Fhem Schalters Garten 3 links =====  FFFFFFFF+2  ======
define fh_garten03_li EnOcean  FFFFFFFF+2
attr fh_garten03_li IODev TCM310_0
attr fh_garten03_li eventMap BI:on B0:off
attr fh_garten03_li icon icoBELEUCHTUNG.png
attr fh_garten03_li room EnOcean
attr fh_garten03_li subType switch




Koppelung physikalische / "virtuelle" Taster bei unidirektionalen EnOcean-Komponenten siehe http://www.fhemwiki.de/wiki/EnOcean_Starter_Guide#Physischer_EnOcean-_und_virtueller_Fhem-Schalter_zu_einem_Device_zusammenfassen:

### Kopplung Schalter phy und fhem ########
define Ambilight structure room fh_garten02_re TG2_A
attr Ambilight clientstate_behavior last
attr Ambilight eventMap AI:on A0:off
attr Ambilight room EnOcean,Garten

### Kopplung Schalter phy und fhem ########
define Grillschuppen structure room fh_garten02_li TG2_B
attr Grillschuppen clientstate_behavior last
attr Grillschuppen eventMap BI:on B0:off
attr Grillschuppen room EnOcean,Garten

### Kopplung Schalter phy und fhem ########
define Bewegungsmelder structure room fh_garten03_li TG3_B
attr Bewegungsmelder clientstate_behavior last
attr Bewegungsmelder eventMap BI:on B0:off
attr Bewegungsmelder room EnOcean,Garten


Notifys:

##### für jeweilige Structure ##########
define n_A2 notify 4TG2:.*A.* { fhem("set TG2_A ".($EVENT=~m/AI/ ? "on" : "off")) }
define n_B2 notify 4TG2:.*B.* { fhem("set TG2_B ".($EVENT=~m/BI/ ? "on" : "off")) }
define n_B3 notify 4TG3:.*B.* { fhem("set TG3_B ".($EVENT=~m/BI/ ? "on" : "off")) }


### Bewegung einschalten bei Dunkelheit #####
define chk_lux notify (BM_Garten:brightness:.*) {if (ReadingsVal("BM_Garten","brightness",1) < 70){fhem "set Bewegungsmelder on"}}
#### Licht Schalten bei Bewegung
define mv_garten notify (BM_Garten:motion:.on) {if (Value("Bewegungsmelder")eq "on"){fhem "set Grillschuppen on-for-timer 120"}}
##### Bewegung ausschalten bei Helligkeit #####
define chk_lux2 notify (BM_Garten:brightness:.*) {if (ReadingsVal("BM_Garten","brightness",1)> 75) {fhem "set Bewegungsmelder off"}}


Gruß

Lars