1 | $regfile = "m32def.dat"
|
2 | $crystal = 8000000
|
3 |
|
4 | $hwstack = 100
|
5 | $swstack = 100
|
6 | $framesize = 100
|
7 | $baud = 19200
|
8 |
|
9 | Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = Portd.7
|
10 | Config Lcd = 16 * 2
|
11 | Cls
|
12 | Cursor Off
|
13 |
|
14 | Config Serialin = Buffered , Size = 160 , Bytematch = 13
|
15 | Config Serialout = Buffered , Size = 160
|
16 |
|
17 |
|
18 | Config Portb.0 = Output ' Displaybeleuchtung
|
19 | Config Portb.1 = Output ' IGT
|
20 |
|
21 | Config Porta.0 = Output ' Relais 1
|
22 | Config Porta.1 = Output ' Relais 2
|
23 | Config Porta.2 = Output ' Relais 3
|
24 | Config Porta.3 = Output ' Relais 4
|
25 | Config Porta.4 = Output ' Relais 5
|
26 | Config Porta.5 = Output ' Relais 6
|
27 | Config Porta.6 = Output ' Relais 7
|
28 | Config Porta.7 = Output ' Relais 8
|
29 | Relais1 Alias Porta.0
|
30 | Relais2 Alias Porta.1
|
31 | Relais3 Alias Porta.2
|
32 | Relais4 Alias Porta.3
|
33 | Relais5 Alias Porta.4
|
34 | Relais6 Alias Porta.5
|
35 | Relais7 Alias Porta.6
|
36 | Relais8 Alias Porta.7
|
37 | Porta = 0
|
38 |
|
39 | Config Portc.0 = Input ' rauf
|
40 | Config Portc.1 = Input ' runter
|
41 | Config Portc.2 = Input ' O K
|
42 |
|
43 | Deflcdchar 1 , 31 , 16 , 16 , 16 , 16 , 16 , 16 , 31
|
44 | Deflcdchar 2 , 31 , 24 , 24 , 24 , 24 , 24 , 24 , 31
|
45 | Deflcdchar 3 , 31 , 28 , 28 , 28 , 28 , 28 , 28 , 31
|
46 | Deflcdchar 4 , 31 , 30 , 30 , 30 , 30 , 30 , 30 , 31
|
47 | Deflcdchar 5 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
|
48 | Deflcdchar 6 , 31 , 32 , 32 , 32 , 32 , 32 , 32 , 31
|
49 | Deflcdchar 7 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16
|
50 |
|
51 | Cls
|
52 |
|
53 | Dim Gsm_daten As String * 160
|
54 | Dim Gsm_text As String * 150
|
55 | Dim Rueckmelde_text As String * 160
|
56 | Dim Ascii_byte As Byte
|
57 | Dim Ascii As String * 1
|
58 | Dim Ok As Byte
|
59 | Dim Ok1 As Byte
|
60 | Dim Ok3 As Byte
|
61 | Dim Ok2 As Word
|
62 | Dim W As Byte
|
63 | Dim Pos1 As Byte
|
64 | Dim Pos2 As Byte
|
65 | Dim Pos3 As Byte
|
66 | Dim Anrufer As String * 16
|
67 | Dim Befehl As String * 50
|
68 | Dim Text1 As String * 50
|
69 | Dim An As String * 10
|
70 | Dim Aus As String * 10
|
71 | Dim Menge As Byte
|
72 | Dim Systemcode(4) As Eram Byte
|
73 | Dim Syscode(4) As Byte
|
74 | Dim Usercode(4) As Byte
|
75 | Dim Pin As String * 16
|
76 | Dim Pin1 As Byte
|
77 | Dim Pin2 As Byte
|
78 | Dim Pin3 As Byte
|
79 | Dim Pin4 As Byte
|
80 | Dim Userpin1 As Eram Byte
|
81 | Dim Userpin2 As Eram Byte
|
82 | Dim Userpin3 As Eram Byte
|
83 | Dim Userpin4 As Eram Byte
|
84 | Dim Schaltzeit As Word
|
85 | Dim Sms_nummer As Byte
|
86 | Dim Verbindungskontrolle As Byte
|
87 | Dim Sms_msg As Byte
|
88 | Dim Zaehler As Word
|
89 | Dim Str_signal As String * 9
|
90 | Dim Str_Signal_Symbol As String * 9
|
91 | Dim Signalstaerke_merken As Byte
|
92 | Dim Signalstaerke As Byte
|
93 |
|
94 |
|
95 |
|
96 | Declare Sub Serial0charmatch()
|
97 | Declare Sub Gsm_reset()
|
98 | Declare Sub Gsm_lokal_echo_off()
|
99 | Declare Sub Gsm_initialisieren()
|
100 | Declare Sub Pineingabe()
|
101 | Declare Sub Pin_eingeben()
|
102 | Declare Sub Sms_loeschen()
|
103 | Declare Sub Ereignismeldung_einstellen()
|
104 | Declare Sub Sms_textmodus_aktivieren()
|
105 | Declare Sub Warte_auf_meldung()
|
106 | Declare Sub Abbruch()
|
107 | Declare Sub Sms_auswerten()
|
108 | Declare Sub Sende_rueckmeldung()
|
109 |
|
110 | ' ----- Voreinstellungen -------
|
111 |
|
112 | Portc.0 = 1 ' Taster
|
113 | Portc.1 = 1 ' Taster
|
114 | Portc.2 = 1 ' Taster
|
115 | 'Portb.0 = 0 ' Display AUS
|
116 | Verbindungskontrolle = 0
|
117 | Signalstaerke_merken = 99
|
118 |
|
119 | Enable Interrupts
|
120 | Portb.0 = 1 ' Display AN
|
121 | Zaehler = 1
|
122 | Str_signal = chr(1) + chr(6) + chr(6) + chr(6) + chr(6) + chr(6) + chr(6) + chr(7)
|
123 |
|
124 | Call Gsm_initialisieren
|
125 |
|
126 | '################### Hauptschleife ###################
|
127 | Do
|
128 |
|
129 | ' Wenn SMS reinkommt
|
130 | If Instr(1 , Gsm_daten , "+CMTI:") > 0 Then
|
131 | Ok = Instr(1 , Gsm_daten , "SM")
|
132 | Ok = Ok + 4
|
133 | Ascii = Mid(gsm_daten , Ok , 1)
|
134 | Sms_nummer = Val(ascii)
|
135 | Gsm_daten = ""
|
136 | Call Sms_auswerten()
|
137 | Zaehler = 0
|
138 | End If
|
139 |
|
140 | ' Wenn Verbindung verloren
|
141 | If Instr(1 , Gsm_daten , "CREG: 2") > 0 And Verbindungskontrolle = 0 Then
|
142 | Gsm_daten = ""
|
143 | Verbindungskontrolle = 1
|
144 | Locate 2 , 1
|
145 | Lcd " Kein Signal !! "
|
146 | End If
|
147 |
|
148 | ' Wenn Verbindung wieder da
|
149 | If Instr(1 , Gsm_daten , "CREG: 1") > 0 And Verbindungskontrolle = 1 Then
|
150 | Gsm_daten = ""
|
151 | Verbindungskontrolle = 0
|
152 | Locate 2 , 1
|
153 | Lcd " Warte auf SMS "
|
154 | End If
|
155 |
|
156 | ' Wenn Antwort vom Empfangspegel-Anforderung
|
157 | If Instr(1 , Gsm_daten , "+CSQ:") > 0 Then
|
158 | Gosub Signal_auswerten
|
159 | End If
|
160 |
|
161 | Incr Zaehler
|
162 | If Zaehler >= 32000 Then
|
163 | ' Fordere Empfangspegel an
|
164 | Print "AT+CSQ"
|
165 | Zaehler = 0
|
166 | End If
|
167 |
|
168 | Loop
|
169 | End
|
170 | '######################################################
|
171 |
|
172 |
|
173 |
|
174 |
|
175 | Sub Serial0charmatch()
|
176 | Input Gsm_daten Noecho
|
177 | Zaehler = 0
|
178 | End Sub
|
179 | '
|
180 | '
|
181 | Sub Gsm_initialisieren()
|
182 | Call Gsm_reset()
|
183 | Call Gsm_lokal_echo_off()
|
184 | Call Pineingabe()
|
185 | Call Sms_loeschen()
|
186 | Call Ereignismeldung_einstellen()
|
187 | Call Sms_textmodus_aktivieren()
|
188 | Call Warte_auf_meldung()
|
189 | End Sub
|
190 | '
|
191 | '
|
192 | Sub Gsm_reset()
|
193 | Gsm_daten = ""
|
194 | Cls
|
195 | Locate 1 , 1
|
196 | Lcd "starte GSM-Modul"
|
197 | Locate 2 , 1
|
198 | Lcd " STAND - BY "
|
199 |
|
200 | ' -- Aktivierungsimpuls an GSM-Modul senden ---
|
201 | Toggle Portb.1
|
202 | Wait 1
|
203 | Toggle Portb.1
|
204 |
|
205 | Do
|
206 | If Instr(1 , Gsm_daten , "CREG: 0") > 0 Then
|
207 | Exit Do
|
208 | End If
|
209 | Loop
|
210 |
|
211 | Locate 2 , 1
|
212 | Lcd "GSM Modul bereit"
|
213 | Wait 1
|
214 | End Sub
|
215 | '
|
216 | '
|
217 | Sub Gsm_lokal_echo_off()
|
218 | Gsm_daten = ""
|
219 | Locate 1 , 1
|
220 | Lcd " lokales Echo "
|
221 | Locate 2 , 1
|
222 | Lcd "deaktivieren "
|
223 | Wait 1
|
224 | Print "ATE0"
|
225 |
|
226 | Do
|
227 | If Instr(1 , Gsm_daten , "OK") > 0 Then
|
228 | Exit Do
|
229 | End If
|
230 | Loop
|
231 |
|
232 | Locate 2 , 15
|
233 | Lcd "OK"
|
234 | Wait 1
|
235 | End Sub
|
236 | '
|
237 | '
|
238 | Sub Pineingabe()
|
239 | Gsm_daten = ""
|
240 | Locate 1 , 1
|
241 | Lcd " PIN eingeben "
|
242 | Locate 2 , 1
|
243 | Lcd " "
|
244 | Wait 1
|
245 |
|
246 | Pin1 = Userpin1
|
247 | Pin2 = Userpin2
|
248 | Pin3 = Userpin3
|
249 | Pin4 = Userpin4
|
250 |
|
251 | If Pin1 = 0 And Pin2 = 0 And Pin3 = 0 And Pin4 = 0 Then
|
252 | Call Pin_eingeben()
|
253 | End If
|
254 |
|
255 | Pin = ""
|
256 | Pin = Str(pin1)
|
257 | Pin = Pin + Str(pin2)
|
258 | Pin = Pin + Str(pin3)
|
259 | Pin = Pin + Str(pin4)
|
260 |
|
261 | Locate 2 , 1
|
262 | Lcd "-PIN hinterlegt-"
|
263 | Wait 1
|
264 | Locate 2 , 1
|
265 | Lcd "Pruefe PIN .... "
|
266 | Wait 1
|
267 |
|
268 | Print "AT+CPIN=" ; Pin
|
269 |
|
270 |
|
271 | Do
|
272 | If Instr(1 , Gsm_daten , "CREG: 1") > 0 Then
|
273 | Exit Do
|
274 | End If
|
275 | Loop
|
276 |
|
277 |
|
278 | Locate 2 , 1
|
279 | Lcd "PIN akzeptiert "
|
280 | Wait 1
|
281 |
|
282 | End Sub
|
283 | '
|
284 | '
|
285 | Sub Pin_eingeben()
|
286 |
|
287 | Pin1 = 0
|
288 | Pin2 = 0
|
289 | Pin3 = 0
|
290 | Pin4 = 0
|
291 |
|
292 | Locate 2 , 1
|
293 | Lcd "PIN => " ; Pin1 ; " "
|
294 |
|
295 | '##################################
|
296 | ' 1. Stelle vom PIN
|
297 | Do
|
298 | If Pinc.0 = 0 Then
|
299 | Do
|
300 | Loop Until Pinc.0 = 1
|
301 | Waitms 200
|
302 | If Pin1 < 9 Then
|
303 | Incr Pin1
|
304 | Locate 2 , 8
|
305 | Lcd Pin1
|
306 | End If
|
307 | End If
|
308 | '-----------------------
|
309 | If Pinc.1 = 0 Then
|
310 | Do
|
311 | Loop Until Pinc.1 = 1
|
312 | Waitms 200
|
313 | If Pin1 > 0 Then
|
314 | Decr Pin1
|
315 | Locate 2 , 8
|
316 | Lcd Pin1
|
317 | End If
|
318 | End If
|
319 | '-----------------------
|
320 | If Pinc.2 = 0 Then
|
321 | Do
|
322 | Loop Until Pinc.2 = 1
|
323 | Waitms 200
|
324 | Exit Do
|
325 | End If
|
326 | Loop
|
327 | '##################################
|
328 | Locate 2 , 9
|
329 | Lcd Pin2 ; " "
|
330 | ' 2. Stelle vom PIN
|
331 | Do
|
332 | If Pinc.0 = 0 Then
|
333 | Do
|
334 | Loop Until Pinc.0 = 1
|
335 | Waitms 200
|
336 | If Pin2 < 9 Then
|
337 | Incr Pin2
|
338 | Locate 2 , 9
|
339 | Lcd Pin2
|
340 | End If
|
341 | End If
|
342 | '-----------------------
|
343 | If Pinc.1 = 0 Then
|
344 | Do
|
345 | Loop Until Pinc.1 = 1
|
346 | Waitms 200
|
347 | If Pin2 > 0 Then
|
348 | Decr Pin2
|
349 | Locate 2 , 9
|
350 | Lcd Pin2
|
351 | End If
|
352 | End If
|
353 | '-----------------------
|
354 | If Pinc.2 = 0 Then
|
355 | Do
|
356 | Loop Until Pinc.2 = 1
|
357 | Waitms 200
|
358 | Exit Do
|
359 | End If
|
360 | Loop
|
361 | '##################################
|
362 | Locate 2 , 10
|
363 | Lcd Pin3 ; " "
|
364 | ' 3. Stelle vom PIN
|
365 | Do
|
366 | If Pinc.0 = 0 Then
|
367 | Do
|
368 | Loop Until Pinc.0 = 1
|
369 | Waitms 200
|
370 | If Pin3 < 9 Then
|
371 | Incr Pin3
|
372 | Locate 2 , 10
|
373 | Lcd Pin3
|
374 | End If
|
375 | End If
|
376 | '-----------------------
|
377 | If Pinc.1 = 0 Then
|
378 | Do
|
379 | Loop Until Pinc.1 = 1
|
380 | Waitms 200
|
381 | If Pin3 > 0 Then
|
382 | Decr Pin3
|
383 | Locate 2 , 10
|
384 | Lcd Pin3
|
385 | End If
|
386 | End If
|
387 | '-----------------------
|
388 | If Pinc.2 = 0 Then
|
389 | Do
|
390 | Loop Until Pinc.2 = 1
|
391 | Waitms 200
|
392 | Exit Do
|
393 | End If
|
394 | Loop
|
395 | '##################################
|
396 |
|
397 | Locate 2 , 11
|
398 | Lcd Pin4 ; " "
|
399 | ' 4. Stelle vom PIN
|
400 | Do
|
401 | If Pinc.0 = 0 Then
|
402 | Do
|
403 | Loop Until Pinc.0 = 1
|
404 | Waitms 200
|
405 | If Pin4 < 9 Then
|
406 | Incr Pin4
|
407 | Locate 2 , 11
|
408 | Lcd Pin4
|
409 | End If
|
410 | End If
|
411 | '-----------------------
|
412 | If Pinc.1 = 0 Then
|
413 | Do
|
414 | Loop Until Pinc.1 = 1
|
415 | Waitms 200
|
416 | If Pin4 > 0 Then
|
417 | Decr Pin4
|
418 | Locate 2 , 11
|
419 | Lcd Pin4
|
420 | End If
|
421 | End If
|
422 | '-----------------------
|
423 | If Pinc.2 = 0 Then
|
424 | Do
|
425 | Loop Until Pinc.2 = 1
|
426 | Waitms 200
|
427 | Exit Do
|
428 | End If
|
429 | Loop
|
430 | '##################################
|
431 |
|
432 | Pin = ""
|
433 | Pin = Str(pin1)
|
434 | Pin = Pin + Str(pin2)
|
435 | Pin = Pin + Str(pin3)
|
436 | Pin = Pin + Str(pin4)
|
437 | Userpin1 = Pin1
|
438 | Userpin2 = Pin2
|
439 | Userpin3 = Pin3
|
440 | Userpin4 = Pin4
|
441 |
|
442 | End Sub
|
443 | '
|
444 | '
|
445 | Sub Sms_loeschen()
|
446 |
|
447 | Gsm_daten = ""
|
448 | Locate 1 , 1
|
449 | Lcd " SMS loeschen "
|
450 | Locate 2 , 1
|
451 | Lcd "bitte warten ..."
|
452 |
|
453 | Print "AT+CMGD=4"
|
454 | Do
|
455 | If Instr(1 , Gsm_daten , "OK") > 0 Then
|
456 | Exit Do
|
457 | End If
|
458 | Loop
|
459 |
|
460 | Locate 2 , 1
|
461 | Lcd "OK-Speicher frei"
|
462 |
|
463 | End Sub
|
464 | '
|
465 | '
|
466 | Sub Ereignismeldung_einstellen()
|
467 | Gsm_daten = ""
|
468 |
|
469 | Locate 1 , 1
|
470 | Lcd "Ereignismeldung "
|
471 | Locate 2 , 1
|
472 | Lcd "einstellen . . ."
|
473 | Wait 1
|
474 |
|
475 | Print "AT+CNMI=3,1,2,2,1"
|
476 |
|
477 | Do
|
478 | If Instr(1 , Gsm_daten , "OK") > 0 Then
|
479 | Exit Do
|
480 | End If
|
481 | Loop
|
482 |
|
483 | Locate 2 , 11
|
484 | Lcd " OK "
|
485 | Wait 1
|
486 |
|
487 | End Sub
|
488 | '
|
489 | '
|
490 | Sub Sms_textmodus_aktivieren()
|
491 | Gsm_daten = ""
|
492 |
|
493 | Locate 1 , 1
|
494 | Lcd " SMS Textmodus "
|
495 | Locate 2 , 1
|
496 | Lcd "aktivieren "
|
497 | Wait 1
|
498 |
|
499 | Print "AT+CMGF=1"
|
500 | Do
|
501 | If Instr(1 , Gsm_daten , "OK") > 0 Then
|
502 | Exit Do
|
503 | End If
|
504 | Loop
|
505 |
|
506 | Locate 2 , 11
|
507 | Lcd " OK "
|
508 | Wait 1
|
509 |
|
510 | End Sub
|
511 | '
|
512 | '
|
513 | Sub Warte_auf_meldung()
|
514 | Gsm_daten = ""
|
515 | Cls
|
516 | Locate 1 , 1
|
517 | Lcd "SIGNAL:" ; Str_signal
|
518 | Locate 2 , 1
|
519 | Lcd " Warte auf SMS "
|
520 |
|
521 | Portb.0 = 0 ' Display AUS
|
522 | End Sub
|
523 | '
|
524 | '
|
525 | Sub Sms_auswerten()
|
526 |
|
527 | Portb.0 = 1 ' DISPLAY AN
|
528 | Anrufer = ""
|
529 | Befehl = ""
|
530 | Gsm_daten = ""
|
531 | Rueckmelde_text = ""
|
532 | Cls
|
533 | Locate 1 , 1
|
534 | Lcd "SMS eingegangen"
|
535 | Locate 2 , 1
|
536 | Lcd "Pruefe . . . . "
|
537 |
|
538 | Print "AT+CMGR=" ; Sms_nummer
|
539 |
|
540 | Gsm_text = ""
|
541 | Do
|
542 | If Len(gsm_daten) > 0 Then
|
543 | Gsm_text = Gsm_text + Gsm_daten
|
544 | Gsm_daten = ""
|
545 | End If
|
546 |
|
547 | If Instr(1 , Gsm_text , "OK") > 0 Then
|
548 | Exit Do
|
549 | End If
|
550 | Loop
|
551 |
|
552 | Locate 2 , 7
|
553 | Lcd " OK "
|
554 | Wait 1
|
555 |
|
556 |
|
557 | Gsm_daten = Gsm_text
|
558 |
|
559 |
|
560 | ' Anrufer-Nummer ermitteln
|
561 | Pos1 = Instr(1 , Gsm_daten , "+49")
|
562 | If Pos1 > 0 Then
|
563 | Pos2 = Instr(pos1 , Gsm_daten , ",")
|
564 | If Pos2 > 0 Then
|
565 | Pos2 = Pos2 - 1
|
566 | Pos1 = Pos1 + 3
|
567 | Menge = Pos2 - Pos1
|
568 | Gsm_text = Mid(gsm_daten , Pos1 , Menge)
|
569 | Anrufer = "0" + Gsm_text
|
570 | Cls
|
571 | Locate 1 , 1
|
572 | Lcd "->" ; Anrufer ; "<-"
|
573 | End If
|
574 | End If
|
575 |
|
576 |
|
577 |
|
578 | '-----------------------------------------------------------
|
579 | ' Prüfe Zugriffs-Code
|
580 | Pos1 = Instr(1 , Gsm_daten , "c:")
|
581 | If Pos1 > 0 Then
|
582 | Pos2 = Instr(pos1 , Gsm_daten , "/")
|
583 | If Pos2 > 0 Then
|
584 | Pos1 = Pos1 + 2
|
585 | Menge = Pos2 - Pos1
|
586 | Befehl = Mid(gsm_daten , Pos1 , Menge)
|
587 | For W = 1 To Menge
|
588 | Ascii = Mid(befehl , W , 1)
|
589 | Usercode(w) = Val(ascii)
|
590 | Next W
|
591 |
|
592 | Ok = 0
|
593 | If Usercode(1) <> Systemcode(1) Then
|
594 | Ok = 1
|
595 | End If
|
596 | If Usercode(2) <> Systemcode(2) Then
|
597 | Ok = 1
|
598 | End If
|
599 | If Usercode(3) <> Systemcode(3) Then
|
600 | Ok = 1
|
601 | End If
|
602 | If Usercode(4) <> Systemcode(4) Then
|
603 | Ok = 1
|
604 | End If
|
605 |
|
606 | If Ok = 1 Then
|
607 | Goto Abbruch
|
608 | Else
|
609 | Locate 2 , 1
|
610 | Lcd "Zugriff erlaubt "
|
611 | Waitms 2000
|
612 | End If
|
613 |
|
614 | End If
|
615 | Else
|
616 | Call Abbruch()
|
617 | Goto Auswerten_ende
|
618 | End If
|
619 | '-----------------------------------------------------------
|
620 |
|
621 | '# Prüfe ob Rückmeldung erwünscht
|
622 | Sms_msg = 0
|
623 | If Instr(1 , Gsm_daten , "msg") > 0 Then
|
624 | Sms_msg = 1
|
625 | End If
|
626 |
|
627 |
|
628 | Rueckmelde_text = "Folgende Funktionen wurden ausgefuehrt : " + Chr(13) + Chr(10) + Chr(13) + Chr(10)
|
629 | '-----------------------------------------------------------
|
630 | ' Prüfe nach Schalter AN
|
631 | Pos1 = Instr(1 , Gsm_daten , "san:")
|
632 | If Pos1 > 0 Then
|
633 | Pos2 = Instr(pos1 , Gsm_daten , "*")
|
634 | If Pos2 > 0 Then
|
635 | Pos1 = Pos1 + 4
|
636 | Menge = Pos2 - Pos1
|
637 | An = Mid(gsm_daten , Pos1 , Menge)
|
638 | Text1 = ""
|
639 | Rueckmelde_text = Rueckmelde_text + " Schalter AN: "
|
640 | For W = 1 To Menge
|
641 | Ascii = Mid(an , W , 1)
|
642 | Ascii_byte = Val(ascii)
|
643 | Select Case Ascii_byte
|
644 | Case 1
|
645 | Relais1 = 1
|
646 | Text1 = Text1 + "-1"
|
647 | Rueckmelde_text = Rueckmelde_text + " 1"
|
648 |
|
649 | Case 2
|
650 | Relais2 = 1
|
651 | Text1 = Text1 + "-2"
|
652 | Rueckmelde_text = Rueckmelde_text + " 2"
|
653 |
|
654 | Case 3
|
655 | Relais3 = 1
|
656 | Text1 = Text1 + "-3"
|
657 | Rueckmelde_text = Rueckmelde_text + " 3"
|
658 |
|
659 | Case 4
|
660 | Relais4 = 1
|
661 | Text1 = Text1 + "-4"
|
662 | Rueckmelde_text = Rueckmelde_text + " 4"
|
663 |
|
664 | Case 5
|
665 | Relais5 = 1
|
666 | Text1 = Text1 + "-5"
|
667 | Rueckmelde_text = Rueckmelde_text + " 5"
|
668 |
|
669 | Case 6
|
670 | Relais6 = 1
|
671 | Text1 = Text1 + "-6"
|
672 | Rueckmelde_text = Rueckmelde_text + " 6"
|
673 |
|
674 | Case 7
|
675 | Relais7 = 1
|
676 | Text1 = Text1 + "-7"
|
677 | Rueckmelde_text = Rueckmelde_text + " 7"
|
678 |
|
679 | Case 8
|
680 | Relais8 = 1
|
681 | Text1 = Text1 + "-8"
|
682 | Rueckmelde_text = Rueckmelde_text + " 8"
|
683 | End Select
|
684 | Next W
|
685 | Locate 1 , 1
|
686 | Lcd "Schalter AN : "
|
687 | Locate 2 , 1
|
688 | Lcd Text1 ; " "
|
689 | Wait 2
|
690 | End If
|
691 | End If
|
692 | '-------------------------------------------------------
|
693 |
|
694 |
|
695 | ' Prüfe nach Schalter AUS
|
696 | Pos1 = Instr(1 , Gsm_daten , "saus:")
|
697 | If Pos1 > 0 Then
|
698 | Pos2 = Instr(pos1 , Gsm_daten , "#")
|
699 | If Pos2 > 0 Then
|
700 | Pos1 = Pos1 + 5
|
701 | Menge = Pos2 - Pos1
|
702 | Aus = Mid(gsm_daten , Pos1 , Menge)
|
703 | Text1 = ""
|
704 | Rueckmelde_text = Rueckmelde_text + Chr(13) + Chr(10) + " Schalter AUS: "
|
705 | For W = 1 To Menge
|
706 | Ascii = Mid(aus , W , 1)
|
707 | Ascii_byte = Val(ascii)
|
708 | Select Case Ascii_byte
|
709 | Case 1
|
710 | Relais1 = 0
|
711 | Text1 = Text1 + "-1"
|
712 | Rueckmelde_text = Rueckmelde_text + " 1"
|
713 |
|
714 | Case 2
|
715 | Relais2 = 0
|
716 | Text1 = Text1 + "-2"
|
717 | Rueckmelde_text = Rueckmelde_text + " 2"
|
718 |
|
719 | Case 3
|
720 | Relais3 = 0
|
721 | Text1 = Text1 + "-3"
|
722 | Rueckmelde_text = Rueckmelde_text + " 3"
|
723 |
|
724 | Case 4
|
725 | Relais4 = 0
|
726 | Text1 = Text1 + "-4"
|
727 | Rueckmelde_text = Rueckmelde_text + " 4"
|
728 |
|
729 | Case 5
|
730 | Relais5 = 0
|
731 | Text1 = Text1 + "-5"
|
732 | Rueckmelde_text = Rueckmelde_text + " 5"
|
733 |
|
734 | Case 6
|
735 | Relais6 = 0
|
736 | Text1 = Text1 + "-6"
|
737 | Rueckmelde_text = Rueckmelde_text + " 6"
|
738 |
|
739 | Case 7
|
740 | Relais7 = 0
|
741 | Text1 = Text1 + "-7"
|
742 | Rueckmelde_text = Rueckmelde_text + " 7"
|
743 |
|
744 | Case 8
|
745 | Relais8 = 0
|
746 | Text1 = Text1 + "-8"
|
747 | Rueckmelde_text = Rueckmelde_text + " 8"
|
748 | End Select
|
749 | Next W
|
750 | Locate 1 , 1
|
751 | Lcd "Schalter AUS : "
|
752 | Locate 2 , 1
|
753 | Lcd Text1 ; " "
|
754 | Wait 2
|
755 |
|
756 | End If
|
757 | End If
|
758 | '----------------------------------------------------------
|
759 | ' Prüfe nach Taster AN
|
760 | ' zuerst gucken ob eine Zeitvorgabe
|
761 | Schaltzeit = 1000
|
762 |
|
763 | Pos1 = Instr(1 , Gsm_daten , "sek:")
|
764 | If Pos1 > 0 Then
|
765 | Pos2 = Instr(pos1 , Gsm_daten , "-")
|
766 | If Pos2 > 0 Then
|
767 | Pos1 = Pos1 + 4
|
768 | Menge = Pos2 - Pos1
|
769 | An = Mid(gsm_daten , Pos1 , Menge)
|
770 | Schaltzeit = Val(an)
|
771 | Schaltzeit = Schaltzeit * 1000
|
772 | End If
|
773 | End If
|
774 | '
|
775 | '
|
776 | Pos1 = Instr(1 , Gsm_daten , "tan:")
|
777 | If Pos1 > 0 Then
|
778 | Pos2 = Instr(pos1 , Gsm_daten , "+")
|
779 | If Pos2 > 0 Then
|
780 | Pos1 = Pos1 + 4
|
781 | Menge = Pos2 - Pos1
|
782 | An = Mid(gsm_daten , Pos1 , Menge)
|
783 | Text1 = ""
|
784 | Ok2 = Schaltzeit / 1000
|
785 | Befehl = Str(ok2)
|
786 | Rueckmelde_text = Rueckmelde_text + Chr(13) + Chr(10) + " Taster schalten (" + Befehl + "sek) :"
|
787 | For W = 1 To Menge
|
788 | Ascii = Mid(an , W , 1)
|
789 | Ascii_byte = Val(ascii)
|
790 | Select Case Ascii_byte
|
791 | Case 1
|
792 | Relais1 = 1
|
793 | Text1 = Text1 + "-1"
|
794 | Rueckmelde_text = Rueckmelde_text + " 1"
|
795 |
|
796 | Case 2
|
797 | Relais2 = 1
|
798 | Text1 = Text1 + "-2"
|
799 | Rueckmelde_text = Rueckmelde_text + " 2"
|
800 |
|
801 | Case 3
|
802 | Relais3 = 1
|
803 | Text1 = Text1 + "-3"
|
804 | Rueckmelde_text = Rueckmelde_text + " 3"
|
805 |
|
806 | Case 4
|
807 | Relais4 = 1
|
808 | Text1 = Text1 + "-4"
|
809 | Rueckmelde_text = Rueckmelde_text + " 4"
|
810 |
|
811 | Case 5
|
812 | Relais5 = 1
|
813 | Text1 = Text1 + "-5"
|
814 | Rueckmelde_text = Rueckmelde_text + " 5"
|
815 |
|
816 | Case 6
|
817 | Relais6 = 1
|
818 | Text1 = Text1 + "-6"
|
819 | Rueckmelde_text = Rueckmelde_text + " 6"
|
820 |
|
821 | Case 7
|
822 | Relais7 = 1
|
823 | Text1 = Text1 + "-7"
|
824 | Rueckmelde_text = Rueckmelde_text + " 7"
|
825 |
|
826 | Case 8
|
827 | Relais8 = 1
|
828 | Text1 = Text1 + "-8"
|
829 | Rueckmelde_text = Rueckmelde_text + " 8"
|
830 | End Select
|
831 | Next W
|
832 | '-----------------
|
833 | Locate 1 , 1
|
834 | Lcd "Taster schalten "
|
835 | Locate 2 , 1
|
836 | Lcd Text1 ; " "
|
837 | Waitms Schaltzeit
|
838 | '-----------------
|
839 | For W = 1 To Menge
|
840 | Ascii = Mid(an , W , 1)
|
841 | Ascii_byte = Val(ascii)
|
842 | Select Case Ascii_byte
|
843 | Case 1
|
844 | Relais1 = 0
|
845 |
|
846 | Case 2
|
847 | Relais2 = 0
|
848 |
|
849 | Case 3
|
850 | Relais3 = 0
|
851 |
|
852 | Case 4
|
853 | Relais4 = 0
|
854 |
|
855 | Case 5
|
856 | Relais5 = 0
|
857 |
|
858 | Case 6
|
859 | Relais6 = 0
|
860 |
|
861 | Case 7
|
862 | Relais7 = 0
|
863 |
|
864 | Case 8
|
865 | Relais8 = 0
|
866 | End Select
|
867 | Next W
|
868 | '------------
|
869 | Wait 2
|
870 | End If
|
871 | End If
|
872 | '-------------------------------------------------------
|
873 |
|
874 |
|
875 | 'Prüfe ob Passwortwechsel
|
876 | Pos1 = Instr(1 , Gsm_daten , "code:")
|
877 | If Pos1 > 0 Then
|
878 | Pos1 = Pos1 + 5
|
879 | Pos2 = Pos1 + 5
|
880 | Ascii = Mid(gsm_daten , Pos1 , 1)
|
881 | Ascii_byte = Val(ascii)
|
882 | If Usercode(1) = Ascii_byte Then
|
883 | Incr Pos1
|
884 | Ascii = Mid(gsm_daten , Pos1 , 1)
|
885 | Ascii_byte = Val(ascii)
|
886 | If Usercode(2) = Ascii_byte Then
|
887 | Incr Pos1
|
888 | Ascii = Mid(gsm_daten , Pos1 , 1)
|
889 | Ascii_byte = Val(ascii)
|
890 | If Usercode(3) = Ascii_byte Then
|
891 | Incr Pos1
|
892 | Ascii = Mid(gsm_daten , Pos1 , 1)
|
893 | Ascii_byte = Val(ascii)
|
894 | If Usercode(4) = Ascii_byte Then
|
895 | Ascii = Mid(gsm_daten , Pos2 , 1)
|
896 | Syscode(1) = Val(ascii)
|
897 |
|
898 | Incr Pos2
|
899 | Ascii = Mid(gsm_daten , Pos2 , 1)
|
900 | Syscode(2) = Val(ascii)
|
901 |
|
902 | Incr Pos2
|
903 | Ascii = Mid(gsm_daten , Pos2 , 1)
|
904 | Syscode(3) = Val(ascii)
|
905 |
|
906 | Incr Pos2
|
907 | Ascii = Mid(gsm_daten , Pos2 , 1)
|
908 | Syscode(4) = Val(ascii)
|
909 |
|
910 | Systemcode(1) = Syscode(1)
|
911 | Systemcode(2) = Syscode(2)
|
912 | Systemcode(3) = Syscode(3)
|
913 | Systemcode(4) = Syscode(4)
|
914 |
|
915 | Locate 1 , 1
|
916 | Lcd "Passwort aendern"
|
917 | Locate 2 , 1
|
918 | Lcd "alt:" ; Usercode(1) ; Usercode(2) ; Usercode(3) ; Usercode(4) ; "neu:" ; Syscode(1) ; Syscode(2) ; Syscode(3) ; Syscode(4)
|
919 | Befehl = "Alter Code: "
|
920 | Ascii = Str(usercode(1))
|
921 | Befehl = Befehl + Ascii
|
922 | Ascii = Str(usercode(2))
|
923 | Befehl = Befehl + Ascii
|
924 | Ascii = Str(usercode(3))
|
925 | Befehl = Befehl + Ascii
|
926 | Ascii = Str(usercode(4))
|
927 | Befehl = Befehl + Ascii
|
928 | '
|
929 | Befehl = Befehl + " Neuer Code: "
|
930 | Ascii = Str(syscode(1))
|
931 | Befehl = Befehl + Ascii
|
932 | Ascii = Str(syscode(2))
|
933 | Befehl = Befehl + Ascii
|
934 | Ascii = Str(syscode(3))
|
935 | Befehl = Befehl + Ascii
|
936 | Ascii = Str(syscode(4))
|
937 | Befehl = Befehl + Ascii
|
938 | '
|
939 | Rueckmelde_text = Rueckmelde_text + Chr(13) + Chr(10) + " Passwort ( Code ) Aenderung !" + Chr(13) + Chr(10) + Befehl
|
940 | Waitms 4000
|
941 | End If
|
942 | End If
|
943 | End If
|
944 | End If
|
945 | End If
|
946 |
|
947 | Auswerten_ende:
|
948 |
|
949 | Gsm_daten = ""
|
950 | ' SMS Leeren / Löschen
|
951 | Print "AT+CMGD=1"
|
952 | Do
|
953 | If Instr(1 , Gsm_daten , "OK") > 0 Then
|
954 | Exit Do
|
955 | End If
|
956 | Loop
|
957 |
|
958 | ' wenn Rück-SMS erwünscht
|
959 | If Sms_msg = 1 Then
|
960 | Call Sende_rueckmeldung
|
961 | End If
|
962 |
|
963 | Call Warte_auf_meldung
|
964 |
|
965 | End Sub
|
966 | '
|
967 | '
|
968 | Sub Abbruch()
|
969 | Gsm_daten = ""
|
970 |
|
971 | Locate 2 , 1
|
972 | Lcd "Falscher Code !!"
|
973 | Waitms 1000
|
974 |
|
975 | Locate 2 , 1
|
976 | Lcd " "
|
977 | Waitms 500
|
978 |
|
979 | Locate 2 , 1
|
980 | Lcd "Falscher Code !!"
|
981 | Waitms 1000
|
982 |
|
983 | Locate 2 , 1
|
984 | Lcd " "
|
985 | Waitms 500
|
986 |
|
987 | Locate 2 , 1
|
988 | Lcd "Falscher Code !!"
|
989 | Waitms 1000
|
990 |
|
991 | Locate 2 , 1
|
992 | Lcd " "
|
993 | Waitms 500
|
994 |
|
995 | Locate 2 , 1
|
996 | Lcd "Falscher Code !!"
|
997 | Waitms 1500
|
998 |
|
999 | Rueckmelde_text = "Funktion nicht ausgefuehrt ! Falscher PIN !"
|
1000 | Call Sende_rueckmeldung
|
1001 |
|
1002 | End Sub
|
1003 | '
|
1004 | '
|
1005 | Sub Sende_rueckmeldung()
|
1006 | ' Rückmeldung senden
|
1007 | Locate 1 , 1
|
1008 | Lcd "Sende "
|
1009 | Locate 2 , 1
|
1010 | Lcd "Rueckmeldung ..."
|
1011 | Waitms 1500
|
1012 |
|
1013 | ' Variation 1
|
1014 | Print "AT+CMGS=" ; Anrufer
|
1015 | Print Rueckmelde_text;
|
1016 | Print Chr(26);
|
1017 |
|
1018 | '----------------------------
|
1019 |
|
1020 | ' Variaton 2
|
1021 | ' print "AT+CMGS=" ; Anrufer;
|
1022 | ' waitms 1000
|
1023 | ' print chr(13) ; chr(10);
|
1024 |
|
1025 |
|
1026 | ' print ",129";
|
1027 | ' waitms 1000
|
1028 | ' print chr(13) ; chr(10);
|
1029 |
|
1030 |
|
1031 | ' print Rueckmelde_Text;
|
1032 | ' waitms 1000
|
1033 | ' print chr(13) ; chr(10);
|
1034 |
|
1035 |
|
1036 | ' print chr(26);
|
1037 | ' waitms 1000
|
1038 | ' print chr(13) ; chr(10);
|
1039 |
|
1040 | End Sub
|
1041 | '
|
1042 | '
|
1043 | Signal_auswerten:
|
1044 | Gsm_text = Gsm_daten
|
1045 |
|
1046 | Pos1 = Instr(1 , Gsm_text , "+CSQ:")
|
1047 | If Pos1 > 0 Then
|
1048 | Pos1 = Pos1 + 6
|
1049 | Befehl = Mid(gsm_text , Pos1 , 2)
|
1050 | Signalstaerke = Val(befehl)
|
1051 | If Signalstaerke <> Signalstaerke_merken Then
|
1052 | Signalstaerke_merken = Signalstaerke
|
1053 | ' KEIN SIGNAL
|
1054 | If Signalstaerke = 99 Then
|
1055 | Str_signal = " nothing "
|
1056 | Goto Kein_signal
|
1057 | End If
|
1058 |
|
1059 | Str_signal = chr(1) + chr(6) + chr(6) + chr(6) + chr(6) + chr(6) + chr(6) + chr(7)
|
1060 | Str_Signal_Symbol = String(8 , 5)
|
1061 | select case Signalstaerke
|
1062 | case 0 to 4
|
1063 | Pos1 = Signalstaerke
|
1064 | Pos2 = 1
|
1065 | '----------------------------------------------------------------------------------
|
1066 |
|
1067 | case 5 to 9
|
1068 | Pos1 = Signalstaerke - 5
|
1069 | Pos2 = 2
|
1070 | '----------------------------------------------------------------------------------
|
1071 |
|
1072 | case 10 to 14
|
1073 | Pos1 = Signalstaerke - 10
|
1074 | Pos2 = 3
|
1075 | '----------------------------------------------------------------------------------
|
1076 |
|
1077 | case 15 to 19
|
1078 | Pos1 = Signalstaerke - 15
|
1079 | Pos2 = 4
|
1080 |
|
1081 | '----------------------------------------------------------------------------------
|
1082 | case 20 to 24
|
1083 | Pos1 = Signalstaerke - 20
|
1084 | Pos2 = 5
|
1085 |
|
1086 | '----------------------------------------------------------------------------------
|
1087 | case 25 to 29
|
1088 | Pos1 = Signalstaerke - 25
|
1089 | Pos2 = 6
|
1090 | '----------------------------------------------------------------------------------
|
1091 |
|
1092 | case 30 to 34
|
1093 | Pos1 = Signalstaerke - 30
|
1094 | Pos2 = 7
|
1095 | '----------------------------------------------------------------------------------
|
1096 | end select
|
1097 |
|
1098 | incr Pos1
|
1099 | Pos3 = Pos2 - 1
|
1100 | if Pos3 = 0 then
|
1101 | Pos3 = 1
|
1102 | endif
|
1103 | Mid(Str_signal , 1 , Pos3) = Mid(Str_Signal_Symbol , 1 , Pos3)
|
1104 | Mid(Str_signal , Pos2 , 1) = chr(Pos1)
|
1105 |
|
1106 | Kein_signal:
|
1107 | Locate 1 , 1
|
1108 | Lcd "SIGNAL:" ; Str_signal
|
1109 |
|
1110 | Gsm_daten = ""
|
1111 | End If
|
1112 | End If
|
1113 | Return
|
1114 | '
|
1115 | '
|