Terkin-Datalogger: Erste Versuche mit LTE

Habe gerade versucht Daten per LTE mit

    # LTE
    'lte': {
        'enabled': True,

in der settings.py und

# Telemetry configuration.
telemetry = {
    'targets': [

        # JSON over MQTT: Kotori/MQTTKit
        {
            # Enable/disable this telemetry target.
            'enabled': True,

            # Define telemetry endpoint and address information.
            'endpoint': 'mqtt://swarm.hiveeyes.org',
            #'endpoint': 'mqtt://username:password@daq.example.org',
            'topology': 'mqttkit',
            'address': {
                "realm": "hiveeyes",
                "network": "testdrive",

zu schicken, das scheint nicht zu funktionieren!

   66.5233 [terkin.telemetry            ] INFO   : Connecting to MQTT broker at swarm.hiveeyes.org with username None
   66.5582 [terkin.telemetry            ] ERROR  : Connecting to MQTT broker at swarm.hiveeyes.org failed: OSError: [Errno 202] EAI_FAIL
Traceback (most recent call last):
  File "/flash/lib/terkin/telemetry.py", line 677, in connect
  File "/flash/dist-packages/mqtt.py", line 26, in __init__
OSError: [Errno 202] EAI_FAIL

   66.6128 [terkin.telemetry            ] ERROR  : Telemetry to mqtt://swarm.hiveeyes.org/hiveeyes/testdrive/area-14/test-LTE-NBIoT failed
Traceback (most recent call last):
  File "/flash/lib/terkin/telemetry.py", line 148, in transmit
  File "/flash/lib/terkin/telemetry.py", line 326, in transmit
  File "/flash/lib/terkin/telemetry.py", line 620, in send
  File "/flash/lib/terkin/telemetry.py", line 620, in send
TelemetryTransportError: Protocol adapter not connected: TelemetryAdapterError: Connecting to MQTT broker at swarm.hiveeyes.org failed: OSError: [Errno 202] EAI_FAIL

   66.6746 [terkin.datalogger           ] WARNING: Telemetry status: FAILURE. 1 out of 1 targets failed. Status: {'mqtt://swarm.hiveeyes.org/hiveeyes/testdrive/area-14/test-LTE-NBIoT': False}

Geht MQTT über LTE nicht oder muss ich nach einen Konfigurationsfehler suchen?

Hardware ist wie hier vorbereitet: LTE-Modem des FiPy flashen, um CAT NB1 (NB IoT) zu nutzen

Auch mit JSON over HTTP statt MQTT

        # JSON over HTTP: Kotori/MQTTKit
        {
            # Enable/disable this telemetry target.
            'enabled': True,

            # Define telemetry endpoint and address information.
            'endpoint': 'https://swarm.hiveeyes.org/api',
            'topology': 'mqttkit',
            'address': {
                "realm": "hiveeyes",
                "network": "testdrive",

läuft es nicht:

   26.6700 [terkin.telemetry            ] ERROR  : Telemetry to https://swarm.hiveeyes.org/api/hiveeyes/testdrive/area-14/test-LTE-NBIoT failed
Traceback (most recent call last):
  File "/flash/lib/terkin/telemetry.py", line 148, in transmit
  File "/flash/lib/terkin/telemetry.py", line 326, in transmit
  File "/flash/lib/terkin/telemetry.py", line 394, in send
  File "/flash/dist-packages/urequests/__init__.py", line 144, in post
  File "/flash/dist-packages/urequests/__init__.py", line 60, in request
OSError: [Errno 202] EAI_FAIL

   26.7270 [terkin.datalogger           ] WARNING: Telemetry status: FAILURE. 1 out of 1 targets failed. Status: {'https://swarm.hiveeyes.org/api/hiveeyes/testdrive/area-14/test-LTE-NBIoT': False}

Muss das Modem mit der neuen SIM erstmals irgendwie initialisiert werden?? Hatte gestern mit den 1nce-SIMs GPRS getestet, das ging alles auf Anhieb mit dem entsprechenden APN.

Ich versuche mal /dist-packages/ lokal / in der Sandbox zu löschen und mit make setup neu zu builden, vielleicht hilft das ja?! Die angemeckerte __init__.py ist vom März.

Hab’ ich jetzt alles zerschossen?

[main.py] INFO: Loading modules
Traceback (most recent call last):
  File "main.py", line 57, in <module>
  File "main.py", line 37, in main
  File "terkin/datalogger.py", line 16, in <module>
  File "terkin/device.py", line 13, in <module>
  File "terkin/telemetry/core.py", line 7, in <module>
  File "urllib/parse.py", line 30, in <module>
  File "re.py", line 11, in <module>
AttributeError: 'NoneType' object has no attribute 'func'`

DNS geht leider nicht. Bitte benutze die IP-Adresse.

Ich war schuld. Install most recent PyCayenneLPP from git repository again · hiveeyes/terkin-datalogger@e713392 · GitHub macht es wieder besser.

1 Like

Na klar geht DNS, man muß halt einen DNS-Server definieren, den gibts nicht per irgendeinem DHCP- oder default gateway-Prozeß!

In jedem Fall ist natürlich das Eintragen einer IP-Adresse für das entsprechende Ziel etwas, das schneller das gewünschte Ergebnis liefert und somit Strom spart (sofern es für das betreffende Energiebudget wichtig ist).

Ich habe mich eine halbe Nacht auf dem GPy von @tonke daran zu schaffen gemacht. Auch, beide DNS-Server zu definieren etc. pepe. Leider erfolglos.

a) Bist Du sicher, dass Dein Gerät nicht zufällig auch am WiFi hängt?
b) Habe ich auch irgendwo aufgeschnappt, dass die Abstimmung zwischen Modem network profile und LTE customer profile eine Rollen spielen kann, welches u.U. mit dem Vertrag bzw. der jeweiligen SIM-Karte assoziiert ist. Um in diesem Bereich nachzuforschen, müsste man wohl beim Provider nachfragen, da solche Dinge wohl oft nicht im self-service Bereich eines etwaigen Portals zur Verfügung stehen.


Siehe dazu auch:

Auch wenn combaindeft und Lonefish hier am Ende Erfolg vermeldeten

war auf dem Gerät von @tonke mit einer (vielleicht schon etwas älteren) 1nce-Karte leider nichts zu holen.


Unabhängig davon:

In der Tat kommt nach einem erfolgreichen attach()-Vorgang des Modems eine DHCP-ähnliche Antwort in Form eines Tupels vom Provider, in der die vermittelte IP-Adresse steht und über jene auch DNS-Server angekündigt werden könnten (weiß grade nicht, ob Terkin diese Antwort per default ausgibt, aber ich habe sie bei den Arbeiten am LTE-Adapter gesehen). Leider waren beide Felder nicht belegt (Leerstring).

Das war im August '19 jener Hobel, mit welchem @wtf die Erfolge in dem oben von mir zitierten topic hatte, und es war auch eine 1nce-SIM.

Und gerade eben wieder mit meinem FiPy und 1nce-SIM erneut probiert, klappt immer noch:

>>> print(usocket.getaddrinfo("swarm.hiveeyes.org", 80))
[(2, 1, 0, '', ('46.4.251.66', 80))]
>>>

ja… aber: wo hast Du das denn gesehen? Im modlte.c finde ich nichts dazu.

@tonke’s GPy ist vielleicht älter. No idea. Vielleicht kannst Du, @clemens, das einmal bei Dir testen, sobald LTE getrieben von Terkin erfolgreich “attach” und “connect” gemeldet hat?

Läuft nun, Danke! Ich musste allerdings wieder /dist-packages/ löschen damit es funktionierte.

Schaut gut aus!

>>> import usocket
>>> usocket.dnsserver(0,'9.9.9.9')
>>> usocket.dnsserver()
('9.9.9.9', '0.0.0.0')
>>> print(usocket.getaddrinfo("weather.hiveeyes.org", 80)[0][-1])
('46.4.251.67', 80)
>>> print(usocket.getaddrinfo("swarm.hiveeyes.org", 80)[0][-1])
('46.4.251.66', 80)
>>> print(usocket.getaddrinfo("heise.de", 80)[0][-1])
('193.99.144.80', 80)

… mit eine FiPy getestet!

3 Likes

Bei @tonke:

>>> lte.send_at_cmd('AT+CGCONTRDP')
'\r\n+CGCONTRDP: 1,5,"iot.1nce.net.MNC040.MCC901.GPRS","10.201.56.1.255.255.255.255","","","","",""\r\n\r\nOK\r\n'

Verizon LTE-CATM1 übermittelt an den Leerstellen scheinbar auch die DNS-Server:


See also: