Goedemiddag,
Inmiddels ben ik al weer wat uurtjes verder met het stoeien met mijn SIM800L modem en de AT commando's. Ik heb een python script geschreven, waarmee ik de AT commando's geef aan het modem om via TCP een verbinding op te bouwen. In een andere thread had ik gelezen dat een verbinding via de HTTP stack in het modem wat problemen geeft (die ik zelf ook heb ervaren). Inmiddels kom ik met onderstaand script tot een response van de server:
#Python script to connect to KPN Things and send data from Raspberry Pi
from sim800l import SIM800L
import os, time
#Instellen seriële verbinding
sim800l = SIM800L(port='/dev/ttyS0', baudrate=115000, timeout=3.0)
sim800l = SIM800L()
#Algemene informatie ophalen van het modem
print("Date:",
sim800l.get_date())
print("Operator:",
sim800l.get_operator())
print("Service provider:",
sim800l.get_service_provider())
print("Signal strength:",
sim800l.get_signal_strength(), "%")
print("Temperature:",
sim800l.get_temperature(), "degrees")
print("MSISDN:",
sim800l.get_msisdn())
print("Battery Voltage:",
sim800l.get_battery_voltage(), "V")
print("IMSI:",
sim800l.get_imsi())
print("ICCID:",
sim800l.get_ccid())
print("Unit Name:",
sim800l.get_unit_name())
#Zend AT commando's naar het modem
print('AT commando versturen',
sim800l.command('AT\n'))
time.sleep(2)
print('functionaliteit instellen',
sim800l.command('AT+CFUN=1\n'))
time.sleep(2)
print('Controle gereed voor verzenden',
sim800l.command('AT+CPIN?\n'))
time.sleep(2)
print('Sluit eventuele open verbindingen',
sim800l.command('AT+CIPSHUT\n'))
time.sleep(2)
print('Enkelvoudige IP verbindingsmodus opzetten',
sim800l.command('AT+CIPMUX=0\n'))
time.sleep(2)
print('Instellen context',
sim800l.command('AT+CGACT?\n'))
time.sleep(2)
print('GPRS gekoppeld?',
sim800l.command('AT+CGATT?\n'))
time.sleep(1)
print('APN instellen',
sim800l.command('AT+CSTT="kpnthings.iot"\n'))
time.sleep(6)
print('Start de draadloze communicatie',
sim800l.command('AT+CIICR\n'))
time.sleep(2)
print('OPhalen IP adres',
sim800l.command('AT+CIFSR\n'))
time.sleep(2)
print('Start de TCP verbinding',
sim800l.command('AT+CIPSTART="TCP","10.151.236.157",80\n'))
time.sleep(3)
print('Verbinding gemaakt? ', sim800l.check_incoming())
time.sleep(2)
print('Stel de lengte van het bericht in op 259 karakters',
sim800l.command('AT+CIPSEND=259\n')) #bij losse regels 259
time.sleep(2)
print(sim800l.command('POST /ingestion/m2m/senml/v1 HTTP/1.1'))
print(sim800l.command('Host:m.m'))
print(sim800l.command('Content-Type:application/json'))
print(sim800l.command('Things-Message-Token:fdf8d0e4a1a1481c8639f2daea80071b13dad61050555d3305ad6f65186951ea'))
print(sim800l.command('Content-Length:78'))
print(sim800l.command('[{"bn":"urn:dev:IMEI:867717035410621:","n":"temperature","u":"Cel","v":25.82}]'))
print(sim800l.check_incoming())
time.sleep(3)
print('Verbinding afsluiten',
sim800l.command('AT+CIPCLOSE=0\n'))
time.sleep(3)
print(sim800l.check_incoming())
time.sleep(5)
print('Communicatie beëindigen',
sim800l.command('AT+CIPSHUT\n'))
time.sleep(2)
Het resultaat is de volgende foutmelding: HTTP/1.1 400 Bad Request
Ik vermoed dat er een fout zit in mijn datapakket. Heeft iemand misschien een idee? Ik heb er inmiddels al weer heel wat uurtjes in zitten…
Help?
Beste antwoord door Alex Wesemann
Bekijk origineel