[patch] ZWave - MANUFACTURER_PROPRIETARY class: Jalousiemodus Fibaro FGRM 222

Begonnen von krikan, 28 September 2014, 15:10:44

Vorheriges Thema - Nächstes Thema

krikan

Zur Lammellensteuerung mit dem Fibaro FGRM 222 wird die MANUFACTURER_PROPRIETARY class benötigt. Mit angehängten Patch habe ich die Class in 10_ZWave.pm aufgrund der Angaben unter http://forum.micasaverde.com/index.php/topic,24050.0.html eingebaut und getestet.

Unterstützt werden dadurch in Fhem folgende neue Konfigurationseinstellungen:
Parameter 3 Wert 1: Jalousie Positions Report wird als Fibaro Kommando ausgewertet (Position und Winkel)
Parameter 10 Wert 2:  Jalousie Modus, mit Positionsunterstützung

Neue Kommandos:
get <device> position: derzeitige Position und Winkel beim Aktor anfordern
set <device> positionBlinds %: Jalousie wird in Position % gefahren; Lammellen stellen sich bei größeren Fahrten auf 0, bei kurzen Fahrten 1-3% wird ursprünglicher Winkel eingestellt
set <device> positionSlat %: Lammellen werden in Winkel % gefahren

Besonderheiten alter Kommandos:
bei set <device> dim %: Jalouise wird in Position % gefahren und Lammellen stellen sich auf den zuletzt eingestellten Winkel

Der Patch mit Doku ist getestet und läuft in meiner Kleinst-ZWave-Umgebung bisher ohne Probleme. Deswegen/Trotzdem bitte Kontrolle...

Gruß, Christian

rudolfkoenig

Das kann ich so nicht uebernehmen, schliesslich besagt MANUFACTURER_PROPRIETARY dass es nicht fuer alle gilt.
Ich habe in ZWave.pm fuer diese Faelle %manuf_proprietary angelegt, es wird model-Attribut abhaengig ausgewertet, und dein Patch angepasst. D.h. in der Zukunft musst Du fuer dieses Geraet das model Attribut setzen.

Bitte patches ohne tabs liefern (tab wird leider von jedem anders eingestellt, und ist deswegen unbrauchbar)
Hat wer Lust @zwave_models zu erweitern?
Weiss jemand, was der Unterschied zw. MANUFACTURER_SPECIFIC und MANUFACTURER_PROPRIETARY ist?

krikan

ZitatDas kann ich so nicht uebernehmen, schliesslich besagt MANUFACTURER_PROPRIETARY dass es nicht fuer alle gilt.
Ich habe in ZWave.pm fuer diese Faelle %manuf_proprietary angelegt, es wird model-Attribut abhaengig ausgewertet, und dein Patch angepasst. D.h. in der Zukunft musst Du fuer dieses Geraet das model Attribut setzen.
Danke für Deine Anpassung und Aufnahme.

ZitatWeiss jemand, was der Unterschied zw. MANUFACTURER_SPECIFIC und MANUFACTURER_PROPRIETARY ist?
Wenn ich es bei meinem Recherchen zum FGRM 222 richtig verstanden habe:
MANUFACTURER_SPECIFIC: Damit lässt sich ZWAVe-Gerät (Hersteller, Produkttyp und Produkt) genau identifizieren und würde wohl auch ein automatisiertes Setzen von model-Attributen ermöglichen. Sollte jedes Gerät haben. Reine Report/Get-Klasse. OpenZwave nutzt das zur Erkennung der Geräte aus https://code.google.com/p/open-zwave/source/browse/trunk/config/manufacturer_specific.xml.
MANUFACTURER_PROPRIETARY: Setzt die speziellen Anforderungen der Hersteller an eigene Gerätefunktionen um: Steuerung/Abfrage usw.
Technisch ist das detailliert hier auf PDF-Seite 124 und 125 beschrieben: https://github.com/yepher/RaZBerry/blob/master/docs/SDS11060-7%20%20Z-Wave%20Command%20Class%20Specification.pdf

rudolfkoenig

ZitatOpenZwave nutzt das zur Erkennung der Geräte aus https://code.google.com/p/open-zwave/source/browse/trunk/config/manufacturer_specific.xml.

Open-Zwave steht unter LGPL, d.h. wir duerfen diese Datei uebernehmen. Mal schauen, wann ich dazukomme.
Die anderen geraetespezifischen xmls sind auch sehr interessant, allerdings habe ich noch keinen Plan, wie man diese verwenden soll, und es sind mir auch zu viele Dateien, um diese mit update sinnvoll zu verteilen.

krikan

ZitatDie anderen geraetespezifischen xmls sind auch sehr interessant,...
Gut, dass Du die erwähnst ;). Hatte die außen vor gelassen, da ich keine Ahnung habe, wie ich Dir derzeit bei der Umsetzung helfen könnte.
Die in Fhem bspw. bei der Inklusion abzurufen wäre natürlich (Anwender-)arbeitserleichternd, da dann die manuelle Sucherei in Datenblättern und pepper1-Datenbank ein Ende hätte: Alle Config-Parameter mit Erläuterung stehen in den XMLs. Jedoch hatte ich in den XMLs zum FGRM 222 zur Steuerung über MANUFACTURER_PROPRIETARY irritierenderweise überhaupt nichts gefunden.

krikan

ZitatHat wer Lust @zwave_models zu erweitern?
Hatte ich gestern überlesen.
Wie stellst Du Dir das vor? Ist das eine reine Fleißaufgabe in Form von Auflistung aller bekannten Geräte enstprechend https://code.google.com/p/open-zwave/source/browse/trunk/config/manufacturer_specific.xml ? Das bekäme ich noch hin, wenn es Dir Arbeit abnimmt. Wenn es aber um richtige Programmierung geht, bin ich Dir keine große Hilfe :-[.
Oder ist das angesichts der potentiellen automatischen Zuordnungsmöglichkeit durch MANUFACTURER_SPECIFIC zu MANUFACTURER_PROPRIETARY überholt?

@all:
Im Wiki werde ich in den kommenden Tagen/Wochen die Anbindung/Ansteuerung des FGRM 222 näher beschreiben: http://www.fhemwiki.de/wiki/Z-Wave-FIB_FGRM-222-Rollladenaktor

rudolfkoenig

@zwave_models hat sich wg. der XML erledigt.

Nach etwas hin und herueberlegung werde ich das model Attribut in ein model Reading umwandeln, was via "get model" (umbenannt von get manufacturer) gefuellt wird -> dein FGRM222 Wiki muss dann angepasst werden.
Bin noch am ueberlegen, ob FHEM fuer fehlende Eintraege das get model nach dem Hochfahren bzw Paaren automatisch absetzen soll. Fuer die Geraetedateien habe ich auch was vor, es dauert aber etwas.

krikan

Zitat
dein FGRM222 Wiki muss dann angepasst werden
Kein Problem. Bei den Weiterentwicklungsaussichten ändere ich das gerne zig mal. Dann wünsche ich mir, dass Du viel Zeit und Lust zum Entwickeln hast.

rudolfkoenig

Habe die geaenderte Version eingecheckt. Neu:
- das Attribut model ist weg, man kann ein Reading model (und modelId) ueber "get DEVICE model" setzen.
- model wird aus modelId mit Hlfe der Datei FHEM/lib/openzwave_manufacturer_specific.xml uebersetzt.
- MANUFATURER_PROPRIETARY geht Modul-Intern ueber modelId, man kann mehrere Geraete ueber ein modelIdAlias zusammenfassen.

Die Verwendung der Geraetedateien habe ich erstmal nach hinten verschoben, wg. zu viel anderes FHEM-TODO.
Erinnere mich daran, falls wieder Ruhe eingekehrt ist.

krikan

Leider hakt es bei mir und ich finde meinen Fehler nicht:
Die speziellen Funktionen für den FGRM222 werden nach Abruf von get <device> model nicht mehr zur Verfügung gestellt.

Das Reading "model" enthält bei allen meinen Divces nur eine Hex-Kombination und keinen Klartext, wie ich Dich verstanden hatte. Bei allen Aufrufen von get <device> model erhalte ich einen Fehler im Log (Argument "" isn't numeric in sprintf at .....), siehe Log unten (edit: Das liegt an meinem Attribut stateFormat und hat wohl nichts mit dem eigentlichen Problem zu tuen, sorry.)

Readings für FGRM222  (ZWave_SWITCH_MULTILEVEL_4):
2014-10-04 13:47:44   model           0x010f 0x0301 0x1001
2014-10-04 13:47:44   modelId         010f-0301-1001


Log mit verbose 5 für get ZWave_SWITCH_MULTILEVEL_4 model :
2014.10.04 13:47:44 5: Cmd: >get ZWave_SWITCH_MULTILEVEL_4 model<
2014.10.04 13:47:44 2: ZWave get ZWave_SWITCH_MULTILEVEL_4 model
2014.10.04 13:47:44 5: SW: 01080013040272040591
2014.10.04 13:47:44 5: ZWDongle/RAW: /06
2014.10.04 13:47:44 5: ZWDongle/RAW: /0104011301e8
2014.10.04 13:47:44 5: SW: 06
2014.10.04 13:47:44 5: ZWDongle_Read ZWDongle_0: 011301
2014.10.04 13:47:44 5: ZWDongle_0 dispatch 011301
2014.10.04 13:47:44 5: ZWDongle/RAW: /010500130500ec
2014.10.04 13:47:44 5: SW: 06
2014.10.04 13:47:44 5: ZWDongle_Read ZWDongle_0: 00130500
2014.10.04 13:47:44 5: ZWDongle_0 dispatch 00130500
2014.10.04 13:47:44 4: ZWDongle_0 CMD:ZW_SEND_DATA ID:00 ARG:
2014.10.04 13:47:44 5: ZWDongle/RAW: /010e00040004087205010f0301100193
2014.10.04 13:47:44 5: SW: 06
2014.10.04 13:47:44 5: ZWDongle_Read ZWDongle_0: 00040004087205010f03011001
2014.10.04 13:47:44 4: ZWDongle_0 CMD:APPLICATION_COMMAND_HANDLER ID:04 ARG:087205010f03011001
Argument "" isn't numeric in sprintf at (eval 24525) line 1.
2014.10.04 13:47:44 5: Triggering ZWave_SWITCH_MULTILEVEL_4 (2 changes)
2014.10.04 13:47:44 5: Notify loop for ZWave_SWITCH_MULTILEVEL_4 modelId: 010f-0301-1001
2014.10.04 13:47:44 4: et: ZWave ZWave_SWITCH_MULTILEVEL_4 modelId: 010f-0301-1001 -> modelId: 010f.*.*
2014.10.04 13:47:44 4: et: ZWave ZWave_SWITCH_MULTILEVEL_4 model: 0x010f 0x0301 0x1001 -> model: 0x010f 0x0301 0x1001
2014.10.04 13:47:44 4: eventTypes: ZWave ZWave_SWITCH_MULTILEVEL_4 modelId: 010f-0301-1001 -> modelId: 010f.*.*
2014.10.04 13:47:44 4: eventTypes: ZWave ZWave_SWITCH_MULTILEVEL_4 model: 0x010f 0x0301 0x1001 -> model: 0x010f 0x0301 0x1001
2014.10.04 13:47:44 4: /fhem&detail=ZWave_SWITCH_MULTILEVEL_4&dev.getZWave_SWITCH_MULTILEVEL_4=ZWave_SWITCH_MULTILEVEL_4&cmd.getZWave_SWITCH_MULTILEVEL_4=get&arg.getZWave_SWITCH_MULTILEVEL_4=model / RL:1023 / text/html; charset=UTF-8 / Content-Encoding: gzip
/


Wenn Du mehr Infos brauchst, dann lass es mich bitte wissen.

rudolfkoenig

Das sind leider zwei Fehler auf einmal:
- model schaut so aus, falls das Modul die Datei FHEM/lib/openzwave_manufacturer_specific.xml nicht lesen kann. Sollte aber in diesem Fall eine Fehlermeldung auf verbose 1 ins loglevel schreiben. Oder wenn in der Datei die IDs nicht drin sind, deine sind aber drin, gerade geprueft. Mit meinem AN158 funktioniert es problemlos.
- das Problem der fehlenden Befehle war meine Baustelle: das habe ich gefixed und bei mir getestet (mit fake modelId), scheint zu funktionieren jetzt.

krikan

Zitat- model schaut so aus, falls das Modul die Datei FHEM/lib/openzwave_manufacturer_specific.xml nicht lesen kann. Sollte aber in diesem Fall eine Fehlermeldung auf verbose 1 ins loglevel schreiben. Oder wenn in der Datei die IDs nicht drin sind, deine sind aber drin, gerade geprueft. Mit meinem AN158 funktioniert es problemlos.
- Datei  FHEM/lib/openzwave_manufacturer_specific.xml ist da, Rechte sind OK, Datei hat Inhalt.
- Fehlermeldung habe ich im Code von 10_ZWave.pm gesehen, aber eben nicht im log stehen

model wird auch bei meinem Philio PSM02 nur mit Hex-Codes (x013c 0x0002 0x0002) gefüllt, auch hier keine Log-Fehlermeldungen.

Mache mal ein Update force und berichte...


rudolfkoenig

update "force" sollte nur dann noetig sein, fals update kaputt ist, und die neue Datei steht erst ab morgen um 8 fuer update zur Verfuegung

krikan

Habe mir die aktuellste 10_ZWave.pm aus dem SVN installiert:

Zusätzliche Befehle für FGRM222 sind da --> erledigt, Danke.

Reading model: die Buchstaben im Hex-Code der FHEM/lib/openzwave_manufacturer_specific.xml sind alle lowercase, habe darum Zeile 637 so geändert:
$lastMf = lc($1);
und damit beim FGRM222 Erfolg gehabt:
model:FIBARO System FGRM222 Roller Shutter Controller 2

In Zeile 643 sind auch noch uc-Konvertierungen. In der XML gibt es aber für die Untertypen Groß- und Kleinbuchstaben.


rudolfkoenig

Sorry fuer die Verwirrung, habes (diesmal hoffentlch besser) korrigiert.

krikan

Vielen Dank für Deine schnelle Änderung und insgesamt fürs Ein- und Umbauen.

Zitat
Die Verwendung der Geraetedateien habe ich erstmal nach hinten verschoben, wg. zu viel anderes FHEM-TODO.
Erinnere mich daran, falls wieder Ruhe eingekehrt ist.
Ist ja überhaupt nicht wichtig; nur leider befürchte ich, dass Dein TODO nicht gerade kleiner wird, wenn ich mir den Andrang derzeit durchlese...  ;)

rudolfkoenig

Wenigstens sagt mir keiner, in welcher Reihenfolg ich die TODOs abzuarbeiten habe.

Ich habe einige deviceconfig Aenderungen eingecheckt.
Es betrifft z.Zt. nur die Config (CONFIGURATION Class) Funktionen:
- die Config-Moeglichkeiten koennen samt Argument ausgewaehlt werden (set/get)
- Hilfe wird eingeblendet.
Voraussetzung: "get model" muss erneut durchgefuehrt werden, damit das modelConfig Reading gesetzt wird.

Was noch nicht geht: Rueckgabewerte von get Config werden nicht entschluesselt.
Firefox Select-Auswahl ist etwas  buggy, da es zu frueh die Hilfe holt. Chrome scheint zu funktionieren.

Das deviceconfig Dokument kann mit contrib/zwave_convertconfig aus den openzwave Quellen erstellt werden.
In der Datei sind noch mehr Klassen beschrieben, ich habe aber erstmal nicht vor, diese Daten auszuwerten.
Es sei denn, man erklaert mir wieso das gut waere.

Und die Hilfe koennte unter den Selects eingeblendet werden, ist mir aber z.Zt. noch zu aufwendig.
Insg. sollte ich das FHEMWEB-JavaScript Support mal ordentlich bauen, z.Zt. ist es ziemlich kaputt.

krikan

Danke für die richtige Reichfolge der Todos. Habe aber leider ein Problem bei den Config-Funktionen für den FGRM222 in Verbindung mit Firefox, das ich nicht allein gelöst bekomme:

In der set/get- Werteauswahlbox der Detailansicht scheint es eine Längenbeschränkung zu geben, die zu unvollständigen Wertauswahlmöglichkeiten führt:
https://code.google.com/p/open-zwave/source/browse/trunk/config/fibaro/fgrm222.xml:

  • In Zeile 21ff der XML wird das Label "Reports Type" definiert. Hieraus wird configReportsType. In der Werteauswahlbox gibt es nur eine Auswahlmöglichkeit "BlindPositionReportsSentToThe" statt der 2 in Zeile 24 und 25 genannten Werte.
  • In Zeile 45ff der XML wird das Label "Set lamellas back to previous position" definiert. Hieraus wird "ConfigSetLamellasBackToPrevious". In der Werteauswahlbox gibt es nur eine Auswahlmöglichkeit  "LamellasReturnToPreviouslySet" statt der 3 in in Zeile 48-50 genannten.
Wenn Du mehr Info oder Tests brauchst, lass es mich bitte wissen.

rudolfkoenig

ReportsType hat zwei Argumente:
<Item label="Blind position reports sent to the main controller using Z-Wave Command Class" value="0" />
<Item label="Blind position reports sent to the main controller using Fibar Command Class" value="1" />


Mit der aktuellen max 32-Byte auf Wortgrenze fallen halt beide zusammen.
Das andere Problem ist auf die gleiche Ursache zurueckzufuehren, wobei hier sogar die ersten 112 Zeichen gleich sind.

Faellt Dir was ein, wie man sie besser abkuerzen koennte?

krikan

1. Variante
Keine wirklich schöne, aber programmtechnisch vermutlich einfache Lösung:
Wenn ersten 32-Byte gleich, dann suchen bis Unterschied auftaucht und nur das anbieten, also
Z-Wave Command Class
Fibar Command Class

Hier passt es per Zufall, beim 2. Problembeispiel ist es schon nicht mehr so sinnig. Letztlich betrifft es beim schnellen Durchschauen der XML aber nicht die Masse an Parametern

2. Variante
Oder Du müsstest es komplett umstellen :-[. Vor Deiner Umsetzung, hatte ich zunächst folgende Vorgehensweise im Kopf, weil ich auf deine Klartext-Idee nicht gekommen bin (am Beispiel FGRM222-XML):
Zwave-Parameter "index" 13 wird als 1. Auswahlbox beim vorhandenen Befehl "ConfigByte" mit "label" als Hilfetext angeboten und 2. Auswahlbox ist "value" 0, 1 und 2 mit "Item label" als Hilfetext.
       oder
Zwave-Parameter "index" 13 wird als "Befehl" ConfigPara13 mit "label" als Hilfetext angeboten und value Werte-Auswahlbox ist "value" 0, 1 und 2 mit "Item label" als Hilfetext.

rudolfkoenig

Ich habe deine Variante 2 nicht verstanden, sie hat mich aber zur folgenden Loesung inspiriert: Falls eine Abkuerzung vorgenommen wird, dann wird an die Abkuerzung hinten das dazugehoerige Befehls-Byte angehaengt, und in der Hilfe die Abkuerzung erlaeutert. Siehe Anhang.

krikan

Danke. Der Fibaro funktioniert nun problemlos.

Bei meinem PSM02 wird anscheinend aber etwas zusammengefasst. Ich habe nur einen einzigen "config" Befehl statt vieler laut https://code.google.com/p/open-zwave/source/browse/trunk/config/philio/psm02.xml. Der Hilfetext, der angezeigt wird, gehört zum letzten "config" in der XML-Datei. Zum besseren Verständnis habe ich einen Screenshot angehängt.

Ähnliches Phänomen vermute ich beim Aeotec 4in1. Laut "list" in diesem Beitrag http://forum.fhem.de/index.php/topic,26827.msg208697.html#msg208697 gibt es ein Reading "configGroupReports". Hiernach https://code.google.com/p/open-zwave/source/browse/trunk/config/aeon_labs/alms.xml dürfte es aber doch nur ein configGroup1Reports, configGroup2Reports oder configGroup3Reports geben? Aber ich muss zugeben, dass diese XML wegen "Bitsets" bei "Group X Reports" für mich sowieso nicht eindeutig verständlich ist.

rudolfkoenig

PSM02 habe ich gefixt: der Text hat mit 2. angefangen, und ich habe alles nach Punkt geloescht, und nicht Buchstaben dann auch. Ersteres habe ich entfernt, war meiner Ansicht nach ueberfluessig.
Aeotec scheint auch zu funktionieren, kann aber sein, dass hier noch ein Problem mit configByte statt configLong besteht.

krikan

Alles Bestens: Config-Befehle meiner Z-Wave Geräte sind iO. Vielen Dank für Deinen Einsatz.