Home-Easy Dimmer mit fiktiver Leistungsmessung und Dimlevel-Wiederherstellung

Begonnen von drdownload, 27 Januar 2016, 20:21:42

Vorheriges Thema - Nächstes Thema

drdownload

Basierend auf diesem initalialen Thread zur Erweiterung dass in Smartvisu das DimLevel stimmt nach ein- und ausschalten habe ich jetzt für die Home-Easy Devices mit einem Notify auch eine virtuelle Strom-Messung dazugebaut.

Wenn man das userattr powerMax gesetzt hat wird der aus dem Dim-Level die aktuelle Leistung in W und bei einer Änderung des Levels wird der Verbrauch für die letzte Zeitperiode in kWh berechnet.

Zuerst wollte ich es über Userreadings machen aber das hatte ich sowohl Probleme mit der Reihenfolge der Berechung als auch dass es sich mit dem Statistik-Modul in die Haare kommt.
Auch das EMonitor Modul kenne, aber das ist mit den Dimmern nicht wirklich klargekommen und hat mehr als einmal mein FHEM zerschossen (und konnte zu viel mit den readinggroups etc - habe dann vor einem Jahr damit aufgegeben)

Bin offen für Verbesserungsvorschläge.

{if ($TYPE eq "TRX_LIGHT")
{
  my $timeEnd = str2time(TimeNow());
  my $timeStart =str2time(ReadingsTimestamp("$NAME","powerLevel",0));
  my $timeElapsed= $timeEnd - $timeStart;
  my $powerConsumption = ReadingsVal("$NAME","power",0)*$timeElapsed/3600000;
  if ($EVENT eq "off") {
    fhem ("setreading $NAME switchState $EVENT");
    fhem ("setreading $NAME level 0");
    fhem ("setreading $NAME powerLevel 0");
  }
  elsif ($EVENT eq "on"){
    my $levelLastValue = ReadingsVal("$NAME","levelLast",0);
    my $powerLevel = $levelLastValue * (100/15);
    fhem ("setreading $NAME switchState $EVENT");
    fhem ("setreading $NAME level $levelLastValue");
    fhem ("setreading $NAME powerLevel $powerLevel");
  }
  elsif ($EVENT =~ /level/){
    my $levelValue = $EVENT;
    $levelValue =~ s/[^0-9]//g;

    if ($levelValue >0)
       {fhem ("setreading $NAME switchState on");}
    else
       {fhem ("setreading $NAME switchState off");}

    my $powerLevel = $levelValue * (100/15);
    fhem ("setreading $NAME level $levelValue");
    fhem ("setreading $NAME levelLast $levelValue");
    fhem ("setreading $NAME powerLevel $powerLevel");
  }
  my $power = ReadingsVal("$NAME","powerLevel",0)*AttrVal("$NAME","powerMax",0)/100;
  fhem ("setreading $NAME power $power");
  fhem ("setreading $NAME powerConsumption $powerConsumption");
}
}


level 0
levelLast 15
power 0
powerConsumption 0.214722222222222
powerLevel 0
state level 9
switchState off

CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

drdownload

Eine kleine Verbesserung weil manche HE Dimmer Level 0 nicht als off interpretieren sondern noch als 5% on. > bei Level 0 wird automatisch auf off gesetzt.#

Zitat{if ($TYPE eq "TRX_LIGHT")
{
  my $timeEnd = str2time(TimeNow());
  my $timeStart =str2time(ReadingsTimestamp("$NAME","powerLevel",0));
  my $timeElapsed= $timeEnd - $timeStart;
  my $powerConsumption = ReadingsVal("$NAME","power",0)*$timeElapsed/3600000;
  if ($EVENT eq "off") {
    fhem ("setreading $NAME switchState $EVENT");
    fhem ("setreading $NAME level 0");
    fhem ("setreading $NAME powerLevel 0");
  }
  elsif ($EVENT eq "on"){
    my $levelLastValue = ReadingsVal("$NAME","levelLast",0);
    my $powerLevel = $levelLastValue * (100/15);
    fhem ("setreading $NAME switchState $EVENT");
    fhem ("setreading $NAME level $levelLastValue");
    fhem ("setreading $NAME powerLevel $powerLevel");
  }
  elsif ($EVENT =~ /level/){
    my $levelValue = $EVENT;
    $levelValue =~ s/[^0-9]//g;

    if ($levelValue >0)
       {fhem ("setreading $NAME switchState on");}
    else
       {
       fhem ("setreading $NAME switchState off");
       fhem ("set $NAME off");
       }

    my $powerLevel = $levelValue * (100/15);
    fhem ("setreading $NAME level $levelValue");
    fhem ("setreading $NAME levelLast $levelValue");
    fhem ("setreading $NAME powerLevel $powerLevel");
  }
  my $power = ReadingsVal("$NAME","powerLevel",0)*AttrVal("$NAME","powerMax",0)/100;
  fhem ("setreading $NAME power $power");
  fhem ("setreading $NAME powerConsumption $powerConsumption");
}
}
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

Willi

Hört sich interessant an. Was hast Du alles am 46_TRX_LIGHT.pm geändert? Wenn Du mir einen Diff schickst bzw. die komplette Version, schaue ich mir das an und packe es ins SVN, wenn nichts dagegen spricht.

Grüße

Willi
FHEM@Q600(debian) mit DS9490R (1Wire) | FHEM@Sheevaplug(debian) mit RFXCOM-Receiver(80002), CULv3 & USB-WDE1 | FHEM@odroid mit CULv2 & RFXtrx433

drdownload

Ich habe das als Notify laufen, an den Modulen selber habe ich gar nichts geändert

edit: hier die aktuelle Version (die nicht nur die smartvisu darstellung korrigiert sondern auch das dimlevel wirklich wiederherstellt ;) )

Ist alles zusammen sehr inprovisiert für meine Verhältnisse (sprich wiederstellen des Dim-Levels + einen virtuellen Verbrauch ausrechnen)

{if ($TYPE eq "TRX_LIGHT")
{
  my $timeEnd = str2time(TimeNow());
  my $timeStart =str2time(ReadingsTimestamp("$NAME","powerLevel",0));
  my $timeElapsed= $timeEnd - $timeStart;
  my $powerConsumption = ReadingsVal("$NAME","power",0)*$timeElapsed/3600000;
  if ($EVENT eq "off") {
    fhem ("setreading $NAME switchState $EVENT");
    fhem ("setreading $NAME level 0");
    fhem ("setreading $NAME powerLevel 0");
  }
  elsif ($EVENT eq "on"){
    my $levelLastValue = ReadingsVal("$NAME","levelLast",0);
    my $powerLevel = $levelLastValue * (100/15);
    fhem ("setreading $NAME switchState $EVENT");
    fhem ("setreading $NAME level $levelLastValue");
    fhem ("setreading $NAME powerLevel $powerLevel");
    fhem ("set $NAME level $levelLastValue");
  }
  elsif ($EVENT =~ /level/){
    my $levelValue = $EVENT;
    $levelValue =~ s/[^0-9]//g;

    if ($levelValue >0)
       {fhem ("setreading $NAME switchState on");}
    else
       {
       fhem ("setreading $NAME switchState off");
       fhem ("set $NAME off");
       }

    my $powerLevel = $levelValue * (100/15);
    fhem ("setreading $NAME level $levelValue");
    fhem ("setreading $NAME levelLast $levelValue");
    fhem ("setreading $NAME powerLevel $powerLevel");
  }
  my $power = ReadingsVal("$NAME","powerLevel",0)*AttrVal("$NAME","powerMax",0)/100;
  fhem ("setreading $NAME power $power");
  fhem ("setreading $NAME powerConsumption $powerConsumption");
}
}
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

drdownload

Aber wenn du dafür offen bist schaue ich mir gerne das modul an ob ich die dimlevel sachen einbauen kann.
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,