Neues (altes) Modul: Homematic CCU mit XML-RPC an FHEM, HMRPC reborn

Begonnen von henryk, 14 September 2015, 00:36:49

Vorheriges Thema - Nächstes Thema

Ralli

Hallo zap,

danke.

getParamset funktioniert ja nur mit der Angabe, welches Paramset Du haben möchtest - und manche der Kanäle bieten nicht alle Paramsets. Der Thermostat bspw. hat das Paramset VALUES grds. nur auf Kanal 4.
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

zap

Zitat von: Ralli am 13 November 2015, 07:53:29
getParamset funktioniert ja nur mit der Angabe, welches Paramset Du haben möchtest - und manche der Kanäle bieten nicht alle Paramsets. Der Thermostat bspw. hat das Paramset VALUES grds. nur auf Kanal 4.

Der Wandthermostat HM-TC-IT-WM-W-EU hat in den Kanälen 0,1 und 2 jeweils das Paramset VALUES. Trotzdem arbeitet die Abfrage nur beim Kanal 1 korrekt. Bei 0 kommen falsche Werte, bei 2 kommt eine Fehlermeldung.

Ein Blick in /var/log/messages brachte jetzt aber etwas Licht ins Dunkel: "HSSParameter::GetValue() id=PARTY_MODE_SUBMIT failed getting physical value." Laut Doku kann RPC nur mit logischen Geräten. Ich vermute, hier liegt das Problem.

Fazit: RPC ist nur sehr eingeschränkt tauglich.

2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

trilu

Zitat von: Ralli am 01 November 2015, 15:08:03
Nochmal hallo Henryk,

ich habe in Dein 60_HMRPC.pm mal noch die Möglichkeit des statusRequest eingebaut.

Bei Aufruf von

set MeinFhemDef statusRequest

wird der in der CCU(2) bekannte Status von den bei mir genutzten Dimmern, Schaltern und Fenster-Sensoren und RTs geholt, und die entsprechenden Readings werden gesetzt. Ist vielleicht nicht schön programmiert, funktioniert aber.

Jedes HMDEV-Device hat bei mir ein userReading state, welches dann automatisch den state bzw. STATE entsprechend setzt.

Hi Ralli,
wollte gerade mal testen, aber irgendwie macht es keinen Unterschied.
Bekomme auf eine Anfrage zum Status nur sowas zurück: invalid set call HMDEV_JEQ0276495 statusRequest

Viele Grüße
Horst

Ralli

Hallo Horst,

worauf setzt Du den statusRequest denn ab? Der muss auf ein definiertes Device vom Type HMDEV abgesetzt werden.

Was steht im Log?

Bei mir funktioniert das einwandfrei und wird täglich mehrfach genutzt.
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

trilu

Ok, habs gefunden :-)
else {
Log 2,"HMRPC $a[0] statusRequest $a[1]: failed, don't know type $typ";
return undef;


2015.11.23 12:08:21 2: HMRPC hmrf statusRequest JEQ0276495: failed, don't know type BC-TC-C-WM-2
2015.11.23 12:22:32 2: HMRPC hmrf statusRequest JEQ0276495: failed, don't know type BC-TC-C-WM-2

Ralli

Na, dann passt ja alles.

Der Status kann nur von den (mir) bekannten Devices ausgelesen, interpretiert und in die Readings umgewandelt werden.

Mach mal ein list von dem Device.
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

trilu

fhem> list HMDEV_JEQ0276495

Internals:
   CHANGED
   DEF        JEQ0276495
   IODev      hmrf
   LASTInputDev hmrf
   MSGCNT     460
   NAME       HMDEV_JEQ0276495
   NR         370
   STATE      T: 19.2 °C, D: 19.0 °C
   TYPE       HMDEV
   hmaddr     JEQ0276495
   hmdevtype  BC-TC-C-WM-2
   hmrf_MSGCNT 460
   hmrf_TIME  2015-11-23 18:15:25
   Readings:
     2015-11-23 18:15:25   ACTUAL_TEMPERATURE_1 19.2
     2015-11-23 17:06:15   CONTROL_MODE_1  0
     2015-11-23 18:15:25   RSSI_DEVICE     -68
     2015-11-23 18:15:25   SET_TEMPERATURE_1 19
   Hmdevinfo:
     ADDRESS    JEQ0276495
     FAMILY     4
     FIRMWARE   1.3
     FLAGS      1
     ID         12
     INTERFACE  VMC3446724
     PARENT
     PHYSICAL_ADDRESS 202637
     RF_ADDRESS 202637
     ROAMING    0
     RX_MODE    2
     TYPE       BC-TC-C-WM-2
     TYPE_ID    768
     VERSION    1
     CHANNELS:
       0
       1
       4
     CHILDREN:
       JEQ0276495:0
       JEQ0276495:1
       JEQ0276495:4
     PARAMSETS:
       MASTER
Attributes:
   IODev      hmrf
   alias      Thermostat
   devStateStyle style="text-align:left"
   event-on-change-reading ACTUAL_TEMPERATURE_1,SET_TEMPERATURE_1,CONTROL_MODE_1
   group      Heizung
   room       31_Mansarde
   sortby     0
   stateFormat { sprintf("T: %0.1f °C, D: %0.1f °C", ReadingsVal( $name, 'ACTUAL_TEMPERATURE_1', 0 ), ReadingsVal( $name, 'SET_TEMPERATURE_1', 0 ) ) }




Hast du eine Ahnung wie ich an die weiteren Readings vom Device komme? Hinter JEQ0276495:1 verbirgt sich auch noch Einiges mehr
ACTUAL_TEMPERATURE      
AUTO_MODE   
BOOST_MODE
BOOST_TIME_PERIOD      
COMFORT_TEMPERATURE      
CONTROL_MODE         
ECO_TEMPERATURE      
MANU_MODE      
MAX_TEMPERATURE      
PARTY_STOP_DAY      
PARTY_STOP_MONTH      
PARTY_STOP_TIME      
PARTY_STOP_YEAR      
PARTY_TEMPERATURE      
SET_TEMPERATURE      
SHOW_SET_TEMPERATURE      
WINDOW_OPEN_TEMPERATURE

Ralli

Vom Grundsatz her empfehle ich, das Device direkt mit JEQ0276495:1 zu definieren und darauf den statusRequest abzusetzen. Dann schaust Du, welchen Typ er dafür ermittelt/angibt.

Sodann nimmst Du Dir den Quelltext von 60_HMRPC.pm und modifizierst / ergänzt folgenden Block:


case "CLIMATECONTROL_RT_TRANSCEIVER" {
@readingslist=("SET_TEMPERATURE","ACTUAL_TEMPERATURE","VALVE_STATE","BATTERY_STATE");
}


um


case ["CLIMATECONTROL_RT_TRANSCEIVER","DEIN_ERMITTELTER_TYP"] {
@readingslist=("SET_TEMPERATURE","ACTUAL_TEMPERATURE","VALVE_STATE","BATTERY_STATE");
}


und in der @readingslist um die zusätzlichen Datenpunkte bzw. Readings, die bei einem statusRequest neu gesetzt werden sollen.

Wenn es wegen dem fehlenden VALVE_STATE bei diesem Device Probleme gibt, duplizierst statt modifizierst Du den Block, änderst CLIMATECONTROL_RT_TRANSCEIVER auf den von Dir ermittelten Typ und führst in der @readingslist (nur) die passenden Datenpunkte/Readings auf.
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

trilu

Vielen Dank - brauche aber nochmal Hilfe :-)
Ich habe das Device jetzt mal mit Kanal angelegt, jetzt hat aber der Kanal noch zwei Listen (Paramsets) - Master and Value, wie komme ich da dran?
Internals:
   CFGFN
   DEF        JEQ0276495:0
   IODev      hmrf
   LASTInputDev hmrf
   MSGCNT     49
   NAME       HMDEV_JEQ0276495_0
   NR         9276
   STATE      ???
   TYPE       HMDEV
   hmaddr     JEQ0276495:0
   hmdevtype  MAINTENANCE
   hmrf_MSGCNT 49
   hmrf_TIME  2015-11-24 12:00:22
   Readings:
     2015-11-24 12:00:22   RSSI_DEVICE     -65
   Hmdevinfo:
     ADDRESS    JEQ0276495:0
     AES_ACTIVE 0
     CHANNEL    0
     DIRECTION  0
     FAMILY     4
     FLAGS      3
     ID         12
     INDEX      0
     LINK_SOURCE_ROLES
     LINK_TARGET_ROLES
     PARENT     JEQ0276495
     PARENT_TYPE BC-TC-C-WM-2
     TYPE       MAINTENANCE
     VERSION    1
     PARAMSETS:
       MASTER
       VALUES
Attributes:
   IODev      hmrf
   group      Thermostat
   room       31_Mansarde

Ralli

:0 ist falsch. Bitte mit :1 definieren! Und das Paramset Value wird ja letztendlich beim statusRequest abgefragt und ausgewertet.
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

trilu

ich verzweifle langsam :-)
Das mit 0 und 1 ist schon klar, in 0 steht nur auch das Wochenprogramm...

Irgendwie geht der statusRequest nicht mehr durch

Das schicke ich über Telnet oder Web
set HMDEV_JEQ0276495_1 statusRequest

und das bekomme ich zurück
invalid set call HMDEV_JEQ0276495_1 statusRequest

2015.11.24 17:34:58 4: FHEMWEB:192.168.6.2:14939 POST /fhem&room=Unsorted&cmd=set+HMDEV_JEQ0276495_1+statusRequest; BUFLEN:0
2015.11.24 17:34:58 4: name: /fhem&room=Unsorted&cmd=set+HMDEV_JEQ0276495_1+statusRequest / RL:1130 / text/html; charset=UTF-8 / Content-Encoding: gzip


kann es sein das der Syntax nicht stimmt?

Ralli

Hallo Horst,

Asche auf mein Haupt. Es bedarf auch einer Änderung in 60_HMDEV.pm, die ich nicht mehr im Kopf hatte.

Bitte die Zeile 113


return "invalid set call @a" if(@a != 3 && @a != 4);


wie folgt modifizieren:


        return "invalid set call @a" if(@a != 3 && @a != 4 && $a[1] ne "statusRequest");
Gruß,
Ralli

Proxmox 9 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.4 dev, virtualisierte RaspberryMatic (3.83.6.20250705) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.4.1) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Raymund

Hallo,

das Folgende betrifft z.B. das Anhalten von Rollläden mit dem STOP-Befehl:

ich glaube festgestellt zu haben, dass es HM-seitig Unterschiede bei der Auswertung von booleschen Werten gibt, weshalb z.B. set <NAME> STATE_1 true geht, set <NAME> STOP_1 true aber nicht. Somit ließen sich Rollläden nicht anhalten.

Ich habe bei mir in der 60_HMRPC.pm eine entsprechende Anpassung gemacht nach der es nun klappt. Wenn das jemanden interessiert, dann sollten wir das abgestimmt einbauen und testen. Ich blicke gerade nicht mehr durch, welche Version aktuell ist  ;)

Gruß
Raymund


zap

Bei STATE Werten wird teilweise 0/1 und teilweise true/false verwendet. RPC Events verwenden z.B. immer 0/1. Wie es bei RPC Set Befehlen ist, weiß ich nicht. Deshalb im Zweifel HM-Script oder JSON-API statt RPC.
2xCCU3 mit ca. 100 Aktoren, Sensoren
Entwicklung: FHEM auf Proxmox Debian VM
Produktiv inzwischen auf Home Assistant gewechselt.
Maintainer: HMCCU, (Fully, AndroidDB)

masterray57

Zitat von: zap am 27 November 2015, 11:54:27
Bei STATE Werten wird teilweise 0/1 und teilweise true/false verwendet. RPC Events verwenden z.B. immer 0/1. Wie es bei RPC Set Befehlen ist, weiß ich nicht. Deshalb im Zweifel HM-Script oder JSON-API statt RPC.
Klappt hier mit gut 20 Devices ohne Zweifel seit einem Jahr. Jetzt eben auch mit STOP. :)