Absturz bei weblink readings

Begonnen von Elektrolurch, 17 Juli 2013, 20:06:30

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo zusammen,

ich habe so eine AVM DECT200, die funktioniert auch einwandfrei mit fhem. Nun wollte ich einige interne Werte der Steckdose seperat mit "define name weblink readings ..." im Raum "Hobbyraum" anzeigen lassen. Der Code wird auch aktzeptiert, sobald ich aber den Raum "Hobbyraum" in fhem anklicke, stürzt fhem ohne Log-Eintrag ab.


# Werte im Hobbyraum ausgeben

define Teststeckdose_Weblink weblink readings Teststeckdose:voltage \
Teststeckdose:energy Teststeckdose:power Teststeckdose:temperature *notime \
{{ 'Teststeckdose.voltage' => 'Spannung: ', 'Teststeckdose. energy' => \
'Energieverbrauch gesamt: ', 'Teststeckdose. power' => 'Aktueller Verbrauch: ', \
'Teststeckdose.temperature' => 'Temperatur: '}}
attr Teststeckdose_Weblink room Hobbyraum

Ich finde aber keinen Fehler, da ich es genauso gemacht habe, wie andere Codeschnipsel. Jemand einen Tipp?

Elektrolurch

configDB und Windows befreite Zone!

justme1968

bitte schau mal ob im log file etwas steht.

noch ein tip: du kannst bei dem mapping der namen überall das "Teststeckdose." weg lassen. nur der reading name reicht auch wenn er eindeutig ist.

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

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

justme1968

du hast an zwei stellen ein leerzeichen zwischen "Teststeckdose." und dem reading namen im mapping. das sollte zwar nicht für den absturz verantwortlich sein aber damit wird das mapping nicht gehen.

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

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

Elektrolurch

Hallo Andre,

danke für den Hinweis. Habe die zwei Leerzeichen herausgemacht. Ergebnis aber das gleiche. Sobald die Readings über das Anklicken von "Hobbyraum" gelesen werden sollen, stürzt fhem ohne weiteren log-Eintrag ab.
Hier nochmal der Code:



# Werte im Hobbyraum ausgeben

define Teststeckdose_Weblink weblink readings Teststeckdose:voltage \
Teststeckdose:energy Teststeckdose:power Teststeckdose:temperature *notime \
{{ 'Teststeckdose.voltage' => 'Spannung: ', 'Teststeckdose.energy' => \
'Energieverbrauch gesamt: ', 'Teststeckdose.power' => 'Aktueller Verbrauch: ', \
'Teststeckdose.temperature' => 'Temperatur: '}}
attr Teststeckdose_Weblink room Hobbyraum
Wenn ich die Zeilen herausnehme, dann kann ich auf "Hobbyraum" klicken und sehe nur den Eintrag (gem. der Definition) von Teststeckdose mit on/off.
Öffne ich die Teststeckdose, sehe ich die Internals, unter anderem auch die Werte, die ich per Weblink readings direkt darstellen wollte. Also das Device funktioniert wohl. Es muss etwas mit dem Code direkt zu tun haben. Die Definition ist aber eigentlich genaus so, wie sie in der CommandRef für das Beispiel mit readings steht.
Mein Latein ist zu Ende.

Allerdings konnte ich Weblink mit Parameter "readings" erst nach einem Update ausführen. Vorher kannte er die Option "readings" noch nicht. Die Option scheint also noch ziemlich neu zu sein, denn sie war in der lokal gespeicherten CommandRef auch noch nicht drin.

Elektrolurch


configDB und Windows befreite Zone!

justme1968

ja. der readings typ ist noch neu. das hab ich erst vor einer woche gebaut.
ich habe genau deinen code gestern mit einem dummy getestet und es geht ohne probleme.

steht wirklich nichts im log file?
auf welchem system läuft fhem?
kannst du 'fhem.pl fhem.cfg' von hand starten? was steht nach dem absturz auf dieser Konsole?

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

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

Elektrolurch

Hallo Andre,

nein, im log steht nur, dass er 85 Objekte instanziert hat.
Hatte fhem nach dem Absturz sowieso schon von der Konsole mit ./startfhem& gestartet. Hier der Auszug:

Fritz!Box user: Raimund
password:


BusyBox v1.20.2 (2013-05-13 12:53:07 CEST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

ermittle die aktuelle TTY
tty is "/dev/pts/0"
Console Ausgaben auf dieses Terminal umgelenkt
# cd /var/Int*/fhem
# ./startfhem&
# [ahaSvr] incomming UNIX connection accepted
 {EE} ahaSvr@avm_home_external_receive_message: read on fd=26 failed: Success (0
 len read)
[ahaSvr] close INET connection (no-inet-addr:0 <- no-inet-addr:0) -> (fd=26, in_
use=20)

[ahaSvr] incomming UNIX connection accepted
#
#
Es ist eine FB7390 mit der Laborversion vom 12.7.2013.
Und hier die Internals von Teststeckdose im Hobbyraum, wenn ich meinen Weblink wieder auskommentiere:

Internals
CFGFN
./FHEM/00_utils_Teststeckdose.cfg
DECT200_MSGCNT
89
DECT200_RAWMSG
0703001c00000015001000000000000c0000000f0004000000000001
DECT200_TIME
2013-07-18 11:29:13
DEF
16 switch
 
IODev
DECT200
LASTInputDev
DECT200
MSGCNT
89
NAME
Teststeckdose
NR
222
STATE
on
TYPE
FBDECT
id
16
props
switch

Readings
16
0000000000000000
2013-07-03 15:38:52
35
00000001
2013-07-14 21:32:53
37
000000100000000100000001000000140000000500000000000000000000000f00000000
2013-07-14 21:32:53
current
0.0145 A
2013-07-18 11:29:13
energy
38 Wh
2013-07-18 11:29:13
power
1.50 W
2013-07-18 11:29:13
powerFactor
0.000
2013-07-18 11:29:13
state
on
2013-07-18 11:29:13
voltage
228.989 V
2013-07-18 11:29:13

attr
 Teststeckdose 
room
Hobbyraum


Attributes
event-min-interval
power:120
deleteattr
room
Hobbyraum
deleteattr


Probably associated with
FileLog_Teststeckdose
FileLog
 
Ich habe da einen Luftentfeuchter (wg. Hochwasserschaden) dran und wollte mal berechnen, was ich da tatsächlich verbrauche, die Berechnung von AVM ist nämlich etwas merkwürdig...

Elektrolurch
 
configDB und Windows befreite Zone!

justme1968

ich habe keine fritzbox und weiss nicht genau was das start fhem macht. aber ich fürchte da werden noch ein paar ausgaben umgeleitet.

kannst du fhem mal direkt starten mit 'fhem.pl fhem.cfg'?

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

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

Elektrolurch

Hallo Andre,

das geht leider nicht, da da einige Pfade nicht gesetzt sind. Das wird im Skript startfhem gemacht. Da sind aber m.Mn. keine Umleitungen für die Ausgabe definiert:

#!/bin/sh

home=/var/InternerSpeicher/fhem

cd $home

trap "" SIGHUP
modprobe cdc_acm
modprobe ftdi_sio
sleep 2

ln -sf $home/FHEM/fhemcmd.sh /var/fhemcmd

PATH=$home:$PATH
export PATH

export LD_LIBRARY_PATH=$home/lib
export PERL5LIB=$home/lib/perl5/site_perl/5.12.2/mips-linux:$home/lib/perl5/site_perl/5.12.2:$home/lib/perl5/5.12.2/mips-linux:$home/lib/perl5/5.12.2

# add user fhem with uid of boxusr80/boxusr99 (== ftpuser)
# Comment/delete everything between START and END to run FHEM as root

perl fhem.pl fhem.cfg

Wie man sieht, erfolgt der Aufruf dann direkt ohne Umleitung. Leider gibt das also mehr nicht her.
Wenn ich das richtig verstehe:
1. Die Teststeckdose wird ja erkannt und die Werte können gelesen werden. Sieht ja man an den Internals, die ich oben gepostet habe. Danach hat das ja mit dem eigentlichen Device nichts mehr zu tun. Das perl-Skript muss jetzt aus dem Buffer des Devices die Werte gemäß meiner Weblink - Definition heraus lesen und da stürzt fhem ab. Oder perl= (ev. die Implementierung auf der FB?) Dafür kenne ich mich aber zu wenig aus.

Elektrolurch
configDB und Windows befreite Zone!

justme1968

du hast recht da wird nichts umgeleitet.

starte mal bitte ./startfhem im vordergrund (also ohne das '&') und lass das terminal offen. gibt es dann mehr ausgaben beim aufruf der webseite?


ich habe gesehen das deine steckdose kein temperature reading hat. das sollte aber eigentlich egal sein.

teste mal bitte folgendes:define ts dummy
attr ts room ts
define ts_Weblink weblink readings ts:voltage ts:energy ts:power ts:temperature *notime {{ 'ts.voltage' => 'Spannung: ', 'ts.energy' => 'Energieverbrauch gesamt: ', 'ts.power' => 'Aktueller Verbrauch: ', 'ts.temperature' => 'Temperatur: '}}
attr ts_Weblink room ts
{readingsSingleUpdate($defs{ts},"voltage", "228.989 V", 1)}
{readingsSingleUpdate($defs{ts},"energy", "38 Wh", 1)}
{readingsSingleUpdate($defs{ts},"power", "1.50 W", 1)}
{readingsSingleUpdate($defs{ts},"temperature", "123", 1)}

bitte über den "alles markieren link" auswählen und in ein telnet fenster pasten. nicht mit der maus markieren.
du solltest dann einen raum ts haben mit einem readings weblink der genau deine definition hat die werte aber aus dem dummy holt.

bei mir funktioniert das ohne probleme.

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

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

Elektrolurch

Hallo Andre,

jetzt habe ich erst einmal die temperature herausgenommen. Und mir ist da in der Fehlermeldung eins aufgefallen:




# Werte im Hobbyraum ausgeben

define Teststeckdose_Weblink weblink readings Teststeckdose:voltage \
Teststeckdose:energy Teststeckdose:power *notime \
{{'Teststeckdose.voltage' => 'Spannung: ', 'Teststeckdose.energy' => 'Energieverbrauch gesamt: ', 'Teststeckdose.power' => 'Aktueller Verbrauch: '}}
attr Teststeckdose_Weblink room Hobbyraum

führt zu folgender Ausgabe im Terminalfenster:
[ahaSvr] incomming UNIX connection accepted
Trailing \ in regex m/\/ at ./FHEM/98_weblink.pm line 190.
 {EE} ahaSvr@avm_home_external_receive_message: read on fd=26 failed: Success (0
 len read)
[ahaSvr] close INET connection (no-inet-addr:0 <- no-inet-addr:0) -> (fd=26, in_
use=24)

Ich sehe da aber kein "trailing \" in der regex?

Elektrolurch
configDB und Windows befreite Zone!

justme1968

schreib mal bitte dein define auf eine einzige zeile.

und probiere mal den Dummy aus dem post oben. genau so wie beschrieben über "alles markieren" und einfügen. nichts von hand machen.

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

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

Elektrolurch

Hallo Andre,

dass mit der einen Zeile hatte ich auch schon gerade gemacht. Gleiches Ergebnis. Jetzt steht da definitiv kein \ drin, aber die Fehlermeldung sagt das gleiche. Könnte sich die Angabe der Zeile sich auf das Modul beziehen, in der der "Weblink" codiert ist?

Dann mit dem dummy funktioniert es!!!

dummy
ts
???

ts_Weblink
Spannung:
228.989 V
Energieverbrauch gesamt:
38 Wh
Aktueller Verbrauch:
1.50 W
Temperatur:
123


Jetzt mal eine Verständnisfrage: Wie bekommt der dummy ts die Werte von der Teststeckdose? Da gibt es doch keine direkte Zuweisung? Also müsste ja da die regex in den {{ }} matcvhen?
Und der Operator "=>" kenne ich für die regex auch nicht. Ist das was fhem-spezifisches?
Was bedeutet die Option "*notime"? Die konnte ich nirgends in der commandref finden.
Strange...

Elektrolurch
configDB und Windows befreite Zone!

justme1968

bist du ganz sicher das deine steckdose auch 'Teststeckdose' heisst ?

bitte lösch mal den dummy und benenne deine steckdose in ts umdelete ts
rename Teststeckdose ts
. was passiert dann?

der dummy bekommt die werte nicht. in dem test code von oben werden einfach ein paar redings mit default werten im dummy erzeugt.

in meiner commandref steht das hier drin:
ZitatFor redings <argument> consist of one or more <device>[:regex] pairs, zero or more of the modifiers *noheading, *notime and *nostate and as the last argument an optional {} expression that should return a perl hash to map reading names to display names.
  • <device>
      the device(s) from which the readings should be taken
  • regex
      an optional regex to select the readings that should be displayed.
  • *noheading
      don't display the table heading
  • *notime
      don't display the reading timestamp
  • *nostate
      don't include the state reading, other readings can be excluded with a regex of the form:^((?!reading).)*$
  • {...}
      a perl expression that returns a hash that maps the reading name to the display name. keys can be either the name of the reading or <device>.<reading>. $NAME is replaced by the device name

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

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

Elektrolurch

Hallo Andre,

sakradi!!!
delete ts
rename Teststeckdose ts
Sie hieß schon "Teststeckdose!!! Aber jetzt geht's. Irgendwelche Zeichenkettenbegrenzungen? Der Code ist doch identisch! Brat mir einer einen Storch.
Und jetzt stehen da auch etwas andere Werte. 45 Watt seit gestern morgen, scheint plausibel, da der Luftentfeuchter auf Standby steht.
Danke. Aber was da falsch war...???

Elektrolurch
configDB und Windows befreite Zone!

justme1968

ich tippe auf irgendwelche sonderzeichen oder leerzeichen.

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

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

Elektrolurch

Hallo Andre,

hmm, die müssten ja dann im Beschreibungstext stehen...
Aber noch ein kleines Problem: Ich habe die Temperatur herausgenommen, da zwar in der Steckdose ein ensor ist, der wohl aber derzeit von AVM per SW noch nicht unterstützt wird.
Allerdings:
define ts_Weblink weblink readings ts:voltage ts:energy ts:power  *notime {{

führt doch zur Ausgabe von vier Werten. Da steht noch der Powerfaktor. Der wird wohl über "power" auch mit gemapt. Wie bekomme ich den weg?

Elektrolurch
configDB und Windows befreite Zone!

justme1968

ein leerzeichen würdest du nicht sehen.

versuch mal ts:power$

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

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

Elektrolurch

Hallo Andre,

danke. das mit dem $ funktioniert. Jetzt gibt es nur noch die gewünschte Ausgabe von "power". Um meine Lernphase noch zu vervollständigen (:-o):
Die Spannung "ts.voltage" wird mit drei Stellen hinter dem "." ausgegeben. Wo muss ich denn die Formatierung hereinschreiben, damit ich nur die Vorkommastellen bekomme=
Wenn ich
define ... Weblink readings ts."%%d03"voltage schreibe, bekomme ich keine Spannung mehr angezeigt, weil das ja wohl auch die Stelle ist, an der nach ts.voltage (dem Text der Variablen) gesucht wird. Wo kann ich denn die Ausgabe von voltage formatieren?

Elektrolurch
configDB und Windows befreite Zone!

justme1968

der weblink kann nur die readings aus dem original device 1:1 kopieren. wenn du also etwas ändern möchtest musst du es im original device mite einem userReading machen und dann dieses neue reading im weblink verwenden.

es wird demnächst ein eigenes modul geben das statt dem weblink zum zusamenkopieren von readings aus anderen devices verwendet werden sollte. dann wird auch eine formatierung möglich sein.

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

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