Neues Modul: APCUPSD

Begonnen von premultiply, 22 Juni 2015, 11:49:09

Vorheriges Thema - Nächstes Thema

Blablubblaber

Habe es jetzt angepasst das nur noch das drin steht was auch wirklich von der usv kommt.

Habe aber noch immer eine Warnung
  PERL WARNING: Use of uninitialized value in pattern match (m//) at ./FHEM/34_APCUPSD.pm line 142, <$fh> line 1813. 

Wie kann das sein ein list sieht jetzt so aus
  Internals:
   DEF        120 localhost
   HOST       localhost:3551
   INTERVAL   120
   LOWBATT    20
   MODEL      Smart-UPS 750
   NAME       USV
   NR         368
   SERIALNO   3S1540X02058
   STATE      ONLINE
   TYPE       APCUPSD
   Readings:
     2016-11-21 09:46:45   battery         ok
     2016-11-21 09:46:45   battv           27.1
     2016-11-21 09:46:45   bcharge         100
     2016-11-21 09:46:45   state           ONLINE
     2016-11-21 09:46:45   timeleft        127
   Helper:
     ALARMDEL   30 Seconds
     APC        001,027,0667
     BATTV      27.1 Volts
     BCHARGE    100.0 Percent
     CABLE      USB Cable
     CUMONBATT  0 Seconds
     DATE       2016-11-21 09:46:36 +0100
     DRIVER     USB UPS Driver
     END APC    2016-11-21 09:46:45 +0100
     FIRMWARE   UPS 09.3 / ID=18
     HOSTNAME   raspberrypi
     MANDATE    2015-09-30
     MAXTIME    0 Seconds
     MBATTCHG   5 Percent
     MINTIMEL   3 Minutes
     MODEL      Smart-UPS 750
     NOMBATTV   24.0 Volts
     NUMXFERS   0
     SERIALNO   3S1540X02058
     STARTTIME  2016-11-20 18:23:01 +0100
     STATFLAG   0x05000008
     STATUS     ONLINE
     TIMELEFT   127.0 Minutes
     TONBATT    0 Seconds
     UPSMODE    Stand Alone
     UPSNAME    raspberrypi
     VERSION    3.14.12 (29 March 2014) debian
     XOFFBATT   N/A
Attributes:
   asReadings BATTV,BCHARGE,TIMELEFT
   comment    LASTXFER,LINEV,OUTPUTV,LOADPCT
   room       Keller 


Gruß
Dennis

premultiply

Ich habe leider gerade keine weitere Idee mehr woher die Meldung kommt.
Leider kann ich das nicht testen/nachvollziehen da bei meinen 3 USV-Systemen dies nicht auftaucht.

Probleme sollte es dadurch aber nicht geben.

DeeSPe

Zitat von: Blablubblaber am 21 November 2016, 09:49:00
Habe aber noch immer eine Warnung
  PERL WARNING: Use of uninitialized value in pattern match (m//) at ./FHEM/34_APCUPSD.pm line 142, <$fh> line 1813. 

Ich würde die Zeile 142 so ergänzen:
$hash->{helper}{$_} =~ m/^([\-\d\.]*)(.*)$/ if ($hash->{helper}{$_});
Dann dürfte die Perl Warnung nicht mehr kommen und es dürfte auch keinen Einfluss auf den weiteren Programmablauf haben.

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

DeeSPe

Achso, ohne das Modul bisher zu benutzen ist mir beim Überfliegen des Codes aufgefallen dass das Modul blockierend arbeitet.
Ich empfehle das Modul auf DevIo zu erweitern um es non-blocking zu machen.
Bei einem offiziellem Check-In ins FHEM Repo sollte es möglichst auch non-blocking sein. 8)

Verstehe mich bitte nicht falsch, ich finde es toll dass es Leute wie Dich und mich gibt die in ihrer Freizeit Sachen für die Community bereitstellen.
Das Modul ist für den ersten Versuch toll, nur eben noch ausbaufähig... 8)

Gruß
Dan

P.S. Bin nur auf das Modul aufmerksam geworden weil ich selbst gerade eine APC UPS bestellt habe und die dann auch in FHEM einbinden will.
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

fsapienza

#34
Hi zusammen,
ich habe den Vorschlag von Dan mal getestet mit folgendem Ergebnis:
PERL WARNING: Use of uninitialized value $1 in numeric gt (>) at ./FHEM/34_APCUPSD.pm line 143.

Scheint leider noch nicht die Lösung zu sein...

Grüße
Franco



Blablubblaber

Also bei mir besteht der Fehler weiterhin.

Was mir auch aufgefallen ist wen ich das Modul öffne dann friert FHEM für ein paar Sekunden ein bis es offen ist.
Ist das wegen dem von @DeeSPe angesprochenen non-blocking?

Gruß
Dennis

premultiply

Zitat von: Blablubblaber am 05 Dezember 2016, 09:30:48
Was mir auch aufgefallen ist wen ich das Modul öffne dann friert FHEM für ein paar Sekunden ein bis es offen ist.
Ist das wegen dem von @DeeSPe angesprochenen non-blocking?

Kann ich mir kaum vorstellen, da im normalfall keine Aufrufe getätigt werden die FHEM ernsthaft blockieren. Der Datenabruf mittels apcaccess erfolgt initial und dann nur noch über einen Timer.

Ich betreibe dies bei mir selbst mit 3 größeren USV-Systemen und vielen anderen Geräten ohne solche Probleme.

Es könnte aber durchaus sein, dass z. B. mit deiner APCUPSD-Konfiguration grundsätzlich etwas nicht stimmt und dieses somit in irgendein Timeout läuft beim Datenabruf.

Wenn du auf der Konsole apcaccess ausführst sollte sofort eine Antwort kommen. Nichts anderes ruft das Modul auf.

Blablubblaber

Habe übers Wochenende FHEM einmal komplett neu aufgesetzt und es seitdem nicht nochmal probiert gehabt bevor ich das gerade geschrieben habe (sry).
Habe es nachdem Post von dir nochmal ausprobiert und muss sagen das das Problem weg ist.
Es muss wirklich an irgend einer Konfiguration gelegen haben.

Aber das Problem mit der Perl Fehlermeldung im Log nach einem neustart von FHEM bleibt bestehen.




chr2k

Hallo,

schade dass das Modul noch nicht eingecheckt ist  ;) :-[ :-X :'(

Jorche

Hallo premultiply,

ich stelle mich mit an. Kurze Zwischenfrage: Braucht Dein Modul dden Apache CGI Webserver?

Dank und Grüße
Jörg

choenig

Hallo zusammen,

ich hatte das Problem, dass in den Helpers die Daten zwar korrekt angezeigt wurden, die Readings aber verkrüppelt waren:


xoffbatt: 2017


Das sollte eigentlich ein vollständiges Datum sein, so wie hier:


xoffbatt: 2017-09-27 13:42:06 +0200


Auf der Suche nach der Lösung bin ich auf Code im 34_APCUPSD Modul gestoßen, welches (vermutlich) die Einheiten der Readings entfernen soll, leider entfernt das mehr, als eigentlich nötig.

Eine Lösung war dann (für mein System) schnell gefunden:
Meine Version von /sbin/apcaccess (apcupsd-3.14.13) unterstützt den Parameter '-u', der die Units entfernt.

Folgender kleiner Patch löst für mich das o.a. Problem:


--- fhem/FHEM/34_APCUPSD.pm
+++ fhem/FHEM/34_APCUPSD.pm
@@ -97,7 +97,7 @@ sub APCUPSD_RetrieveData($) {
   my $name = $hash->{NAME};

   my ($cmd, $val);
-  $cmd = $apcaccess." status ".$hash->{HOST}."  2>&1";
+  $cmd = $apcaccess." -u status ".$hash->{HOST}."  2>&1";
   $val = `$cmd`;

   if ( $val =~ m/^Error/ | ! length($val) ) {
@@ -139,12 +139,7 @@ sub APCUPSD_RetrieveData($) {
   foreach (split (',', $attr{$name}{asReadings})) {
     s/^\s+//;
     s/\s+$//;
-    $hash->{helper}{$_} =~ m/^([\-\d\.]*)(.*)$/;
-    if ( length($1) > 0 ) {
-      readingsBulkUpdate($hash, lc($_), 0+$1) if defined $hash->{helper}{$_};
-    } else {
-      readingsBulkUpdate($hash, lc($_), $2) if defined $hash->{helper}{$_};
-    }
+    readingsBulkUpdate($hash, lc($_), $hash->{helper}{$_}) if defined $hash->{helper}{$_};
   }
   readingsEndUpdate($hash, 1);


Da ich ungerne verschieden Versionen des Moduls im Umlauf haben möchte, hänge ich keine vollständige neue 34_APCUPSD.pm an, könnte das aber machen, wenn Interesse besteht.

LG
Christian

ChrisW

ich habe eine APC USV per USB an meiner Synology angeschlossen. Dort den USV Server Aktiv. Kann ich mit dem Modul nun was machen ?
Raspberry PI3 mit allem möglichen.

Hauswart

Gibt es Alternativen zu diesem Modul?
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)

justme1968

@ChrisW: das geht mit dem NUT modul.

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Hauswart

Zitat von: justme1968 am 28 Dezember 2017, 12:44:56
@ChrisW: das geht mit dem NUT modul.



Also installiere ich wohl doch auch besser unter Debian nicht nur APCUPSD sondern auch das NUT. Hat jemand mal Powerchute ausprobiert?
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)