Module für pilight (Senden und Empfangen)

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

Vorheriges Thema - Nächstes Thema

shiiva

Hallo Risiko,

könntest du dich schon dem Modul für Wetterstationen annehmen?
Bei mir funkt ein Nachbar über alecto wsd 17 und ws1700.
Wäre natürlich cool, wenn ich die Daten loggen und darstellen könnte.

Grüße Frank

tealc

#16
Zitat von: Risiko am 19 März 2015, 21:22:17
Hallo tealc,

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

Risiko.

Hallo Risiko,

ich wollte dir gerade das Pilight-Receive Log posten, da sehe ich, dass du schon fleißig warst. Danke :)

Leider funktioniert nur das ausschalten.

Beim Einschalten muss nicht der Unit-Code (-u) mitgegeben sondern der All (-a):

pilight-send -p cleverwatts -i 786154 -a 1 -t

{
        "origin": "sender",
        "protocol": "cleverwatts",
        "message": {
                "id": 786154,
                "all": 1,
                "state": "on"
        },
        "repeat": 1,
        "uuid": "0602-53-78-48-554848"
}


Interessanter Weise funktioniert das anschalten mit -f anstatt -t auch:

pilight-send -p cleverwatts -i 786154 -a 1 -f
{
        "origin": "sender",
        "protocol": "cleverwatts",
        "message": {
                "id": 786154,
                "all": 1,
                "state": "off"
        },
        "repeat": 1,
        "uuid": "0602-53-78-48-554848"
}


Was ebenfalls funktioniert ist, -u zusätzlich zum -a mitzusenden:
pilight-send -p cleverwatts -i 786154 -a 1 -f -u 0

Das -u scheint auf Empfängerseite zu dem Zeitpunkt aber komplett ignoriert zu werden sofern dessen Werte zwischen 0 und7 liegen.Vermutlich ist irgendwo in Pilight da genau ein Byte für vorgesehen.

{
        "origin": "sender",
        "protocol": "cleverwatts",
        "message": {
                "id": 786154,
                "all": 1,
                "state": "on"
        },
        "repeat": 1,
        "uuid": "0602-53-78-48-554848"
}


Fassen wir zusammen: Beim Einschalten unit durch all ersetzen oder ein -a 1 anhängen und es müsste funktionieren :)

Wäre cool, wenn du da noch mal reinschauen könntest :)

Edit:

Der -a Parameter in der Konsole scheint binär zu sein. anstatt "-a 1" kann man auch nur "-a" benutzen. Aber das ist für den Websocket-Aufruf wahrscheinlich uninteressant.

Risiko

@shiiva
Das liegt noch auf meiner ToDo-Liste. Habe noch keine passenden Sensoren. Diese sind aber unterwegs und wenn diese funktionieren, dann baue ich auch ein Modul.
Bitte etwas Geduld.

Risiko.

Risiko

#18
@tealc,

ist schon etwas seltsam. Mit all würde man doch aber alle\mehrere Schalter (Gruppe) schalten, was so aber nicht gewollt ist.
Ich habe in pilight zum Test mal einen cleverwatts Switch konfiguriert und kann diesen in FHEM über id und unit an und aus schalten.


{
"origin": "sender",
"protocol": "cleverwatts",
"message": {
"id": 1,
"unit": 0,
"state": "on"
},
"repeat": 1,
"uuid": "0000-00-00-5b-786cb0"
}

Es geht auch pilight-send -p cleverwatts -i 1 -u 0 -t
Aus meiner Sicht alles i.O.

Was passiert denn bei dir, wenn du mit der unit statt all einschalten willst?
Hast du mehr als einen Schalter mit ID 786154 aber unterschiedlichen unit's?

Die "all" - Logik ist im gesamten Modul (noch) nicht vorgesehen. 
Es gibt ja auch andere Protokolle, die all unterstützen. Wie man das im Modul abbilden könnte, habe ich mir noch keine Gedanken gemacht.

Jetzt einfach ein "all" zu senden, lehne ich aber erstmal ab.

Aus meiner Sicht wäre erstmal zu klären, warum es mit unit nicht geht\gehen soll. Evtl. mal im pilight-forum suchen\fragen.

Risiko.



raspberry

Ich habe mittels pilight_ctrl und pilight_switch pilight an FHEM angebunden.


define pilight pilight_ctrl localhost:5000 6.0
attr pilight brands arctech_switch:kaku_switch

define Dev1 pilight_switch kaku_switch 17277950 2


Das Empfangen des Zustandes von Dev1 von der Fernbedienung läuft super. Wenn ich allerdings über FHEM die Steckdose schalten möchte ("set Dev1 on"), erhalte ich folgende Fehlermeldung:


No IO device or WriteFn found for Dev1


Ich denke das Problem ist die Funktion IOWrite() die von pilight_switch_Set() aufgerufen wird. $iohash ($iohash = $hash->{IODev};) ist leer. Habe ich das richtig verstanden, dass pilight_ctrl und pilight_switch ein zweistufiges FHEM Modul ist? Wie kommuniziert pilight_switch zurück an pilight_ctrl?

Besten Dank für die Hilfe und viele Grüße

raspberry

Risiko

Hallo raspberry,

Es ist wichtig, dass von der Reihenfolge der defines erst pilight_ctrl definiert wird.
Die Verbindung zwischen den zweistufigen Modulen erfolgt in fhem.pl
Das Zuweisen von $hash->{IODev} erfolgt in AssignIoPort. Evtl. solltest du auch mal fhem updaten.
Ich denke aber, dass es an der Reihenfolge liegt.

Risiko.

tealc

Zitat von: Risiko am 22 März 2015, 15:06:56
Was passiert denn bei dir, wenn du mit der unit statt all einschalten willst?
Hast du mehr als einen Schalter mit ID 786154 aber unterschiedlichen unit's?
Es passiert gar nichts. Jeder Schalter hat eine unterschiedliche ID. Die unit ist immer 1

Zitat von: Risiko am 22 März 2015, 15:06:56
Aus meiner Sicht wäre erstmal zu klären, warum es mit unit nicht geht\gehen soll. Evtl. mal im pilight-forum suchen\fragen.
Risiko.

Aus meiner Sicht ist das keine Problem von Pilight. Die Fernbedienung sendet ja auch mit dem All-Flag. Eine All-Taste gibt es auf ihr gar nicht.

Ich denke, das ist einfach eine Eigenart dieser Sender / Steckdosen, dass sie ein abgewandeltes Cleverwatts Protokoll nutzen, dass sich nicht mit dem Protokoll der Funksteckdosen des Herstellers Cleverwatts deckt.

Risiko

Hallo tealc,

ich habe für das cleverwatts-Protokoll all für die unit eingebaut. Siehe 1. Beitrag.
Wenn man den Switch mit unit all definiert wird "all":1 gesendet und beim Empfang wird dann all wieder auf unit abgebildet.
Somit solltest es funktionieren.
Wenn nun aber mehrere Schalter\Dosen mit gleicher id und unterschiedlichen units existieren, werden bei einem Empfang von all aktuell nicht alle schalten, sondern nur der Schalter mit unit all. Das gibt es nach deiner Aussage "Die unit ist immer 1" ja nicht.

Risiko.

Risiko

Hallo.

Nun gibt es auch eine Repräsentation eines Temperatur- und Luftfeuchtigkeitssensors (siehe 1. Beitrag)

Risiko.

tealc

Zitat von: Risiko am 26 März 2015, 20:30:05
Hallo tealc,

ich habe für das cleverwatts-Protokoll all für die unit eingebaut. Siehe 1. Beitrag.
Wenn man den Switch mit unit all definiert wird "all":1 gesendet und beim Empfang wird dann all wieder auf unit abgebildet.
Somit solltest es funktionieren.
Wenn nun aber mehrere Schalter\Dosen mit gleicher id und unterschiedlichen units existieren, werden bei einem Empfang von all aktuell nicht alle schalten, sondern nur der Schalter mit unit all. Das gibt es nach deiner Aussage "Die unit ist immer 1" ja nicht.

Risiko.

Hallo Risiko,

mit der aktuellen Funktion funktioniert nun das An- aber nicht mehr das Ausschalten. Beim Ausschalten muss ja die Unit 1 gesendet werden und kein All:

Zitat von: tealc am 19 März 2015, 20:45:09
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

Risiko

Hallo tealc.

Für mich ist das aber alles sehr sehr unlogisch und sieht eher nach einem Bug in pilight aus. Wieso 'all' nur in eine Richtung funktionieren soll.
Welche Version verwendest du?
Ich habe leider die Hardware nicht aber mit einem konfiguriertem Cleverwatts-Schalter funktioniert alles wie soll.
Könntest du dies bitte mal testen - also Schalter in config.json (Version 6.0, siehe Anhang) einbauen.  Dann kannst das auch mit der pilight-WebGui testen.

Das beschriebene Verhalten einzubauen, wäre schon eine ganz schöne Vergewaltigung. Daher bitte um Verständnis und um die Rückfragen.

Risiko.

tealc

Ich benutze pilight v6.0 / filter firmware v50319.

Der Einbau in die Webgui ist wie erwartet analog zu der Konsole. Ausschalten geht (da wird ja kein all benötigt), Einschalten nicht.

Prinzipiell hast du schon recht, dass die Geschichte irgendwie keinen Sinn macht. Vermutlich ist dieses Protokoll nicht sauber in Pilight implementiert.

Da jetzt auf Pilight-Ebene zu debuggen ist wahrscheinlich sehr aufwendig. Ich habe mir jetzt Quick&Dirthy einen kleinen Workaround eingebaut.

switch($cType){
    case m/switch/  {       
        $code = "{\"protocol\":[\"$proto\"],";
        switch ($proto) {
          case m/elro/          {$code .= "\"systemcode\":$id,\"unitcode\":$unit,";}
          case m/silvercrest/   {$code .= "\"systemcode\":$id,\"unitcode\":$unit,";}
          case m/mumbi/         {$code .= "\"systemcode\":$id,\"unitcode\":$unit,";}
          case m/brennenstuhl/  {$code .= "\"systemcode\":$id,\"unitcode\":$unit,";}
          case m/pollin/        {$code .= "\"systemcode\":$id,\"unitcode\":$unit,";}
          case m/impuls/        {$code .= "\"systemcode\":$id,\"programcode\":$unit,";}
          case m/rsl366/        {$code .= "\"systemcode\":$id,\"programcode\":$unit,";}
          case m/cleverwatts/   { $code .= "\"id\":$id,\"unit\":$unit,";
                                  if ($state eq "on") {
                                    $code .= "\"all\":1,";
                                  }
                                }                                 
          else                  {$code .= "\"id\":$id,\"unit\":$unit,";}
        }
        $code .= "\"$state\":1}";
    }


Damit komme ich erst mal weiter. Ich kann verstehen, dass du so eine "Bastelei" nicht in dein Plugin aufnehmen willst.

Trotzdem vielen, vielen Dank für deine Bemühungen :)

gustav...

Moin,
nachdem pimatic die 6.0er Version von pilight nicht mehr unterstützt, bin ich freudig auf dein FHEM Modul gestoßen. Somit ist die Entscheidung doch auf FHEM zu setzen für mich weitestgehend gefallen.

Kannst du in dein Modul auch eine Unterstützung für das Auslesen von DHT22 Sensoren einbauen? Dies ist ja bislang unter FHEM recht umständlich (http://forum.fhem.de/index.php/topic,25413.msg201619.html#msg201619), unter pilight jedoch sehr einfach. Somit wäre es m.E. recht elegant das Auslesen durch pilight erledigen zu lassen (wenn dieses sowieso läuft) und die Daten über dein Modul in FHEM zu importieren (wenn ich das richtig sehe, müsste das genauso wie die Funktemperatursensoren funktionieren, d.h. nur eine Ergänzung case m/dht/         {$protoID = 4;} bei den Protokolldefinitionen)

Vielen Dank für dein Modul - ich werde es in den nächsten Tagen auf jeden Fall testen!

lulli

#28
Hallo zusammen,

erstmal vielen Dank für das Modul, nur leider möchte es bei mir nicht so wirklich funktionieren.
#Pilight
define pilight pilight_ctrl localhost:5000
attr pilight brands elro
attr pilight room pilight
define WZ_Lampe pilight_switch elro_800_switch 31 8
attr WZ_Lampe room pilight


Wenn ich den Befehl im Shell eingebe funktioniert das schalten problemlos.

Als status steht beim pilight_Ctrl modul opened!?

Hoffe ihr könnt mir helfen
Danke
Yves

Edit: Habe eben noch mal den Port überprüft. Anscheinend war bei mir der Port 5000 schon belegt, habe daher die Config auf 6000 geändert und schon funktioniert es... Das Modul schaltet schnell und tunnelt pilight sehr gut

Risiko

Hallo  gustav,

nicht ganz. Aber ich habe es eingebaut. Kann es selbst aber nicht testen.

Risiko