[FERTIG]4x4 Key Matrix für SHC

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [FERTIG]4x4 Key Matrix für SHC

    Ich habe ja sicher mal wieder eine Aufgabe die eure Hilfe sucht..

    Ich habe 4x4 Key Matrix da und würde diese zur besseren Bedienung in jedem Raum anbringen so dass ich nicht alles immer übers handy machen muss sondern es auch vor Ort steuern kann.

    hier nun zur Erklärung ich habe in jedem Raum der Wohnung (Wohnzimmer,Schlafzimmer,Bad,Küche, Flur) überall Schaltleitungen zu liegen und auf dem Flur ist ein 12v + 5V Netzteil der die Ganzen LED´s und Technik betreiben. Nun soll es ja nicht nur übers handy, sondern auch einfach wie Richtige Schalter an der wand zu bedienen sein. daher würde ich gern auf die 4X4 Key matrix zurück greifen (mehr als 5 stück verfügbar) nun habe ich mir das Ganze so gedacht das ich einfach über einen ESP immer 2 von den 4x4 Pad´s anschließen kann, sodass ich (Bad + Küche) (Wohnzimmer 2 stück) und (Schlafzimmer + Flur) zusammen anschließen kann. nun aber mein Kleines Problem Wie kann ich dem ESP mitteilen das Die Eingänge ins SHC übertragen werden sollen und da auch das Richtige geschaltet wird. Beispiel : Wohnzimmer Taste 1 Schaltet Licht Sofa im Wohnzimmer An beim erneuten KLICK sollte es wieder ausgehen.

    Ich hoffe ich konnte euch das ganze richtig beschreiben.

    Hier die 4x4 Key matrix. Ich habe mir schon gedacht man könnte auch die 5+6+7+8 an beiden gleich machen sodass man 8x4 Programmiert den braucht man keine zusätzliche hardware mehr.

    88ba8ff482c7b2b57066bc782da416d1.jpg

    Sonst noch verfügbare Hardware:
    ESP8266 ESP-12E WIFI 3x
    ATmega2560 (kommt morgen an)
    esp8266 v1 5x
    Raspberry pi 3 1x
    Raspberry p1 1 b
    Mcp23017 3X

    Sollte ich dafür noch mehr brauchen sollte das auch kein Problem sein der Händler des Vertrauens ist ja nicht seit.
    und sonst noch sehr viel Kabel Grins


    Liebe grüße Jan

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jannek ()

  • 1. ESP mit dem Schaltserver Script programmieren.
    2. Jedem Raum einen ESP geben.
    3. In SHC die entsprechenen Räume anlegen.
    4. Dort pro Raum Eingänge vom ESP und Ausgänge
    vom SHC einpflegen.
    5. Den Ausgängen dann die einzelnen Beleuchtungen
    der Räume mitteilen.

    Zum Schalten der einzelnen Beleuchtungen wird es wohl
    nicht gehen das Licht mit zb. Taste 1 AN und AUS zuschalten.
    Anschalten wäre ja kein Problem (Eingang vom ESP auf High)
    der dann den Ausgang in SHC mit ein Ereignis (positive Flanke)
    AN zuschalten. Nur damit wieder AUS schalten wird nicht so einfach
    gehen.

    Was noch hinzukommt ist das SHC 2.xx wohl nicht mehr rund läuft.
    Kann besser Hardware als Software !
  • premo schrieb:

    Problematisch eigentlich nicht. Nur man müsste dann zum Anschalten oder Ausschalten der Beleuchtung den Button der Matrix länger drücken. Sage mal so ca. 2 Sekunden. Anschluss am ESP ist eigentlich nicht so schwierig. Wie genau kann ich dir morgen abend mal schicken.
    Das wäre schön ich setze gleich mal die ESP´s mit dem schalt server auf und verbinde diese mit meinem SHC.


    EDIT:

    Ich versuche nun seit 2h die Schaltserver Daten auf dem Esp12e zubekommen aber bekomme immer wieder Fehlermeldung(keine Verbindung ob wohl er gefunden wird) irgendwas mach ich falsch... Finde auch keine richtig Anleitung wie ich den richtig Programmiert bekomme.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jannek ()

  • Das hab ich schon hinzugefügt nun kommt dafür der fehler:


    [/tt

    Quellcode

    1. Arduino: 1.8.1 (Windows XP), Board: "NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"
    2. In file included from C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFiGeneric.h:27:0,
    3. from C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFiSTA.h:28,
    4. from C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Arduino15\packages\esp8266\hardware\esp8266\2.3.0\libraries\ESP8266WiFi\src/ESP8266WiFi.h:34,
    5. from C:\esptool\arduino-1.8.1\daten\switchserver_esp8266.ino\switchserver_esp8266.ino.ino:22:
    6. c:\dokumente und einstellungen\administrator\lokale einstellungen\anwendungsdaten\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\functional:48:28: fatal error: bits/c++config.h: No such file or directory
    7. #include <bits/c++config.h>
    8. ^
    9. compilation terminated.
    10. exit status 1
    11. Fehler beim Kompilieren für das Board NodeMCU 1.0 (ESP-12E Module).
    12. Dieser Bericht wäre detaillierter, wenn die Option
    13. "Ausführliche Ausgabe während der Kompilierung"
    14. in Datei -> Voreinstellungen aktiviert wäre.
    Alles anzeigen


    ich mache das ganze auf einem MACbook in einer VMware da der Mac den port nicht findet trotz Treiber installation

    das es sich bei der Hardware um den ESP 12E handelt einfach nur Mirco usb Kabel sollte doch gehen oder nicht ?


    EDIT: hab grade einen Mac Treiber gefunden nun geht die install der Schaltserver´s. ich mache nachher mal ein Howto fertig


    NUN nur noch einen anschlussplan machen oder kann ich von Arduino ein script auch nutzen für die key matrix wegen der Schaltung wie das das shc sonst erkennen welche taste ich drücke ?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jannek ()

  • Hier mal mein Plan damit ihr euch vorstellungen machen könnt

    wohnungs plan.jpg

    Rosa sind die Ganzen Steuerleitungen + Strom Kabel die verlegt wurden.

    Relay´s sind derzeit 32 Stück an MCP23017 dran die per script geschaltet werden nur übers SHC (daher status über shc abrufbar)


    Die ESP12e sollen als Eingang und nicht unbedingt als schalt server laufen. aber alles über shc. Tasten sollen abfrage bekommen ob relay High oder low ist. diese Funktion wird in der INO hinzugefügt. Eine locale abfrage ist schon fertig siehe Anhang aber in dieser INO Datei ist die Anbindung noch nicht drin. Wäre jemand der sich damit auskennt so nett und würde mir eine INO abändern wo er SHC schalt server mit ein setzt und auch eine abfrage beim Master macht ob relay high ist. soll er auch nicht 4 free machen. aber ich möchte nur gern die Wohnung so langsam fertig machen.


    Quellcode

    1. /* @file Kex_Matrix_4x4.ino
    2. || @version 1.0
    3. || @author Jan Pfotenhauer
    4. || @contact The.Jannek@gmail.com
    5. ||
    6. || #
    7. */
    8. #include <Keypad.h>
    9. //
    10. // Ausgänge Teil 1
    11. // Bei Neuen Relay´s einfach neue Zeile anlegen Teile 2 nicht vergessen !!!
    12. //
    13. const int RelayF = 40;
    14. #define RelayF 40
    15. const int RelayG = 42;
    16. #define RelayG 42
    17. const int RelayH = 43;
    18. #define RelayH 43
    19. const int RelayI = 44;
    20. #define RelayI 44
    21. const int RelayJ = 45;
    22. #define RelayJ 45
    23. const int RelayK = 46;
    24. #define RelayK 46
    25. const int RelayL = 47;
    26. #define RelayL 47
    27. const int RelayM = 48;
    28. #define RelayM 48
    29. const int RelayN = 49;
    30. #define RelayN 49
    31. const int RelayO = 50;
    32. #define RelayO 50
    33. const byte ROWS = 4; //Reihen
    34. const byte COLS = 4; //Linen
    35. //
    36. //define the cymbols on the buttons of the keypads
    37. //
    38. char keys[ROWS][COLS] = {
    39. {'P','O','N','M'},
    40. {'L','K','J','I'},
    41. {'H','G','F','E'},
    42. {'D','C','B','A'},
    43. };
    44. byte rowPins[ROWS] = {31, 33, 35, 37}; //connect to the row pinouts of the keypad
    45. byte colPins[COLS] = {23, 25, 27, 29}; //connect to the column pinouts of the keypad
    46. //
    47. // Ausgänge Teil 2
    48. // Bei Neuen Relay´s einfach neue Zeile anlegen
    49. //
    50. int RelayStateF;
    51. int RelayStateG;
    52. int RelayStateH;
    53. int RelayStateI;
    54. int RelayStateJ;
    55. int RelayStateK;
    56. int RelayStateL;
    57. int RelayStateM;
    58. int RelayStateN;
    59. int RelayStateO;
    60. // Create the Keypad
    61. Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
    62. void setup()
    63. {
    64. //
    65. // Ausgänge OutPut
    66. //
    67. pinMode(RelayF,OUTPUT);
    68. pinMode(RelayG,OUTPUT);
    69. pinMode(RelayH,OUTPUT);
    70. pinMode(RelayI,OUTPUT);
    71. pinMode(RelayJ,OUTPUT);
    72. pinMode(RelayK,OUTPUT);
    73. pinMode(RelayL,OUTPUT);
    74. pinMode(RelayM,OUTPUT);
    75. pinMode(RelayN,OUTPUT);
    76. pinMode(RelayO,OUTPUT);
    77. //
    78. // Ausgänge Anfangs Status
    79. //
    80. digitalWrite(RelayF, LOW);
    81. digitalWrite(RelayG, LOW);
    82. digitalWrite(RelayH, LOW);
    83. digitalWrite(RelayI, LOW);
    84. digitalWrite(RelayJ, LOW);
    85. digitalWrite(RelayK, LOW);
    86. digitalWrite(RelayL, LOW);
    87. digitalWrite(RelayM, LOW);
    88. digitalWrite(RelayN, LOW);
    89. digitalWrite(RelayO, LOW);
    90. Serial.begin(9600);
    91. }
    92. int buttonState = 0;
    93. void loop()
    94. {
    95. char key = kpd.getKey();
    96. if(key) // Check for a valid key.
    97. {
    98. switch (key)
    99. {
    100. //
    101. // 1tes Pad Anfang
    102. //
    103. case 'F': // Relay F
    104. if (RelayStateF == HIGH)
    105. {
    106. RelayStateF = LOW;
    107. Serial.println("Relay F AUS");
    108. }
    109. else
    110. {
    111. RelayStateF = HIGH;
    112. Serial.println("Relay F EIN");
    113. }
    114. digitalWrite(RelayF, RelayStateF);
    115. break;
    116. case 'G': // Relay G
    117. if (RelayStateG == HIGH)
    118. {
    119. RelayStateG = LOW;
    120. Serial.println("Relay G AUS");
    121. }
    122. else
    123. {
    124. RelayStateG = HIGH;
    125. Serial.println("Relay G EIN");
    126. }
    127. digitalWrite(RelayG, RelayStateG);
    128. break;
    129. case 'H': // Relay H
    130. if (RelayStateH == HIGH)
    131. {
    132. RelayStateH = LOW;
    133. Serial.println("Relay H AUS");
    134. }
    135. else
    136. {
    137. RelayStateH = HIGH;
    138. Serial.println("Relay H EIN");
    139. }
    140. digitalWrite(RelayH, RelayStateH);
    141. break;
    142. case 'I': // Relay I
    143. if (RelayStateI == HIGH)
    144. {
    145. RelayStateI = LOW;
    146. Serial.println("Relay I AUS");
    147. }
    148. else
    149. {
    150. RelayStateI = HIGH;
    151. Serial.println("Relay I EIN");
    152. }
    153. digitalWrite(RelayI, RelayStateI);
    154. break;
    155. case 'J': // Relay J
    156. if (RelayStateJ == HIGH)
    157. {
    158. RelayStateJ = LOW;
    159. Serial.println("Relay J AUS");
    160. }
    161. else
    162. {
    163. RelayStateJ = HIGH;
    164. Serial.println("Relay J EIN");
    165. }
    166. digitalWrite(RelayJ, RelayStateJ);
    167. break;
    168. case 'K': // Relay K
    169. if (RelayStateK == HIGH)
    170. {
    171. RelayStateK = LOW;
    172. Serial.println("Relay K AUS");
    173. }
    174. else
    175. {
    176. RelayStateK = HIGH;
    177. Serial.println("Relay K EIN");
    178. }
    179. digitalWrite(RelayK, RelayStateK);
    180. break;
    181. case 'L': // Relay L
    182. if (RelayStateL == HIGH)
    183. {
    184. RelayStateL = LOW;
    185. Serial.println("Relay L AUS");
    186. }
    187. else
    188. {
    189. RelayStateL = HIGH;
    190. Serial.println("Relay L EIN");
    191. }
    192. digitalWrite(RelayL, RelayStateL);
    193. break;
    194. case 'M': // Relay M
    195. if (RelayStateM == HIGH)
    196. {
    197. RelayStateM = LOW;
    198. Serial.println("Relay M AUS");
    199. }
    200. else
    201. {
    202. RelayStateM = HIGH;
    203. Serial.println("Relay M EIN");
    204. }
    205. digitalWrite(RelayM, RelayStateM);
    206. break;
    207. case 'N': // Relay N
    208. if (RelayStateN == HIGH)
    209. {
    210. RelayStateN = LOW;
    211. Serial.println("Relay N AUS");
    212. }
    213. else
    214. {
    215. RelayStateN = HIGH;
    216. Serial.println("Relay N EIN");
    217. }
    218. digitalWrite(RelayN, RelayStateN);
    219. break;
    220. case 'O': // Relay O
    221. if (RelayStateO == HIGH)
    222. {
    223. RelayStateO = LOW;
    224. Serial.println("Relay O AUS");
    225. }
    226. else
    227. {
    228. RelayStateO = HIGH;
    229. Serial.println("Relay O EIN");
    230. }
    231. digitalWrite(RelayO, RelayStateO);
    232. break;
    233. //
    234. // Alles Aus
    235. //
    236. case 'P': // Relay P
    237. digitalWrite(RelayF, LOW);
    238. digitalWrite(RelayG, LOW);
    239. digitalWrite(RelayH, LOW);
    240. digitalWrite(RelayI, LOW);
    241. digitalWrite(RelayJ, LOW);
    242. digitalWrite(RelayK, LOW);
    243. digitalWrite(RelayL, LOW);
    244. digitalWrite(RelayM, LOW);
    245. digitalWrite(RelayN, LOW);
    246. digitalWrite(RelayO, LOW);
    247. Serial.println("ALLE AUS");
    248. break;
    249. default:
    250. Serial.println(key);
    251. }
    252. }
    253. }
    Alles anzeigen
  • Ab morgen Abend kann ich wieder an der Matrix weiter machen. Kann mir jemand mal einen Tip geben wie ich mit der Matrix und einem ESP12e ein Ausgang schalten kann..? vielleicht jede taste als EIngang für das SHC zu machen ?? vielleicht über ein GET send Befehl per HTTP ...? also ich kann jeder taste einzeln Abfragen soweit bin ich schon mal.

    Siehe Script :

    Quellcode: Keypad.ino

    1. #include <Keypad.h>
    2. const byte ROWS = 4; //four rows
    3. const byte COLS = 4; //four columns
    4. //define the cymbols on the buttons of the keypads
    5. char keys[ROWS][COLS] = {
    6. {'D','#','0','*'},
    7. {'C','9','8','7'},
    8. {'B','6','5','4'},
    9. {'A','3','2','1'}
    10. };
    11. byte rowPins[ROWS] = {31, 33, 35, 37}; //connect to the row pinouts of the keypad
    12. byte colPins[COLS] = {23, 25, 27, 29}; //connect to the column pinouts of the keypad
    13. // Create the Keypad
    14. Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
    15. #define ledpin 3
    16. void setup()
    17. {
    18. pinMode(ledpin,OUTPUT);
    19. digitalWrite(ledpin, HIGH);
    20. Serial.begin(9600);
    21. }
    22. void loop()
    23. {
    24. char key = kpd.getKey();
    25. if(key) // Check for a valid key.
    26. {
    27. switch (key)
    28. {
    29. case '*':
    30. digitalWrite(ledpin, LOW);
    31. break;
    32. case '#':
    33. digitalWrite(ledpin, HIGH);
    34. break;
    35. default:
    36. Serial.println(key);
    37. }
    38. }
    39. }
    Alles anzeigen


    Gruß Jannek
  • premo schrieb:

    Du meinst es so

    Matrix schaltet am 12e einen Eingang
    und dieser schaltet in SHC einen Ausgang.


    na ich würde gern eine Taste(x) im SHC als An und Aus Schalter Verknüfen können das wäre das Perfekte aber ich habe auch nicht wirklich grade eine idee wie man das richtig lösen kann. muss mir SHC einfach mal richtig ansehen. Aber da ich grade auch noch an einer Automatischen Sonnen Lamellen Steuerung sitze hatte ich dafür noch keine wirkliche zeit.