FS20 UART Befehle mit CUL am RPI empfangen.

Begonnen von HaPe, 17 Oktober 2015, 13:15:37

Vorheriges Thema - Nächstes Thema

HaPe

Hallo zusammen, ich habe mich heute hier im Forum registriert, weil ich mit meinem Problem nicht weiter komme und jetzt schon an meinem Konzept zweifele.

Ich habe ein Raspberry Pi 2 mit einem Busware CC1101 868 MHz Transceiver für Raspberry Pi / neue Version 2 und FHEM 5.6

Nun zu meinem Problem.

Ich habe eine Olympia 9300 Alarmanlage, deren Status ich gerne via FHEM empfangen/auslesen möchte.
Dazu habe ich einfach ein Arduino mini Board genommen und lese damit die Status LEDs an der Alarmanlage aus. Wenn die Alarmanlage scharf geschaltet ist, möchte ich via dem Bausatz UART-FS20 den Status an das Rapsberry bzw. CUL senden und somit den Status erfassen.

Das UART-FS20 bietet verschiedene Sendebefehle an u.a. Wechsel zwischen"Aus" und "An", welchen ich gerne nutzen möchte.

Jetzt ist die Frage wie ich diesen gesendeten Befehl im FHEM empfangen bzw. auswerten. Ich hoffe dass dies überhaupt funktioniert, weil ich das System schon aufgebaut habe. Allerdings bin ich mir nach meiner Recherche nicht mehr sicher.

Bis jetzt schalte ich zu Testzwecken nur eine FS20 Schaltsteckdose ein und aus.

Danke für Euren Support.

Beste Grüße,
Daniel

AndreasHH

Moin Daniel,

in FHEM ein FS20 - Gerät bzw. Geräte mit FS20-Adresse definieren (also keinen Dummy) und dann vom Controller über FS20US dieses Gerät ein- und ausschalten.

Ich nutze den FS20US z.Zt. um u.a. die Ladezustände meines Bulli (steht auf dem Hof) in FHEM darzustellen.

Gruß

Andreas
FHEM 5.8, FB7490, FB7390, Linux-Server, Raspi 1, Raspi 2, FHEM2FHEM, div. FS20, div. FHT, div. HMS, div. Homematic, MQTT, ESP8266, Arduino

HaPe

Hallo Andreas,

danke für die schnelle Antwort. Könntest du mir bitte deinen Code, sowohl vom Bulli, also auch den Abschnitt aus dem FHEM schicken.

So sieht es gerade bei mir im FHEM aus:

define AlarmSystem FS20 11111112 00
attr AlarmSystem IODev COC

Allerdings ist das genau dasselbe wie der Ein- und Ausschalter für die Schaltsteckdose.

Mein Arduino Code Schnipsel sieht so aus.

Serial.write(0x02); // Hex 0x02 Startzeichen
Serial.write(0x05); // Hex 0x02 Befehlslänge
Serial.write(0xF1); // Befehl 1x senden
Serial.write(0x00); // HC1
Serial.write(0x01); // HC2
Serial.write(0x00); // Adresse
Serial.write(0x12); // Befehl "Ein" und "Aus"
while(Serial.available())
          {
          ch = Serial.read(); // Receive FS20 UART Response
          Serial.println(ch, HEX);
          }

Hier kommt allerdings auch noch nicht das erwartetet Feedback vom FS20 UART an. :(

AndreasHH

Moin Daniel,

Meine Erfahrungen mit dem FS20US sind gemischt. Soll heissen, dass er sich bestimmte FS20 - Adressen verweigert.

Man muß also wenn er gewünschte Kombinationen aus Adresse und Befehl nicht sendet mal die Zieladresse verändern.
Ebenso kann es sein dass ein off- bzw. on-Befehl in FHEM nicht funktioniert, dann hilft es mit Dim 0% bzw Dim 100% zu arbeiten.

Die von mir folgenden Adress- und Befehlskombinationen sind als funktionierend getestet.

Ebenfalls wichtig: nach Absetzen eines Befehls ein delay verwenden.


hier nun meine Konfig in fhem.cfg:


define BulliAlarm FS20 3362 e2
attr BulliAlarm IODev CUL1
attr BulliAlarm group Alarm
attr BulliAlarm model fs20st
attr BulliAlarm room Alarm,Bulli
#
#
define BulliHof FS20 3362 e0
attr BulliHof IODev CUL1
attr BulliHof event-on-change-reading state
attr BulliHof group Alarm_Status_Bulli,Alarm
attr BulliHof icon fts_garage
attr BulliHof model fs20st
attr BulliHof room Alarm,Bulli
#
define BulliAlarmStatus FS20 3362 e1
attr BulliAlarmStatus IODev CUL1
attr BulliAlarmStatus group Alarm_Status_Bulli,Alarm
attr BulliAlarmStatus model fs20st
attr BulliAlarmStatus room Alarm,Bulli
#
#
define BulliStandheizung FS20 3362 e4
attr BulliStandheizung IODev CUL1
attr BulliStandheizung model fs20st
attr BulliStandheizung room Alarm,Bulli
#
define BulliStandAktiv FS20 3362 e5
attr BulliStandAktiv IODev CUL1
attr BulliStandAktiv event-on-change-reading state
attr BulliStandAktiv model fs20st
attr BulliStandAktiv room Bulli
#
define BulliLandstrom FS20 3362 e6
attr BulliLandstrom IODev CUL1
attr BulliLandstrom event-on-change-reading state
attr BulliLandstrom model fs20st
attr BulliLandstrom room Bulli
#
define BulliBattAufbau FS20 3362 e7
attr BulliBattAufbau IODev CUL1
attr BulliBattAufbau event-on-change-reading state
attr BulliBattAufbau model fs20di
attr BulliBattAufbau room Bulli
attr BulliBattAufbau webCmd dim
#
define BulliBattStart FS20 3362 ec
attr BulliBattStart IODev CUL1
attr BulliBattStart event-on-change-reading state
attr BulliBattStart model fs20di
attr BulliBattStart room Bulli
attr BulliBattStart webCmd dim
#
define BulliAudio FS20 3362 e8
attr BulliAudio IODev CUL1
attr BulliAudio event-on-change-reading state
attr BulliAudio model fs20st
attr BulliAudio room Bulli
#
define Bulli12V1 FS20 3362 e9
attr Bulli12V1 IODev CUL1
attr Bulli12V1 event-on-change-reading state
attr Bulli12V1 model fs20st
attr Bulli12V1 room Bulli
#
define Bulli12V2 FS20 3362 ea
attr Bulli12V2 IODev CUL1
attr Bulli12V2 event-on-change-reading state
attr Bulli12V2 model fs20st
attr Bulli12V2 room Bulli
#
define BulliLS FS20 3362 eb
attr BulliLS IODev CUL1
attr BulliLS event-on-change-reading state
attr BulliLS model fs20st
attr BulliLS room Bulli
#
define BulliDiscPCH FS20 3362 db
attr BulliDiscPCH IODev CUL1
attr BulliDiscPCH model fs20st
attr BulliDiscPCH room Bulli
#
define BulliVol FS20 3362 dc
attr BulliVol IODev CUL1
attr BulliVol model fs20di
attr BulliVol room Bulli
attr BulliVol webCmd dim
#
define BulliTel FS20 3362 dd
attr BulliTel IODev CUL1
attr BulliTel model fs20st
attr BulliTel room Bulli
#
define BulliTrack FS20 3362 de
attr BulliTrack IODev CUL1
attr BulliTrack model fs20st
attr BulliTrack room Bulli
#
define BulliSourceBand FS20 3362 df
attr BulliSourceBand IODev CUL1
attr BulliSourceBand model fs20st
attr BulliSourceBand room Bulli
#



und hier die relevanten Auszüge aud meinem Arduino-Sketch. Zum besseren Verständnis: Ich überwache damit die relevanten Zustände meines T3 (Alarm incl. der aktuellen Batterie und Ladezustände und Steuerungsfunktionen wie z.B. Subwoofer on, wenn Autoradio eingeschaltet). Um es für Dich etwas übersichtlicher zu gestalten, habe ich nur den essentiellen FS20US-Code beigefügt.


SoftwareSerial mySerialUS(-1, PB3); // RX, TX US20

float AufBatt = 0;
float StartBatt = 0;




// FS20-Codes
char* cmdHC1 = "\x33";  // Housecody byte 1
char* cmdHC2 = "\x62";  // Housecode byte 2

// commands Alarm per FS20US

char* cmdAlarmScharfon = "\x02\x06\xF1\x33\x62\xe1\x11\x11";
char* cmdAlarmScharfoff = "\x02\x06\xF1\x33\x62\xe1\x18\x11";
char* cmdAlarm = "\x02\x06\xF1\x33\x62\xe2\x11\x11";
char* cmdLandstroman = "\x02\x06\xF1\x33\x62\xe6\x11\x11";
char* cmdLandstromaus = "\x02\x06\xF1\x33\x62\xe6\x18\x11";
char* cmdBullida = "\x02\x06\xF1\x33\x62\xe0\x11\x11";
char* cmdBulliStandan = "\x02\x06\xF1\x33\x62\xe5\x11\x11";
char* cmdBulliStandaus = "\x02\x06\xF1\x33\x62\xe5\x18\x11";
char* cmdBulliAudioan = "\x02\x06\xF1\x33\x62\xe8\x11\x11";
char* cmdBulliAudioaus = "\x02\x06\xF1\x33\x62\xe8\x18\x11";
char* cmdBulli12V1an = "\x02\x06\xF1\x33\x62\xe9\x11\x11";
char* cmdBulli12V1aus = "\x02\x06\xF1\x33\x62\xe9\x18\x11";
char* cmdBulli12V2an = "\x02\x06\xF1\x33\x62\xea\x11\x11";
char* cmdBulli12V2aus = "\x02\x06\xF1\x33\x62\xea\x18\x11";
char* cmdBulliLSan = "\x02\x06\xF1\x33\x62\xeb\x11\x11";
char* cmdBulliLSaus = "\x02\x06\xF1\x33\x62\xeb\x18\x11";
char* cmdBulliAufbauLadung = "\x02\x06\xF1\x33\x62\xe7\x10\x11";   // Anzeige 100%
char* cmdBulliAufbauVoll = "\x02\x06\xF1\x33\x62\xe7\x0F\x11";     // Anzeige 93,75%
char* cmdBulliAufbauMittel = "\x02\x06\xF1\x33\x62\xe7\x0C\x11";   // Anzeige 75%
char* cmdBulliAufbauSchwach = "\x02\x06\xF1\x33\x62\xe7\x0A\x11";   // Anzeige 62,5%
char* cmdBulliAufbauLeer = "\x02\x06\xF1\x33\x62\xe7\x08\x11";   // Anzeige 50%
char* cmdBulliAufbauWeg = "\x02\x06\xF1\x33\x62\xe7\x18\x11";   // Anzeige 0%

char* cmdBulliStartLadung = "\x02\x06\xF1\x33\x62\xec\x10\x11";   // Anzeige 100%
char* cmdBulliStartVoll = "\x02\x06\xF1\x33\x62\xec\x0F\x11";     // Anzeige 93,75%
char* cmdBulliStartMittel = "\x02\x06\xF1\x33\x62\xec\x0C\x11";   // Anzeige 75%
char* cmdBulliStartSchwach = "\x02\x06\xF1\x33\x62\xec\x0A\x11";   // Anzeige 62,5%
char* cmdBulliStartLeer = "\x02\x06\xF1\x33\x62\xec\x08\x11";   // Anzeige 50%
char* cmdBulliStartWeg = "\x02\x06\xF1\x33\x62\xec\x18\x11";   // Anzeige 0%

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



mySerialUS.begin(9600);
delay(20);
Serial.println(">>> Data Transmitter FS20 US <<<");


FS20senden(cmdBullida);


}

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

}


// #################################################
void FS20senden(char* cmdFS20sub){
   mySerialUS.print(cmdFS20sub);
   delay(200);
  }
}



Gruß

Andreas
FHEM 5.8, FB7490, FB7390, Linux-Server, Raspi 1, Raspi 2, FHEM2FHEM, div. FS20, div. FHT, div. HMS, div. Homematic, MQTT, ESP8266, Arduino

HaPe

Super, das hat geholfen. Nun funktioniert es bei mir auch.

Wie oft sendest du den Status aus dem Bulli, einmal nach einem Statuswechsel erscheint mir etwas wenig? Ich habe so an einen Intervall von 10 Min gedacht.

Einen schönen Start in die Woche wünsche ich.

AndreasHH

Moin  Daniel,

freut mich, dass es funktioniert.

Ich hatte nur einen kleinen Ausschnitt aus meinem Sketch gepostet.

Ich sende alle ca. 5 Minuten Status-Meldungen.


const unsigned long Interval5m = 150000;
unsigned long lastRun5m = 0 - Interval5m;

void setup() {

}

void loop() {

// alle 5min Statusmeldungen etc
     if(millis() - lastRun5m >= Interval5m){
      FS20senden(cmdBullida);

       lastRun5m += Interval5m;

  }

}


Ich wünsche auch eine schöne Woche.

Gruß

Andreas

FHEM 5.8, FB7490, FB7390, Linux-Server, Raspi 1, Raspi 2, FHEM2FHEM, div. FS20, div. FHT, div. HMS, div. Homematic, MQTT, ESP8266, Arduino