Hauptmenü

Fhem stürzt ab nach Update

Begonnen von Kai-Alfonso, 18 September 2019, 12:59:34

Vorheriges Thema - Nächstes Thema

Kai-Alfonso

Moin,

ich habe heute mal wieder ein Update gemacht und seitdem stürzt Fhem immer ab und startet sich neu. Ich habe ein Doif als Übertäter ausfindig gemacht, was bis dato einwandfrei seit 2 Jahren lief:

([+60])
({use Date::Calc qw(Delta_Days);;
my $start_datum = ReadingsVal("doif_Stromkosten1","Start_Abrechnungsperiode","");;
my $tag = substr($start_datum, 0, 2);;
my $monat = substr($start_datum, 3, 2);;

my ($day,$month,$year) = (localtime)[3,4,5];;

my $year1 = sprintf '%04d',$year+1900;;
my $month1 = sprintf '%02d',$month+1;;
my $jahr = 0;

if ($month1 == 12 ) {
$jahr  = $year1;
}
else {
$jahr  = $year1 - 1;
}

my $day1 = sprintf '%02d',$day;;
my $anzahl_tage = Delta_Days($jahr,$monat,$tag,$year1,$month1,$day1);;
fhem ("setreading doif_Stromkosten1 Tage $anzahl_tage")
})



Hier berechne ich die Anzahl der Tage bis Tag x - ok, mit Blick darauf muss das doif auch nicht alle 60 sekunden laufen. Anyway - jedenfalls stürzt fhem immer ab mit der Meldung

Can't use string ("doif_Stromkosten1_uiTable_c_3_1_"...) as an ARRAY ref while "strict refs" in use at ./FHEM/98_DOIF.pm line 2218.


Also muss es irgendwas mit dem Perl  Code zu tun haben. Vielleicht kann jemand mal helfen?
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Damian

Es hat etwas mit uiTable-Attribut zu tun. Hast du DOIFs mit dem Attribut im Einsatz?
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Kai-Alfonso

Zitat von: Damian am 18 September 2019, 13:09:12
Es hat etwas mit uiTable-Attribut zu tun. Hast du DOIFs mit dem Attribut im Einsatz?

Ja, genau das doif nutzt ui Table

"Arbeitspreis (Cent/kWh)"|([$SELF:Arbeitspreis])
"Grundpreis (Euro/Jahr)"|([$SELF:Grundpreis])
"Start Abrechnungsperiode"|([$SELF:Start_Abrechnungsperiode])
"Abschlag (Euro/Monat)"|([$SELF:Abschlag])
"Tage Abrechnugsperiode"|[$SELF:Tage]
"Stromverbrauch Hochrechnung"| sprintf("%.f kWh", ([myElectricityCalculator:Stromzaehler_total_consumption_EnergyMeter])/[$SELF:Tage]*365)
"Stromverbrauch bis jetzt"|sprintf("%.2f kWh" , [myElectricityCalculator:Stromzaehler_total_consumption_EnergyMeter])
"Stromkosten bis jetzt"|sprintf("%.2f Euro" , [myElectricityCalculator:Stromzaehler_total_consumption_EnergyCostMeter])
"Stromkosten Hochrechnung"| sprintf("%.2f Euro", (([myElectricityCalculator:Stromzaehler_total_consumption_EnergyMeter])/[$SELF:Tage]*365)*([$SELF:Arbeitspreis]/100)+[$SELF:Grundpreis])
"Nachzahlung/Gutschrift"| sprintf("%.2f Euro", ([myElectricityCalculator:Stromzaehler_total_consumption_EnergyMeter]/[$SELF:Tage]*365)*([$SELF:Arbeitspreis]/100)+[$SELF:Grundpreis]-([$SELF:Abschlag]*12))
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Damian

Muss ich mir genau anschauen, wenn ich heute Abend zuhause bin.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Kai-Alfonso

Zitat von: Damian am 18 September 2019, 13:13:51
Muss ich mir genau anschauen, wenn ich heute Abend zuhause bin.

Super, danke Dir  8) 8)
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Kai-Alfonso

Zitat von: Damian am 18 September 2019, 13:44:59
Poste bitte list von diesem DOIF

gerne

Internals:
   DEF        ([+60])
({use Date::Calc qw(Delta_Days);;
my $start_datum = ReadingsVal("doif_Stromkosten1","Start_Abrechnungsperiode","");;
my $tag = substr($start_datum, 0, 2);;
my $monat = substr($start_datum, 3, 2);;

my ($day,$month,$year) = (localtime)[3,4,5];;

my $year1 = sprintf '%04d',$year+1900;;
my $month1 = sprintf '%02d',$month+1;;
my $jahr = 0;

if ($month1 == 12 ) {
$jahr  = $year1;
}
else {
$jahr  = $year1 - 1;
}

my $day1 = sprintf '%02d',$day;;
my $anzahl_tage = Delta_Days($jahr,$monat,$tag,$year1,$month1,$day1);;
fhem ("setreading doif_Stromkosten1 Tage $anzahl_tage")
})
   FUUID      5c482d46-f33f-ce3b-0adf-9f18b704ce92cc28
   MODEL      FHEM
   NAME       doif_Stromkosten1
   NOTIFYDEV  global
   NR         162
   NTFY_ORDER 50-doif_Stromkosten1
   STATE      initialized
   TYPE       DOIF
   VERSION    20163 2019-09-15 16:48:42
   .attraggr:
   .attrminint:
   READINGS:
     2018-12-08 08:33:46   Abschlag        75
     2019-03-08 12:21:18   Arbeitspreis    25.40
     2019-03-08 12:21:53   Grundpreis      96
     2018-12-04 12:34:25   Start_Abrechnungsperiode 01.12
     2019-09-18 10:42:24   Tage            291
     2019-09-18 13:50:24   cmd             0
     2019-09-18 13:50:24   mode            enabled
     2019-09-18 13:50:24   state           initialized
     2019-09-18 13:50:24   timer_01_c01    18.09.2019 13:51:24
   Regex:
     accu:
     uiTable:
       doif_Stromkosten1:
         doif_Stromkosten1_uiTable_c_0_1_0_0:
           Arbeitspreis ^doif_Stromkosten1$:^Arbeitspreis:
         doif_Stromkosten1_uiTable_c_1_1_0_0:
           Grundpreis ^doif_Stromkosten1$:^Grundpreis:
         doif_Stromkosten1_uiTable_c_2_1_0_0:
           Start_Abrechnungsperiode ^doif_Stromkosten1$:^Start_Abrechnungsperiode:
         doif_Stromkosten1_uiTable_c_3_1_0_0:
           Abschlag   ^doif_Stromkosten1$:^Abschlag:
         doif_Stromkosten1_uiTable_c_4_1_0_0:
           Tage       ^doif_Stromkosten1$:^Tage:
         doif_Stromkosten1_uiTable_c_5_1_0_0:
           Tage       ^doif_Stromkosten1$:^Tage:
         doif_Stromkosten1_uiTable_c_8_1_0_0:
           Arbeitspreis ^doif_Stromkosten1$:^Arbeitspreis:
           Grundpreis ^doif_Stromkosten1$:^Grundpreis:
           Tage       ^doif_Stromkosten1$:^Tage:
         doif_Stromkosten1_uiTable_c_9_1_0_0:
           Abschlag   ^doif_Stromkosten1$:^Abschlag:
           Arbeitspreis ^doif_Stromkosten1$:^Arbeitspreis:
           Grundpreis ^doif_Stromkosten1$:^Grundpreis:
           Tage       ^doif_Stromkosten1$:^Tage:
       myElectricityCalculator:
         doif_Stromkosten1_uiTable_c_5_1_0_0:
           Stromzaehler_total_consumption_EnergyMeter ^myElectricityCalculator$:^Stromzaehler_total_consumption_EnergyMeter:
         doif_Stromkosten1_uiTable_c_6_1_0_0:
           Stromzaehler_total_consumption_EnergyMeter ^myElectricityCalculator$:^Stromzaehler_total_consumption_EnergyMeter:
         doif_Stromkosten1_uiTable_c_7_1_0_0:
           Stromzaehler_total_consumption_EnergyCostMeter ^myElectricityCalculator$:^Stromzaehler_total_consumption_EnergyCostMeter:
         doif_Stromkosten1_uiTable_c_8_1_0_0:
           Stromzaehler_total_consumption_EnergyMeter ^myElectricityCalculator$:^Stromzaehler_total_consumption_EnergyMeter:
         doif_Stromkosten1_uiTable_c_9_1_0_0:
           Stromzaehler_total_consumption_EnergyMeter ^myElectricityCalculator$:^Stromzaehler_total_consumption_EnergyMeter:
   attr:
     cmdState:
       0:
         1
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
   days:
   do:
     0:
       0          {use Date::Calc qw(Delta_Days);; my $start_datum = ReadingsVal("doif_Stromkosten1","Start_Abrechnungsperiode","");; my $tag = substr($start_datum, 0, 2);; my $monat = substr($start_datum, 3, 2);;  my ($day,$month,$year) = (localtime)[3,4,5];;  my $year1 = sprintf '%04d',$year+1900;; my $month1 = sprintf '%02d',$month+1;; my $jahr = 0;  if ($month1 == 12 ) { $jahr  = $year1; } else { $jahr  = $year1 - 1; }  my $day1 = sprintf '%02d',$day;; my $anzahl_tage = Delta_Days($jahr,$monat,$tag,$year1,$month1,$day1);; fhem ("setreading doif_Stromkosten1 Tage $anzahl_tage") }
     1:
   helper:
     globalinit 1
     last_timer 1
     sleeptimer -1
   intervalfunc:
   localtime:
     0          1568807484
   realtime:
     0          13:51:24
   time:
     0          +60
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   triggertime:
     1568807484:
       localtime  1568807484
       hash:
   uiState:
   uiTable:
     dev        doif_Stromkosten1
     package   
     reading    Abschlag
     table:
       0:
         0:
           0:
             0          "Arbeitspreis (Cent/kWh)"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_0_1_0_0',(::ReadingValDoIf($hash,'doif_Stromkosten1','Arbeitspreis')),"")
       1:
         0:
           0:
             0          "Grundpreis (Euro/Jahr)"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_1_1_0_0',(::ReadingValDoIf($hash,'doif_Stromkosten1','Grundpreis')),"")
       2:
         0:
           0:
             0          "Start Abrechnungsperiode"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_2_1_0_0',(::ReadingValDoIf($hash,'doif_Stromkosten1','Start_Abrechnungsperiode')),"")
       3:
         0:
           0:
             0          "Abschlag (Euro/Monat)"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_3_1_0_0',(::ReadingValDoIf($hash,'doif_Stromkosten1','Abschlag')),"")
       4:
         0:
           0:
             0          "Tage Abrechnugsperiode"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_4_1_0_0',::ReadingValDoIf($hash,'doif_Stromkosten1','Tage'),"")
       5:
         0:
           0:
             0          "Stromverbrauch Hochrechnung"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_5_1_0_0', sprintf("%.f kWh", (::ReadingValDoIf($hash,'myElectricityCalculator','Stromzaehler_total_consumption_EnergyMeter'))/::ReadingValDoIf($hash,'doif_Stromkosten1','Tage')*365),"")
       6:
         0:
           0:
             0          "Stromverbrauch bis jetzt"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_6_1_0_0',sprintf("%.2f kWh" , ::ReadingValDoIf($hash,'myElectricityCalculator','Stromzaehler_total_consumption_EnergyMeter')),"")
       7:
         0:
           0:
             0          "Stromkosten bis jetzt"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_7_1_0_0',sprintf("%.2f Euro" , ::ReadingValDoIf($hash,'myElectricityCalculator','Stromzaehler_total_consumption_EnergyCostMeter')),"")
       8:
         0:
           0:
             0          "Stromkosten Hochrechnung"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_8_1_0_0', sprintf("%.2f Euro", ((::ReadingValDoIf($hash,'myElectricityCalculator','Stromzaehler_total_consumption_EnergyMeter'))/::ReadingValDoIf($hash,'doif_Stromkosten1','Tage')*365)*(::ReadingValDoIf($hash,'doif_Stromkosten1','Arbeitspreis')/100)+::ReadingValDoIf($hash,'doif_Stromkosten1','Grundpreis')),"")
       9:
         0:
           0:
             0          "Nachzahlung/Gutschrift"
         1:
           0:
             0          ::DOIF_Widget($hash,$reg,'doif_Stromkosten1_uiTable_c_9_1_0_0', sprintf("%.2f Euro", (::ReadingValDoIf($hash,'myElectricityCalculator','Stromzaehler_total_consumption_EnergyMeter')/::ReadingValDoIf($hash,'doif_Stromkosten1','Tage')*365)*(::ReadingValDoIf($hash,'doif_Stromkosten1','Arbeitspreis')/100)+::ReadingValDoIf($hash,'doif_Stromkosten1','Grundpreis')-(::ReadingValDoIf($hash,'doif_Stromkosten1','Abschlag')*12)),"")
     tc:
     td:
       0:
       1:
       2:
       3:
       4:
       5:
       6:
       7:
       8:
       9:
     tr:
Attributes:
   alias      Stromkosten
   cmdState   1
   do         always
   room       Strom
   uiTable    "Arbeitspreis (Cent/kWh)"|([$SELF:Arbeitspreis])
"Grundpreis (Euro/Jahr)"|([$SELF:Grundpreis])
"Start Abrechnungsperiode"|([$SELF:Start_Abrechnungsperiode])
"Abschlag (Euro/Monat)"|([$SELF:Abschlag])
"Tage Abrechnugsperiode"|[$SELF:Tage]
"Stromverbrauch Hochrechnung"| sprintf("%.f kWh", ([myElectricityCalculator:Stromzaehler_total_consumption_EnergyMeter])/[$SELF:Tage]*365)
"Stromverbrauch bis jetzt"|sprintf("%.2f kWh" , [myElectricityCalculator:Stromzaehler_total_consumption_EnergyMeter])
"Stromkosten bis jetzt"|sprintf("%.2f Euro" , [myElectricityCalculator:Stromzaehler_total_consumption_EnergyCostMeter])
"Stromkosten Hochrechnung"| sprintf("%.2f Euro", (([myElectricityCalculator:Stromzaehler_total_consumption_EnergyMeter])/[$SELF:Tage]*365)*([$SELF:Arbeitspreis]/100)+[$SELF:Grundpreis])
"Nachzahlung/Gutschrift"| sprintf("%.2f Euro", ([myElectricityCalculator:Stromzaehler_total_consumption_EnergyMeter]/[$SELF:Tage]*365)*([$SELF:Arbeitspreis]/100)+[$SELF:Grundpreis]-([$SELF:Abschlag]*12))
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Damian

#7
Teste bitte mal die angehängte Version


Edit: Version gelöscht
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

Diese Erfahrung hatte ich auch gemacht am Sonntag und bin dann wieder auf die vorige DOIF-Version im Repository zurückgegangen:

2019.09.16 22:29:17 1: PERL WARNING: Argument "" isn't numeric in numeric eq (==) at (eval 479) line 2.
Can't use string ("DI_Warmwasser_uiTable_c_0_0_0_2") as an ARRAY ref while "strict refs" in use at ./FHEM/98_DOIF.pm line 2218.


Hatte es noch nicht gepostet, da ich in meinem uiTables großräumig Änderungen gemacht hatte und daher erst einmal bei mir "sauber" machen wollte, ehe ich auf dieses Thema hinweise.

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Daher bitte testen, bevor ich die neue Version einchecke.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Kai-Alfonso

Zitat von: Damian am 18 September 2019, 20:26:28
Daher bitte testen, bevor ich die neue Version einchecke.

Vielen Dank für die neue Version - ich komme erst morgen früh zum testen, melde mich dann aber sofort
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)

Damian

Ich habe die korrigierte Version bereits eingecheckt, obwohl ich den Fehler bei mir nicht nachstellen konnte.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cwagner

Hier muss ich leider enttäuschen, 2 Versuche mit übereinstimmenden Ergebnis:
1. laufendes FHEM, das DOIF aus dem Post reloaded und sofort:
2019.09.18 22:42:21 1: PERL WARNING: Subroutine FW_makeImage redefined at ./FHEM/98_DOIF.pm line 3686.
Can't use string ("DI_Solarthermie_uiTable_c_0_1_0_"...) as an ARRAY ref while "strict refs" in use at ./FHEM/98_DOIF.pm line 2216.


2. FHEM neustarten, im Hochfahren:
2019.09.18 22:44:26 1: PERL WARNING: Found = in conditional, should be == at (eval 474) line 2.
Can't use string ("DI_Warmwasser_uiTable_c_0_0_0_2") as an ARRAY ref while "strict refs" in use at ./FHEM/98_DOIF.pm line 2216.

In beiden Fällen wird FHEM abgeschossen:
fhem.service - FHEM Home Automation
   Loaded: loaded (/etc/systemd/system/fhem.service; enabled; vendor preset: ena
   Active: failed (Result: exit-code) since Wed 2019-09-18 22:44:27 CEST; 4min 5
  Process: 25443 ExecStart=/usr/bin/perl fhem.pl configDB (code=exited, status=0
Main PID: 25444 (code=exited, status=255)

Sep 18 22:43:01 PI3 systemd[1]: Starting FHEM Home Automation...
Sep 18 22:43:02 PI3 systemd[1]: Started FHEM Home Automation.
Sep 18 22:44:27 PI3 systemd[1]: fhem.service: Main process exited, code=exited,
Sep 18 22:44:27 PI3 systemd[1]: fhem.service: Unit entered failed state.
Sep 18 22:44:27 PI3 systemd[1]: fhem.service: Failed with result 'exit-code'.
lines 1-11/11 (END)


Herzliche Grüße

Christian
PI 2B+/5 Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

Damian

Welche letzte Version läuft bei dir stabil? Poste bitte list von DI_Solarthermie bzw. DI_Warmwasser.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Kai-Alfonso

Bei mir stürzt auch die neue Version ab - aber lustigerweise nicht direkt, sondern erst nach x minuten
Raspi2|nanoCul433|nanoCul868|CCU2
Energie-USBZähler|homebrew HM Devices
DBLog|DBRep|Homematic|Baumarktsteckdosen
Hue|Webcams mit DS-Station (Synology)|Bewegungsmelder|Rollladen|Schalter (IT|HM)