Worum geht es in diesem Artikel?Wir setzen die Artikelserie über
ShIoTiny fort - eine visuell programmierbare Steuerung, die auf dem
ESP8266- Chip basiert.
Dieser Artikel befasst sich
mit der Echtzeituhr im
ShIoTiny- Controller, der Zeitsynchronisation und der Verwendung von Knoten für die Arbeit mit der Uhr.
ShIoTiny- ProjektseiteFrühere Artikel in der Reihe.ShIoTiny: kleine Automatisierung, das Internet der Dinge oder „sechs Monate vor den Ferien“ShIoTiny: Knoten, Links und Ereignisse oder Funktionen von ZeichenprogrammenShIoTiny: Nassraumlüftung (Beispielprojekt)ShIoTiny und die umliegende Welt: Anschließen von Sensoren an Binäreingänge, Kontaktsprung und andere ProblemeShIoTiny und die Welt: Analoge Sensoren oder ADCs für die KleinstenBinäre Firmware, Controller-Schaltung und DokumentationEintrag
Heute reden wir über die Zeit. Nicht über die Zeit, in dem Sinne, in dem Philosophen seit Jahrhunderten darüber streiten und die Endkante für diese Debatte nicht sichtbar ist. Und über die Zeit, die wir auf der Uhr sehen und nach der wir zur Arbeit, zur Schule oder in Eile zu einem Date gehen.
Die Sache ist, dass die nichtflüchtige Echtzeituhr im
ESP8266- Chip und der
ShIoTiny- Controller fehlen. Diese Geburtsverletzung des
ShIoTiny- Controllers ist ganz und gar meine Schuld. Aber was getan wurde, wird getan.
Sobald die Firmware das Licht erblickte, begann die Öffentlichkeit, empört über meine Einstellung zur Echtzeit, meine Nase über diesen Fehler zu stechen.
Da die Fehler korrigiert werden müssen und diesmal zumindest nicht mit Blut, habe ich die ständig wachsende Anzahl von Benutzern meiner Firmware getroffen und getan, was ich konnte. Ich habe nämlich der Firmware des
ShIoTiny- Controllers Knoten hinzugefügt, die es mehr oder weniger bequem machen, in Echtzeit damit zu arbeiten.
Über ShIoTiny Watch
Wie bereits erwähnt, gibt es in
ShIoTiny keine „Stunden mit Batterie“. Gleichzeitig wird der Countdown von Sekunden ab dem 1. Januar 1970 implementiert.
Dies ist die gleiche Zeit, die als UNIX-Zeit bezeichnet wird und in Variablen vom Typ
time_t in C / C ++ - Sprachen gespeichert ist und am 19. Januar 2038 in 32-Bit-Systemen enden soll.
Aber hab keine Angst. Ich denke, dass bis 2038 jeder Zeit haben wird, den 64-Bit-Typ
time_t zu erstellen, und das Problem wird in den nächsten 292 Milliarden Jahren gelöst sein. Nun, wir werden uns noch etwas einfallen lassen.
Beachten Sie, dass die Zeit im Format
time_t manchmal (auch in meinem Artikel) als Zeitstempel oder auf Russisch als
Zeitstempel bezeichnet wird .
Aber zurück zu unserem Controller. Es befindet sich also eine Uhr darin, aber diese Uhr wird nach dem Ausschalten auf 0 zurückgesetzt. Dies
führt zu der trivialen Schlussfolgerung, dass das Hauptproblem beim Zählen der Zeit im
ShIoTiny- Controller darin besteht, dass der Controller-Takt beim Einschalten synchronisiert werden muss. Der Rest sind rein technische Probleme.
Zeitsynchronisation
Eine seit langem etablierte Methode zur Synchronisierung der Zeit im Internet sind
NTP- Server. Die erste Idee war, einen Knoten zu erstellen, der die Zeit mit einem bestimmten
NTP- Server synchronisiert.
Aber als ich ein wenig frische Luft atmete und über meinen Kürbis nachdachte, wurde mir klar, dass dieser Ansatz ideologisch falsch ist.
Es ist keine Tatsache, dass der Benutzer den Controller mit
ShIoTiny- Firmware im Internet herausziehen möchte. Die Zeit für die Synchronisierung kann nicht nur vom
NTP- Server, sondern auch über
UDP-Multicast oder mit bekannter Verbindungsqualität gesendet werden - über
MQTT .
Daher wurde eine schicksalhafte Entscheidung getroffen - die Knoten für die Empfangszeit vom
NTP- Server zu trennen und die Systemzeit festzulegen.
Insgesamt wurden zwei Knoten für die Zeitsynchronisation entwickelt: der Knoten zum Empfangen der Zeit vom
NTP- Server
NTP Time
und
Set Time System Clock Installationsknoten

Der Knoten, der die Zeit vom
NTP- Server als Parameter empfängt, empfängt den Namen oder die IP-Adresse des
NTP- Servers und, durch ein Komma getrennt, den Zeitraum vom
NTP- Server in Minuten. Standardmäßig wird alle 60 Minuten oder 1 Stunde eine Zeit vom
NTP- Server angefordert. Am Ausgang setzt dieser Knoten 0, bis die Zeit synchronisiert ist oder der Zeitstempel das Ergebnis der letzten Synchronisation mit dem Server ist.
Der Systemuhr-Installationsknoten erhält einen Zeitstempel als Eingabe und stellt die Systemuhr gemäß dieser Bezeichnung ein.
Das einfachste Schema zum Synchronisieren der Systemuhr mit einem
NTP- Server ist in der Abbildung dargestellt.

Die Synchronisationszeit ist nicht eingestellt und beträgt standardmäßig 60 Minuten. Die Abbildung zeigt den Zeitstempel.
Ich stelle fest, dass es nicht mehr als einen Knoten zum Empfangen von Zeit von einem
NTP- Server und mehr als einen Knoten zum Einstellen der Systemzeit im Programmschema geben kann.
Wenn Sie ein exotisches Synchronisationsschema benötigen, können Sie
UDP-Multicast oder
MQTT verwenden . Die Schemata sind völlig ähnlich.
Für die
UDP-Multicast- Synchronisation ungefähr das gleiche wie in der Abbildung.

Und für die Synchronisation über
MQTT (ich
rate natürlich nicht, aber in extremen Fällen) - wie z.

Ich hoffe jetzt ist alles klar mit der Synchronisation der Systemuhr des
ShIoTIny Controllers. Kommen wir zu den Knoten der Empfangs- und Verarbeitungszeit.
Wie spät ist es?
Die Frage ist einfach, aber manchmal nicht leicht zu beantworten. Schließlich ist die Zeit an jedem Punkt der Erde anders. Unser riesiges Mutterland umfasst von Kaliningrad bis Kamtschatka bis zu 11 Zeitzonen.
Der NTP- Server kann abhängig von den Einstellungen einen Zeitstempel zurückgeben, der verschiedenen Zeitzonen zugeordnet ist. Normalerweise ist dieser Zeitstempel an
UTC - Universalzeit - gebunden.
Normalerweise benötigen wir jedoch die Ortszeit der Region, in der unser Controller arbeitet. Wie kann man hier sein?
Und es ist sehr einfach: Um den Zeitstempel der
Systemuhr des
ShIoTIny- Controllers zu erhalten, wurde der Knoten
Get Time entwickelt, in dem Sie die Zeitzone als Zeitversatz von -12 Stunden bis +12 Stunden relativ zur Systemuhr des Controllers festlegen können.
Angenommen, wir erhalten die Zeit vom Server
pool.ntp.org und synchronisieren die Systemuhr wie in unserem vorherigen Beispiel. Dieser Server gibt die Weltzeit zurück. Wir brauchen Einheimische wie Tomsk, wie meine. Ich weiß, dass sich Tomsk in der
Zeitzone UTC + 7 befindet. Stellen Sie also die Zeitempfangseinheit auf Offset +7 oder nur 7 ein. Wie in der folgenden Abbildung.

Und wenn wir in der kanadischen Provinz Alberta leben würden, wäre die Schicht -7 Stunden. Denken Sie an die Hauptsache: Die
Zeitzone wird im Knoten festgelegt, um die Zeit in Stunden zu erhalten . Und es wird in Form eines Versatzes relativ zur Zeit der Systemuhr eingestellt. Der Zeitstempel wird am Ausgang der Zeitempfangseinheit gesetzt. Es können mehrere Knoten vorhanden sein, um Zeit auf einer Schaltung zu erhalten.
Überprüfen Sie die Uhr
Es ist sehr praktisch für die Maschine, mit der Zeit im Format der Zeitstempel
time_t zu arbeiten . Immerhin ist dies nur eine ganze Zahl, die die Anzahl der Sekunden relativ zum Startpunkt - dem 1. Januar 1970 - angibt. In diesem Format können Sie leicht den Abstand zwischen zwei Zeitpunkten, Zählperioden usw. ermitteln. Dies ist nur die Addition und Subtraktion von ganzen Zahlen.
Aber der Mensch ist keine Maschine. Er fühlt sich mit der üblichen Darstellung der Zeit in Form von Jahr, Monat, Tag, Stunden, Minuten und Sekunden viel wohler. Also sind wir Menschen arrangiert.
Daher wurden die Knoten der Übersetzung des Zeitstempels in die der Person vertrauten Zeitänderungseinheiten eingeführt und umgekehrt die Synthese des Zeitstempels aus den für die Person verständlichen Zeitänderungseinheiten. Diese Knoten werden als
Split Time bzw.
Synth Time bezeichnet .
Wie das alles funktioniert, geht aus der folgenden Abbildung hervor.

Ich stelle fest, dass die Knoten
Split Time und
Synth Time Monate (Monat) und Wochentage (wday) von Null an gezählt werden. Für Monate: 0-Januar, 11-Dezember. Für Wochentage 0-Sonntag, 6-Samstag.
Andere Ausgaben: Tag des Monats (Tag), Jahr (Jahr), Stunde (Stunde), Minute (Minute), Sekunde (Sekunde) - werden in der üblichen Form gezählt. Stunden, Minuten, Sekunden - von 0 bis 59. Tag des Monats - abhängig vom Monat vom ersten Tag bis zum 30. oder 31. und für Februar bis zum 28. oder 29. Februar.
Nun, ein Jahr - er ist das Jahr. 2019 jetzt.
Ich hoffe alles ist klar.
Systembeispiel
Um nicht unbegründet zu sein, werde ich ein Beispiel für die Verwendung von Uhren geben. Natürlich vereinfacht.
Angenommen, wir haben einen feuchten Raum, den wir zwangsbelüften möchten. Aber nicht immer, sondern nur, wenn die Luftfeuchtigkeit höher als ein bestimmtes Niveau ist und nur nachts. Nachts - um die Menschen tagsüber nicht durch den Lärm der Fans zu stören. Nun, hier sind wir Ästhetiker und wir kümmern uns um Menschen.
Versuchen wir dies umzusetzen.

Alle Teile der Strecke sind uns bekannt. Die Zeit wird vom
NTP- Server synchronisiert. Während es nicht synchronisiert ist, gibt der
NTP- Zeitknoten 0 zurück und das Lüfterfreigaberelais ist deaktiviert. Dafür ist das oberste Element
und nach dem Schema verantwortlich.
Sobald die Zeit synchronisiert ist, wird das Ein- und Ausschalten des Lüfters durch die aktuelle Zeit und die aktuelle Luftfeuchtigkeit bestimmt. Sobald die Luftfeuchtigkeit
70% überschreitet und die Zeit zwischen
23:00 und
06:00 Uhr liegt ,
schaltet sich der Lüfter ein und belüftet den Raum nicht mehr.
Natürlich ist es besser, die Zeit- und Feuchtigkeitskonstanten in einem realen Projekt durch die in
FLASH gespeicherten Parameter zu ersetzen und beispielsweise gemäß
MQTT einzustellen. Ja, und der aktuelle Status des Systems - Luftfeuchtigkeit, Strom, Zeit, Lüfterstatus - schadet auch nicht der Veröffentlichung im Netzwerk, um das System von einem Smartphone aus zu steuern. Aber das lasse ich schon Raum für deine Fantasie.
Fazit
Deshalb haben wir unseren Controller in Echtzeit näher vorgestellt.
Ich möchte mich bei allen bedanken, die mir konstruktive Kritik und Ratschläge zu Software-Upgrades geschickt haben. Danke Jungs!Konstruktive Kritik ist wie immer willkommen. Darüber hinaus sind Kommentare und Vorschläge willkommen.
Sie können alle Kritik, Kommentare, Vorschläge wie gewohnt in einem Kommentar oder per E-Mail
senden :
shiotiny@yandex.ru .