Neues Modul: 22_HOMEMODE.pm - grundlegende Automationen und mehr

Begonnen von DeeSPe, 07 Januar 2017, 15:59:43

Vorheriges Thema - Nächstes Thema

Diggewuff

Hallo leute,

folgender Fehler sorgt dafür das fhem nicht startet.

Illegal division by zero at /opt/fhem/FHEM/22_HOMEMODE.pm line 2661.

durch auskommentieren der zeilen 2647-2666 konnte ich fhem wieder zum laufen bringen.

sub HOMEMODE_Luminance($;$$)
{
#  my ($hash,$dev,$lum) = @_;
#  my $name = $hash->{NAME};
#  my @sensors = split /,/,$hash->{SENSORSLUMINANCE};
#  my $read = AttrVal($name,"HomeSensorsLuminanceReading","luminance");
#  $lum = 0 if (!$lum);
#  my @sensorsa;
#  foreach (@sensors)
#  {
#    next unless (!HOMEMODE_IsDisabled($hash,$_));
#    push @sensorsa,$_;
#    my $val = ReadingsNum($_,$read,0);
#    next unless ($val > 0);
#    $lum += $val if (!$dev || $dev ne $_);
#  }
#  my $lumval = defined $lum ? int ($lum / scalar @sensorsa) : undef;
#  if (defined $lumval && $lumval >= 0)
#  {
#    readingsSingleUpdate($hash,"luminance",$lumval,1);
#    HOMEMODE_ReadingTrend($hash,"luminance",$lumval);
#  }
}


DeeSPe

Zitat von: Diggewuff am 04 März 2019, 01:50:23
Hallo leute,

folgender Fehler sorgt dafür das fhem nicht startet.

Illegal division by zero at /opt/fhem/FHEM/22_HOMEMODE.pm line 2661.

durch auskommentieren der zeilen 2647-2666 konnte ich fhem wieder zum laufen bringen.

sub HOMEMODE_Luminance($;$$)
{
#  my ($hash,$dev,$lum) = @_;
#  my $name = $hash->{NAME};
#  my @sensors = split /,/,$hash->{SENSORSLUMINANCE};
#  my $read = AttrVal($name,"HomeSensorsLuminanceReading","luminance");
#  $lum = 0 if (!$lum);
#  my @sensorsa;
#  foreach (@sensors)
#  {
#    next unless (!HOMEMODE_IsDisabled($hash,$_));
#    push @sensorsa,$_;
#    my $val = ReadingsNum($_,$read,0);
#    next unless ($val > 0);
#    $lum += $val if (!$dev || $dev ne $_);
#  }
#  my $lumval = defined $lum ? int ($lum / scalar @sensorsa) : undef;
#  if (defined $lumval && $lumval >= 0)
#  {
#    readingsSingleUpdate($hash,"luminance",$lumval,1);
#    HOMEMODE_ReadingTrend($hash,"luminance",$lumval);
#  }
}


Zeile 2661 ist diese:
my $lumval = defined $lum ? int ($lum / scalar @sensorsa) : undef;

Könntest Du bitte wieder alles einkommentieren und in die Zeile vor 2661 mal folgendes einsetzen?
return if (scalar @sensorsa == 0);

Behebt das Dein Problem?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Diggewuff

Werde ich heute Abend testen.

Zitat von: DeeSPe am 04 März 2019, 07:54:15
Zeile 2661 ist diese:
my $lumval = defined $lum ? int ($lum / scalar @sensorsa) : undef;

Könntest Du bitte wieder alles einkommentieren und in die Zeile vor 2661 mal folgendes einsetzen?
return if (scalar @sensorsa == 0);

Behebt das Dein Problem?

Gruß
Dan

DeeSPe

Zitat von: DeeSPe am 04 März 2019, 07:54:15
Könntest Du bitte wieder alles einkommentieren und in die Zeile vor 2661 mal folgendes einsetzen?
return if (scalar @sensorsa == 0);

Probiere statt dessen bitte diese Codezeile:
return if (!scalar @sensorsa);

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Diggewuff

Zitat von: DeeSPe am 04 März 2019, 11:42:35
Probiere statt dessen bitte diese Codezeile:
return if (!scalar @sensorsa);

Gruß
Dan

Habe folgendes ausprobiert
sub HOMEMODE_Luminance($;$$)
{
  my ($hash,$dev,$lum) = @_;
  my $name = $hash->{NAME};
  my @sensors = split /,/,$hash->{SENSORSLUMINANCE};
  my $read = AttrVal($name,"HomeSensorsLuminanceReading","luminance");
  $lum = 0 if (!$lum);
  my @sensorsa;
  foreach (@sensors)
  {
    next unless (!HOMEMODE_IsDisabled($hash,$_));
    push @sensorsa,$_;
    my $val = ReadingsNum($_,$read,0);
    next unless ($val > 0);
    $lum += $val if (!$dev || $dev ne $_);
  }
  return if (!scalar @sensorsa);
#  my $lumval = defined $lum ? int ($lum / scalar @sensorsa) : undef;
  if (defined $lumval && $lumval >= 0)
  {
    readingsSingleUpdate($hash,"luminance",$lumval,1);
    HOMEMODE_ReadingTrend($hash,"luminance",$lumval);
  }
}


FHEM startet so zwar HOMEMODE initialisiert allerdings nicht
Log Verbose 5
2019.03.05 01:02:48 1: configDB: Cannot load module HOMEMODE
Please define Homemode 5c47aa0f-f33f-299e-e616-448d3f20f39b6cc9 first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first


Falls du dir das über TeamViewer anschauen möchtest, schreib mir gerne ne mail.

DeeSPe

Zitat von: Diggewuff am 05 März 2019, 01:09:31
Habe folgendes ausprobiert
sub HOMEMODE_Luminance($;$$)
{
  my ($hash,$dev,$lum) = @_;
  my $name = $hash->{NAME};
  my @sensors = split /,/,$hash->{SENSORSLUMINANCE};
  my $read = AttrVal($name,"HomeSensorsLuminanceReading","luminance");
  $lum = 0 if (!$lum);
  my @sensorsa;
  foreach (@sensors)
  {
    next unless (!HOMEMODE_IsDisabled($hash,$_));
    push @sensorsa,$_;
    my $val = ReadingsNum($_,$read,0);
    next unless ($val > 0);
    $lum += $val if (!$dev || $dev ne $_);
  }
  return if (!scalar @sensorsa);
#  my $lumval = defined $lum ? int ($lum / scalar @sensorsa) : undef;
  if (defined $lumval && $lumval >= 0)
  {
    readingsSingleUpdate($hash,"luminance",$lumval,1);
    HOMEMODE_ReadingTrend($hash,"luminance",$lumval);
  }
}


FHEM startet so zwar HOMEMODE initialisiert allerdings nicht
Log Verbose 5
2019.03.05 01:02:48 1: configDB: Cannot load module HOMEMODE
Please define Homemode 5c47aa0f-f33f-299e-e616-448d3f20f39b6cc9 first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first
Please define Homemode first


Falls du dir das über TeamViewer anschauen möchtest, schreib mir gerne ne mail.

Das ist klar dass das Modul so nicht initialisiert werden kann, die Zeile die Du auskommentiert gelassen hast (alte 2661, neue 2662) muss auch wieder mit einkommentiert werden.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Diggewuff

Zitat von: DeeSPe am 05 März 2019, 09:44:46
Das ist klar dass das Modul so nicht initialisiert werden kann, die Zeile die Du auskommentiert gelassen hast (alte 2661, neue 2662) muss auch wieder mit einkommentiert werden.

Gruß
Dan

Ahh dann habe ich dich missverstanden. Wird heute Nachmittag direkt nochmal getestet.

DeeSPe

Habe soeben v1.4.7 ins SVN eingecheckt.

Changelog v1.4.7

    - change attribute name HomeYahooWeatherDevice to HomeWeatherDevice
    - use also devices from attributes HomeSensorTemperatureOutside, HomeSensorAirpressure and HomeSensorHumidityOutside instead of HomeWeatherDevice to display the first row of the details (HomeAdvancedDetails)
    - change homebridgeMapping characteristic AirPressure UUID to name
    - fix illegal division by zero in HOMEMODE_Luminance



Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

ComputerZOO

Hallo Dan,
es scheint so, als ob sich die Benutzbarkeit des UWZ-Moduls auch erledigt hat.
Könntest du dort DWD_OpenData integrieren?

ComputerZOO

...forget everything after good morning...

Scheint seit heute wieder zu funktionieren, aber ne Auswahl zwischen DWD oder UWZ wäre trotzdem ne feine Sache (auch als Backup, falls einer der Dienste dann doch seinen Service einstellen sollte).

Ich hatte das ganze im Modul ,,notdürftig" geflickt und erstmal vom Update ausgeschlossen, ich könnte die angepassten Zeilen mal am Wochenende überarbeiten für UWZ oder DWD.

(Wie man einen Patch dafür erstellt habe ich mir noch nicht genauer angesehen.)

dk3572

Hallo,

leider bekomme ich meinen xiaomi contact in Homemode nicht zum laufen.

Hinzugefügt habe ich in so:
HomeSensorsContact
model=HM-SEC-SC-2,model=L_06_zigbee2mqtt_ContactSensor


Internals:
   CID        zigbee_0x00158d000309c12f
   DEF        zigbee_0x00158d000309c12f
   DEVICETOPIC Fenster_Buero
   FUUID      5c8e7b9b-f33f-cd72-d1fb-0a7510e0e5455567
   IODev      MQTT2_Server
   LASTInputDev MQTT2_Server
   MQTT2_Server_MSGCNT 25
   MQTT2_Server_TIME 2019-03-18 19:21:17
   MSGCNT     25
   NAME       Fenster_Buero
   NR         325
   STATE      closed
   TYPE       MQTT2_DEVICE
   READINGS:
     2019-03-18 19:21:17   battery         100
     2019-03-18 19:21:17   contact         true
     2019-03-18 19:21:17   linkquality     39
     2019-03-18 19:21:17   voltage         3075
Attributes:
   HomeContactType window
   HomeModeAlarmActive armaway
   HomeOpenMaxTrigger 3
   HomeOpenTimeDividers 2 1 2 3
   HomeOpenTimes 3
   HomeReadings contact sabotage
   IODev      MQTT2_Server
   alexaName  Bürofenster
   alexaRoom  Büro
   alias      Bürofenster
   devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green
   event-on-change-reading .*
   eventMap   true:closed false:open
   genericDeviceType contact
   group      Fenster-/Türkontakte
   homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED
   icon       fts_window_1w
   model      L_06_zigbee2mqtt_ContactSensor
   readingList zigbee2mqtt/0x00158d000309c12f:.* { json2nameValue($EVENT) }
   room       MQTT2
   stateFormat {ReadingsVal("Fenster_Buero","contact","sabotage")}
   userattr   HomeModeAlarmActive HomeReadings HomeValues HomeContactType:doorinside,dooroutside,doormain,window HomeOpenMaxTrigger HomeOpenDontTriggerModes HomeOpenDontTriggerModesResidents HomeOpenTimeDividers HomeOpenTimes


Habe mich an patlabor ´s Beiträge orientiert.

Muss in Homemode noch was hinzu oder im Kontakt etwas anderes eingetragen werden?

Kann mir bitte jemand weiter helfen?

Danke und VG
Dieter

DeeSPe

Zitat von: dk3572 am 18 März 2019, 19:33:23
Hallo,

leider bekomme ich meinen xiaomi contact in Homemode nicht zum laufen.

Hinzugefügt habe ich in so:
HomeSensorsContact
model=HM-SEC-SC-2,model=L_06_zigbee2mqtt_ContactSensor


Internals:
   CID        zigbee_0x00158d000309c12f
   DEF        zigbee_0x00158d000309c12f
   DEVICETOPIC Fenster_Buero
   FUUID      5c8e7b9b-f33f-cd72-d1fb-0a7510e0e5455567
   IODev      MQTT2_Server
   LASTInputDev MQTT2_Server
   MQTT2_Server_MSGCNT 25
   MQTT2_Server_TIME 2019-03-18 19:21:17
   MSGCNT     25
   NAME       Fenster_Buero
   NR         325
   STATE      closed
   TYPE       MQTT2_DEVICE
   READINGS:
     2019-03-18 19:21:17   battery         100
     2019-03-18 19:21:17   contact         true
     2019-03-18 19:21:17   linkquality     39
     2019-03-18 19:21:17   voltage         3075
Attributes:
   HomeContactType window
   HomeModeAlarmActive armaway
   HomeOpenMaxTrigger 3
   HomeOpenTimeDividers 2 1 2 3
   HomeOpenTimes 3
   HomeReadings contact sabotage
   IODev      MQTT2_Server
   alexaName  Bürofenster
   alexaRoom  Büro
   alias      Bürofenster
   devStateIcon open:fts_window_1w_open@red closed:fts_window_1w@green
   event-on-change-reading .*
   eventMap   true:closed false:open
   genericDeviceType contact
   group      Fenster-/Türkontakte
   homebridgeMapping ContactSensorState=state,values=closed:CONTACT_DETECTED;open:CONTACT_NOT_DETECTED
   icon       fts_window_1w
   model      L_06_zigbee2mqtt_ContactSensor
   readingList zigbee2mqtt/0x00158d000309c12f:.* { json2nameValue($EVENT) }
   room       MQTT2
   stateFormat {ReadingsVal("Fenster_Buero","contact","sabotage")}
   userattr   HomeModeAlarmActive HomeReadings HomeValues HomeContactType:doorinside,dooroutside,doormain,window HomeOpenMaxTrigger HomeOpenDontTriggerModes HomeOpenDontTriggerModesResidents HomeOpenTimeDividers HomeOpenTimes


Habe mich an patlabor ´s Beiträge orientiert.

Muss in Homemode noch was hinzu oder im Kontakt etwas anderes eingetragen werden?

Kann mir bitte jemand weiter helfen?

Danke und VG
Dieter

Damit sollte es gehen (sofern false für "geöffnet" steht):
attr Fenster_Buero HomeValues false

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

dk3572

Zitat von: DeeSPe am 19 März 2019, 15:01:13
Damit sollte es gehen (sofern false für "geöffnet" steht):
attr Fenster_Buero HomeValues false

Gruß
Dan

Vielen Dank, funktioniert.
VG Dieter

LordVoodoo

Hallo zusammen,

ich taste mich an das mächtige Modul heran, habe aber aktuell ein Problem, welches ich nicht verstehe:

Ich habe per Attribut gesetzt:
attr HOMEMODE_Device HomeSensorsMotion type=ZHAPresence

Anschließend stehen alle gewünschten ZigBee-Bewegungsmelder im Internal:
SENSORSMOTION
Bad_Bewegung,Flur_Bewegung,Kueche_Bewegung,Schlafzimmer_Bett_Bewegung,Wohnzimmer_Bewegung,Wohnzimmer_Schreibtisch_Bewegung


Nach einem Neustart von FHEM ist das Internal wieder leer, trotz gespeichertem Saves. Die Definition (also das Attribut) ist nach wie vor gesetzt. Ich muss ein DeleteAttr durchführen und anschließend wieder eintragen...bis zum nächsten Neustart.

Habe ich irgendwo einen Denkfehler?

Danke für eure Hilfe.

DeeSPe

Zitat von: LordVoodoo am 24 März 2019, 23:45:37
Hallo zusammen,

ich taste mich an das mächtige Modul heran, habe aber aktuell ein Problem, welches ich nicht verstehe:

Ich habe per Attribut gesetzt:
attr HOMEMODE_Device HomeSensorsMotion type=ZHAPresence

Anschließend stehen alle gewünschten ZigBee-Bewegungsmelder im Internal:
SENSORSMOTION
Bad_Bewegung,Flur_Bewegung,Kueche_Bewegung,Schlafzimmer_Bett_Bewegung,Wohnzimmer_Bewegung,Wohnzimmer_Schreibtisch_Bewegung


Nach einem Neustart von FHEM ist das Internal wieder leer, trotz gespeichertem Saves. Die Definition (also das Attribut) ist nach wie vor gesetzt. Ich muss ein DeleteAttr durchführen und anschließend wieder eintragen...bis zum nächsten Neustart.

Habe ich irgendwo einen Denkfehler?

Danke für eure Hilfe.

Hmmm, das klingt komisch, soll nicht so sein und ist bei mir auch nicht so.

Das Internal SENSORSMOTION wird beim Neustart von FHEM immer wieder anhand der bei "HomeSensorsMotion" hinterlegten Devspec(s) neu aufgebaut.
Im Prinzip passiert beim Neustart nichts anderes als ein "set <HOMEMODE> updateInternalsForce". Hast Du das evtl. mal probiert wenn das Internal nicht da ist?
Sonst fällt mir im Moment auch nicht viel weiter zu Deinem Problem ein, zumal es sich bei Dir um einen Einzelfall zu handeln scheint.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe