Philio Pan04

Begonnen von Thargor, 17 Oktober 2014, 22:47:48

Vorheriges Thema - Nächstes Thema

Thargor


Hallo zusammen,

ich habe heute einen Philio Pan04 (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



rudolfkoenig

Stichwort ist MULTI_CHANNEL, bzw. die Befehle "get mcEndpoints" und "get mcCapability chid".
Siehe auch den commandref Eintrag dazu.

Thargor

Danbke für die schnelle Antwort. Das sehe ich mir gleich mal an.

Thargor


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!

rudolfkoenig

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 :)

Thargor


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!

rudolfkoenig

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

Thargor


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



rudolfkoenig

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.

Thargor


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.


rudolfkoenig

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).

Thargor


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>

rudolfkoenig

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.

krikan

@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.

rudolfkoenig

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?