Arduino Asksin library

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

Vorheriges Thema - Nächstes Thema

trilu

Mir ist noch nicht ganz klar woher das problem mit dem abschalten eigentlich kommt?
Gibt es denn einen Trigger11, also einen Set Befehl von FHEM kommend, wo die duartion time nicht gesetzt wird?
Soweit ich das in Erinnerung habe, wird die immer gesetzt - also es gibt keinen Trigger11 der die Duration Time nicht liefert.

Vielleicht macht ihr mal einen Log der seriellen Konsole?
0E 1E B0 11 F1 00 64 00 00 63 02 01 C8 00 00

So sieht der Trigger11 aus, also duartime = 0;

unimatrix

Hi Trilu,
bei "02 01 C8 00 00" bedeuten doch die zwei letzten Nullen die Ramptime, eine DuraTime wird nicht übertragen und führte dazu in der Relay.h zu zufälligem verhalten (Zeiger auf undefinierte Daten) - daher mein Patch von oben. NIchtsdestotrotz scheint es ja noch andere Probleme zu geben, die damit nicht behoben wurden. Das muss ich mir noch ansehen.

Zum vergleich: ein "set xxx on-for-timer 20" sieht dann so aus:

02 01 C8 00 00 19 00 - die "19 00" sind die Duration in Homematic Codierung.

Dachte ich bisher jedenfalls immer und so hat es sich auch verhalten....vll schmeiß ich ja auch jetzt was durcheinander.

trilu

ups, mein fehler :-)

  "11;p01=02"   => { txt => "SET"         , params => {
                     CHANNEL  => "02,2",
                     VALUE    => "04,2",
                     RAMPTIME => '06,4,$val=CUL_HM_decodeTime16($val)',
                     DURATION => '10,4,$val=CUL_HM_decodeTime16($val)', } },


du hast recht, es wird ein integer übertragen und falls duration gesetzt werden soll, dann sind es zwei integer....

PeterS

Hallo kuek und unimatrix

Danke für die Unterstützung.
Bei mir läuft der 4fach PCB mit den Änderungen von unimatrix nun auch stabil. D.h. die Ausgänge fallen nun nicht mehr willkürlich im Serial-Debugging (siehe Coding unten) oder an der 4fach-Relaiskarte ab :D


...
  relay[0].regInHM(1,&hm);                                                        // register relay class in HM to respective channel
  relay[0].config(&initRelay,&switchRelay1,2,2);                                 // init function, switch function, min delay, random delay for transmitting status message

  relay[1].regInHM(2,&hm);                                                         // register relay class in HM to respective channel
  relay[1].config(&initRelay,&switchRelay2,2,2);                                 // configure the relay to monostable, therefore only one HW pin needed

  relay[2].regInHM(3,&hm);                                                         // register relay class in HM to respective channel
  relay[2].config(&initRelay,&switchRelay3,2,2);                                 // init function, switch function, min delay, random delay for transmitting status message

  relay[3].regInHM(4,&hm);                                                         // register relay class in HM to respective channel
  relay[3].config(&initRelay,&switchRelay4,2,2);                                 // configure the relay to monostable, therefore only one HW pin needed

  Serial << "\npair: " << pHex(regs.ch0.l0.pairCentral,3) << '\n';
}

void loop() {
  parser.poll(); // handle serial input from console
  hm.poll();

  valA1 = digitalRead(A1);
  valA2 = digitalRead(A2);
  valA3 = digitalRead(A3);
  valA4 = digitalRead(A4);
  val_new = String(valA1, DEC) + String(valA2, DEC) + String(valA3, DEC) + String(valA4, DEC);

  if (val_new != val_old) {
    Serial << " \nPort A1234: " << val_new << '\n';
    val_old = val_new;
  }


void initRelay() {
  digitalWrite(A1,0);
  digitalWrite(A2,0);
  digitalWrite(A3,0);
  digitalWrite(A4,0);
  pinMode(A1,OUTPUT);
  pinMode(A2,OUTPUT);
  pinMode(A3,OUTPUT);
  pinMode(A4,OUTPUT);
}

void switchRelay1(uint8_t on) {
  if (on) {
    digitalWrite(A1,1);
    //   delay(1000);
  }
  else {
    digitalWrite(A1,0);
    //    delay(1000);
  }
}

void switchRelay2(uint8_t on) {
  if (on) {
    digitalWrite(A2,1);
    //    delay(1000);
  }
  else {
    digitalWrite(A2,0);
    //    delay(1000);
  }
}

void switchRelay3(uint8_t on) {
  if (on) {
    digitalWrite(A3,1);
    //    delay(1000);
  }
  else {
    digitalWrite(A3,0);
    //    delay(1000);
  }
}

void switchRelay4(uint8_t on) {
  if (on) {
    digitalWrite(A4,1);
    //    delay(1000);
  }
  else {
    digitalWrite(A4,0);
    //    delay(1000);
  }
}
...


Die Ursache meiner Probleme ist mir allerdings noch rätselhaft  ???
Nach etlichen Kompilingfehlern und Problemen mit abfallenden Ausgänge habe ich mal meine Arduino-preferences.txt gelöscht.
Da nun die Ausgangsseite soweit stabil läuft, ist mein nächste Schritt die Kombination von 4-Eingängen und 4-Ausgängen in einem Sketch.

Gruss Peter

unimatrix

bedeutet das, dass deine "zufällig abschalten" - Probleme nun doch mit dem Patch (anscheinend) beseitigt sind? Ich hatte die letzten Tage nur wenig Zeit aber ich konnte auch in deinem Code keinen Grund mehr finden, warum sich da was abschalten sollte...

VG

PeterS

Genau. Das was ich getestet habe, sieht nun gut aus !
Danke ;)

Gruss Peter

PeterS

Hallo
Wenn ich die Library in einer neuen Arduino-IDE V1.5.7 versuche zum Laufen zu bringen erhalte ich folgende Fehler:

In file included from C:\Users\Test\Workplace\Arduino\arduino-1.5.7\libraries\AskSin/AskSinMain.h:31:0,
                 from sketch_aug10a.ino:1:
C:\Users\Test\Workplace\Arduino\arduino-1.5.7\libraries\AskSin/utility/StatusLed.h:18:20: fatal error: Serial.h: No such file or directory
#include <Serial.h>
                    ^
compilation terminated.


#include <AskSinMain.h>
#include <Buttons.h>
#include <Dummy.h>
#include <Relay.h>
#include <Sensor_SHT10_BMP085_TSL2561.h>

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}


PS: Die Library wurde die Funktion "Library importieren" eingefügt

Kennt jemand die Lösung ?

Gruss Peter

PeterS

Hallo Zusammen
Mein Ziel ist es immer noch die Kombination von 4-Eingängen und 4-Ausgängen in einem Sketch zu pressen und möglichst auf Standarddefinitionen (FHEM, Homematic) aufzubauen.
Gibt es eine HM-Komponente (Dimmer, Temp, etc.) welche sowohl ein Input/-Output Byte bereitstellt, dann könnte ich meine Signalzustände auch als Byte konsolidiert übertragen ?

Gruss Peter

trilu

Ich kann mir nicht vorstellen dass es so eine Komponente gibt. HM macht das immer Channel Orientiert.
Das heisst, du bekommst pro Kanal ein Byte, dass den Zustand angibt. Und der ist 0-200...
Bei einem Dimmer Kanal sind das 0,5%, bei Schaltern ist 0 aus und 200 ein....

PeterS

#699
Hallo trilu, hallo martinp876

Was muss für ein neues HM-Geräte (4 Eingangskanäle und 4 Ausgangskanäle) alles angepackt werden ?

HMconfig, 10_CUL_HM ?

Gruss Peter

PeterS

Hallo Zusammen

Ich habe die Tage mehr mit der library und der HMconfig.pm befasst.
Der 4 fach switch (Modell-ID: 0xAB) sowie der 3fach Schalter (Modell-ID: 0x46) funktionieren soweit. Aber nicht in einem Sketch !!
Bei der Register.h genügt es teilweise sogar schon einfach nur die Modell-ID und Sub Type ID anzupassen  ???

Mein Ziel ist es aber ein HM-Gerät HM-Gerät (4 Eingangskanäle und 4 Ausgangskanäle) zu betreiben. Besser wäre natürlich noch ein HM-Gerät (8 Eingangskanäle und 8 Ausgangskanäle und 2 Analogwerte) analog dem Multi-I/O-Modul für HomeMatic-Wired ;D

Da es so ein wireless HM-Gerät nicht gibt, müsste ich dieses in einer Register.h konstruieren und parallel die HMconfig.pm modifizieren, damit dieses neue Device auch in FHEM existiert und erkannt wird.

Ist dies überhaupt machbar, oder ist das HM-Protokoll hier definitiv der falsche Weg ? Eventuell wäre hier SWAP besser geeignet ?

Gruss Peter

unimatrix

Hallo Peter,

das ist schon machbar. Schaue dir doch als Beispiel mal die CustomFW des Schaltaktors an.

http://forum.fhem.de/index.php/topic,18071.0.html

Für diesen hat Martin das HMConfig angepasst (alles im GIT zu sehen)  - und den Typen "remoteAndSwtich" erfunden. Dieser hat also sowohl Eingänge als auch Ausgänge, bzw sowohl Sensoren/Taster als auch Aktoren. (hier: 2 Taster + 3 Aktorkanäle).

Basierend auf diesem Beispiel solltest du das ganze hochskalieren können. Dazu muss wie du schon erkannt hast die register.h angepasst werden (dazu kann das Perl-Script verwendet werden, du baust dir die devDefinition.pm einfach aus den von dir gewünschten Registern und vorhandenen HM-Geräten zusammen). Die HMConfig aus dem obigen Beispiel muss wohl nur noch leicht angepasst werden.

Theoretisch sind der Anzahl der Kanäle keine Grenzen gesetzt, aber es wird hier dann im Speicher und EEProm eng. Es hängt von der Größe deiner Registersets ab, sobald du die channel "peerbar" machst brauchst du pro CHannel den Platz für alle zugelassenen Peers.

PeterS

Hallo unimatrix

Das Beispiel hatte ich mir schon angesehen und versucht in meine Register.h zu portieren.
Allerdings ist die Register.h des Wechselschalters schon recht komplex.
Meine Versuche mit der Modell-ID 0xF0, 0xA9 führten entweder zu Compilingfehlern oder dem FHEM-Device fehlten die Kanäle und Aktionen  :-[

Wäre es nicht sinnvoll ein universelles I/O Devices zu generieren (mehrere Eingänge und Ausgänge und vielleicht 2 Analogwerte), welches man individuell nutzen könnte ?

EQ3 geht nun schonmal den Weg im dem 8fach-Ausgängen, vielleicht folgen demnächst noch die 8fach-Eingänge  ;)

Gruss Peter



hexenmeister

#703
So ein Modul gibt es schon.  Bereits bestellbar, jedoch erst in 4 Monaten lieferbar.
Es sind das Pärchen HM-MOD-Re-8 und HM-MOD-EM-8.

PeterS

Hallo Hexenmeister

Danke für die Info.
Den HM-MOD-EM-8 kannte ich noch nicht :-)

Allerdings sind dies 2 getrennte Module.
D.h. man müsste 2 Panstamp (oder ähnliches) einsetzen um die Funktionalität nachzubilden oder halt doch ein neues Homebrew Devices aus beiden bilden :-)

Gruss Peter