neues Modul 98_powerMap

Begonnen von igami, 19 Dezember 2016, 05:36:36

Vorheriges Thema - Nächstes Thema

nils_

Zitat von: Eisix am 06 September 2017, 10:39:46
Hallo,

zur Info:

bei Verwendung von readingsProxy muss event-on-update-reading auf 1 gesetzt werden damit es funktioniert.

Gruß
Eisix

sicher??
https://fhem.de/commandref.html#readingFnAttributes
viele Wege in FHEM es gibt!

Eisix

Hallo,

Vielleicht etwas falsch ausgedrückt. event-on-update-reading wird ohne Parameter zugefügt und dann von fhem auf 1 gesetzt.
Was im Endeffekt zu dem in der von dir verlinkten Doku zu Punkt 1. führt. Also wird bei jeder Änderung eines readings ein Event generiert.

event-on-change-reading      state

sollte aber auch funktionieren da hier nur bei state ein event generiert. Sofern man auf state filtert.

Ich bin sicher das es bei mir danach funktioniert hat. Mehr kann ich dazu nicht sagen.

Gruß
Eisix

spaceboy

#92
Zitat von: TheTrumpeter am 02 Mai 2017, 07:07:23
Einzig im Filelog habe ich die Readings nicht regelmässig drin, sondern nur sporadisch. Hängt das damit zusammen?

Sorry to write in english, but I'm facing the same issue that the pM_energy and pM_consumption are updated for the device and I see the events generated in event monitor, but the FileLog doesn't capture these every time, only sporadically. It looks like these events are logged only first time after restart or something like that. I'm using powerMap with EnOcean devices from Eltako.

Thanks for help!

Petr

Amenophis86

Are you sure you are not working with attributes like event-on-change-reading/update?? If you see the event in the event Monitor the logfile should log it. Post a list of the device and the log file device.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

spaceboy

@Amenophis86: I'm pretty sure, here are the relevant devices:


define EnO_FFEB0424 EnOcean FFEB0424
attr EnO_FFEB0424 IODev TCM_ESP3_0
attr EnO_FFEB0424 comMode confirm
attr EnO_FFEB0424 eep A5-38-08
attr EnO_FFEB0424 gwCmd switching
attr EnO_FFEB0424 manufID 00D
attr EnO_FFEB0424 powerMap {'state' => {'off' => 0,'on' => 320}}
attr EnO_FFEB0424 subDef XXXXXXXX
attr EnO_FFEB0424 subType gateway
attr EnO_FFEB0424 switchMode switch
attr EnO_FFEB0424 verbose 5

setstate EnO_FFEB0424 on
setstate EnO_FFEB0424 2017-11-15 13:49:47 pM_consumption 320
setstate EnO_FFEB0424 2017-11-15 13:49:47 pM_energy 30615.3000000003
setstate EnO_FFEB0424 2017-08-31 19:29:42 pM_energy_begin 1504200582.10656
setstate EnO_FFEB0424 2017-11-15 13:49:47 state on

define FileLog_EnO_FFEB0424 FileLog ./log/EnO_FFEB0424-%Y.log EnO_FFEB0424
attr FileLog_EnO_FFEB0424 logtype text

setstate FileLog_EnO_FFEB0424 active
setstate FileLog_EnO_FFEB0424 2017-11-15 13:49:47 linesInTheFile 12684


and this what I get in the logfile

2017-11-15_11:25:47 EnO_FFEB0424 off
2017-11-15_12:04:44 EnO_FFEB0424 block: unlock
2017-11-15_12:04:46 EnO_FFEB0424 on
2017-11-15_12:07:44 EnO_FFEB0424 block: unlock
2017-11-15_12:07:46 EnO_FFEB0424 on
2017-11-15_12:10:44 EnO_FFEB0424 block: unlock
2017-11-15_12:10:47 EnO_FFEB0424 off
2017-11-15_12:49:45 EnO_FFEB0424 block: unlock
2017-11-15_12:49:46 EnO_FFEB0424 on
2017-11-15_12:52:45 EnO_FFEB0424 block: unlock
2017-11-15_12:52:47 EnO_FFEB0424 on
2017-11-15_12:55:45 EnO_FFEB0424 block: unlock
2017-11-15_12:55:48 EnO_FFEB0424 on
2017-11-15_12:58:45 EnO_FFEB0424 block: unlock
2017-11-15_12:58:47 EnO_FFEB0424 off
2017-11-15_13:49:46 EnO_FFEB0424 block: unlock
2017-11-15_13:49:47 EnO_FFEB0424 on
2017-11-15_13:52:46 EnO_FFEB0424 block: unlock
2017-11-15_13:52:48 EnO_FFEB0424 on


There are few lines with pM_energy, last one is

2017-11-14_19:53:13 EnO_FFEB0424 pM_energy: 29773.9666666669


I found that this line occurs when I modify the powerMap attribute (by adding a space or just clicking the attr button)

Is there anything else I can do to help to debug this?

Thanks for help!

Petr

Amenophis86

I dont know powermap this much but you are right the Events are coming as on and off. I think the problem is the change from on/off to the value. This event is not happening. How you get this to happen I dont know.

And try working with list <device> not with the raw-definition. With list you can Show others more Information.
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

spaceboy

Just FTR, here are the non-raw definitions. Thanks everyone for help!

Internals:
   DEF        FFEB0424
   IODev      TCM_ESP3_0
   LASTInputDev TCM_ESP3_0
   MSGCNT     210
   NAME       EnO_FFEB0424
   NR         640
   NTFY_ORDER 50-EnO_FFEB0424
   STATE      off
   TCM_ESP3_0_DestinationID FFFFFFFF
   TCM_ESP3_0_MSGCNT 210
   TCM_ESP3_0_PacketType 1
   TCM_ESP3_0_RSSI -49
   TCM_ESP3_0_ReceivingQuality excellent
   TCM_ESP3_0_RepeatingCounter 0
   TCM_ESP3_0_SubTelNum 3
   TCM_ESP3_0_TIME 2017-11-16 09:34:55
   TYPE       EnOcean
   READINGS:
     2017-11-16 09:34:54   block           unlock
     2017-11-16 09:34:55   pM_consumption  0
     2017-11-16 09:34:55   pM_energy       31567.3888888891
     2017-08-31 19:29:42   pM_energy_begin 1504200582.10656
     2017-11-16 09:34:55   state           off
     2017-01-17 17:00:18   teach           4BS teach-in sent
   helper:
   powerMap:
     map:
       state:
         off        0
         on         320
     map.module:
       state:
         off        0
         on         320
   readingsDesc:
     pM_consumption:
       rtype      w
     pM_energy:
       rtype      whr
Attributes:
   IODev      TCM_ESP3_0
   comMode    confirm
   eep        A5-38-08
   gwCmd      switching
   manufID    00D
   powerMap   {'state' => {'off' => 0,'on' => 320}}
   room       EnOcean,1NP koupelna,PWM
   subDef     XXXXXXXX
   subType    gateway
   switchMode switch



Internals:
   DEF        ./log/EnO_FFEB0424-%Y.log EnO_FFEB0424
   NAME       FileLog_EnO_FFEB0424
   NOTIFYDEV  EnO_FFEB0424
   NR         641
   NTFY_ORDER 50-FileLog_EnO_FFEB0424
   REGEXP     EnO_FFEB0424
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/EnO_FFEB0424-2017.log
   logfile    ./log/EnO_FFEB0424-%Y.log
   READINGS:
     2017-11-16 09:34:55   linesInTheFile  12840
Attributes:
   logtype    text
   room       EnOcean

Eisix

Hallo,

ich nutze powerMap zusammen mit Homemode. Dabei ist mir ein Problem aufgefallen. Das energie reading wird bei powerMap in Wh auf summiert während meine Fibaro Zwischenstecker und Homemode in kWh summieren. Gibt es eine Möglichkeit das über powerMap attribut zu beinflussen oder geht das nur über z.B. userreading?

Gruß
Eisix

Wolle02

#98
Hallo zusammen,

ich habe gerade PowerMap bei mir implementiert. Grundsätzlich funktioniert alles sehr gut; auch in Zusammenarbeit mit dem ElectricityCalculator.
Bei der Implementierung eines Lichts, das über einen FS20 Zwischenstecker geschaltet wird, bin ich jetzt allerdings auf ein Problem gestoßen. Der FS20 Zwischenstecker kann direkt über einen FS20 vier-Kanal Aufputzschalter geschaltet werden und natürlich über Fhem.
Beim Schalten über Fhem werden direkt 'on' und 'off' Events gesendet; in sofern kein Problem.
Beim Schalten über den 4-Kanal Schalter werden jedoch toggle-Events gesendet, da 3 Kanäle bereits belegt sind. Im 'state' des Zwischenstecker-Device steht also 'toggle'. Das führt dazu, dass PowerMap das Reading  'pM_consumption' auf 0 stellt, da es ja nicht weiß, ob die Lampe nun an oder aus ist. Im PowerMap-Attribut kann ich 'toggle' ja keinen bestimmten Wert zuweisen.

Ich bin nun den Weg gegangen das 'toggle' über die in Fhem eingebaute Funktion UntoggleDirect aufzulösen, so dass nun ein 'on' oder 'off'übermittelt wird. Das funktioniert soweit auch, nur leider wird das 'on' und 'off' nicht in das Reading 'state' geschrieben, sondern in das Internal 'STATE'.
Dieses Internal kann ich aber scheinbar im PowerMap Attribut nicht abfragen.

Gibt es irgendeine Möglichkeit dieses Internal abzufragen oder könnte man das eventuell einbauen?

Beste Grüße und schonmal einen guten Rutsch.
Wolle

albundy118

Hallo,
ich habe bei mir auch mal angefangen für einige Devices powerMap zu benutzen und leider habe ich scheinbar wie auch andere das Problem dass nicht alle geloggt bzw. an ElectricityCalc weitergereicht werden.
Folgende Module mit unterschiedlichen Ergebnissen habe ich einer PowerMap zugeordnet:

Dummy - funzt problemlos im PM update intervall, also Daten kommen bei ElectricityCalc an
Presence - PM_energy reading wird aktualisiert, häufiger als PM intervall, auch sichtbar im EventMonitor, aber keine Daten kommen im ElectricityCalc an. Ausser fhem restart oder set powermap assign <device> scheint ein update zu triggern. DBlog wird auch nicht eingetragen obwohl im event Monitor sichtbar.
FirtzBox - identisch mit Presence
pilight_switch - identisch mit Presence

fhem> list powermap
Internals:
   .DbLog_splitFn Unit_DbLog_split
   INTERVAL   900
   NAME       powermap
   NR         401
   NTFY_ORDER 50-powermap
   STATE      Last device: host.tv_sz
   TYPE       powerMap
   READINGS:
     2018-01-05 22:48:16   state           Last device: host.tv_sz
   powerMap:
   readingsDesc:
     pM_consumption:
       rtype      w
     pM_energy:
       rtype      whr
Attributes:
   room       x_Einstellungen


Dummy welches einwandfrei funzt:
fhem> list wohnzimmer.beamer
Internals:
   .DbLog_splitFn Unit_DbLog_split
   NAME       wohnzimmer.beamer
   NR         392
   STATE      aus
   TYPE       dummy
   pM_interval 900
   pM_update  2018-01-05 22:58:59
   READINGS:
     2018-01-05 00:23:18   pM_consumption  0.5
     2018-01-05 22:43:59   pM_energy       26.0023333333334
     2018-01-05 00:03:49   pM_energy_begin 1515107029.48726
     2018-01-05 00:23:18   state           aus
   powerMap:
     map:
       state:
         an         280
         aus        0.5
     map.module:
       state:
         an         280
         aus        0.5
   readingsDesc:
     pM_consumption:
       rtype      w
     pM_energy:
       rtype      whr
Attributes:
   alias      Beamer
   group      Media
   icon       scene_cinema
   powerMap   {
  'state' => {
               'an' => 280,
               'aus' => '0.5'
             }
}

   room       Wohnzimmer
   setList    an aus


Presence Module mit problem:
fhem> list host.tv_sz
Internals:
   .DbLog_splitFn Unit_DbLog_split
   ADDRESS    tv-sz
   DEF        lan-ping tv-sz 30 10
   MODE       lan-ping
   NAME       host.tv_sz
   NOTIFYDEV  global
   NR         17
   NTFY_ORDER 50-host.tv_sz
   STATE      present
   TIMEOUT_NORMAL 30
   TIMEOUT_PRESENT 10
   TYPE       PRESENCE
   pM_interval 900
   pM_update  2018-01-05 23:04:33
   READINGS:
     2018-01-05 22:49:33   .absenceThresholdCounter 0
     2018-01-05 22:49:33   .presenceThresholdCounter 0
     2018-01-05 16:28:15   model           lan-ping
     2018-01-05 22:49:33   pM_consumption  133
     2018-01-05 22:49:33   pM_energy       2291.74013888885
     2018-01-04 23:52:47   pM_energy_begin 1515106367.14131
     2018-01-05 22:49:33   presence        present
     2018-01-05 22:49:33   state           present
   helper:
     CURRENT_STATE present
     PRESENT_COUNT 0
   powerMap:
     map:
       state:
         absent     0.1
         present    133
   readingsDesc:
     pM_consumption:
       rtype      w
     pM_energy:
       rtype      whr
Attributes:
   absenceThreshold 3
   alias      TV Schlafzimmer
   devStateIcon present:rc_GREEN:on absent:rc_RED:off
   group      Media
   icon       it_television
   powerMap   {
  'presence' => {
               'absent' => '0.1',
               'present' => 133
             }
}

   room       Schlafzimmer



Hat irgendwer eine Idee was da schief läuft?

igami

Nach Absprache mit Loredo werde ich das powerMap Modul nun wieder betreuen.
Bitte gebt mir aber erst Zeit mich wieder zurecht zu finden.

Zitat von: Wolle02 am 28 Dezember 2017, 18:32:32
Hallo zusammen,

ich habe gerade PowerMap bei mir implementiert. Grundsätzlich funktioniert alles sehr gut; auch in Zusammenarbeit mit dem ElectricityCalculator.
Bei der Implementierung eines Lichts, das über einen FS20 Zwischenstecker geschaltet wird, bin ich jetzt allerdings auf ein Problem gestoßen. Der FS20 Zwischenstecker kann direkt über einen FS20 vier-Kanal Aufputzschalter geschaltet werden und natürlich über Fhem.
Beim Schalten über Fhem werden direkt 'on' und 'off' Events gesendet; in sofern kein Problem.
Beim Schalten über den 4-Kanal Schalter werden jedoch toggle-Events gesendet, da 3 Kanäle bereits belegt sind. Im 'state' des Zwischenstecker-Device steht also 'toggle'. Das führt dazu, dass PowerMap das Reading  'pM_consumption' auf 0 stellt, da es ja nicht weiß, ob die Lampe nun an oder aus ist. Im PowerMap-Attribut kann ich 'toggle' ja keinen bestimmten Wert zuweisen.

Ich bin nun den Weg gegangen das 'toggle' über die in Fhem eingebaute Funktion UntoggleDirect aufzulösen, so dass nun ein 'on' oder 'off'übermittelt wird. Das funktioniert soweit auch, nur leider wird das 'on' und 'off' nicht in das Reading 'state' geschrieben, sondern in das Internal 'STATE'.
Dieses Internal kann ich aber scheinbar im PowerMap Attribut nicht abfragen.

Gibt es irgendeine Möglichkeit dieses Internal abzufragen oder könnte man das eventuell einbauen?

Beste Grüße und schonmal einen guten Rutsch.
Wolle

Kannst du mal bitte Beschreiben wie du das mit dem untoggle genau gemacht hast (Link zur Anleitung sollte auch reichen)? Eventuell kann man das anpassen, dass das Reading aktualisiert wird anstelle von STATE.

Eine Abfrage auf Internals wird es nicht geben, das wäre ein Bekämpfen der Symptome, die Ursache, dass das Reading keine eindeutige Angabe macht ist dadurch aber nicht behoben.

Zitat von: albundy118 am 05 Januar 2018, 22:51:31
Hat irgendwer eine Idee was da schief läuft?
Dafür muss ich mich wieder einarbeiten, also bitte Geduld.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Wolle02

Hallo Michael,

schön, dass du dich kümmerst. Vielen Dank.

ZitatKannst du mal bitte Beschreiben wie du das mit dem untoggle genau gemacht hast (Link zur Anleitung sollte auch reichen)?

Die Untoggle-Funktionen (direct und indirect) sind fest von Rudi in Fhem eingebaute Funktionen und in der 99_Utils.pm zu finden.
Der Code für das UntoggleDirect sieht so aus:
######## UntoggleDirect ###########################################
# What  : For devices paired directly, converts state 'toggle' into 'on' or 'off'
# Call  : { UntoggleDirect("myDevice") }
#         define untoggle_myDevice notify myDevice { UntoggleDirect("myDevice") }
# Source: http://www.fhemwiki.de/wiki/FS20_Toggle_Events_auf_On/Off_umsetzen
sub UntoggleDirect($)
{
my ($obj) = shift;
Log 4, "UntoggleDirect($obj)";
if (Value($obj) eq "toggle"){
   if (OldValue($obj) eq "off") {
     {fhem ("setstate ".$obj." on")}
   }
   else {
     {fhem ("setstate ".$obj." off")}
   }
}

else {
   {fhem "setstate ".$obj." ".Value($obj)}

}


Da setstate ja STATE schaltet, trat in PowerMap aber das beschriebene Problem auf.

ZitatEventuell kann man das anpassen, dass das Reading aktualisiert wird anstelle von STATE.

Genau das habe ich gemacht, indem ich in meiner 99_myUtils.pm eine eigene UntoggleDirect Funktion eingebaut habe, die ich leicht modifiziert habe, damit auch das Reading state geschaltet wird.

#################################
#eigene UntoggleDirect Funktion für Reading state
#
sub UntoggleDirectOwn($) {
my ($obj) = @_;
if (Value($obj) eq "toggle"){
  if (OldValue($obj) eq "off") {
   {fhem ("setstate ".$obj." on;
           setreading ".$obj." state on")}
  }
  else {
   {fhem ("setstate ".$obj." off;
           setreading ".$obj." state off")}
  }
}
else {
  {fhem "setstate ".$obj." ".Value($obj);
        "setreading ".$obj." state ".Value($obj)}
}
}


Damit funktioniert PowerMap bei mir jetzt. Aber eigentlich ist das ja keine wirklich saubere Lösung.

Gruß
Wolle

choenig

Hi,

nachdem ich das Modul jetzt lange Zeit nicht verwendet habe, möchte ich es jetzt wieder einsetzen. Ich möchte allerdings keine Verbrauchsmessung verwenden, daher habe ich im powerMap device das Attribut powerMap_noEnergy auf 1 gesetzt.

Auf den ersten Blick funktioniert das wie gewünscht, auf den zweiten dann aber nicht mehr:
Nach einem shutdown restart werden die konfigurierten devices nicht mehr korrekt initialisiert. D.h. ein
get powerMap devices
liefert keine Devices mehr zurück.

Auf der Suche nach der Ursache bin ich im Code auf folgende Stelle gestoßen:

sub powerMap_Notify($$) {
[...]
            # initialize or terminate powerMap for each device
            if ( $event =~ /^(INITIALIZED|REREADCFG|SHUTDOWN)$/ ) {
                foreach ( keys %{ powerMap_findPowerMaps( $name, ":PM_$1" ) } )
                {
                    next
                      if ( $_ eq "global"
                        or $_ eq $name
                        or
                        powerMap_AttrVal( $name, $_, $TYPE . "_noEnergy", 0 ) );
[...]


Die letzte zitierte Zeile scheint schuld zu sein, dass kein Device initialisiert wird, wenn ich noEnergy gesetzt habe.

Ich würde da ja eher sowas erwarten wie

[...]
or
(powerMap_AttrVal( $name, $_, $TYPE . "_noEnergy", 0 ) && powerMap_AttrVal( $name, $_, $TYPE . "_noPower", 0 )


Kann da jemand was zu sagen? Oder hat jemand ähnliche Erfahrung? Oder mach ich was falsch?

LG
Christian

igami

Ich schreibe das Modul jetzt mal oben auf meine Liste und lese mich wieder aktiv ein :D

@choenig: du scheinst nicht ganz unerfahren im Programmieren zu sein, ich würde mich freuen, wenn du das ganze testen könntest und mir dann eine Rückmeldung gibt ob es damit so funktioniert wie erwartet.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

choenig

Hi,

Zitat von: igami am 20 Februar 2018, 19:44:34
@choenig: du scheinst nicht ganz unerfahren im Programmieren zu sein

das ist mein Beruf, da aber kein Perl, sondern eher C++/Qt ;-).

Ich kann das gerne ausprobieren, werd' aber vermutlich erst am Wochenende wieder dazu kommen.  Ich wollte vorerst mal abfragen, ob vielleicht jemand schon die Antwort kennt :-).

LG
Christian