Hallo,
ich scheiter aktuell daran, meinen eigenen Sketch in FHEM einzubinden. Scheint ein Problem mit dem XML File für die Device Definition zu sein.
Ich vermute auch, dass es ggf. an dem FHEM Modul liegt, oder an dem Ding zwischen meinen Ohren ;-)
Um meinen Sketch bekannt zu machen habe ich mich an den Vorhanden Einträgen in der "devices.xml" orientiert.
Dort habe ich zugefügt:
<developer id="43" name="TeeVau">
<dev id="1" name="WindowController" label="Board to handle window blind and state of 2 windows"/>
</developer>
Zudem habe ich dann ein neues Verzeichnis angelegt mit dem Namen "TeeVau", im selben Verzeichnis wo die devices.xml liegt und z.B. die Verzeichnisse von "panStamp" und "justme" sind.
In dem Verzeichnis gibt es dann eine WindowController.xml mit dem Inhalt:
<?xml version="1.0"?>
<device>
<developer>TeeVau</developer>
<product>Window Controller</product>
<pwrdownmode>false</pwrdownmode>
<config>
<reg name="Window States" id="11">
<endpoint name="Windows 1" type="num" dir="inp">
<position>0</position>
<size>1</size>
</endpoint>
<endpoint name="Windows 2" type="num" dir="inp">
<position>1</position>
<size>1</size>
</endpoint>
</reg>
<reg name="Windows 1 Blind" id="12">
<endpoint name="Position" type="num" dir="out">
<size>1</size>
</endpoint>
</reg>
<reg name="Windows 2 Blind" id="13">
<endpoint name="Position" type="num" dir="out">
<size>1</size>
</endpoint>
</reg>
</regular>
</device>
In meinen Augen ist also alles richtig, nach einem restart von FHEM wird mein Sketch allerings nicht erkannt:
2013.11.15 03:41:59 2: no device xml found for productcode 0000004300000001
2013.11.15 03:41:59 2: no device xml found for productcode 0000004300000001
BTW: Ist das richtig, dass die Meldung 2 mal kommt?!
Ein Log mit Verbose 5 hat leider auch nicht mehr Infos gebracht.
get SWAP_02 deviceXML bringt:
$VAR1 = {};
get SWAP_02 products bringt:
$VAR1 = {
'000000010000000D' => {
'name' => 'respira',
'label' => 'Respira sensor for CO and NO2'
},
'000000010000000A' => {
'name' => 'pulsecounter',
'label' => 'Pulse counter'
},
'0000000100000002' => {
'name' => 'chronos',
'label' => 'SWAP-enabled Chronos watch'
},
'0000000100000001' => {
'name' => 'temphum',
'label' => 'Dual Temperature/Humidity sensor'
},
'000000010000000C' => {
'name' => 'binouts2',
'label' => 'Advanced Binary/PWM output module + repeater'
},
'000000010000000E' => {
'name' => 'soilmoisture',
'label' => 'Soil moisture sensor'
},
'000000010000000B' => {
'name' => 'meter',
'label' => 'Energy meter'
},
'0000000100000003' => {
'name' => 'rgbdriver',
'label' => 'RGB driver board'
},
'0000000100000009' => {
'name' => 'pulsegen',
'label' => 'Programmable pulse generator'
},
'0000000100000005' => {
'name' => 'temppress',
'label' => 'Dual Temperature-Barometric pressure sensor'
},
'0000000100000008' => {
'name' => 'lcddriver',
'label' => 'Alphanumeric 2x16 LCD driver'
},
'0000000100000006' => {
'name' => 'bininps',
'label' => 'Binary/Counter input module'
},
'0000002B00000001' => {
'name' => 'WindowController',
'label' => 'Board to handle window blind and state of 2 windows'
},
'0000000100000007' => {
'name' => 'binouts',
'label' => 'Binary/PWM output module'
},
'0000000100000004' => {
'name' => 'temp',
'label' => 'Temperature sensor'
},
'00' => {},
'0000004300000001' => {}
};
Scheint also wirklich ein Problem mit dem einlesen der XML zu sein.
Entferne ich aus der devices.xml alle Einträge, außer meinen Eigenen, bekomme ich nach einem restart folgendes lustiges:
2013.11.15 03:46:44 0: Server shutdown
2013.11.15 03:46:48 1: Including fhem.cfg
2013.11.15 03:46:49 3: telnetPort: port 7072 opened
2013.11.15 03:46:50 3: WEB: port 8083 opened
2013.11.15 03:46:50 3: WEBphone: port 8084 opened
2013.11.15 03:46:50 3: WEBtablet: port 8085 opened
2013.11.15 03:46:50 3: Opening CUL_0 device /dev/ttyACM0
2013.11.15 03:46:51 3: Setting CUL_0 baudrate to 9600
2013.11.15 03:46:51 3: CUL_0 device opened
2013.11.15 03:46:51 3: CUL_0: Possible commands: BCFiAZEGMRTVWXefmltux
2013.11.15 03:46:53 2: VIERA: defined with host: 192.168.178.31 and interval: 30
2013.11.15 03:46:53 2: eventTypes: loaded 1172 events from log/eventTypes.txt
2013.11.15 03:46:54 3: Opening FBF device 192.168.178.1:1012
2013.11.15 03:46:54 3: FBF device opened
2013.11.15 03:46:54 2: FB_CALLMONITOR: FBF found FritzBox phonebook /var/flash/phonebook
2013.11.15 03:46:55 2: FB_CALLMONITOR: FBF read 193 contacts from FritzBox phonebook
2013.11.15 03:46:55 3: Opening panStick device /dev/ttyUSB0
2013.11.15 03:46:55 3: Setting panStick baudrate to 38400
2013.11.15 03:46:55 3: panStick device opened
2013.11.15 03:47:02 0: Not an ARRAY reference at ./FHEM/34_SWAP.pm line 110, <$fh> line 765.
2013.11.15 03:47:02 3: Please define SWAP_F0 first
2013.11.15 03:47:02 3: Please define SWAP_F0 first
2013.11.15 03:47:03 0: Not an ARRAY reference at ./FHEM/34_SWAP.pm line 110, <$fh> line 771.
2013.11.15 03:47:03 3: Please define SWAP_0C first
2013.11.15 03:47:03 3: Please define SWAP_0C first
2013.11.15 03:47:03 0: Not an ARRAY reference at ./FHEM/34_SWAP.pm line 110, <$fh> line 777.
2013.11.15 03:47:03 3: Please define SWAP_C0 first
2013.11.15 03:47:03 0: Not an ARRAY reference at ./FHEM/34_SWAP.pm line 110, <$fh> line 782.
2013.11.15 03:47:03 3: Please define SWAP_02 first
2013.11.15 03:47:03 3: Please define SWAP_02 first
2013.11.15 03:47:03 1: configfile: Cannot load module SWAP
Please define SWAP_F0 first
Please define SWAP_F0 first
Cannot load module SWAP
Please define SWAP_0C first
Please define SWAP_0C first
Cannot load module SWAP
Please define SWAP_C0 first
Cannot load module SWAP
Please define SWAP_02 first
Please define SWAP_02 first
2013.11.15 03:47:03 1: Including ./log/fhem.save
2013.11.15 03:47:04 0: Server started with 123 defined entities (version $Id: fhem.pl 4208 2013-11-12 17:43:33Z rudolfkoenig $, os linux, user boxusr99, pid 2385)
2013.11.15 03:47:05 0: Not an ARRAY reference at ./FHEM/34_SWAP.pm line 110.
2013.11.15 03:47:05 0: ERROR: Cannot autoload SWAP
2013.11.15 03:47:05 3: panStick: Unknown code 000200030002000000004300000001, help me!
2013.11.15 03:47:28 0: Server shutdown
Im Anhang ist einmal mein Sketch für den PanStamp sowie meine devices.xml inkl. die Definition für meinen Sketch. Ich habe im Verdacht, dass es ggf. ein spezielles Problem mit der FBF ist.
Wäre super wenn das ggf. mal einer gegenchecken kann.
Gute Nacht, Tobias
der grund ist das die developer id (und alle anderen auch) im devices.xml in dezimal angegeben ist die sketches und das swap modul aber alle internen werte in hex angeben, verwenden und anzeigen.
wenn du genau hin schaust siehst du auch das in der 'get SWAP_02 products' list dein board unter 0000002B00000001 auftaucht.
wenn du die developer id im xml file mit 67 angibst sollte es passen.
gruss
andre
Hi André,
danke für den Hinweis. Das habe ich gar nicht bemerkt, war vielleicht doch schon zu spät ;-)
Hatte erst auch mit der Änderungkeinen Erfolg. Habe mal zum testen deine rgbdriver.xml verwendet und so getan, als würde das mein Sketch unterstützen, damit funktioniert es in FHEM.
Aber mit meiner XML habe ich keinen Erfolg. Das habe ich getestet:
Funktioniert:
<developer id="67" name="TeeVau">
<dev id="1" name="rgbdriver" label="XML von justme"/>
</developer>
FHEM stürzt ab:
<developer id="67" name="TeeVau">
<dev id="1" name="windowcontroller" label="XML von teevau"/>
</developer>
Ok...also habe ich deine rgbdriver umbenannt in windowscontroller.xml, damit stürzt FHEM nicht ab. Scheint also ein Problem in meiner XML zu sein.
Habe da in der Nacht mist zusammen geschrieben. Habe alles in den <config> Zweig gepackt, ohne dass es ein </config> gibt. Dafür habe ich dann auch noch ein </regular> ganz unten, ohne dass es ein <regular> gibt.
Fehler in der XML Stuktur wird also mit einem FHEM crash quittiert (zumidnest auf der FBF). Gut zu wissen. Habe alles geändert und sieht da: Kaum macht man es richtig, funktioniert alles :-)
PS. Mir ist aufgefallen, dass beim starten von FHEM auf der FBF immer folgende Fehlermeldung kommt (auch wenn diese augenscheinlich keine Auswirkung haben wollte ich es dich wissen lassen)
could not find ParserDetails.ini in /var/InternerSpeicher/fhem/lib/perl5/site_perl/5.12.2/XML/SAX
substr outside of string at ./FHEM/34_SWAP.pm line 696, <$fh> line 771.
Use of uninitialized value in hex at ./FHEM/34_SWAP.pm line 696, <$fh> line 771.
substr outside of string at ./FHEM/34_SWAP.pm line 696, <$fh> line 771.
Use of uninitialized value in hex at ./FHEM/34_SWAP.pm line 696, <$fh> line 771.
substr outside of string at ./FHEM/34_SWAP.pm line 696, <$fh> line 772.
Use of uninitialized value in hex at ./FHEM/34_SWAP.pm line 696, <$fh> line 772.
PPS:
ein "set SWAP_02 readDeviceXML" wird beantwortet mit:
can't read deviceXML for unknown ProductCode
Bug oder wieder ein Problem zwischen meinen Ohren? :-/
ein "get SWAP_02 deviceXML" liefert korrekt:
$VAR1 = {
'pwrdownmode' => 0,
'name' => 'WindowController',
'label' => 'XML rgbdriver von justme nur umbenannt',
'registers' => {
'11' => {
'name' => 'Window States',
'type' => 'regular',
'hwmask' => undef,
'endpoints' => [
{
'direction' => 1,
'position' => '0',
'name' => 'Windows_1',
'type' => 2,
'size' => 1
},
{
'direction' => 1,
'position' => '1',
'name' => 'Windows_2',
'type' => 2,
'size' => 1
}
],
'swversion' => undef
},
'13' => {
'name' => 'Windows 2 Blind',
'type' => 'regular',
'hwmask' => undef,
'endpoints' => [
{
'direction' => 2,
'name' => 'Position',
'type' => 2,
'size' => 1
}
],
'swversion' => undef
},
'12' => {
'name' => 'Windows 1 Blind',
'type' => 'regular',
'hwmask' => undef,
'endpoints' => [
{
'direction' => 2,
'name' => 'Position',
'type' => 2,
'size' => 1
}
],
'swversion' => undef
}
}
};
ich schau mal ob ich das xml parsen in ein eval stecken kann damit es im fehler fall nicht alles zum abstürzen bring.
mach mal bitte ein list auf dein SWAP_02 device. gibt es in den infernal values einen product code?
hat du (vielleicht von irgendwelchen tests) noch andere swap device in deiner config? vielleicht welche die unvollständig definiert sind oder bei denen das attribut productcode falsch gesetzt ist?
gruss
andre
Zitat von: justme1968 am 15 November 2013, 19:19:58
mach mal bitte ein list auf dein SWAP_02 device. gibt es in den infernal values einen product code?
Gerne:
Internals:
DEF 02
Developer TeeVau
IODev panStick
LASTInputDev panStick
MSGCNT 85
NAME SWAP_02
NR 170
Product Board to handle window blind and state of 2 windows
STATE set-regSet
SWAP_00-ProductCode 0000004300000001
SWAP_00.1-ManufacturerID 00000043
SWAP_00.2-ProductID 00000001
SWAP_01-HardwareVersion 00000001
SWAP_02-FirmwareVersion 00000001
SWAP_03-SystemState 01
SWAP_04-FrequencyChannel 00
SWAP_05-SecurityOption 00
SWAP_06-SecurityPassword 00
SWAP_07-SecurityNonce 27
SWAP_08-NetworkID B547
SWAP_09-DeviceAddress 02
SWAP_0A-PeriodicTxInterval 000A
SWAP_Sent_unconfirmed 0 Sent_unconfirmed
SWAP_lastRcv 2013-11-15 20:25:15
SWAP_lastSend 2013-11-15 20:18:45
SWAP_nonce 01
TYPE SWAP
addr 02
devices
nonce 1
panStick_LQI 48
panStick_MSGCNT 85
panStick_RAWMSG (1930)000200010002000000004300000001
panStick_RSSI -61.5
panStick_TIME 2013-11-15 21:31:52
Readings:
2013-11-15 19:36:37 0B.0-Windows_1 56
2013-11-15 19:36:37 0B.1-Windows_2 56
2013-11-15 20:18:46 0C-Position AB
2013-11-15 19:36:38 0D-Position 00
2013-11-15 20:18:45 state set-regSet
Product:
label Board to handle window blind and state of 2 windows
name WindowController
pwrdownmode 0
Registers:
11:
hwmask
name Window States
swversion
type regular
endpoints:
HASH(0x1178328)
HASH(0x1179b28)
12:
hwmask
name Windows 1 Blind
swversion
type regular
endpoints:
HASH(0x1177dc8)
13:
hwmask
name Windows 2 Blind
swversion
type regular
endpoints:
HASH(0x1179d48)
sentList:
Attributes:
room SWAP
Zitat von: justme1968 am 15 November 2013, 19:19:58
hat du (vielleicht von irgendwelchen tests) noch andere swap device in deiner config? vielleicht welche die unvollständig definiert sind oder bei denen das attribut productcode falsch gesetzt ist?
Vom autocreate gab es noch SWAP_F0. Habe es gelöscht, aber die Fehlermeldung kommt dennoch. Das Problem hat jetzt für mich keine hohe Priorität, mir ist es lediglich aufgefallen :-)
das attribut ProductCode ist nicht gesetzt. mir ist nicht ganz klar warum nicht. es wird eigentlich automatisch gesetzt.
wenn dir danach ist setz es mal von hand und schau ob die fehlermeldung dann weg ist.
gruss
andre
Wenn ich es per Hand setzte geht es. Danke für den Hinweis! :-)
Wäre es nicht sinnvoller die ProductID aus den INTERNALS zu lesen? Oder hat das mit dem attr einen anderen Sinn?
die internals habe ich erst wenn das device wirklich ausgelesen wird. das geht bei den batterie betriebenen aber nicht wenn sie schlafen.
das attribut wird persistent gespeichert und normalerweise automatisch gesetzt. ist also da auch wenn das device nicht antwortet.
es ist nicht wirklich elegant es zwei mal zu haben aber ich habe noch keine bessere Idee gehabt.
gruss
andre