Neues Modul HMCCU für Homematic CCU

Begonnen von zap, 19 August 2015, 19:45:30

Vorheriges Thema - Nächstes Thema

Nic0205

Hi, ja habe 10 FensterKontakte 6 gehen, 4 nicht :-( 

Get d_ccu devicelist hat zwar rund 280 Kanäle geladen,  aber am Verhalten ändert sich leider nichts :-(

Gesendet von meinem GT-I9505 mit Tapatalk


zap

Ok, poste mal bitte ein "list <devname>" von einem Device das geht und von einem das nicht geht. Ausserdem die Definition und die Attribute von einem das geht.

2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

Nic0205

So sieht es bei einem aus, der nicht funktioniert :


Internals:
   CHANGED
   DEF        LEQ1060645:1 readonly
   IODev      d_ccu
   NAME       Schlafzimmer_Fenster
   NR         68
   STATE      Error
   TYPE       HMCCUCHN
   ccuaddr    LEQ1060645:1
   ccudevstate Active
   ccuif      BidCos-RF
   ccuname    Fenster Schlafzimmer
   ccutype    HM-Sec-SC-2
   channels   1
   statevals  readonly
   Readings:
     2016-07-25 21:01:53   Fenster_Schlafzimmer.STATE 0
     2016-07-26 10:09:07   state           Error
Attributes:
   IODev      d_ccu
   ccureadingfilter (ERROR|LOWBAT|STATE)
   devStateIcon closed:10px-kreis-gruen open:10px-kreis-rot
   event-on-change-reading .*
   substitute STATE!(0|false):0,(1|true):1;LOWBAT!(0|false):0,(1|true):1

Gesendet von meinem GT-I9505 mit Tapatalk


Nic0205

Und so sieht es bei einem aus der funktioniert :

nternals:
   DEF        LEQ0175072:1 readonly
   IODev      d_ccu
   NAME       Kueche_Fenster
   NR         29
   STATE      0
   TYPE       HMCCUCHN
   ccuaddr    LEQ0175072:1
   ccudevstate Active
   ccuif      BidCos-RF
   ccuname    Fenster_Kueche
   ccutype    HM-Sec-SC-2
   channels   1
   statevals  readonly
   Readings:
     2016-07-25 20:35:39   Fenster_Kueche.ERROR 0
     2016-07-25 20:35:39   Fenster_Kueche.LOWBAT 0
     2016-07-25 20:35:39   Fenster_Kueche.STATE 0
     2016-07-25 20:35:39   state           0
Attributes:
   IODev      d_ccu
   ccureadingfilter (ERROR|LOWBAT|STATE)
   devStateIcon closed:10px-kreis-gruen open:10px-kreis-rot
   event-on-change-reading .*
   substitute STATE!(0|false):0,(1|true):1;LOWBAT!(0|false):0,(1|true):1

Gesendet von meinem GT-I9505 mit Tapatalk


Nic0205

Und hier noch die Definition des tfk, der funktioniert :

#Fenster
#Kueche
define Kueche_Fenster HMCCUCHN LEQ0175072:1 readonly
attr Kueche_Fenster IODev d_ccu
attr Kueche_Fenster ccureadingfilter (ERROR|LOWBAT|STATE)
attr Kueche_Fenster devStateIcon closed:10px-kreis-gruen open:10px-kreis-rot
attr Kueche_Fenster event-on-change-reading .*
attr Kueche_Fenster substitute STATE!(0|false):0,(1|true):1;;LOWBAT!(0|false):0,(1|true):1


Gesendet von meinem GT-I9505 mit Tapatalk


zap

Kann es sein, dass alle TF-Kontakte, bei denen get update nicht funktioniert, ein Leerzeichen im CCU-Namen (Internal ccuname) enthalten ist?

Zumindest ist das der einzige relevante Unterschied, den ich in den 2 Beispielen erkennen kann.

Wenn dem so ist bitte erst mal nichts unternehmen (umbenennen oder so). Vielleicht kann ich das in HMCCU beheben.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

Nic0205

Hi, leider nein.

Hier von einem der nicht funktioniert (trotz ohne Leerzeichen ):


Save config
Unsorted
icoEverything Everything
Logfile
Commandref
Remote doc
Edit files
Select style
Event monitor

Internals:
   DEF        MEQ0723287:1 readonly
   IODev      d_ccu
   NAME       Gaeste_WC_Fenster
   NR         48
   STATE      Error
   TYPE       HMCCUCHN
   ccuaddr    MEQ0723287:1
   ccudevstate Active
   ccuif      BidCos-RF
   ccuname    Fenster_Gaeste_WC
   ccutype    HM-Sec-SCo
   channels   1
   statevals  readonly
   Readings:
     2016-07-25 20:47:54   Fenster_Gaeste_WC.ERROR 0
     2016-07-25 20:47:54   Fenster_Gaeste_WC.LOWBAT 0
     2016-07-25 20:47:54   Fenster_Gaeste_WC.STATE 0
     2016-07-26 15:10:46   state           Error
Attributes:
   IODev      d_ccu
   ccureadingfilter (ERROR|LOWBAT|STATE)
   devStateIcon closed:10px-kreis-gruen open:10px-kreis-rot
   event-on-change-reading .*
   substitute STATE!(0|false):0,(1|true):1;LOWBAT!(0|false):0,(1|true):




Gesendet von meinem GT-I9505 mit Tapatalk


Nic0205

Und hier mit Leerzeichen , wo das update funktioniert :


Internals:
   CHANGED
   DEF        MEQ0723295:1 readonly
   IODev      d_ccu
   NAME       WZ_vorn_Fenster
   NR         36
   STATE      0
   TYPE       HMCCUCHN
   ccuaddr    MEQ0723295:1
   ccudevstate Active
   ccuif      BidCos-RF
   ccuname    Fenster Wohnzimmer vorn
   ccutype    HM-Sec-SCo
   channels   1
   statevals  readonly
   Readings:
     2016-07-26 15:14:24   Fenster_Wohnzimmer_vorn.ERROR 0
     2016-07-26 15:14:24   Fenster_Wohnzimmer_vorn.LOWBAT 0
     2016-07-26 15:14:24   Fenster_Wohnzimmer_vorn.STATE 0
     2016-07-26 15:14:24   state           0
Attributes:
   IODev      d_ccu
   ccureadingfilter (ERROR|LOWBAT|STATE)
   devStateIcon closed:10px-kreis-gruen open:10px-kreis-rot
   event-on-change-reading .*
   substitute STATE!(0|false):0,(1|true):1;LOWBAT!(0|false):0,(1|true):1

Gesendet von meinem GT-I9505 mit Tapatalk


zap

Versuch mal bitte folgendes:


attr d_ccu ccutrace LEQ0501605


Dann nochmal den Befehl


get Arbeitszimmer_Fenster update


ausführen (Verbose Level muss min. 2 sein).
Dann im FHEM Logfile nachschauen. Es sollte nun 3 Zeilen geben, die so anfangen:


HMCCU: Addr=
HMCCU: Script response =
HMCCU: Script =


Diese Ausgabe hätte ich gerne.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

Nic0205

So sieht das dann aus:


2016.07.26 16:35:02 1: in ATTR
2016.07.26 16:35:41 2: HMCCU: Addr=LEQ0501605:1 Name=Fenster Arbeitszimmer
2016.07.26 16:35:41 2: HMCCU: Script response =
0

2016.07.26 16:35:41 2: HMCCU: Script =

string sDPId;
string sChnName = "Fenster Arbeitszimmer";
integer c = 0;
object oChannel = dom.GetObject (sChnName);
if (oChannel) {
  foreach(sDPId, oChannel.DPs()) {
    object oDP = dom.GetObject(sDPId);
    if (oDP) {
       if (OPERATION_READ & oDP.Operations()) {
         WriteLine (sChnName # "=" # oDP.Name() # "=" # oDP.Value());
         c = c+1;
      }
    }
  }
  WriteLine (c);
}
      
2016.07.26 16:35:41 1: HMCCUCHN: Arbeitszimmer_Fenster No readable datapoints found


Gesendet von meinem GT-I9505 mit Tapatalk

zap

#595
Ok, wenn Du in der CCU2 Oberfläche Dir unter Einstellungen->Geräte den Fensterkontakt anschaust, gibt es einmal den Namen des Geräts und einmal den Namen des 1. Kanals. Sind die bei Dir identisch, d.h. heißen beide "Fenster Arbeitszimmer" ?

Ich mach das immer so: das Gerät heißt z.B. Mein_Geraet, die Kanäle dann Mein_Geraet:1, Mein_Geraet:2 usw.

Die Namen müssen jedenfalls unterschiedlich sein (Gerät, Kanäle) sonst greift das Script bei get update auf das falsche Objekt zu. Falls das bei Dir nicht der Fall ist, musst Du entweder den Kanal oder das Gerät in der CCU umbenennen. Danach musst Du in FHEM ein "get d_ccu devicelist" ausführen. Wenn Du den Kanal umbenennst, solltest Du auch das Device neu definieren (per modify), damit die Internals passen.



2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

Nic0205


zap

In der CCU sollten Namen niemals doppelt vergeben werden, da aus Homematic Script Sicht alles, also auch Räume oder Gewerke, Objekte sind. Wenn dann auf ein Objekt per GetObject() zugegriffen wird, ist es mehr oder weniger Zufall, welches zurück gegeben wird.
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB

chris1284

#598
ich teste gerade mit der ccu2 in fhem:

ccu
define CCU01 HMCCU 192.168.2.10
attr CCU01 room HM


ein HM-WDS30-T-O (sensor, nur 1 channel)

soweit so gut.

get deviceliste  --> Read 55 devices/channels from CCU

warum wird hier nicht gleich eine funktion angeboten per autocreate alle diese channels /devices erstellen zu lassen  (oder gibt es sie und ich habe sie nur nicht gefunden)?

nun gut ein chn selbst ertsellt

define wz_sen_t_aquarium HMCCUCHN wz_sen_t_aquarium:1 readonly
attr wz_sen_t_aquarium IODev CCU01
attr wz_sen_t_aquarium room HM


nun  die frage: wie sehe ich nun die temp des sensors?
device angesehen -->
get datapoint TEMPERATURE
danach taucht ein für fhem sehr unschön formatiertes reading auf

Zitatwz_sen_t_aquarium.1.TEMPERATURE 22.000000 2016-07-29 07:00:31

auf. Wäre hier nicht eine fhemkomformere formatierung besser
Zitattemprature 22.0 2016-07-29 07:00:31

in fhem sind readings in der regel a) kleingeschrieben und b) ohne devicenamen
ich stelle mir hier gerade die weiterverwendung vor
... notify wz_sen_t_aquarium:wz_sen_t_aquarium.1.TEMPERATURE 
<div data-type="label" data-device="wz_sen_t_aquarium" data-get="wz_sen_t_aquarium.1.TEMPERATURE" data-unit="%B0C%0A" class="cell big"></div>

recht viel unnötiger, übersichtlicher text und nicht überlich wie gesagt.

Fragen:
warum wird das reading / die readings eines devices nach definition nicht selbst geholt?
warum wird bei readingsänderung in der ccu das fhemdevice nicht automatisch aktualisiert? (aktuel bei den hm-modulen bekomt fhem sofort die änderung mit wenn das device sie sendet!)
ich hoffe hier muss ich nicht mit at's arbeiten und mich selbst in fhem um die abholung der daten kümmern....
was ist in eine hmccudev der unterschied zwischen einem control datapoint und einen datapoint
warum wird temp nicht wie gewohnt mi 1 nachkommastelle geliefert? 22.000000 mach irgendwie keinen sinn oder da sich bei dem device (oder auch allen die temp / hum wiedergeben?) eh nur die erste nachkommastelle ändert.

EDIT: bitte nicht als negative kritik auffassen! das sind so sachen die mir auffallen weil ich vorher shcon lange die übliche fhem-hm knfig fahre (sprich die module von martin)

zap

Zitat von: chris1284 am 29 Juli 2016, 07:09:37
warum wird hier nicht gleich eine funktion angeboten per autocreate alle diese channels /devices erstellen zu lassen  (oder gibt es sie und ich habe sie nur nicht gefunden)?

Von autocreate habe ich bisher abgesehen, da
- ich beim Start der Modulentwicklung bereits >600 Kanäle in meiner CCU hatte und eine Device-Flut in FHEM vermeiden wollte
- es nicht klar ist, ob ein Benutzer nur einen Kanal eines CCU-Device in FHEM haben möchte (HMCCUCHN) oder mehrere (HMCCUDEV). Jedes Device hat mindestens 2 Kanäle, da die CCU einen Kanal 0 hinzufügt, der solche Datenpunkte wie UNREACH oder RSSI enthält
Für die Zukunft könnte ich mir eine Art gefiltertes Autocreate vorstellen (z.B. für eine bestimmte Devicename-Regexp).

Zitat
danach taucht ein für fhem sehr unschön formatiertes reading auf

Bei HMCCUCHN Devices kannst Du den Readingname auf den Datenpunktnamen beschränken, indem Du das Attribut ccureadingformat auf "datapoint" setzt.
Bei HMCCUDEV geht das (derzeit) nicht, da es Geräte gibt, in denen - in unterschiedlichen Kanälen - Datenpunkte doppelt vorkommen. Ich arbeite an einer Lösung, die in so einem Fall die Readings um die Kanalnummer ergänzt. Dann würde der Gerätename entfallen.

Zitat
warum wird das reading / die readings eines devices nach definition nicht selbst geholt?
warum wird bei readingsänderung in der ccu das fhemdevice nicht automatisch aktualisiert? (aktuel bei den hm-modulen bekomt fhem sofort die änderung mit wenn das device sie sendet!)

Ein wichtiger Teil von HMCCU ist der RPC-Server. Er sorgt dafür, dass bei Änderungen in der CCU diese sofort an FHEM weitergeleitet werden. Du kannst eine Aktualisierung aller lesbaren Datenpunkte mit dem Befehl "get update" erzwingen (im IO Device für alle in FHEM definierten CCU-Geräte oder speziell von einem Client-Device).

Den RPC-Server startest Du wie folgt:


attr <iodev> ccuflags intrpc  # Als Vorgriff auf die neue Version, die heute oder morgen kommt und die per Default nicht mehr ccurpcd.pl verwendet.
attr <iodev> rpcserver on # RPC-Server automatisch beim FHEM Start starten
attr <iodev> rpcport 2001 # Liste von Interfaces (2001=BidCosRF, 2010=HM-IP, 9292=Group-Devices)
set iodev rpcserver on # RPC-Server starten


Je nachdem, wieviele Ports im Attribut rpcport angegeben sind, dauert der Start des RPC-Servers einige Sekunden. Irgendwann geht das Internal RPCState des IODevice auf "running" und RPCPID stehen die PIDs der RPC-Server-Prozesse (je Port/Interface einer).
Ach ja: Der RPC-Server (= fhem.pl Prozess) benötigt Schreibrechte in /tmp. Dort werden die Eventqueues angelegt. Mein /tmp auf meinem Raspberry liegt in einer RAM-Disk, um meine SD-Karte zu schonen.

Zitat
was ist in eine hmccudev der unterschied zwischen einem control datapoint und einen datapoint

Beantworte ich später. Muss einen alten Post raussuchen.

Zitat
warum wird temp nicht wie gewohnt mi 1 nachkommastelle geliefert? 22.000000 mach irgendwie keinen sinn oder da sich bei dem device (oder auch allen die temp / hum wiedergeben?) eh nur die erste nachkommastelle ändert.

Die CCU liefert alle Fließkommawerte mit x Nachkommastellen. Mit dem Attribut stripnumber=1 kannst Du das auf 1 Stelle begrenzen (0=keine, 2=alle, oder war es umgekehrt ...?)

Zitat
EDIT: bitte nicht als negative kritik auffassen! das sind so sachen die mir auffallen weil ich vorher shcon lange die übliche fhem-hm knfig fahre (sprich die module von martin)

habe kein Problem mit Kritik ;-)
2xCCU3, Fenster, Rollläden, Themostate, Stromzähler, Steckdosen ...)
Entwicklung: FHEM auf AMD NUC (Ubuntu)
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: FULLY, Meteohub, HMCCU, AndroidDB