Hallo zusammen,
ich habe heute einen Philio Pan04 (PHI_PAN04 http://manuals.zwaveeurope.com/make.php?lang=en&type=mini&sku=PHI_PAN04 (http://manuals.zwaveeurope.com/make.php?lang=en&type=mini&sku=PHI_PAN04)) eingebaut bzw. bin gerade am Testen. Das ganze hängt an einem Aeon Labs Z-Wave USB Stick. Inklusion, Assoziation und Konfig (get Device model) hat prima funktioniert.
Nun hat Ding ja zwei Relais und ich stehe nun vor einem Verständnisproblem. Wie kann ich denn nun beide Relais unabhängig schalten/monitoren? Muss ich dazu jeweils per Config den "Endpoint" setzen, bevor ich On oder Off schicke? Und wie komme ich an die zwei Verbrauchswerte getrennt?
Ich wäre für jeden Tipp dankbar!
Gruß Lars
Anbei noch das List Device:
Internals:
DEF 0184d308 3
IODev ZWaveUSB
LASTInputDev ZWaveUSB
MSGCNT 21
NAME ZWave_SWITCH_BINARY_3
NR 745
STATE On
TYPE ZWave
ZWaveUSB_MSGCNT 21
ZWaveUSB_RAWMSG 000400030e3202213400000000000000000000
ZWaveUSB_TIME 2014-10-17 22:30:07
homeId 0184d308
id 03
lastMsgTimestamp 1413577828
CHANGETIME:
Helper:
Dblog:
Cmd:
Mydblog:
TIME 1413577371.85854
VALUE ZW_APPLICATION_UPDATE
Configselectedendpoint:
Mydblog:
TIME 1413577828.52686
VALUE 1
Model:
Mydblog:
TIME 1413577407.68917
VALUE Philio Technology Corporation PAN04-1 Double Relay Switch 2x1.5kW with Power Measurement
Modelconfig:
Mydblog:
TIME 1413577407.68917
VALUE philio/pan04.xml
Modelid:
Mydblog:
TIME 1413577407.68917
VALUE 013c-0001-0003
Power:
Mydblog:
TIME 1413577807.23604
VALUE 0 W
Reportedstate:
Mydblog:
TIME 1413577480.70596
VALUE on
State:
Mydblog:
TIME 1413577724.20536
VALUE configkWhMeterReportPeriod 12
Readings:
2014-10-17 22:22:51 CMD ZW_APPLICATION_UPDATE
2014-10-17 22:30:28 configSelectedEndPoint 1
2014-10-17 22:23:27 model Philio Technology Corporation PAN04-1 Double Relay Switch 2x1.5kW with Power Measurement
2014-10-17 22:23:27 modelConfig philio/pan04.xml
2014-10-17 22:23:27 modelId 013c-0001-0003
2014-10-17 22:30:07 power 0 W
2014-10-17 22:24:40 reportedState on
2014-10-17 22:28:44 state configkWhMeterReportPeriod 12
Attributes:
IODev ZWaveUSB
classes BASIC SWITCH_BINARY SWITCH_ALL MANUFACTURER_SPECIFIC VERSION METER MULTI_CHANNEL ASSOCIATION CONFIGURATION ALARM
room ZWave
Stichwort ist MULTI_CHANNEL, bzw. die Befehle "get mcEndpoints" und "get mcCapability chid".
Siehe auch den commandref Eintrag dazu.
Danbke für die schnelle Antwort. Das sehe ich mir gleich mal an.
Hallo zusammen,
mit "get mcCapability chid" konnte ich jetzt die Kanäle einrichten, so dass ich beide unabhängig schalten kann.
Allerdings fehlern mir noch die Verbrauchswerte. Ich habe mal den Report auf 60s eingestellt (Parameterwert 12) und bekomme nun in ZWave_SWITCH_BINARY_3 auch alle 60s einen neuen Power Wert (der allerdings immer 0W ist). Der Energieverbrauch in kWh wird leider nicht gesendet (auch auf 60s eingestellt). Ich kann ihn jedoch per get <device> meter abfragen. Laut manual sollte der eigentlich auch gesendet werden.
Die eigentlichen Endpoints bekommen keinen Leistungs-Wert (power), allerdings kann man auch hier per get meter, den Energieverbrauch (kWh) abfragen (kommt auch nicht automatisch).
Unter classes finde ich bei den Endpoints:
UNKNOWN_03 UNKNOWN_10 UNKNOWN_01 SWITCH_BINARY METER
Muss da noch etwas nachgetragen/konfiguriert werden?
Und dann bin ich mir jetzt unsicher ob es am Device oder FHEM liegt, dass ich: keine Power und keine Energieverbrauchswerte nach 60s in den Endpoints bekomme, keine Energieverbrauchswerte im Stamm-Device jede 60s bekomme?
Anbei mal das Logfile:
2014.10.20 12:04:43 5: ZWDongle/RAW: /0114000400030e3202213400000001000000000000c6
2014.10.20 12:04:43 5: SW: 06
2014.10.20 12:04:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000001000000000000
2014.10.20 12:04:43 5: ZWaveUSB dispatch 000400030e3202213400000001000000000000
2014.10.20 12:04:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000001000000000000
2014.10.20 12:04:43 5: ZWDongle/RAW: /0114000400030e3202213400000000000000000000c7
2014.10.20 12:04:43 5: SW: 06
2014.10.20 12:04:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000000000000000000
2014.10.20 12:04:43 5: ZWaveUSB dispatch 000400030e3202213400000000000000000000
2014.10.20 12:04:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000000000000000000
2014.10.20 12:04:43 5: ZWDongle/RAW: /0114000400030e3202213400000000000000000000c7
2014.10.20 12:04:43 5: SW: 06
2014.10.20 12:04:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000000000000000000
2014.10.20 12:04:43 5: ZWaveUSB dispatch 000400030e3202213400000000000000000000
2014.10.20 12:04:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000000000000000000
2014.10.20 12:05:43 5: ZWDongle/RAW: /0114000400030e3202213400000002000000000000c5
2014.10.20 12:05:43 5: SW: 06
2014.10.20 12:05:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000002000000000000
2014.10.20 12:05:43 5: ZWaveUSB dispatch 000400030e3202213400000002000000000000
2014.10.20 12:05:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000002000000000000
2014.10.20 12:05:43 5: ZWDongle/RAW: /0114000400030e3202213400000000000000000000c7
2014.10.20 12:05:43 5: SW: 06
2014.10.20 12:05:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000000000000000000
2014.10.20 12:05:43 5: ZWaveUSB dispatch 000400030e3202213400000000000000000000
2014.10.20 12:05:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000000000000000000
2014.10.20 12:05:43 5: ZWDongle/RAW: /0114000400030e3202213400000000000000000000c7
2014.10.20 12:05:43 5: SW: 06
2014.10.20 12:05:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000000000000000000
2014.10.20 12:05:43 5: ZWaveUSB dispatch 000400030e3202213400000000000000000000
2014.10.20 12:05:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000000000000000000
Vielen Dank!
Alles Fragen, die ich nicht beantworten kann.
Das Log hilft nicht, da die Werte offensichtlich nicht gemeldet werden.
Wenn sie (nach dem get) gemeldet werden, dann kann FHEM sie dekodieren.
Entweder Bug in Firmware, oder man muss weitere Associations/Configs setzen. Oder das Geraet kann entweder/oder melden. Oder was anderes :)
Vielen Dank erstmal.
Wie kann man denn die Logeinträge entziffern? Wie erkenne ich denn einen Eintrag, der vom Sensor kommt? Die Meldung landet erst im ZWave-USB und wird dann von FHEM "abgefragt"? Oder wie muss ich mir das vorstellen?
Ich habe nochmal ein wenig weitergegraben und folgende (umfangreichere) Doku gefunden:
http://www.z-wave.pl/pl/p/file/fdb444d2278fe304c9f6b53d75680037/PAN04-1-2-3-manual-20131230.pdf
Laut Doku sollten die Endpoints folgende Klassen haben:
BINARY_SWITCH_GET, BINARY_SWITCH_SET, METER_SUPPORTED_GET,
METER_RESET,METER_GET
Das Gerät bietet 3 Associations: 1 = Relay 1 und 2, 2 = Relay 1, 3= Relay 2
Ich habe alle drei Gruppen mit ZWaveUSB assoziiert. Macht das eventuell Probleme?
Laut Doku kann man mit "get meter" via Parameter Energieverbrauch, Leistung und Spannung abfragen. Momentan liefert FHEM immer den Energieverbrauch. Keine Ahnung inwiefern das Standard ist.
Komisch erscheint mir auch die Power Angabe, die bei mir immer 0 ist.
Die Doku sagt dazu:
When receiving Meter Get Command, it will report Meter Report Command to
the node asked.
Meter Get Command: [Command Class Meter, Meter Get, Scale =0x02(W)]
Meter Report Command: [Command Class Meter,Meter Report,scale(bit
2) +Rate Type +Meter Type,Precision + Scale(bit 1,0)+ Size,Meter
Value 1,Meter Value 2,Meter Value 3,Meter Value 4]
Rate Type = 0x01
Meter Type = 0x01
Precision = 1
Scale = 0x02(W)
Size = 4 Bytes (Meter Value)
Meter Value 1 = (W) MSB
Meter Value 2 = (W)
Meter Value 3 = (W)
Meter Value 4 = (W)LSB
Example:
Meter Value 1 = 0x00 (W)
Meter Value 2 = 0x00 (W)
Meter Value 3 = 0x03 (W)
Meter Value 4 = 0xEA (W)
Meter(W) = Meter Value 3 *256 + Meter Value 4 = 100.2W
Mir erscheint die Berechnung ein wenig untypisch :-)
Hier ist ein entsprechender Log Ausschnitt von einem Report, der mir 0W liefert. Könntest Du mir mal bitte die entsprechenden Zeilen erläutern. Vielleicht komme ich dann selber weiter :-)
2014.10.20 14:05:43 5: ZWDongle/RAW: /0114000400030e3202213400000000000000000000c7
2014.10.20 14:05:43 5: SW: 06
2014.10.20 14:05:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000000000000000000
2014.10.20 14:05:43 5: ZWaveUSB dispatch 000400030e3202213400000000000000000000
2014.10.20 14:05:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000000000000000000
2014.10.20 14:05:43 5: ZWDongle/RAW: /0114000400030e3202213400000000000000000000c7
2014.10.20 14:05:43 5: SW: 06
2014.10.20 14:05:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000000000000000000
2014.10.20 14:05:43 5: ZWaveUSB dispatch 000400030e3202213400000000000000000000
2014.10.20 14:05:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000000000000000000
2014.10.20 14:05:43 5: ZWDongle/RAW: /0114000400030e3202213400000000000000000000c7
2014.10.20 14:05:43 5: SW: 06
2014.10.20 14:05:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000000000000000000
2014.10.20 14:05:43 5: ZWaveUSB dispatch 000400030e3202213400000000000000000000
2014.10.20 14:05:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000000000000000000
Vielen Dank!
ZWDongle/RAW: Daten direkt vom Dongle, nach hex Konvertierung, damit man es lesen kann
SW:06: Ack an Dongle, hab Daten bekommen
ZWDongle_Read: "Nutzdaten" ohne Header und Checksum
CMD: APPLICATION_COMMAND_HANDLER sind "normale" Nachrichten vom Geraet
ID: ist nodeId der Sender
ARG: die dritte und vierte Stelle (32) gibt in diesem Fall (APPLICATION_COMMAND_HANDLER) die Klasse an, 32 == METER. Das wird laut %zwave_class/parse mit ZWave_ParseMeter verdaut.
fhem> { ZWave_ParseMeter("213400000000000000000000") }
power:0 W
Vielen Dank. Das bringt ein wenig Licht in die Sache.
Ich bekomme jetzt Power-Werte. Wie es aussieht werden drei Werte geschickt: Gesamt, Relay1 und Relay2
Allerdings lassen sich die Werte wohl nicht zuordnen, da im Report nicht steht zu welchem Endpoint sie gehören. Die letzten Stellen im RAW sind wohl die Checksumme, oder?
2014-10-20_18:28:43 59.9 W
2014-10-20_18:28:43 21.7 W
2014-10-20_18:28:43 38.2 W
2014.10.20 18:28:43 5: ZWDongle/RAW: /0114000400030e320221340000025700000000000092
2014.10.20 18:28:43 5: SW: 06
2014.10.20 18:28:43 5: ZWDongle_Read ZWaveUSB: 000400030e3202213400000257000000000000
2014.10.20 18:28:43 5: ZWaveUSB dispatch 000400030e3202213400000257000000000000
2014.10.20 18:28:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e3202213400000257000000000000
2014.10.20 18:28:43 5: ZWDongle/RAW: /0114000400030e32022134000000d90000000000001e
2014.10.20 18:28:43 5: SW: 06
2014.10.20 18:28:43 5: ZWDongle_Read ZWaveUSB: 000400030e32022134000000d9000000000000
2014.10.20 18:28:43 5: ZWaveUSB dispatch 000400030e32022134000000d9000000000000
2014.10.20 18:28:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e32022134000000d9000000000000
2014.10.20 18:28:43 5: ZWDongle/RAW: /0114000400030e320221340000017e000000000000b8
2014.10.20 18:28:43 5: SW: 06
2014.10.20 18:28:43 5: ZWDongle_Read ZWaveUSB: 000400030e320221340000017e000000000000
2014.10.20 18:28:43 5: ZWaveUSB dispatch 000400030e320221340000017e000000000000
2014.10.20 18:28:43 4: ZWaveUSB CMD:APPLICATION_COMMAND_HANDLER ID:03 ARG:0e320221340000017e000000000000
ZitatDie letzten Stellen im RAW sind wohl die Checksumme, oder?
Ja, siehe ZWDongle_CheckSum.
Wenn man die 3 Werte anhand der Reihenfolge ausseinander halten muss, dann bedeutet das extra Code/Datenstrukturen/etc, da fuer sowas noch keine Vorlage existiert. Und wenn einer der Nachrichten verlorengeht, dann wird falsch zugeordnet.
Nein, da würde ich auch die Finger davon lassen, irgendwas speziell für das Device einzubauen.
Ich kann die Werte ja auch abholen, bislang allerdings nur die kWh. Man kann laut Doku mit dem get meter Kommando allerdings auch andere Größen abfragen, wenn man den Parameterwert ändert:
Momentan sieht das bei mir so aus:
2014.10.21 14:18:33 5: SW: 010c00130306600d0103320105bc
Aufgedröselt:
010c00130306600d01 03 32 01 Endpoint 0x03, Commandoklasse 0x32, Parameter 0x01
Mit 010c00130306600d01 03 32 02 sollte man nun eigentlich die aktuelle Leistung bekommen (Parameter 0x02)
(Kann ich das aus FHEM mit einer Funktion heraus mal testen?)
Parameter 0x04 liefert Spannung
Parameter 0x05 liefert den aktuellen Strom
Ich weiß aber nicht inwiefern das Devicespezifisch ist?
Zudem fände ich die Klasse METER_RESET ganz nützlich, dann könnte man die kWh auf 0 setzen.
ZitatMomentan sieht das bei mir so aus:
...
Da muesste man weitere Eintraege in zwave_class einbauen nach get meter (und dokumentieren):
meterWithPar => "01%02x",
meterVoltage => "0105",
...
(weiss nicht, ob ich richtig geraten habe).
ZitatIch weiß aber nicht inwiefern das Devicespezifisch ist?
Weiss ich auch nicht, muesste aber in der Command Class Specification (SDS11060) drinstehen.
Kannst gerne ZWave_ParseMeter erweitern und Patch schicken.
ZitatZudem fände ich die Klasse METER_RESET ganz nützlich, dann könnte man die kWh auf 0 setzen.
Ich baue getestete Patches gerne ein (commandref-doku unten in .pm nicht vergessen).
Anbei der Patch, so wie er hier für mich nun seit ein paar Tagen funktioniert.
Die ursprüngliche Auswertung in getmeter habe ich so gelassen (da die nach der SDS11060 Doku implementiert ist) und zwei Sonderfälle eingebaut. Ob man das so generell übernehmen soll, musst du dann entscheiden.
Gruß Lars
--- 10_ZWave.pm
+++ /volume1/@appstore/FHEM/share/fhem/FHEM/10_ZWave.pm
@@ -92,7 +92,10 @@
get => { smStatus => "04" },
parse => { "..3105(..)(..)(.*)" => 'ZWave_ParseMultilevel($1,$2,$3)'},},
METER => { id => '32',
- get => { meter => "01", },
+ get => { meter => "01",
+ meterWatt => "0110", #Philio PHI_PAN04: Watt
+ meterVoltage=> "0120", #Philio PHI_PAN04: Voltage
+ meterAmpere => "0128",}, #Philio PHI_PAN04: Ampere
parse => { "..3202(.*)"=> 'ZWave_ParseMeter($1)' }, },
ZIP_ADV_SERVER => { id => '33', },
ZIP_ADV_CLIENT => { id => '34', },
@@ -533,6 +536,8 @@
my $unit = $txt eq "undef" ? "undef" : $unit{$txt}[$scale];
$txt = "power" if ($unit eq "W");
$v3 = hex(substr($v3, 0, 2*$size))/$prec;
+ if (($prec==100) && ($scale==1) && ($size==2)) {$unit="A"; $txt="current"} #Philio PHI_PAN04 Current
+ if (($prec==10) && ($scale==0) && ($size==2)) {$unit="V"; $txt="voltage"} #Philio PHI_PAN04 Voltage
return "$txt:$v3 $unit";
}
@@ -1357,7 +1362,16 @@
<li>meter<br>
request the meter report.
</li>
-
+ <li>meterWatt<br>
+ request the power report (Philio PHI_PAN04)
+ </li>
+ <li>meterVoltage<br>
+ request the voltage report (Philio PHI_PAN04)
+ </li>
+ <li>meterAmpere<br>
+ request the current report (Philio PHI_PAN04)
+ </li>
+
<br><br><b>Class MULTI_CHANNEL</b>
<li>mcEndpoints<br>
return the list of endpoints available, e.g.:<br>
Da mir nicht so recht passt, dass die PAN04 spezifische Aenderungen bei allen Geraeten auftauchen, habe ich es model-spezifisch gemacht. D.h. man muss erst ein "get pan04 model" durchfuehren, damit modelId gesetzt wird (auf 013c-0001-0003). Danach sind die zusaetzlichen meter Kommandos sichtbar. ParseMeter fuehrt die Sonderbehandlung der Pakete auch nur in diesem Fall aus.
Damit ist der Weg gelegt fuer weitere Ausnahmefaelle.
@Rudi:
Der PAN04 nutzt laut http://www.z-wave.pl/pl/p/file/fdb444d2278fe304c9f6b53d75680037/PAN04-1-2-3-manual-20131230.pdf die Command Class Meter v3. Diese ändert unter anderem die Skalierung (openzwave hat weiter Infos; bin aber noch nicht tiefer eingestiegen). Ich würde die Änderungen darum nicht als gerätespezifisch betrachten, sondern eben als Nutzung der neueren Command Class, die man mit "classVersion" ermitteln kann. Bei der Behandlung als gerätespezifisch müsste man immer alles manuell im Code ändern, wenn andere Geräte die neuere Version nutzen. Ist das so geplant? Das betrifft nämlich auch meinen Wakup v2 Patch von gestern und spielt bei der Behandlung der Befehle an batteriebetriebene Geräte eine Rolle.
Ich bin offen fuer bessere Loesungen.
Das konkrete Problem was ich mit der Versionen (die bisher in FHEM nicht realisiert sind) sehe, dass man dann fuer jede einzelne Klasse einen Extra-Call absetzen muss, um zu wissen, welche Version implementiert ist. Und dass meine Version der Doku die v3 der Meter-Klasse nicht beschreibt. Heisst aber beides nicht, dass wir das nicht "richtig" implementieren sollten. Ich schau mal, was ich tun kann. Weiss jemand, wo/wie man an eine aktuelle Dokumentation kommt, ohne Mitglied in irgendeinem Verein zu werden?
Verstehe die Probleme. Aber würde Deine Abfrage-Lösung "für jede einzelne Klasse einen Extra-Call absetzen" befürworten. Letztlich braucht man diese Abfrage nur einmalig pro Gerät bspw. bei der Inklusion durchführen und hat dann die passenden Befehle für immer ermittelt. Abschätzen kann ich den Programmieraufwand und das drumherum aber nicht. Doku zu v3 kann ich leider nicht liefern.
Push:
ZitatWeiss jemand, wo/wie man an eine aktuelle Dokumentation kommt, ohne Mitglied in irgendeinem Verein zu werden?
Zitat von: rudolfkoenig am 27 Oktober 2014, 19:01:17
Da mir nicht so recht passt, dass die PAN04 spezifische Aenderungen bei allen Geraeten auftauchen, habe ich es model-spezifisch gemacht. D.h. man muss erst ein "get pan04 model" durchfuehren, damit modelId gesetzt wird (auf 013c-0001-0003). Danach sind die zusaetzlichen meter Kommandos sichtbar. ParseMeter fuehrt die Sonderbehandlung der Pakete auch nur in diesem Fall aus.
Damit ist der Weg gelegt fuer weitere Ausnahmefaelle.
Ich habe gerade auf deine Version geupdatet:
Das Problem bei der aktuellen Lösung ist, dass man in den Multichannel Devices die modelID per Hand setzen muss, sonst kommt man nicht an die neuen Befehle in den Multichannel Devices ran.
Eigentlich muss man das "get model" Befehl ausfuehren, der Rest sollte automatisch gesetzt sein.
Und wie krikan das anderweitig schon vorgeschlagen hat, waere die unterscheidung nach Klassen-Version besser, ist aber TODO.
Zitat von: rudolfkoenig am 04 November 2014, 15:22:19
Eigentlich muss man das "get model" Befehl ausfuehren, der Rest sollte automatisch gesetzt sein.
Die Multichannel bekommen aber kein "get model" Befehl.
Vielleicht fehlt da noch eine Klasse? Aktuell steht da bei mir: UNKNOWN_03 UNKNOWN_10 UNKNOWN_01 SWITCH_BINARY METER