So solls sein >>>Sa 27/02/2021 10:55:55 wird erreicht mit dem Aufruf # sek |min|st|Woch|Tg|Mon|Jahr NowTime = b'\x00\x55\x00\x07\x27\x02\x21'' #So funktioniert es aber ich möchte mit den #PC aktualieren #----------------------------------------- pc_zeit = utime.localtime() print (pc_zeit) >>>(2021, 2, 27, 10, 55, 55, 5, 58) soweit hab ich es wie kann ich das jetzt so wie oben formatieren?? NowTime = ??????? #--------------------------------------------- habe schon einiges ausprobiert aber mir fehlen noch viel Kenntisse und Erfahrung. mit dem Befehl wird geschrieben >>>bus.writeto_mem(int(address),int(register),NowTime)
Dieter T. schrieb: > pc_zeit = utime.localtime() > print (pc_zeit) >>>>(2021, 2, 27, 10, 55, 55, 5, 58) auspacken! year,month,day,hour,min,sec,wday,dayinyear = utime.localtime() Dieter T. schrieb: > So solls sein >>>Sa 27/02/2021 10:55:55 dann, z.b. _wdays = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday') print('{0:} {1:2}/{2:02}/{3:4} {4:}:{5:}:{6:}'.format(_wdays[wday],day,month,year,hour,min,sec))
Apollo M. schrieb: > print('{0:} {1:2}/{2:02}/{3:4} > {4:}:{5:}:{6:}'.format(_wdays[wday],day,month,year,hour,min,sec)) besser so, damit die führende null bleibt print('{0:} {1:02}/{2:02}/{3:4} {4:02}:{5:02}:{6:02}'.format(_wdays[wday],day,month,year,hour,min,sec))
Dieter T. schrieb: > NowTime = ??????? Dieter T. schrieb: > NowTime = b'\x00\x55\x00\x07\x27\x02\x21'' now = utime.localtime() nowTime =bytes([now.sec, now.min, ... ])
um das int year zu zerlegen nowTime =bytes([... ,now.tm_year//100, now.tm_year%100])
Apollo M. schrieb: > nowTime =bytes([... ,now.tm_year//100, now.tm_year%100]) corrected nowTime =bytes([... ,now.year//100, now.year%100]) das kannst du alles leicht auch am pc ohne mpy ausprobieren, python installieren und die python shell aufrufen!
Ja super für die schnellen Antworten ich bin noch sehr unerfahren mit der Programmierung in diesen Bereich. Mit dem Befehl: b'\x00\x55\x00\x07\x27\x02\x21'' läuft auch alles schon sehr gut. ich möchte jedoch die Daten automatisch vom PC her aktuell setzen. pc_zeit = utime.localtime() print (pc_zeit) gibt mir das (2021, 2, 27, 10, 55, 55, 5, 58) zurück da ist aber nicht die richtige Reihenfolge und als Variablen kann ich die Werte so auch nicht in b'\x00\x55\x00\x07\x27\x02\x21 einsetzen. Zusätzlich muss er bei eine einstellige Zahl eine zusätzliche 0 vorran stellen. Damit bin ich schon ziemlich überfordert. Aber erst Mal vielen vielen Dank für die vielen Antworten ich werde sie morgen ausgiebig testen.
Wenn ich das so lese was ihr geschrieben habt ist da glaub ich schon die perfekte Lösung bei danke
so soll eingegeben werden ##############sek|min|st|Woch|Tg|Mon|Jahr #NowTime = b'\x59\x06\x00\x07\x28\x02\x21' #------------------------------------------------- (2021, 2, 28, 0, 49, 37, 6, 59) kam vom PC pc_jahr, pc_monat, pc_tag, pc_std, pc_min, pc_sek, pc_week, *_ = pc_zeit NowTime = bytes([ pc_sek, pc_min, pc_std, pc_week, pc_tag, pc_monat, pc_jahr//100, pc_jahr % 100]) bus.writeto_mem(int(address),int(register),NowTime) Fr 1c/02/2014 00:31:25 b'%1\x00\x06\x1c\x02\x14\x15' #Das Ergebnis, wenn ich den Befehl oben eingebe kommt die korrekte Zeit #Ich vermute das bei pc_week es bei einstelligen Ziffern sowie auch wenn die sek,min,std unter 10 sind oder bei 00 Uhr, fehlen in der Formatierung die Stellen. Da ich hier mit int Zahlen arbeite. Warum jedoch das jahr nicht 2021 ist da fehlen mir die Erklärungen. import struct timestamp = (2021, 2, 27, 10, 55, 55, 5, 58) year, month, day, hour, minute, secs, *_ = timestamp print(repr(struct.pack("BBBBBB", secs, minute, hour, day, month, year % 100))) damit hab ich auch schon versucht aber auch da ist da selbe Problem
so soll eingegeben werden ##############sek|min|st|Woch|Tg|Mon|Jahr NowTime = b'\x16\x43\x16\x09\x28\x02\x21' #------------------------------------------------- >>>print (noTime) # formatierte Daten vom pc x16 x43 x16 x09 x28 x02 x21 # Ausgabe die Daten sind soweit passend vor formatiert. Wie bekomm ich diese jetzt so in der Variable NowTime = So das ich sie mit den dazwischen liegenden \ nutzen kann ?? Bin da echt ein Neuling und komm trotz vielen Suchen nicht weiter.
Ich versuche mal neu zu erklären: der Befehl: NowTime = b'\x00\x02\x15\x04\x21\x01\x21' wird aufgerufen um Daten zu über geben. noTime ist mein String mit Inhalt 00 02 15 04 21 01 21 Nun soll NowTime mit den Daten von noTime gefüllt werden und soll dann so aus sehen b'\x00\x02\x15\x04\x21\x01\x21' Ich bekomme die Formatierung nicht hin
Am einfachsten Du zerlegst deinen noTime mittels split() in ein Array, siehe: https://www.w3schools.com/python/ref_string_split.asp (1. Beispiel "Try it yourself") und dann wieder zusammensetzen mit join(), siehe: https://www.w3schools.com/python/ref_string_join.asp auch das Beispiel nur eben mit "\x" anstatt "x" wie im Beispiel, wobei ich mir jetzt nicht so ganz sicher bin, ob das "\x" geht oder ob es "\\x" heißen muss, weil "\x" ja eine Hex-Zahl einleitet. Dann noch das b und die ' dranpappen und ggf. ein eval() machen, falls du es wirklich binär brauchst und nicht nur einen String den Du per Copy+Paste irgendwo (z.B. REPL) reinmachst
ob es "\x" heißen muss, weil "\x" ja eine Hex-Zahl einleitet. Das mit der Hex-Zahl hab ich schon festgestellt ich wollte meinen String gleich richtig zusammen setzen aber ich bin da nicht weiter gekommen. Wie muss ich das richtig schreiben? Ich sehe oben kein Unterschied
Hi Dieter, nachdem du wohl wie es scheint, ein bytearray versuchst aus den List-values von localtime neu zu packen, ist struct.pack dein Freund. Ich nehme dir jetzt nicht jeden Schritt ab aber soviel: du kannst mit struct.pack(">B",0) den int Wert in bytearray/byte konvertieren. Also damit alle int Werte < 255 wandeln. uPython müsste das dann ustruct.pack sein. Mit der folgenden Zeile kannst du dir noch anschauen ob dein bytarray ungefähr nach dem aussieht was du erwartest: print(''.join(' 0x{:02X}'.format(x) for x in NowTime)) Das Jahr 2021 in 21 zu wandeln wirst du sicher schaffen ;) Gruß Gerd
#Hallo Gerd #Auch dir vielen Dank für deinen Beitrag folgenes hab ich geschafft noTime = (' {0:02} {1:02} {2:02} {3:1} {4:02} {5:02} {6:02}'.format(sec,minute,hour,_wdays[wday],day,month,year,)) #gibt mir passend 17 43 00 03 01 03 21 aus. Arry_Time = noTime.split(" ") xxx = "\\x".join(Arry_Time) xxxx = "b'" + xxx + "'" print(xxxx) NowTime = xxxx #eigendlich ist das was ich sehe jetzt das passende Format #aber das Ergebnis Mi 38/10/2033 31:30:78 passt nicht ganz :) # b'\x54\x53\x00\x03\x01\x03\x21' #Ich werde mich morgen mal witer damit beschäftigen und Gerd Hinweise #ausprobieren
1 | #Super ich hab es geschafft
|
2 | #Danke an alle besonderen Dank an Ralf M. M.
|
3 | #Duch deine Hinweise und konnte ich schnell Ergebnisse
|
4 | #erziehlen ein Anfänger weißt meist nicht genau wonach
|
5 | #er suchen muss
|
6 | |
7 | so soll eingegeben werden |
8 | ##############sek|min|st|Woch|Tg|Mon|Jahr
|
9 | NowTime = b'\x16\x43\x16\x09\x28\x02\x21' |
10 | #-------------------------------------------------
|
11 | year,month,day,hour,minute,sec,wday,dayinyear = utime.localtime() |
12 | _wdays = ('02', '03', '04', '05', '06', '07', '08') |
13 | pc_jahr = year |
14 | pc_jahr = "x" + str(pc_jahr) |
15 | pc_jahr = pc_jahr[3] + pc_jahr[4] |
16 | year = int(pc_jahr) |
17 | rohdaten = (' {0:02} {1:02} {2:02} {3:1} {4:02} {5:02} {6:02}'.format(sec,minute,hour,_wdays[wday],day,month,year,)) |
18 | Arry_Time = rohdaten.split(" ") |
19 | gesplittet = "\\x".join(Arry_Time) |
20 | neu_time = "b'" + gesplittet + "'" |
21 | NowTime = eval(neu_time) |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.