Arduino Asksin library

Begonnen von trilu, 06 August 2013, 10:02:17

Vorheriges Thema - Nächstes Thema

unimatrix

Hallo Peter,

du möchtest ein Device bauen, was es so noch nicht gibt. Dazu brauchst du also eine neue, eigene Modell-ID. Die kannst du dir schlicht ausdenken. Die Modell-ID wird dann von CUL_HM beim Paring benutzt um zu erkennen um was für ein Device es sich handelt. Daher muss eben CUL_HM (bz. HMConfig als Teil davon) um deine neue Modell-ID erweitert werden. Speziell für diesen Teil ist glaube ich die von Martin geschriebene Erweiterung von HMConfig (in eigener Datei) die beste Vorlage.  Damit würde ich aber nicht anfangen, sondern erstmal mit dem Device.

Dafür fängtst du mit der devDefinition.pm an. siehe: https://github.com/trilu2000/AskSin/tree/master/destillRegs

mit der destillRegs.pl und deiner selbst geschriebenen devDefinition.pm (in dieser suchst du aus, was für Kanäle und Registerlisten dein Device haben soll) wird dann der Hauptteil der register.h automatisch erzeugt. Du fügst nur am Kopf den Header mit HMID usw. an und am Ende noch Defaultwerte.

Was für Compilerfehler hattest du und warum?

PeterS

Hallo unimatrix

Die Compiling-Fehler führe ich auf die Standard-Askin Library zurück. Ich hatte nicht die projektspezifische verwendet.

Muss nicht zuerst die FHEM-Seite aufgebohrt (CUL_HM) werden, damit man überhaupt ein Homebrew Devices nutzen kann.
Andernfalls erschein ein grosses Fragezeichen und das Devices besitzt keine Kanäle, etc.

Das Problem ist aber auch dann, dass mit jedem FHEM-Update die Definition überschrieben wird, oder ?!

Gruss Peter

Dirk

Zitat von: PeterS am 20 August 2014, 11:38:30
Muss nicht zuerst die FHEM-Seite aufgebohrt (CUL_HM) werden, damit man überhaupt ein Homebrew Devices nutzen kann.
Andernfalls erschein ein grosses Fragezeichen und das Devices besitzt keine Kanäle, etc.
Das kannst du dir beim Universalsensor ansehen.
Du musst ein entsprechendes File für FHEM erstellen. HMConfig_xxx
https://raw.githubusercontent.com/kc-GitHub/Wettersensor/master/Tools/FHEM/HMConfig_SenTHPL.pm

Gruß
Dirk

hexenmeister

Scheint ganz neu zu sein. Habe gestern zufällig in dem neuen ELV Katalog gefunden.

PeterS

Hallo Zusammen

Ich habe mir zu Testzwecken mal eine eigene HMConfig_HomeBrew.pm definiert und darin einen 8-fach Relay (ID:00FF)  und einen 8-fach threeStateSensor (ID:00EF) definiert.

Der 8-fach threeStateSensor kann ich über die "$0C $00 $A4 $41 $FF $F0 $01 $F1 $16 $02 $01 $B2 $C8 s" Konsole triggern, allerdings nicht über den sketch direkt, da ich keinen Hardware-Interrupt auslöse.
Gibt es eine Funktion, um direkt den Zustand (High, Low) über den Channel direkt zu triggern ?

PS: Als nächsten Schritt möchte ich dann die beide Devices verschmelzen  ::)

HMConfig_HomeBrew.pm:

package main;

use strict;
use warnings;

# device definition
$HMConfig::culHmModel{'F101'}             = {name => 'HB-UW-Sen-THPL-I',   st   => 'THPLSensor',       cyc  => '00:10',   rxt  => 'c:f',   lst  => 'p',   chn  => '',};
$HMConfig::culHmModel{'F102'}             = {name => 'HB-UW-Sen-THPL-O',   st   => 'THPLSensor',       cyc  => '00:10',   rxt  => 'c:f',   lst  => 'p',   chn  => '',};
$HMConfig::culHmModel{'00FF'}       = {name => 'HM-MOD-FF-8',    st => 'switch',           cyc  => '',        rxt  => 'b',     lst  => '3',   chn  => 'Sw:1:8',},
$HMConfig::culHmModel{'00FE'}       = {name => 'HM-SCI-FE-8',        st   => 'threeStateSensor', cyc  => '28:00',   rxt  => 'c:w',   lst  => '1,4', chn  => 'Sw:1:8',},

# Register model mapping
$HMConfig::culHmRegModel{'HB-UW-Sen-THPL-I'}      = {burstRx =>1};
$HMConfig::culHmRegModel{'HB-UW-Sen-THPL-O'}      = $HMConfig::culHmRegModel{'HB-UW-Sen-THPL-I'};
$HMConfig::culHmRegModel{'HM-MOD-FF-8'}           = {lowBatLimitBA3 =>1, ledMode =>1,localResDis =>1};
$HMConfig::culHmRegModel{'HM-SCI-FE-8'}           = {msgScPosA =>1, msgScPosB =>1, eventDlyTime =>1};

# subtype channel mapping
$HMConfig::culHmSubTypeSets{'THPLSensor'} = {peerChan => '0 <actChn> ... single [set|unset] [actor|remote|both]'};

# Subtype spezific funtions
sub CUL_HM_ParseTHPLSensor(@){

my ($mFlg, $frameType, $src, $dst, $msgData, $targetDevIO) = @_;

my $shash = CUL_HM_id2Hash($src);                                           #sourcehash - will be modified to channel entity
my @events = ();

# WEATHER_EVENT
if ($frameType eq '70'){
my $name = $shash->{NAME};
my $chn = '01';

my ($dTempBat, $hum, $pressure, $luminosity, $batVoltage) = map{hex($_)} unpack ('A4A2A4A8A4A8A8', $msgData);

my $temperature =  $dTempBat & 0x7fff;
$temperature = ($temperature &0x4000) ? $temperature - 0x8000 : $temperature;
$temperature = sprintf('%0.1f', $temperature / 10);

my $stateMsg = 'state:T: ' . $temperature;
push (@events, [$shash, 1, 'temperature:' . $temperature]);
push (@events, [$shash, 1, 'battery:' . ($dTempBat & 0x8000 ? 'low' : 'ok')]);

$luminosity = ($luminosity + 0.0) / 100;
$luminosity = ($luminosity < 100) ? $luminosity : sprintf('%.0f', $luminosity);
$batVoltage = sprintf('%.2f', (($batVoltage + 0.00) / 1000));

if ($modules{CUL_HM}{defptr}{$src.$chn}){
my $ch = $modules{CUL_HM}{defptr}{$src.$chn};
push (@events, [$ch, 1, $stateMsg]);
push (@events, [$ch, 1, 'temperature:' . $temperature]);
}

# humidity
if ($hum)                 {
$stateMsg .= ' H: ' . $hum;
push (@events, [$shash, 1, 'humidity:' . $hum]);
}

# luminosity
if ($luminosity < 65538) {
$stateMsg .= ' L: ' . $luminosity;
push (@events, [$shash, 1, 'luminosity:' . $luminosity]);
}

# air pressure
if ($pressure) {
$stateMsg .= ' P: '    . $pressure;
push (@events, [$shash, 1, 'pressure:'    . $pressure]);

my $altitude = AttrVal('global', 'altitude', 0);
my $pressureNN = $altitude ? sprintf('%.0f', ($pressure + ($altitude / 8.5))) : 0;
if ($pressureNN) {
$stateMsg .= ' P-NN: ' . $pressureNN;
push (@events, [$shash, 1, 'pressure-nn:' . $pressureNN]);
}
}

$stateMsg .= ' batVoltage: ' . $batVoltage;  push (@events, [$shash, 1, 'batVoltage:' . $batVoltage]);

push (@events, [$shash, 1, $stateMsg]);
}

return @events;
}

1;


Gruss Peter

PeterS

Hallo

Wie kann ich in einer eigenen HMCONFIG.pm Defnition die Eingangs- und Ausgangskanäle den Typen (Switch und threeStateSensor) zuordnen ?

Bsp:
$HMConfig::culHmModel{'00FD'}             = {name => 'HM-IO-16',           st   => 'threeStateSensor', cyc  => '28:00',   rxt  => 'c:w',   lst  => '1,4', chn  => 'Sw:1:8,Sw:9:16',},

Gruss Peter

trilu

direktes auslösen hatte ich in der relay class nicht vorgesehen. im prinzip ist es aber nur eine message die du an den kanal schicken musst.
wenn der 8 kanal switch über remote funktioniert, dann würde ich einfach den switch mit rein hängen und jeweils einen switch kanal mit einem relay kanal peeren.

dann schickt der switch die message an den kanal und es wird geschaltet....

PeterS

Danke für die Info trilu.
Das teste ich mal :-)

Kann mir noch jemand mit der eigenen HMConfig.pm weiterhelfen ?
Wie kann ich die Kanäle einem switch oder threeStateSensor zuweisen damit die richtige Konfiguration gezogen wird ?

Gruss Peter

PeterS

Hallo trilu

Das peering zwischen Kanal 1 und Kanal x hat nicht funktioniert. Es kommen keine Messages.
Wo sollte dies in Register.h eingetragen werden ?
Hast du mal ein Beispiel für mich ?

Gruss Peter

PeterS

Hallo unimatrix

Folgende kobinierte Definition (switch/threeStateSensor) habe ich in meiner HMConfig_HomeBrew.pm vorgenommen.
Der switch funktioniert, allerdings fehlt das webcmd "toogle".
Der threeStateSensor verhält sich wie ein Button, also state short  bzw long.
Kann man bei einem kombinierten Devices die Attribute direkt mitgeben oder nur über eine eigene Funktion ?


package main;
use strict;
use warnings;
use POSIX;
use Switch;
sub
Asksin_HM_LC_Sw1PBU_FM_CustomFW_Initialize($$)
{
my ($hash) = @_;
}
sub
registerHM_LC_Sw1PBU_FM_CustomFW()
{
{$HMConfig::culHmModel{"00FD"} = {name=>"HM-IO-4",st=>'remoteAndSwitch',cyc=>'',rxt=>'',lst=>'3:1p.2p.3p.4p,1,4:5p.6p.7p.8p',chn=>"Sw:1:4,Btn:5:8"}}
{$HMConfig::culHmChanSets{"HM-IO-400"}{fwUpdate} ="<filename>"};
{$HMConfig::culHmChanSets{"HM-IO-401"} = $HMConfig::culHmSubTypeSets{"switch"}};
{$HMConfig::culHmChanSets{"HM-IO-402"} = $HMConfig::culHmSubTypeSets{"switch"}};
{$HMConfig::culHmChanSets{"HM-IO-403"} = $HMConfig::culHmSubTypeSets{"switch"}};
{$HMConfig::culHmChanSets{"HM-IO-404"} = $HMConfig::culHmSubTypeSets{"switch"}};
{$HMConfig::culHmChanSets{"HM-IO-405"} = $HMConfig::culHmSubTypeSets{"threeStateSensor"}};
{$HMConfig::culHmChanSets{"HM-IO-406"} = $HMConfig::culHmSubTypeSets{"threeStateSensor"}};
{$HMConfig::culHmChanSets{"HM-IO-407"} = $HMConfig::culHmSubTypeSets{"threeStateSensor"}};
{$HMConfig::culHmChanSets{"HM-IO-408"} = $HMConfig::culHmSubTypeSets{"threeStateSensor"}};
{$HMConfig::culHmRegChan{"HM-IO-401"} = $HMConfig::culHmRegType{switch}};
{$HMConfig::culHmRegChan{"HM-IO-402"} = $HMConfig::culHmRegType{switch}};
{$HMConfig::culHmRegChan{"HM-IO-403"} = $HMConfig::culHmRegType{switch}};
{$HMConfig::culHmRegChan{"HM-IO-404"} = $HMConfig::culHmRegType{switch}};
{$HMConfig::culHmRegChan{"HM-IO-405"} = $HMConfig::culHmRegType{threeStateSensor}};
{$HMConfig::culHmRegChan{"HM-IO-406"} = $HMConfig::culHmRegType{threeStateSensor}};
{$HMConfig::culHmRegChan{"HM-IO-407"} = $HMConfig::culHmRegType{threeStateSensor}};
{$HMConfig::culHmRegChan{"HM-IO-408"} = $HMConfig::culHmRegType{threeStateSensor}};
{$HMConfig::culHmRegModel{"HM-IO-8"} =
{ intKeyVisib     =>1,sign            =>1
                         ,OnTime          =>1,OffTime         =>1,OnDly           =>1,OffDly          =>1
                         ,SwJtOn          =>1,SwJtOff         =>1,SwJtDlyOn       =>1,SwJtDlyOff      =>1
                         ,CtValLo         =>1,CtValHi         =>1
                         ,CtOn            =>1,CtDlyOn         =>1,CtOff           =>1,CtDlyOff        =>1
                         ,ActionType      =>1,OnTimeMode      =>1,OffTimeMode     =>1
                         ,lgMultiExec     =>1
                        };}

#Log(1, "Registered 00FD");
}


Bei meine getrennte Definitionen wurden alle Attribute über die Standard HMConfig.pm korrekt gezogen:

package main;
use strict;
use warnings;
use POSIX;
use Switch;

# device definition
$HMConfig::culHmModel{'00FF'}       = {name => 'HM-MOD-FF-8',    st => 'switch',           cyc  => '',        rxt  => 'b',     lst  => '3',   chn  => 'Sw:1:8',},
$HMConfig::culHmModel{'00FE'}       = {name => 'HM-SCI-FE-8',        st   => 'threeStateSensor', cyc  => '28:00',   rxt  => 'c:w',   lst  => '1,4', chn  => 'Sw:1:8',},

# Register model mapping
$HMConfig::culHmRegModel{'HM-MOD-FF-8'}           = {lowBatLimitBA3 =>1, ledMode =>1,localResDis =>1};
$HMConfig::culHmRegModel{'HM-SCI-FE-8'}           = {msgScPosA =>1, msgScPosB =>1, eventDlyTime =>1};


Kannst du mir hier nochmals weiterhelfen ?

Gruss Peter

PeterS

Hallo martin876

Das HM-Device HM-MOD-Re-8 exisitiert bereits in der HMConfig.pm.
Wird das Sendemodul HM-MOD-EM-8 noch ergänzt ?!

Gruss Peter


PeterS

Hallo trilu

Wie ist deine roadmap für die Library geplant?
Wird die library noch finalisiert oder arbeitest du nur noch an der NewAskSin ?
Welche Devices werden aktuell unterstützt ? Was ist mit Dimmern ? Was ist noch geplant ?

Gruss Peter

trilu

Roadmap hört sich zu professionell an. Ist ja nur ein Hobby.
Eigentlich arbeite ich nur noch an der neuen Lib. Sieht auch schon ganz gut aus. Grundfunktionen laufen soweit, HW Anbindung ist in eine Hal ausgelagert, d.h. sie müsste deutlich einfacher zu portieren sein. Was noch fehlt ist ein Modul für die Statusled, eins für Powersave und der User Module Registrar. Dann gehts an die Usermodule. Relay ist da und muss nur über arbeitet werden, Switch muss HW unabhängig werden und dann nehmen ich mir den Dimmer vor.
Kostet aber Alles viel Zeit, kann deshalb noch eine Weile dauern.
Viele Grasse aus Alanya

PeterS

Hallo unimatrix

Hast du mal einen Beispielssketch für deine Dimmer Erweiterung ?

Gruss Peter

Prof. Dr. Peter Henning

Ich habe meine Arbeiten an dem Device, das ich als Türöffner einsetzen möchte, seit etwa Mai ruhen lassen. Ich hatte gehofft, dass inzwischen eine Art Mirakel passiert und am Ende der Sommerzeit eine Art Kochbuch existiert, in dem systematisch die Verwendung der AskSin Library dokumentiert ist.

Denn eines muss man klar sagen: So schön das ist, und so gut und wertvoll die Arbeit von trilu an dieser Sache ist: Die Programmierung eigener Devices ist immer noch mit viel Bastelarbeit und Ausprobiererei verbunden.

Wie immer, wenn man auf ein Mirakel gehofft hat und es nicht gekommen ist: Selber Hand anlegen.

Ich habe also im Wiki einen neuen Artikel begonnen (steht noch nix drin, http://www.fhemwiki.de/wiki/Neues_HomeMatic_Device), in dem ich das dokuemtieren möchte. Und bitte um tatkräftige Mithilfe, um Registerstruktur etc. einigermaßen sauber zu beschreiben. Werde hier posten, wenn ich einen ersten Entwurf habe - ich muss aber erst mal meine Notizen aus dem Mai herauskramen und wieder verstehen.

LG

pah