{"text_format":"1","workbook":"xlsx","n_sheets":5,"sheets":["Einführung","RS485-Protokoll","RF-Protokoll","SCART-Protokoll","Ablauf"],"not_rendered":{"charts":0,"images":1,"macros":1,"external_links":0,"defined_names":0,"comments":0,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"Einführung","index":0,"n_rows":0,"n_cols":0,"rows_kept":0,"cut":false,"hidden":false,"merged":[]}

{"sheet":"RS485-Protokoll","index":1,"n_rows":83,"n_cols":13,"rows_kept":83,"cut":false,"hidden":false,"merged":[[0,0,0,12],[9,8,55,12]]}
["RS-485 Protokolldefinition für Projekt StarLight"]
[]
["Für die Übertragung von Daten vom Master zum Slave und vice versa wird ein Protokollrahmen von 10 Bytes verwendet. Dabei haben nicht immer alle Bytes eine Bedeutung. "]
["Undefinierte Felder werden mit 0xFF gekennzeichnet."]
["Zur Übertragung der Daten wird innerhalb von Master und Slave mittels BASCOM die Overlay-Technik angewendet. Unterschiedliche Felder haben verschiedene Bedeutung."]
["Die Übertragung wird mit einer 16-Bit-CRC abgesichert, welche via Standard von BASCOM unterstützt wird (CRC16)"]
["Darüber liegt zum Senden und Empfangen ein Overlay-Byte-Feld. "]
[]
[]
["Welche Daten sollen übertragen werden?",null,null,null,null,null,null,null,"Datenstrukturen BASCOM:\n\nDie Aufstellung der Daten sieht wie folgt aus:\n     DIM Zieladresse as Byte\n     DIM Quelladresse as Byte\n     DIM Framelength as Byte\n     DIM Kommando as Byte\n     DIM Licht as Byte\n     DIM Dimmstufe as Byte\n     DIM Temperatur as Byte\n     DIM Sound as Byte\n     DIM Checksum as Word\n\nAlle Felder sollen hintereinander gesendet/empfangen werden.\nDie Möglichkeit ist es, den Speicherbereich, den die 9 Felder einnehmen ein zweites mal zu definieren, diesmal aber als einfaches Byte-Array:\n     DIM TxRxBuffer(10) as Byte AT Zieladresse OVERLAY\n     DIM Bufferindex as byte\n     Bufferindex = 1\n\nWenn nun einem beliebigen Zeitpunkt ein Byte empfangen wird, wir es in den Buffer geschrieben:\n\n     IF IsCharWaiting() <> 0 then \n          TxRxBuffer(Bufferindex) = INKEY()\n          incr Bufferindex \n          IF Bufferindex > 10 then\n               'Alle Datenfelder komplett, verarbeiten\n               Bufferindex = 1 'Index zurücksetzen\n          End If\n     End If\n\nEs muß vor Inkey() sichergestellt sein, daß auch tatsächlich ein Zeichen\neingelangt ist, denn Inkey() würde, wenn nichts da ist, 0x00 zurückgeben.\nDieses 0x00 können wir aber von einem \"echten\" 0x00, das ja möglich wäre,\nnicht unterscheiden. Daher vorher \"IsCharWaiting()\". In einer Receive-ISR ist\ndas natürlich nicht erforderlich, denn da ist immer ein gültiges Zeichen da. \n\n\nChecksum:\n\nAls erste Sicherung ist es mal gut, solche verstümmelten Messages als solche\nzu erkennen. Das löst zwar nocht nicht das genannte Problem, aber wenigstens\nist die Gefahr falscher Daten abgewendet. Da gibt es viele Varianten, CRC, BCC\nund andere. Das sind Prüfziffern, die man hinten an die Message anhängt. Der\nSender erstellt sie, der Empfänger prüft. \n"]
["Beschreibung",null,null,"Richtung"]
["Licht einschalten/ausschalten",null,null,"Master zu Slave"]
["Sound einschalten/ausschalten",null,null,"Master zu Slave"]
["Dimmerstufe",null,null,"Master zu Slave"]
["Statusabfrage",null,null,"Master zu Slave"]
["Übertemperatur-Wanung",null,null,"Slave zu Master"]
["Acknowledge",null,null,"Slave zu Master"]
["Statusinformationen",null,null,"Slave zu Master"]
[]
[]
["Dateninhalte"]
["Wert","Datentyp","Länge","Wertebereich","Beschreibung"]
["Licht","Byte",1,"0 .. 1 (ja/nein)","Zustand SolidStateRelais"]
["Dimmerstufe","Byte",1,"0 .. 32","Dimmerstufe für Timer zur Steuerung des IGBT"]
["Temperatur","Byte",1,"0 .. 254","Messwert des Temperatursensors DS18S20"]
["Adresse","Byte",1,"0 .. 254","Slaveadresse"]
["Acknowledge","Byte",1,"0xFF","Acknowledge bzw. Undefined"]
["Sound","Byte",1,"0 .. 1 (ja/nein)","Zustand des akustischen Feedbacks"]
[]
[]
["Aufbau Protokoll"]
[]
["Byte 1",null,null,null,"Byte 10"]
["EmpfängerAdr","SenderAdr","Framelänge","Daten","Checksumme"]
["Byte","Byte","Byte","Bytes 4..8","Word"]
[]
[]
["Daten"]
[]
["Byte 4",null,null,null,"Byte 8"]
["Kommando","Licht","Dimmerstufe","Temperatur","Sound"]
["Byte","Byte","Byte","Byte","Byte"]
[]
[]
["Adressebereiche"]
[]
["HEX-Wert","Adresse","Beschreibung"]
["0xFF","Adresse 255","Broadcast-Message an alle Slaves"]
["0x00","Adresse 0","Adresse des Masters"]
["0x01","Adresse 1","Adresse von Slave 1"]
["0x02","Adresse 2","Adresse von Slave 2"]
["0x03","Adresse 3","Adresse von Slave 3"]
["0x04","Adresse 4","Adresse von Slave 4"]
["0x05","Adresse 5","Adresse von Slave 5"]
["0x06","Adresse 6","Adresse von Slave 6"]
["0x07","Adresse 7","Adresse von Slave 7"]
["0x08","Adresse 8","Adresse von Slave 8"]
[]
["Bemerkung: Wird eine Broadcast-Message an alle Slaves gesendet so anworten dkeiner der Slaves, der Master wartet auch auf keine Antwort"]
[]
[]
["Kommunikation Master→Slave"]
[]
[null,null,null,"Byte 1",null,null,null,null,null,null,null,null,"Byte 10"]
["0x01","Licht schalten",null,"Adresse","0x00",5,"0x01","0..1","0xFF","0xFF","0xFF","ChkSumHigh","ChkSumLow"]
["0x02","Dimmer schalten",null,"Adresse","0x00",5,"0x02","0xFF","0..32","0xFF","0xFF","ChkSumHigh","ChkSumLow"]
["0x03","Sound schalten",null,"Adresse","0x00",5,"0x03","0xFF","0xFF","0xFF","0..1","ChkSumHigh","ChkSumLow"]
["0x04","Licht, Dimmer und Sound schalten",null,"Adresse","0x00",5,"0x04","0..1","0..32","0xFF","0..1","ChkSumHigh","ChkSumLow"]
["0x05","Status abfragen",null,"Adresse","0x00",5,"0x05","0xFF","0xFF","0xFF","0xFF","ChkSumHigh","ChkSumLow"]
["0x06","Temperaturschwelle setzen",null,"Adresse","0x00",5,"0x06","0xFF","0xFF","0..254","0xFF","ChkSumHigh","ChkSumLow"]
["0x07","Start Demo Sweep",null,"Adresse","0x00",5,"0x07","0..1","0xFF","0xFF","0xFF","ChkSumHigh","ChkSumLow"]
[]
["Bemerkung: ","Bei der Kommandierung der Slaves werden immer vollständig Frames übertragen. Je nach Kommando werden nur Teile der Botschaft ausgewertet. unrelevante Einträge sind mit 0xFF zu übertragen"]
[null,"Sweep wird nur via Broadcast gesendet. bei Spweep andere Bedeutung des Bytes Licht: 0 = sweep down, 1 = sweep up"]
[]
[]
["Kommunikation Slave→Master"]
[]
[null,null,null,"Byte 1",null,null,null,null,null,null,null,null,"Byte 10"]
["0xFF","Acknowledge",null,"0x00","Adresse",5,"0xFF","0..1","0..32","0..254","0..1","ChkSumHigh","ChkSumLow"]
["0x02","Status",null,"0x00","Adresse",5,"0x02","0..1","0..32","0..254","0..1","ChkSumHigh","ChkSumLow"]
[]
["Bemerkung: ","Das Acknowledge beinhaltet ebenso wie der Status alle Informationen des Slaves"]

{"sheet":"RF-Protokoll","index":2,"n_rows":104,"n_cols":10,"rows_kept":104,"cut":false,"hidden":false,"merged":[[8,0,9,3],[0,0,0,9],[2,0,5,9]]}
["Funk-Protokolldefinition für Projekt StarLight Betty«Master"]
[]
["Für die Übertragung von Daten von Betty zum Master und vice versa wird ein Protokollrahmen von 6 bzw. 7  Bytes verwendet. Dabei haben nicht immer alle Bytes eine Bedeutung. Undefinierte Felder werden mit 0xFF gekennzeichnet. Zur Übertragung der Daten wird innerhalb des Master mittels BASCOM die Overlay-Technik angewendet. Unterschiedliche Felder haben verschiedene Beduetung. Darüber liegt zum Senden und Empfangen ein Overlay-Byte-Feld. Die Übertragung wird mit einer 16-Bit-CRC abgesichert, welche via Standard von BASCOM unterstützt wird (CRC16).\nAchtung: Das RF-Protokoll wird in das SCART-Protokoll eingebaut. Damit kommt zu den hier beschriebenen Bytes noch zusätzlicher Protokoll-Overhead hinzu!"]
[]
[]
[]
[]
["Welche Daten sollen übertragen werden?"]
["Beschreibung",null,null,null,null,null,null,null,"Richtung"]
[null,null,null,null,null,null,null,null,"Betty→Master","Betty←Master"]
["Lichtanlage aus/ein   (globales Kommando)",null,null,null,null,null,null,null,"Command","Accept"]
["Dimmer 1-8 aus/an",null,null,null,null,null,null,null,"Command","Accept"]
["Statusabfrage Dimmer 1-8 (Dimmerstufe, Temperatur)",null,null,null,null,null,null,null,"Command","Status"]
["Dimmerstufe einstellen 0-32 (Dimmer 1-7, Stufe 0,32)",null,null,null,null,null,null,null,"Command","Accept"]
["Sound aus/ein",null,null,null,null,null,null,null,"Command","Accept"]
["Alle Lampen an / aus",null,null,null,null,null,null,null,"Command","Accept"]
["Demomodus aktivieren",null,null,null,null,null,null,null,"Command","Accept"]
[]
[]
["Dateninhalte"]
["Wert","Datentyp","Länge","Wertebereich","Beschreibung"]
["Lichtanlage","Byte",1,"0 .. 1 (ja/nein)","Gesamte Anlage aus/einschalten"]
["Dimmer","Byte",1,"1..8","Dimmermodul auswählen"]
["Dimmerstufe","Byte",1,"0 .. 32","Dimmerstufe für Timer zur Steuerung des IGBT"]
["Temperatur","Byte",1,"0 .. 254","Messwert des Temperatursensors DS18S20"]
["Kommando","Byte",1,"0 .. 254","Kommandowort"]
["Acknowledge","Byte",1,"0xFF","Acknowledge bzw. Undefined"]
[]
[]
[]
["Kommunikation Betty → Master"]
[]
["Aufbau Protokoll von Betty ® Master",null,null,null,null,"Kommandos"]
[]
["Byte 1",null,"Byte 6",null,null,"HEX-Wert","Dezimal","Beschreibung"]
["Framelänge","Daten","Checksumme",null,null,"0x00",0,"Statusabfrage"]
["Byte","Byte 2..4","Word",null,null,"0x01",1,"Lichtanlage an/aus"]
[null,null,null,null,null,"0x02",2,"Dimmer einstellen"]
[null,null,null,null,null,"0x03",3,"Sound an/aus"]
[null,null,null,null,null,"0x04",4,"Alle Lampen an/aus"]
[null,null,null,null,null,"0x05",5,"Dimmer 1-8 an/aus"]
[]
[]
[]
[null,null,null,"Daten Betty ® Master"]
[]
[null,null,null,"Byte 2",null,"Byte 4"]
[null,null,null,"Kommando","Parameter 1","Parameter 2"]
[null,null,null,"Byte","Byte","Byte"]
[]
[null,null,null,null,null,null,"Parameter 1: ein/aus (=1/0) oder Dimmer 1..8"]
[null,null,null,null,null,null,"Parameter 2: Dimmer 1..8 oder Dimmwert 0..32"]
[]
[null,null,"Byte 1",null,null,null,null,"Byte 6"]
["0x00","Statusabfrage/PING",3,"0x00","1..8","0xFF","ChkSumHigh","ChkSumLow"]
["0x01","Lichtanlage  an/aus",3,"0x01","0xFF","0xFF","ChkSumHigh","ChkSumLow","Achtung: Toggelfunktion"]
["0x02","Dimmer einstellen",3,"0x02","1..8 / 0xFF","0..32","ChkSumHigh","ChkSumLow","Parameter 0xFF entspricht Broadcast alle Dimmer"]
["0x03","Sound an/aus",3,"0x03","0..1","0xFF","ChkSumHigh","ChkSumLow"]
["0x04","Alle Lampen an/aus",3,"0x04","0..1","0xFF","ChkSumHigh","ChkSumLow"]
["0x05","Dimmer 1-8 an/aus",3,"0x05","1..8","0..1","ChkSumHigh","ChkSumLow"]
["0x06","Demomodus aktivieren",3,"0x06","0xFF","0xFF","ChkSumHigh","ChkSumLow"]
["0x07","Dimmer steuern",3,"0x07","0x00..0xFF","0..32","ChkSumHigh","ChkSumLow","Achtung: Gesamtfunktion (Spezialfunktion)"]
[]
[null,null,null,null,null,null,"Parameter 1: Low-Nibbel beschreibt Dimmerauswahl. Bit 8 ob Dimmer EIN/AUS sein soll"]
[]
["Bemerkung: ","Bei der Kommandierung werden immer vollständig Frames übertragen. Je nach Kommando werden nur Teile der Botschaft ausgewertet. unrelevante Einträge sind mit 0xFF zu übertragen"]
[null,"Mittels Spezialfunktion 0x07 \"Dimmer steuern\" ist es möglich, mit einem Aufruf sowohl DimmStufen als auch Schaltzustände zu setzen"]
[]
[]
["Kommunikation Master → Betty"]
[]
["Aufbau Protokoll von Master ® Betty",null,null,null,null,null,"Kommandos"]
[]
["Byte 1",null,"Byte 7",null,null,null,"HEX-Wert","Dezimal","Beschreibung"]
["Framelänge","Daten","Checksumme",null,null,null,"0xFF",255,"Acknowledge bzw. Undefined"]
["Byte","Byte 2..6","Word",null,null,null,"0x00",0,"Temperaturalarm"]
[null,null,null,null,null,null,"0x01",1,"Statusabfrage"]
[null,null,null,null,null,null,"0x02",2,"Alive-Botschaft"]
[]
[]
[]
[null,null,null,"Daten Master ® Betty"]
[]
[null,null,null,"Byte 2",null,null,null,"Byte 6"]
[null,null,null,"Kommando","Dimmer","Dimmwert","Temperatur","Sound"]
[null,null,null,"Byte","Byte","Byte","Byte","Byte"]
[]
[null,null,null,null,null,"bei ACK bedeutet 1 = Anlage ein, 0 = Anlage aus"]
[null,null,"Byte 1",null,null,null,null,null,null,"Byte 8"]
["0xFF","Acknowledge",5,"0xFF","0..1","0xFF","0..254","0..1","ChkSumHigh","ChkSumLow"]
["0x00","Temperaturalarm",5,"0x00","1..8","0xFF","0xFF","0xFF","ChkSumHigh","ChkSumLow"]
["0x01","Statusabfrage",5,"0x01","1..8","0..32","0..254","0..1","ChkSumHigh","ChkSumLow"]
[]
[null,null,null,null,null,null,null,"Bei ACK liefert Temperatur eingestellte Übertemperaturschwelle !!!"]
[]
["Bemerkung: ","Bei der Kommandierung werden immer vollständig Frames übertragen. Je nach Kommando werden nur Teile der Botschaft ausgewertet. unrelevante Einträge sind mit 0xFF zu übertragen"]
[null,"Bei Ack-Antworten werden immer die aktuellen Daten des ausgwählten Dimmers mit übertragen, wie bei Statusabfrage. Ausnahme bildet der Temperaturalamr welcher aktuell aber nicht umgesetzt ist."]
[null,"Bei Broadcase-Botschaften oder sonstigen anfrage der betty wird ACK gesendet"]
[]
["Definitionen und Festlegungen:"]
["[1] Prinzipiell wird die Kommunikation von Betty initiiert. Dabei kann Übertemperatur die eigentliche Antwort auf eine Anfrage verdrängen und jederzeit als Antwort auf eine Anfrage gesendet werden."]
["[2] Der Master sende keine selbständigen Botschaften and die Betty da die Betty im SleepMode keine Funktdaten empfangen kann."]
["[3] Der Master speichert die Betriebsdaten nur im Flash, wenn die Betty \"Lichtanalage AUS\" gesendet hat. Dies reduziert die Flashzugriffe im Master auf ein Minimum."]
["[4] Ob das Lichtsystem abgeschaltet wurde erkennt die Betty durch das Ausbleiben von Anfragen an den Master. Hier wird das Verbindungsproblem dann als PopUp auf der Betty angezeigt."]

{"sheet":"SCART-Protokoll","index":3,"n_rows":29,"n_cols":9,"rows_kept":29,"cut":false,"hidden":false,"merged":[[0,0,0,8],[2,0,4,8],[7,0,8,3],[7,7,7,8]]}
["Protokolldefinition für Projekt StarLight SCART«Master"]
[]
["Für die Übertragung von Daten von der Betty zum Master und vice versa wird der SCART-Adapter verwendet welcher über ein eigenes Protokoll verfügt in dass das Master-Betty-Protokoll eingebettet wird.\nDas SCART-Protokoll basiert auf der ursprünglichen Implementierung aus dem Forum BettyHacks und wurde leicht abgeändert. Es findet nur eine binäre Übertragung statt und alle nicht verwendeten Funktionen wurden entfernt."]
[]
[]
[]
["Welche Daten sollen übertragen werden?"]
["Beschreibung",null,null,null,null,null,null,"Richtung"]
[null,null,null,null,null,null,null,"SCART→Master","SCART←Master"]
["Dateninhalte aus der Protokolldefinition RF-Protokoll für die Funkverbindung zwischen Betty und Master",null,null,null,null,null,null,"Protokollrahmen","Protokollrahmen"]
[]
[]
[]
["Protokoll Master→SCART (command)"]
["Wert","Datentype","Länge","Wertebereich","Protokoll",null,"Beschreibung"]
["0x00","Byte",1,"0x00","0x00",null,"NOP (dient als PING vom Master an den SCART-Adapter"]
["0x01","1 bis n Byte","n (maximal 63 Bytes)","0x00 bis 0xFF","0x01 <n> <data_1> ... <data_n>          ",null,"transmitt n Bytes (n<=61)"]
[]
[]
["Protokoll SCART→Master (return value)"]
["Wert","Datentype","Länge","Wertebereich","Protokoll",null,"Beschreibung"]
["0x00","Byte",1,"0x00","0x00",null,"Syntax Error"]
["0x01","Byte",1,"0x01","0x01",null,"Ready"]
["0x02","1 bis n Byte","n (maximal 63 Bytes)","0x00 bis 0xFF","0x02 <n> <data_1> ... <data_n>",null,"n bytes data received über RF_PACKET_BINARY"]
["0x03","1 bis n Byte","n (maximal 63 Bytes)","0x00 bis 0xFF","0x03 <n> <data_1> ... <data_n>",null,"n bytes data received über DEFAULT"]
[]
[]
["Wichtige Hinweise:"]
["Die Kommunikation von der Betty zum SCART-Adapter findet mit dem Datenpaket-Typ RF_PACKET_BINARY statt. Dieser Typ wird 1:1 ohne Bearbeitung durch den SCART_Adpater \"durchgeschleuchst\"."]

{"sheet":"Ablauf","index":4,"n_rows":57,"n_cols":10,"rows_kept":57,"cut":false,"hidden":false,"merged":[[0,0,0,10],[42,0,42,10]]}
["Kommunikation"]
[]
[null,null,null,"Kommunikation von Master ↔ SCART",null,null,null,"Kommunikation von SCART ↔ BETTY"]
[]
[null,"Master",null,null,null,"SCART",null,null,null,"Betty"]
[]
["UseCase 1: PING Master→Scart",null,null,"0x00"]
[null,"sendet PingRequest"]
[null,null,null,null,null,"           processing"]
[null,null,null,null,null,"beantwortet PING"]
[null,null,null,"0x01"]
[]
[null,"- Der Master schaltet mittels vorhandenem Relais die Spannungsversogung des SCART-Adapters ein"]
[null,"- Der Master überprüft den Empfang der Quittierung \"Ready\" des SCART-Adapters"]
[null,"- Mittels Recovery wird der Master 3x gepingt"]
[null,"- Ein PING des SCART wird mit CMD 0x00 ausgelöst"]
[]
[]
["UseCase 2: PING Betty→Scart","- Betty prüft mittels PING das Vorhandensein des SCRAT-Adapters",null,null,null,null,null,"RF_PACKET_PING"]
["(PING wird im Normalfall nicht benötigt)","- Betty zeigt Kommunikationsproblem an",null,null,null,null,null,null,null,"sendet PingRequest"]
[null,null,null,null,null,"processing           "]
[null,null,null,null,null,"beantwortet PING"]
[null,null,null,null,null,null,null,"packet_ping"]
[]
[]
[]
["UseCase 3: Transmit DATA","- Datenübertragung vom Master zur Betty wird mit CMD 0x01 ausgelöst"]
[null,"- Der Master teilt über ein Längenbyte dem SCART die Länge der zu übertragenden Botschaft mit:  0x01 <n> <data_1> ... <data_n>          transmitt n Bytes (n<=61)"]
[null,"- Der Master kann von sich aus keine Daten an die Betty senden. Die gesammte Kommunikation wird durch Betty initiiert. Dies gilt auch für Alive und Übertemeratur"]
[]
[null,null,null,null,null,"processing",null,"RF_PACKET_BINARY"]
[null,null,null,"Protokoll-Daten",null,null,null,null,null,"Anfrage senden"]
[null,"Anfrage empfangen"]
[null,"processing           "]
[null,"Daten senden"]
[null,null,null,"Protokoll-Daten",null,null,null,null,null,"Daten empfangen"]
[null,null,null,null,null,"processing",null,"packet_binary"]
[]
[]
[]
[]
[]
["Systemzustandsanalyse"]
[]
["Bei der Betrachtung der Asystemzustände wird immer davon ausgegangen, dass die Betty selbst vorhanden und Betriebsbereit ist."]
[]
[]
["Betty:","Betty ist aktiv",null,null,"Betty kennt Betriebsdaten und steht eventuell in Untermenüs"]
[null,"Betty ist im SleepMode",null,null,"Betty kennt Betriebsdaten und steht eventuell in Untermenüs"]
[null,"Betty startet nach Batteriewechsel erneut",null,null,"Betty ist jungfräulich und kennt noch keine Betriebsdaten"]
[]
["Master:","Master eingeschaltet",null,null,"Kommunikation mit Master wird beantwortet"]
[null,"Master ausgeschaltet",null,null,"Kommunikation mit Master führt zu Retries und Anzeige über PopUp"]
[]
["Asynchrone Zustände:","Ein Asynchroner Zustand entsteht, wenn Betty bereits daten hat, in Untermenü steht und Spannung abgeschaltet wird ohne Ablage der Daten im EEPROM"]
[null,"Lösung: Sofortiges Abspeichern aller Betriebsdaten im EEPROM und entsprechendes Konzept zur Verwaltung von Pages"]
[null,"StarLight stellt nach Systemstart den letzten Betriebstzustand wieder her. Bei Off wechselt auch Betty in das Hauptmenü!"]