Module für pilight (Senden und Empfangen)

Begonnen von Risiko, 03 März 2015, 20:33:54

Vorheriges Thema - Nächstes Thema

Risiko

Hallo.

Ich möchte hier die Module zum Senden und Empfangen mittels pilight vorstellen.

pilight_ctrl: - Basismodul für die Kommunikation

define <name> pilight_ctrl <host:port> [api]


  • host - IP wo der pilight-daemon läuft
  • port - Port des pilight-daemon
  • api - pilight version optional, 5.0 oder 6.0 - default 6.0

pilight_switch: - Repräsentation eines Schalters

define <name> pilight_switch <protocol> <id> <unit>


  • protocol - Protokoll z.B. kaku_switch
  • id - ID oder Systemcode je nach Protokoll
  • unit - unit, unitcode oder programcode je nach Protokoll

pilight_dimmer: - Repräsentation eines Dimmers

define <name> pilight_dimmer <protocol> <id> <unit>

Parameter wie beim Schalter.

pilight_temp: - Repräsentation eines Temperatur- und Luftfeuchtigkeitssensors bzw. Wetterstation

define <name> pilight_temp <protocol> <id>

Bei GPIO Sensoren muss als id der GPIO-Pin angegeben werden.

pilight_raw: - Modul zum Senden von raw codes

define <name> pilight_raw


Weitere Dokumentation in den Modulen selbst.

Wichtig ist noch das Attribut "brands" in pilight_ctrl.
Damit wird das Problem gelöst, dass pilight für ein und das selbe Protokoll (für Senden und Empfangen) unterschiedliche Namen verwendet (z.B. arctech, kaku, intertechno).
Beispiel:
Senden mit Protokoll kaku_switch_old, Empfang für das gleiche Device mit arctech_switch_old.
Dann muss arctech durch kaku ersetzt werden. Das erreicht man mit brands arctech:kaku.

Ich habe Einiges getestet und bei mir läuft es aktuell mit drei Intertechno Schaltern und einem Intertechno Dimmer soweit stabil.
Leider habe ich nicht so viel unterschiedliche Hardware - also keine Garantie, dass es mit allen Protokollen (schon) funktioniert.

Die in 6.0 eingeführten Kontakte können als Schalter "umgebogen" werden. Attribut "ContactAsSwitch" in pilight_ctrl.

Viel Spaß.

History:
16.03.15 FIX       ID alphanumerisch
20.03.15 NEW    Protokoll 'clerverwatts' hinzugefügt
26.03.15 NEW    Protokoll 'clerverwatts' unit all für 'all'-Signal
29.03.15 NEW    Temperatur- und Luftfeuchtigkeitssensoren
30.03.15 NEW    GPIO - Temperatur- und Luftfeuchtigkeitssensoren
30.03.15 NEW    Komplette Protokolle ignorieren mit Attribut ignore <protokoll_name>:*
09.04.15 FIX       Nur Senden, wenn auch eine Verbindung zum pilight-daemon besteht
12.04.15 FIX       Protokoll 'intertechno_old' hinzugefügt
17.04.15 FIX       Kleinere Rechtschreibfehler - Danke an pattex
17.04.15 FIX       Senden mehrerer Befehle in kurzer Zeit (Aufbau einer Messagequeue)
29.04.15 CHG     Attribut ignore zu ignoreProtocol umbenannt, da ignore bereits vergeben ist
09.05.15 NEW    ignoreProtocol *  - es wird bis auf die durch Submodule definierten Protokoll-ID-Kombinationen alles andere ignoriert
09.05.15 NEW    Protokoll quigg_gt* (z.B. quigg_gt7000) ergänzt
16.05 15 NEW    pilight_temp: Status der Batterie als reading, Attribut 'corrTemp' zur Korrektur der Temperatur
17.05.15 NEW    pilight_temp: Attribut 'corrHumidity' zur Korrektur der Luftfeuchte
20.05.15 NEW    pilight_dimmer: Möglichkeit den Dimmer mit der Screen Funktionalität (up|down) zu erweitern
30.05.15 FIX       pilight_dimmer:  Funktionalität (up|down) + set dimlevel 0
30.05.15 FIX       pilight_switch|dimmer:  Trigger|Notify wurde immer zweimal ausgelöst
07.06.15 FIX       pilight_ctrl:  set reset - Verbindung zu Submodulen wurde unterbrochen
20.06.15 NEW    pilight_ctrl:  set disconnect - Verbindung trennen und nicht automatisch wieder aufbauen
23.06.15 NEW    pilight_ctrl:  Attribut SendTimeout - Abbruchzeit für Sendebefehl - Default 1s
23.06.15 FIX       pilight_ctrl:  Sendequeue bei reset leeren
21.07.15 NEW    pilight_raw: Modul zum Sende von raw codes
27.07.15 NEW    pilight_dimmer|switch|raw: SetExtensions(on-for-timer, off-for-timer,etc)
30.08.15 NEW    pilight_temp: Luftdruck, Windrichtung, Windgeschwindigkeit, Windböe (falls von Sensor unterstützt)
06.09.15 FIX       pilight_temp:  pressure, windavg, winddir, windgust from weather stations without temperature
29.11.15 NEW    pilight_temp:  add attributes offsetTemp and offsetHumidity to correct temperature and humidity
17.12.15 NEW    30_pilight_xyz: IO-Device über Attribut verstellen
20.03.16 FIX      pilight_ctrl: send delimiter to signal end of stream if length of data > 1024 (e.q. long raw codes)
28.03.16 NEW   pilight_switch: protocol daycom
02.06.16 NEW   pilight_ctrl: protocol oregon_21
03.07.16 NEW   pilight_smoke: new module - representation of a pilight smoke detector
13.11.16 NEW   pilight_contact: Neues Modul für Kontaksensoren

Module ab 26.04.15 in FHEM integriert und per update erhältlich

chipmunk

#1
Hi,
ich bin neu bei FHEM und heb ein paar Fragen zum Pilight addin:
Muss das attr brand genauso lauten wie das Protokoll oder was ist als brand anzugeben?
Bei mir z.B ist für einen Switch mit Clarus Protokoll als brand clarus oder clarus_switch anzugeben?

Ich habe inzwischen die Brand-Bezeichnung in den Protokollbeschreibungen von Pilight gefunden in meinem Fall "Clarus" Ist  eine Brand-definition bei nur einem Protokoll ohne Alternativen notwendig?

Weiters wechselt bei mir die Stateanzeige des Switches beim Schalten nicht, er bleibt auf "defined". Woran kann das liegen?

Außerdem bekomme ich im Eventmonitor beim Schalten mit der Fernbedienung die Meldung pilight_ctrl <name> UNKNOWNCODE SWITCH clarus_switch <id> <unit> <on|off>
Hängt die fehlende Statusanzeige vielleicht damit zusammen?

Schalten kann ich den Switch über FHEM perfekt

Danke
chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

Risiko

Hallo chipmunk,

es sieht für mich so aus, als wenn du keinen Switch mit dem Protokoll clarus_switch und den richtigen ID's definiert hast?
Mit welchem Modul sendest du denn  - vermutlich mit "pilight" und nicht "pilight_switch".
Du könntest mir mal die Definitionen für pilight_ctrl und pilight_switch zeigen.
Hilfreich wäre auch, wenn du verbose von pilight_ctrl und pilight_switch mal auf 5 stellst.

Risiko.

chipmunk

Hallo Risiko
Erstmal Danke für die Antwort
Ich bin derzeit nicht zu Hause., ich werde die Daten am Sonntag abfragen.
Allerdings kann ich zwei Dinge gleich klarstellen:
Ich verwende pilight_switch und das Schalten damit geht einwandfrei, nur die Statusrückmeldung funktioniert nicht.
Der Status bleibt immer auf defined.
Danke
Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

Risiko

Hi chipmunk,

damit haben wir das mit dem Modul geklärt  ;)
Die Fernbedienung sendet scheinbar mit Protokoll clarus_switch id unit - oder wird da schon was umgebogen?

Der Status wird an alle Schalter weiter gereicht. Da sich kein Schalter für die Message zuständig fühlt, kommt die Meldung "Unknown code...".
Wichtig ist, wie du den Schalter definiert hast. Protokoll, ID und Unit müssen überein stimmen.
Für Clarus gibt es laut pilight Doku http://wiki.pilight.org/doku.php/clarus_v6_0 keine weiteren Bezeichnungen.

Vielleicht sehe ich in den Log's dann mehr.

Risiko.


shiiva

Hi Risiko,

tolle Arbeit! Ich bin Einsteiger im Thema FHEM & Raspberry, deswegen habe ich auch einige Zeit benötigt, meine ELRO-Fernbedienung über den GPIO-Funkempfänger auszulesen.

Aber nun hat es geklappt!
Daher poste ich hier mal meine Config-Einstellung - vielleicht hilft es anderen etwas schneller zur Lösug zu kommen, als ich  ;-)

Zum üben, schalte ich quasi mit der Taste D der Fernbedinung die Tasten A und B hintereinander.
Macht so natürlich wenig Sinn - aber es soll ja nur ein Beispiel sein, wie es klappt.
Umfangreichere Funktionen kommen als nächstes.


# ELRO Fernbedienung
define Fernbedienung pilight_ctrl localhost:5000
attr Fernbedienung brands elro
attr Fernbedienung icon access_keypad_2

# ELRO Funksteckdosen 2A
define LampeMonitor pilight_switch elro_800_switch 13 1
attr LampeMonitor group Steckdosen
attr LampeMonitor room Dachboden

# ELRO Funksteckdosen 2B
define LampeTisch pilight_switch elro_800_switch 13 2
attr LampeTisch group Steckdosen
attr LampeTisch room Dachboden

# Reaktion auf Tastendruck der Fernbedienung
define Fernbedienung2D pilight_switch elro_800_switch 13 8
define Fernbedienung2D_on notify Fernbedienung2D:on set LampeMonitor on;;set LampeTisch on
define Fernbedienung2D_off notify Fernbedienung2D:off set LampeMonitor off;;set LampeTisch off


Noch mal vielen Dank für das Modul!

shiiva

hmm, jetzt habe ich leider festgestellt, dass ich ein neues Problem habe. ich bekomme pilight-receive auf dem Pi nicht mehr gestartet. Vermutlich, weil ich in Pilight port=5000 gesetzt habe.
ich bekomme nun diese Fehlermeldung:
pilight-receive: ERROR: no pilight ssdp connections found
Aber von fhem funktioniert pilight noch.

kann ich irgendwie in pilight-receive definieren, dass der pilight-deamon auf port 5000 läuft?

Risiko

Hallo shiiva,

das hat definitiv nichts mit dem Port zu tun.
Bei mir lauft der pilight-daemon auch auf 5000 und ich kann pilight-receive parallel betreiben.
Schau mal hier:
http://www.pilight.org/faq/#general_two
http://forum.pilight.org/Thread-Solved-No-ssdp-connection-found

Risiko.

chipmunk

Guten Abend Risiko!
Erstmals hrezlichen Dank für deine Bereitschaft Unterstützung zu geben!
Den Switch habe ich wie folgt definiert:
Zitatdefine _CLARUS pilight_ctrl localhost:5000
attr _CLARUS brands Clarus
attr _CLARUS verbose 5
define Hutlampe pilight_switch clarus_switch "A2" 44
attr Hutlampe devStateIcon on:li_wht_on off:li_wht_off
attr Hutlampe group Licht_Wohnzimmer
attr Hutlampe icon light_floor_lamp
attr Hutlampe room Wohnzimmer
attr Hutlampe verbose 5
Der Log von 1x ein und wieder aus Schalten (über fhem, nicht büber die Fernbedienung) ist:
Zitat2015.03.15 18:55:33 4: _CLARUS(Parse): RCV -> {"message":{"id":"F0","unit":0,"state":"off"},"origin":"receiver","protocol":"clarus_switch","uuid":"0000-b8-27-eb-f724b0","repeats":1}
2015.03.15 18:55:42 4: Hutlampe(Set): on
2015.03.15 18:55:42 4: _CLARUS(Write): RCV (pilight_switch) -> Hutlampe,on
2015.03.15 18:55:42 4: _CLARUS(Write): {"action":"send","code":{"protocol":["clarus_switch"],"id":"A2","unit":44,"on":1}}
2015.03.15 18:55:42 5: _CLARUS(SendNonBlocking): [1] {"action":"send","code":{"protocol":["clarus_switch"],"id":"A2","unit":44,"on":1}}
2015.03.15 18:55:42 5: _CLARUS(Send): {"action":"send","code":{"protocol":["clarus_switch"],"id":"A2","unit":44,"on":1}}
2015.03.15 18:55:42 5: _CLARUS(Send): RCV -> {"status":"success"} 
2015.03.15 18:55:42 4: _CLARUS(SendDone): message successfully send
2015.03.15 18:55:43 4: _CLARUS(Parse): RCV -> {"origin":"sender","protocol":"clarus_switch","message":{"id":"A2","unit":44,"state":"on"},"repeat":1,"uuid":"0000-b8-27-eb-f724b0"}
2015.03.15 18:55:43 5: _CLARUS dispatch SWITCH,clarus_switch,A2,44,on
2015.03.15 18:55:43 4: pilight_switch_Parse: RCV -> SWITCH,clarus_switch,A2,44,on
2015.03.15 18:55:43 3: _CLARUS: Unknown code SWITCH,clarus_switch,A2,44,on, help me!

2015.03.15 18:55:49 4: Hutlampe(Set): off
2015.03.15 18:55:49 4: _CLARUS(Write): RCV (pilight_switch) -> Hutlampe,off
2015.03.15 18:55:49 4: _CLARUS(Write): {"action":"send","code":{"protocol":["clarus_switch"],"id":"A2","unit":44,"off":1}}
2015.03.15 18:55:49 5: _CLARUS(SendNonBlocking): [1] {"action":"send","code":{"protocol":["clarus_switch"],"id":"A2","unit":44,"off":1}}
2015.03.15 18:55:49 5: _CLARUS(Send): {"action":"send","code":{"protocol":["clarus_switch"],"id":"A2","unit":44,"off":1}}
2015.03.15 18:55:49 5: _CLARUS(Send): RCV -> {"status":"success"} 
2015.03.15 18:55:49 4: _CLARUS(SendDone): message successfully send
2015.03.15 18:55:49 4: _CLARUS(Parse): RCV -> {"origin":"sender","protocol":"clarus_switch","message":{"id":"A2","unit":44,"state":"off"},"repeat":1,"uuid":"0000-b8-27-eb-f724b0"}
2015.03.15 18:55:49 5: _CLARUS dispatch SWITCH,clarus_switch,A2,44,off
2015.03.15 18:55:49 4: pilight_switch_Parse: RCV -> SWITCH,clarus_switch,A2,44,off
2015.03.15 18:55:49 3: _CLARUS: Unknown code SWITCH,clarus_switch,A2,44,off, help me!

Zwischendrin wurden noch von Nachbarn diverse Schaltbefehle empfangen
Wie gesagt, das Schalten selbst funktioniert.
Und wenn ich via Fernbedienung schalte, erhalte ich folgendes Log
Zitat2015.03.15 19:13:22 4: _CLARUS(Parse): RCV -> {"message":{"id":"A2","unit":44,"state":"on"},"origin":"receiver","protocol":"clarus_switch","uuid":"0000-b8-27-eb-f724b0","repeats":6}
2015.03.15 19:13:22 5: _CLARUS dispatch SWITCH,clarus_switch,A2,44,on
2015.03.15 19:13:22 4: pilight_switch_Parse: RCV -> SWITCH,clarus_switch,A2,44,on
2015.03.15 19:13:22 3: _CLARUS: Unknown code SWITCH,clarus_switch,A2,44,on, help me!

2015.03.15 19:13:26 4: _CLARUS(Parse): RCV -> {"message":{"id":"A2","unit":44,"state":"off"},"origin":"receiver","protocol":"clarus_switch","uuid":"0000-b8-27-eb-f724b0","repeats":1}
2015.03.15 19:13:26 5: _CLARUS dispatch SWITCH,clarus_switch,A2,44,off
2015.03.15 19:13:26 4: pilight_switch_Parse: RCV -> SWITCH,clarus_switch,A2,44,off
2015.03.15 19:13:26 3: _CLARUS: Unknown code SWITCH,clarus_switch,A2,44,off, help me!

Nocmals Danke für deine Unterstützung!
Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

Risiko

Hallo chipmunk.
Auf die Schnelle konnte ich nicht viel erkennen.
Scheinbar ist beim Vergleich der ID's noch ein Fehler. Schaue ich mir morgen näher an.
Meiner Meinung nach sollte das gehen:

define Hutlampe pilight_switch clarus_switch A2 44

Ohne '"'.

Das Attribut brands wird nicht benötigt, macht aber auch nichts falsch.

Risiko

chipmunk

#10
Hi Risiko!
Kann es sein, dass das Problem darin besteht, dass Pilight_switch als id eine Zahl erwartet (darauf deutet dein Kommentar ohne "" hin), aber der pilight daemon eine string liefert (daher das "")?
Pilight selbst erwartet beim senden (also ohne fhem) ebenfalls einen String.
Nachtrag: ohne die Anführungszeichen um A2 (also ID A2 statt "A2") ergibt der Versuch mit pilight_switch zu schalten einen Error
Nachtrag 2: genau das dürfte das Problem sein: zum Schalten sind die Anführungszeichen bei der ID nötig, für den Status dürfen die Anführungszeichen nicht vorhanden sein. Verifiziert, indem ich einen zweiten Switch (test) ohne die Anführungszeichen bei der ID definiert habe. Wenn ich jetzt den Hutswitch schalte (den mit den ""), ändert sich bei test der Status, nicht jedoch bei Hutswitch.
Mit test kann ich jedoch nicht schalten. Auch bei Verwendung der Fernbedienung ändert sich nur bei test der Status.

Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

Risiko

Hallo chipmunk,

ich habe pilight_ctrl im Eingangsposting aktualisiert. Nun sollte es gehen.
Die ID trotzdem ohne '"' definieren.

Risiko.

chipmunk

Hi Risiko!
Vielen Dank jetzt funktioniert es!
Ein Device, mit dem man schalten kann und den Status angezeigt bekommt - Super!

Chipmunk
RasPi3, HM, HUE, div 433MHz Baumarktdosen über Sende- und Empfangsmodule von C*, Ediplug

tealc

Hallo Risiko,

vielen Dank für dein Modul. Dass man mit diesem auch Befehle empfangen kann finde ich absolut genial. Viel günstiger kommt man vermutlich nicht an eine Fernbedienung für FHEM ;)

Aber zum regulären Schalten: Ich nutze als Funksteckdosen die Brennenstuhl Comfort RCS 1000N welche entgegen der Pilight Doku nicht mit einem Elro Protokoll sondern mit dem Cleverwatts Protokoll senden. Ich tippe mal auf eine neue Hardware Revision.

Die Befehle Befehle für Pilight sehen so aus:

An:
pilight-send -p cleverwatts -i <id> -a 1 -f

Aus:pilight-send -p cleverwatts -i <id> -u 1 -t

Die Werte für -a und -u sind immer 1

Meinst du, du könntest dieses Protokoll in das Modul integrieren?

Schon mal vielen Dank :)

Risiko

#14
Hallo tealc,

ich habe das Protokoll cleverwatts hinzugefügt. Es sollte gehen.

Risiko.