Animation tension d’une corde
https://physique.ostralo.net/corde_guitare
Cours complété:

Wir von neon54 casino login haben es uns zur Aufgabenstellung gesetzt, dir ein einzigartiges Spielvergnügen zum bieten, welches Schutz, Vielfalt und neueste Technik kombiniert. Unsere Website ist eigens entwickelt, um sowohl erfahrenen Spielern als ebenso Neueinsteigern eine optimales Ambiente zum schaffen. Mit über 3.000 erstklassigen Spielen von renommierten Anbietern definieren wir Maßstäbe in dieser Online-Glücksspielbranche.
Die Unternehmensphilosophie fußt auf Transparenz, fairem Gaming sowie ausgezeichnetem Support. Das Team arbeiten nur mit zugelassenen Entwicklern zusammen und nutzen aktuelle Kryptografie-Technologien, damit deine privaten Daten sowie Überweisungen zum schützen. Im Neon54 Gaming-Portal steht dein Spielvergnügen absolut im Fokus – beginnend mit der Anmeldung bis hin bis zur Gewinnauszahlung deiner Gewinne.
Unsere Spielesammlung von Neon54 Casino beinhaltet eine beeindruckende Palette an Varianten passend zu jedem Geschmack. Von klassische Slots bis hinüber zu innovativen Live-Dealer-Experiences bieten wir Ihnen Zugriff zu den top Spielen der Branche. Unsere Kooperationspartner zählen unter den führenden Softwareentwicklern weltweit, darunter Pragmatic Play, Evolution Gaming sowie NetEnt.
Ganz besonders stolz sind wir auf unsere Live-Dealer-Bereich, die dir authentische Spielbank-Atmosphäre direkt nach Ihnen nach Hause bringt. Geschulte Croupiers betreuen dich während Echtzeit an Blackjack, Roulette und Bakkarat. Die Streaming-Qualität ist dabei exzellent sowie ermöglicht dir ein immersives Spielvergnügen, das dem Besuch in einem realen Casinos in nichts nachsteht.
Bei Neon54 Gaming-Portal legen wir höchsten Wert auf sichere und effektive Zahlungsabwicklung. Wir bieten Ihnen ein breite Bandbreite an Payment-Methoden, sodass du die Option wählen können, die am optimal mit Ihren Anforderungen harmoniert. Alle Transaktionen werden mit modernster SSL-Technologie geschützt, welches dem gleichen Sicherheitsstandard gleichkommt, den auch Banken nutzen.
Die Gewinnauszahlungen werden schnell bearbeitet, sodass du schnellstmöglich über deine Erfolge disponieren kannst. Die meisten digitalen Zahlungsoptionen ermöglichen Überweisungen im Zeitraum von 24 Stunden, was in der Branche als überdurchschnittlich rasch gilt. Wir verlangen keine versteckte Gebühren für Einzahlungs- oder Überweisungen und kommunizieren alle Konditionen transparent.
| Zahlungsmethode | Einzahlungsdauer | Withdraw-Dauer | Mindestbetrag |
|---|---|---|---|
| Credit Cards (Visa/Mastercard) | Sofort | 3-5 Werktage | 10 € |
| E-Wallets (Skrill, Neteller) | Unmittelbar | 0-24 Stunden | 10 € |
| Wire Transfer | 1 bis 3 Werktage | 3 bis 7 Werktage | 20 € |
| Kryptowährungen (Bitcoin, ETH) | 15 bis 30 Min. | 1-2 Stunden | 20 € |
| Trustly | Sofort | bis 24 Stunden | 10 € |
Die mobile Website von Neon54 Spielcasino wurde von Grund auf für Smartphones und Tablets angepasst. Du benötigst keine gesonderte Anwendungsinstallation – unsere anpassungsfähige Webseite passt sich selbstständig für dein Gerät optimal an sowie bietet Ihnen vollständigen Zugriff auf sämtliche Spiele sowie Optionen. Ob iOS oder Android, du können jederzeit und überall spielen, solange du eine stabile Internet-Verbindung hast.
Die mobile Fassung behält sämtliche Funktionen der PC-Fassung bei: zügige Benutzerführung, intuitive UI und reibungslose Spielabläufe. Außerordentlich hervorzuheben liegt, dass über 95 Prozent unserer Spiele auch auf Mobilgeräten verfügbar sind, sodass Sie Ihr Favoriten-Spiel auch von unterwegs genießen kannst. Die Touchsteuerung ist eigens passend für Touchscreens angepasst und ermöglicht exaktes Spielen komplett ohne Kompromisse.
Nichts begeistert mehr wie echte Sieger-Storys von der Spielern. Täglich erleben Mitglieder der Community bedeutende Erfolge an unseren Slots und Tischspielen. Jene authentischen Experiences zeigen, dass beim Neon54 Gaming-Portal reale Erfolgsaussichten bestehen und Träume wahr werden können.
Michael R. „Ich habe beim Book of Dead Slot 8.500 € gewonnen und konnte die gesamte gesamte Familie zum gemeinsamen Urlaub einladen – Neon54 Casino bearbeitete meine Auszahlung innerhalb von 18 Stunden bearbeitet! »
Sandra K. „Der Progressiver Hauptgewinn an Mega Moolah veränderte mein Leben verändert – 47.200 € mit nur einem Spin, und unser Service war im Verlauf beim gesamten Auszahlungsprozesses unglaublich hilfsbereit. »
Thomas B. „Wie ein Blackjack-Fan schätze ich die Live-Dealer-Tische bei Neon54 Spielcasino enorm – letzte Spielwoche habe ich 3400 € während einer einzigen Spielsitzung gewinnen und die Atmosphäre war fantastisch. »
| sim_id | label | role | password | api_token |
|---|---|---|---|---|
| default | ADMIN | admin | 5njbmEKqLqe4 | b8394264cb074bbc7b4a4902677581e07c61edc848c4c7ed |
| eleve01 | ELEVE01 | student | mWphvci7P3 | 07d2c641ab02bf918098a28197614d29e6b771c70a2572c7 |
| eleve02 | ELEVE02 | student | CAcJnUnf4S | e6be08d289a6f99290109a6942c56b1ac5f1edf94b957fd7 |
| eleve03 | ELEVE03 | student | Jur9QJdsFD | cc5fd0fe1c9f8f86fa6b7fc05f9127d4d77ce03869d78dab |
| eleve04 | ELEVE04 | student | 6DcZGtr2Xu | 022fd9bfe706ada0a52f8ce151f242c25acdd3a2f9f42e6a |
| eleve05 | ELEVE05 | student | sdYcZoSewC | d3777b7ae09a2022078ca7c832360dfe71d4aab29e40b675 |
| eleve06 | ELEVE06 | student | LhXPz2PC5x | 62d13086e91430f88006cb7b45f3cc47e42c079639eba926 |
| eleve07 | ELEVE07 | student | CMsQ6f9bTH | e54f3be163919a4b92496356fb170884f34aa8f35f6d404f |
| eleve08 | ELEVE08 | student | wNYEMQAVNZ | 9c18d0e1c6b3bc3a11d8c249b677786344dc2c95443b57e5 |
| eleve09 | ELEVE09 | student | mi2CJ9tqxt | 2bd8edfa2b938fa871afa20eb0b6203d9720c64eac442dd3 |
| eleve10 | ELEVE10 | student | ZZKcQeTPbr | 0075073aa5c93c2a4c3cb73fedd6fd9f5f05fd618bc43a23 |
Ouvrir :
https://proxy-automate.latelier22.fr/pac.php?sim=eleveXX
Exemple :
https://proxy-automate.latelier22.fr/pac.php?sim=eleve03
Ouvrir :
https://proxy-automate.latelier22.fr/login.php?sim=eleveXX&redirect=/pac.php?sim=eleveXX
Exemple :
https://proxy-automate.latelier22.fr/login.php?sim=eleve03&redirect=/pac.php?sim=eleve03
Après connexion, l’élève revient sur sa PAC.
Ouvrir :
https://proxy-automate.latelier22.fr/api.php?sim=eleveXX
curl WindowsRemplacer :
eleveXX par votre identifiantTOKEN_ELEVE_XX par votre tokencurl "https://proxy-automate.latelier22.fr/api.php?sim=eleveXX"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=start&sim=eleveXX"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=stop&sim=eleveXX"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=sp_plus&sim=eleveXX"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=sp_minus&sim=eleveXX"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=set_setpoint&setpoint=22.5&sim=eleveXX"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=set_ambient&ambient_temp=18&sim=eleveXX"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: TOKEN_ELEVE_XX" -d "action=reset&sim=eleveXX"
eleve10curl "https://proxy-automate.latelier22.fr/api.php?sim=eleve10"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: 0075073aa5c93c2a4c3cb73fedd6fd9f5f05fd618bc43a23" -d "action=start&sim=eleve10"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: 0075073aa5c93c2a4c3cb73fedd6fd9f5f05fd618bc43a23" -d "action=stop&sim=eleve10"
curl -X POST "https://proxy-automate.latelier22.fr/control.php" -H "Content-Type: application/x-www-form-urlencoded" -H "X-Api-Token: 0075073aa5c93c2a4c3cb73fedd6fd9f5f05fd618bc43a23" -d "action=reset&sim=eleve10"
Modifier votre application mobile
Ajouter 2 boutons PLUS et MOINS pour augmenter / diminuer la consigne de température de la PAC
il faudra ajouter votre token, sinon vous ne serez pas autorisé à commander la PAC à distance….

Είναι κρίσιμο να γνωρίζετε πώς να επικοινωνήσετε αποτελεσματικά με την υποστήριξη πελατών οποιασδήποτε υπηρεσίας. Η ταχύτητα στην απάντηση μπορεί να σημαίνει διαφορά στην αντιμετώπιση προβλημάτων, γι’ αυτό συνιστάται να επιλέξετε εκπρόσωπους που είναι διαθέσιμοι κατά τις κατάλληλες ώρες λειτουργίας και τις διαθέσιμες μέρες.
Η εμπειρία του χρήστη είναι άρρηκτα συνδεδεμένη με την ποιότητα της υποστήριξης που προσφέρεται. Όταν χρειάζεστε βοήθεια, важно να είστε σίγουροι ότι η επικοινωνία θα είναι άμεση και αποτελεσματική. Οι καλύτεροι φορείς παρέχουν διάφορους τρόπους επικοινωνίας, όπως τηλέφωνο, email, και live chat, για να διευκολύνουν την επικοινωνία σας με την ομάδα υποστήριξής τους.
Η επιλογή της σωστής υποστήριξης μπορεί να οδηγήσει σε εξαιρετικές εμπειρίες, γι’ αυτό εξετάστε προσεκτικά επιλογές όπως η spinanga casino, που έχει αποδείξει την ικανότητά της να ανταγωνίζεται στον τομέα της ταχύτητας και της ποιότητας εξυπηρέτησης. Η προσπάθεια για σωστή υποστήριξη πελατών προσφέρει μεγάλη αξία και σας εξασφαλίζει ότι τα προβλήματα θα επιλυθούν γρήγορα και αποτελεσματικά.
Η ταχύτητα απόκρισης είναι θεμελιώδης για κάθε υπηρεσία υποστήριξης πελατών. Είναι σημαντικό οι κλήσεις να απαντώνται άμεσα για να διασφαλιστεί μια θετική εμπειρία χρήστη. Όσο πιο γρήγορα οι αντιπρόσωποι επικοινωνούν με τους πελάτες, τόσο μεγαλύτερη είναι η ικανοποίηση τους.
Οι διαθέσιμες μέρες και οι ώρες λειτουργίας της υποστήριξης παίζουν κρίσιμο ρόλο στην προσβασιμότητα. Οι πελάτες πρέπει να έχουν τη δυνατότητα να επικοινωνούν οποιαδήποτε στιγμή τους εξυπηρετεί, και όχι μόνο από Δευτέρα έως Παρασκευή. Η εξυπηρέτηση 24/7 μπορεί να ενισχύσει την αξιοπιστία της εταιρείας.
Προβλήματα μπορεί να προκύπτουν συχνά, και οι πελάτες αναμένουν να έχουν τη δυνατότητα να αναφέρουν τις ανησυχίες τους εύκολα. Η παροχή σαφών οδηγιών για την υποβολή κλήσεων ή η δυνατότητα αποστολής μηνυμάτων μπορεί να διευκολύνει την επικοινωνία και να μειώσει την πίεση στους εκπροσώπους.
Η εποικοδομητική κριτική είναι ένα εργαλείο που μπορεί να βελτιώσει την εξυπηρέτηση. Οι υπεύθυνοι θα πρέπει να παρακολουθούν τα σχόλια των πελατών και να χρησιμοποιούν αυτά τα δεδομένα για να εντοπίζουν περιοχές προς βελτίωση. Οι προτάσεις μπορούν να εφαρμοστούν και να δοκιμαστούν για να διασφαλίσουν ότι οι ανάγκες των χρηστών καλύπτονται.
Επιπλέον, οι πρακτικές εκπαίδευσης των υπαλλήλων είναι πολύ σημαντικές. Η πρόσβαση σε πληροφορίες για προϊόντα και υπηρεσίες μπορεί να επιταχύνει τη διαδικασία λήψης αποφάσεων κατά τη διάρκεια μιας κλήσης, κάτι που υπερβαίνει την καθαρή διαχείριση προβλημάτων.
Καλέστε σε τακτική ανασκόπηση των διαδικασιών χειρισμού κλήσεων. Η αναγνώριση των πιο συνηθισμένων αναφορών μπορεί να βοηθήσει στην ανάπτυξη στρατηγικών για μελλοντική πρόληψη των ζητημάτων. Έτσι, η συνολική ικανοποίηση των πελατών μπορεί να αυξηθεί.
Η ενσωμάτωση πολλαπλών καναλιών επικοινωνίας, όπως chat και email, μπορεί να βελτιώσει την εμπειρία των χρηστών. Όταν οι πελάτες έχουν την επιλογή να επιλέγουν τον τρόπο που τους βολεύει, είναι πιο πιθανό να αισθάνονται ικανοποιημένοι από την εξυπηρέτηση.
Η στρατηγική των κλήσεων πρέπει να προσαρμόζεται διαρκώς στις ανάγκες των πελατών. Η συνεχής παρακολούθηση και η προσαρμογή στις τρέχουσες τάσεις της αγοράς παρέχει πλεονέκτημα στους επαγγελματίες του χώρου.
Για να διασφαλίσετε ότι οι πελάτες σας θα έχουν την καλύτερη εμπειρία, η ταχύτητα της επικοινωνίας είναι καθοριστική. Ρυθμίστε διαθέσιμες μέρες και ώρες εξυπηρέτησης, ώστε οι πελάτες να γνωρίζουν πότε μπορούν να περιμένουν απαντήσεις. Η άμεση υποστήριξη μπορεί να γίνει μέσω chat ή email, δίνοντας τη δυνατότητα στους χρήστες να υποβάλουν τα προβλήματά τους σε πραγματικό χρόνο.
Η ταχύτητα ανταπόκρισης σε αιτήματα περιλαμβάνει τη θεμελιώδη στρατηγική υποστήριξης. Απαντώντας γρήγορα σε προβλήματα μέσω κοινωνικών δικτύων, η ικανοποίηση των χρηστών αυξάνεται σημαντικά. Είναι καθοριστικό να γνωρίζουν οι πελάτες ότι μπορούν να επικοινωνούν ανά πάσα στιγμή με την εταιρεία σας.
Η οργάνωση ώρες λειτουργίας για την υποστήριξη είναι επίσης σημαντική. Προσδιορίστε συγκεκριμένες διαθέσιμες μέρες και ώρες για απευθείας επικοινωνία μέσω μηνυμάτων. Αυτό επιτρέπει στους χρήστες να ξέρουν πότε μπορούν να περιμένουν άμεσες απαντήσεις, ελαχιστοποιώντας τη δυσαρέσκεια.
Η ανταλλαγή εμπειριών από άλλους χρήστες παρέχει μια ευκαιρία για εποικοδομητική κριτική. Ενθαρρύνετε τους πελάτες να μοιράζονται τις απόψεις τους, ώστε να βελτιώσετε την υποστήριξη. Αυτό θα σας βοηθήσει να κατανοήσετε καλύτερα τις ανάγκες τους και να καταστήσετε τη διαδικασία εξυπηρέτησης πιο προσαρμοσμένη.
Η χρήση εργαλείων αναλύσεων μπορεί να σας προσφέρει πολύτιμες πληροφορίες για τη συμπεριφορά των χρηστών σας. Με την παρακολούθηση των αλληλεπιδράσεων, μπορείτε να εντοπίσετε τις κυριότερες περιοχές που χρειάζονται προσοχή. Έτσι, μπορείτε να προγραμματίσετε στρατηγικές βελτίωσης και εκπαίδευσης του προσωπικού σας.
Επίσης, η προώθηση της ταχύτητας και της προσαρμοστικότητας στις απαντήσεις αναγκαία. Η συνεχής ανανέωση των διαδικασιών εξυπηρέτησης μπορεί να οδηγήσει σε αύξηση της ικανοποίησης και της εμπιστοσύνης. Οι πελάτες θα εκτιμήσουν την άμεση και ουσιαστική υποστήριξη που προσφέρετε.
Η ταχύτητα εξυπηρέτησης και η υποστήριξη πελατών είναι καθοριστικά στοιχεία για την επιτυχία κάθε επιχείρησης. Προσφέροντας 24/7 επικοινωνία, μπορείτε να διασφαλίσετε ότι οι πελάτες σας θα έχουν πρόσβαση στη βοήθεια που χρειάζονται ανά πάσα στιγμή. Οι διαθέσιμες μέρες και ώρες λειτουργίας παίζουν επίσης σημαντικό ρόλο στην ικανοποίηση των πελατών, καθιστώντας την υποστήριξη περισσότερο προσιτή και ευέλικτη.
Η συλλογή εποικοδομητικής κριτικής από τους πελάτες είναι απαραίτητη για την κατανόηση των εμπειριών τους. Διεξάγετε περιοδικές έρευνες και ακούστε τα σχόλια τους. Αυτή η στρατηγική όχι μόνο σας βοηθά να κατανοήσετε τις ανάγκες τους, αλλά και να βελτιώσετε τις υπηρεσίες σας με βάση τις προτιμήσεις και τις προσδοκίες τους. Η συνεχής ανατροφοδότηση δημιουργεί ένα θετικό κύκλο βελτίωσης και ικανοποίησης, που είναι ευεργετικός τόσο για τους πελάτες όσο και για την επιχείρηση.
Οι βασικές επιλογές εξυπηρέτησης πελατών περιλαμβάνουν τηλεφωνική υποστήριξη, ηλεκτρονικό ταχυδρομείο, ζωντανή συνομιλία, και υποστήριξη μέσω κοινωνικών δικτύων. Κάθε μέθοδος έχει τα πλεονεκτήματα και τα μειονεκτήματά της, και οι επιχειρήσεις συχνά επιλέγουν συνδυασμούς αυτών των επιλογών ώστε να καλύψουν τις ανάγκες των πελατών τους.
Η εξυπηρέτηση πελατών έχει άμεσο αντίκτυπο στην εμπειρία του πελάτη. Μια θετική εμπειρία μπορεί να οδηγήσει σε πιστούς πελάτες και επαναλαμβανόμενες αγορές. Αντίθετα, η κακή εξυπηρέτηση μπορεί να απομακρύνει τους πελάτες και να βλάψει τη φήμη της επιχείρησης. Αυτό οφείλεται στην αλληλεπίδραση που έχει ο πελάτης με τους εκπροσώπους της επιχείρησης και τη δυνατότητα επίλυσης προβλημάτων που μπορεί να προκύψουν.
Οι καλύτερες πρακτικές περιλαμβάνουν την εκπαίδευση των υπαλλήλων ώστε να είναι φιλικοί και ευγενικοί, την ταχεία ανταπόκριση σε ερωτήματα και προβλήματα, τη δημιουργία συστημάτων ανατροφοδότησης από τους πελάτες και την αξιοποίηση της τεχνολογίας για αυτοματοποιημένες απαντήσεις σε συχνές ερωτήσεις. Ο στόχος είναι η συνεχής βελτίωση της ικανοποίησης των πελατών.
Οι επιχειρήσεις αντιμετωπίζουν πολλές προκλήσεις στην εξυπηρέτηση πελατών, όπως η αύξηση των προσδοκιών των πελατών, η διαχείριση των παραπόνων και η ανάγκη για 24/7 υποστήριξη. Οι τεχνολογικές εξελίξεις επιβάλλουν επίσης την ανάγκη για εκπαιδεύσεις και αναβαθμίσεις στα εργαλεία εξυπηρέτησης, προκειμένου να παραμένουν ανταγωνιστικές.
Η τεχνολογία μπορεί να βελτιώσει την εξυπηρέτηση πελατών μέσω των συστημάτων CRM (Customer Relationship Management) που βοηθούν στη διαχείριση των σχέσεων με τους πελάτες, τη χρήση chatbots για άμεσες απαντήσεις σε απλές ερωτήσεις και την ανάλυση δεδομένων για την κατανόηση των προτιμήσεων των πελατών. Αυτές οι τεχνολογίες συμβάλλουν στην ταχύτερη και πιο στοχευμένη εξυπηρέτηση.
| Élément à glisser | Renommer en | Text |
|---|---|---|
| ListPicker | ListPicker_BT | Connect Bluetooth |
| Button | Button_ON | ON |
| Button | Button_OFF | OFF |
| Label | Label_Status | Not connected |
| Élément à glisser | Renommer en |
|---|---|
| BluetoothClient | BluetoothClient1 |
Cliquer sur Blocks.
Cliquer sur ListPicker_BT.
Prendre :
when ListPicker_BT.BeforePicking
Ajouter :
set ListPicker_BT.Elements to BluetoothClient1.AddressesAndNames
Bloc complet :
when ListPicker_BT.BeforePicking
do set ListPicker_BT.Elements to BluetoothClient1.AddressesAndNames
Cliquer sur ListPicker_BT.
Prendre :
when ListPicker_BT.AfterPicking
Ajouter :
call BluetoothClient1.Connect address ListPicker_BT.Selection
Ajouter :
set Label_Status.Text to "Connected"
Bloc complet :
when ListPicker_BT.AfterPicking
do call BluetoothClient1.Connect address ListPicker_BT.Selection
set Label_Status.Text to "Connected"
Cliquer sur Button_ON.
Prendre :
when Button_ON.Click
Ajouter :
if BluetoothClient1.IsConnected
then call BluetoothClient1.SendText text "1"
Bloc complet :
when Button_ON.Click
do if BluetoothClient1.IsConnected
then call BluetoothClient1.SendText text "1"
Cliquer sur Button_OFF.
Prendre :
when Button_OFF.Click
Ajouter :
if BluetoothClient1.IsConnected
then call BluetoothClient1.SendText text "0"
Bloc complet :
when Button_OFF.Click
do if BluetoothClient1.IsConnected
then call BluetoothClient1.SendText text "0"
ON → envoie 1 → LED allumée
OFF → envoie 0 → LED éteinte
Ajouter un bouton qui envoie une requête vers :
https://sti2d.latelier22.fr/fiber/api/reset
Quand on appuie sur ce bouton :
POSTLabelPosDans User Interface :
BtnResetMettre :
Text = RESET ROBOTDans Connectivity :
WebResetAjoute ce bloc :
when BtnReset.Click
do
BtnReset.Click, mettre l’adresseDans ce bloc, mets :
set WebReset.Url to "https://sti2d.latelier22.fr/fiber/api/reset"
Toujours dans le même bloc, ajoute :
call WebReset.PostText
text ""
BtnReset.ClickTon bloc doit être :
when BtnReset.Click
do
set WebReset.Url to "https://sti2d.latelier22.fr/fiber/api/reset"
call WebReset.PostText
text ""
Ajoute ce bloc :
when WebReset.GotText
url responseCode responseType responseContent
do
Dans WebReset.GotText, mets :
set LabelPos.Text to join
"RESET HTTP "
responseCode
"\n"
responseContent
WebReset.GotTextTon bloc doit être :
when WebReset.GotText
url responseCode responseType responseContent
do
set LabelPos.Text to join
"RESET HTTP "
responseCode
"\n"
responseContent
Quand on clique sur RESET ROBOT :
https://sti2d.latelier22.fr/fiber/api/reset
POSTLabelPosFais-les dans cet ordre :
BtnResetWebResetwhen BtnReset.Clickwhen WebReset.GotTextVérifier :
BtnReset existe bienWebReset existe bienhttps://sti2d.latelier22.fr/fiber/api/reset
WebReset.GotText existeOn souhaite maintenant ajouter un bouton permettant d’envoyer une commande de réinitialisation au robot.
Dans le Designer, ajouter :
BtnResetWebResetQuand on clique sur le bouton :
POST à l’adresse :https://sti2d.latelier22.fr/fiber/api/reset
LabelPosTon appli sait maintenant :
Quand on appuie sur le bouton :
{"x":48.1762,"y":-2.7520}
Adresse utilisée :
https://sti2d.latelier22.fr/fiber/api/call-robot
Dans User Interface :
BtnAppelMettre :
Text = APPEL ROBOTDans User Interface :
Notifier1Dans Connectivity :
Web1Dans Blocks, il faut avoir au minimum :
initialize global lat to 0
initialize global lon to 0
initialize global hasFix to false
Si elles n’existent pas, crée-les.
Dans ton bloc :
when LocationSensor1.PositionChanged
ajoute ces 3 lignes si elles n’y sont pas déjà :
set global lat to get Latitude
set global lon to get Longitude
set global hasFix to true
Ton bloc doit contenir au moins :
when LocationSensor1.PositionChanged
Latitude Longitude Altitude speed
do
set global lat to get Latitude
set global lon to get Longitude
set global hasFix to true
set Marker1.Latitude to get Latitude
set Marker1.Longitude to get Longitude
Ajoute ce bloc :
when BtnAppel.Click
do
BtnAppel.Click, tester si le GPS est prêtDans ce bloc, mets :
if not get global hasFix
then
call Notifier1.ShowAlert
notice "GPS pas prêt"
else
call Notifier1.ShowChooseDialog
message join
"Appeler le robot ?"
"\nlat = "
get global lat
"\nlon = "
get global lon
title "CONFIRMATION"
button1Text "OUI"
button2Text "NON"
cancelable true

Ajoute ce bloc :
when Notifier1.AfterChoosing
choice
do
Notifier1.AfterChoosing, tester si on a cliqué sur OUIMets :
if get choice = "OUI"
then
then, mettre l’adresse du serveurAjoute :
set Web1.Url to "https://sti2d.latelier22.fr/fiber/api/call-robot"
Ajoute ensuite :
set Web1.RequestHeaders to make a list
make a list "Content-Type" "application/json"
make a list "Connection" "Keep-Alive"
Ajoute :
call Web1.PostText
text make a dictionary
key "x" value get global lat
key "y" value get global lon
Notifier1.AfterChoosingAu final, ton bloc doit être :
when Notifier1.AfterChoosing
choice
do
if get choice = "OUI"
then
set Web1.Url to "https://sti2d.latelier22.fr/fiber/api/call-robot"
set Web1.RequestHeaders to make a list
make a list "Content-Type" "application/json"
make a list "Connection" "Keep-Alive"
call Web1.PostText
text make a dictionary
key "x" value get global lat
key "y" value get global lon

Ajoute ce bloc :
when Web1.GotText
url responseCode responseType responseContent
do
Web1.GotText, afficher la réponseMets :
set LabelPos.Text to join
"Réponse serveur : "
responseCode
"\n"
responseContent
Quand on clique sur APPEL ROBOT :
{"x": latitude, "y": longitude}
LabelPosFais-les dans cet ordre :
BtnAppelNotifier1Web1lat, lon, hasFixLocationSensor1.PositionChangedwhen BtnAppel.Clickwhen Notifier1.AfterChoosingwhen Web1.GotTextBtnAppel existe bienNotifier1 existe bienWeb1 existe bienglobal hasFix passe à trueglobal lat et global lon sont bien mis à jourOn souhaite maintenant ajouter un bouton permettant d’envoyer la position du téléphone au serveur.
Dans le Designer, ajouter :
BtnAppelNotifier1Web1Quand on clique sur le bouton :
https://sti2d.latelier22.fr/fiber/api/call-robot
Les coordonnées envoyées sont :
x pour la latitudey pour la longitudeLa réponse du serveur est affichée dans le label de position.
On part des de ton appli actuelle avec :
Map1Marker1 = téléphoneLabelPosBtnSendTxtJsonLocationSensor1Dans Maps :
MarkerRobotDans Connectivity :
WebRobotDans Sensors :
ClockRobotMarkerRobotVisible = falseClockRobotTimerEnabled = trueTimerInterval = 2000Cela veut dire :
Va dans Blocks et ajoute ces variables :
initialize global myLat to 0
initialize global myLon to 0
initialize global robotLat to 0
initialize global robotLon to 0
initialize global hasRobot to false
initialize global decodedRobot to 0
initialize global robotData to 0
Screen1.InitializeTu as déjà un bloc when Screen1.Initialize.
Ajoute dedans :
set WebRobot.Url to "https://sti2d.latelier22.fr/fiber/api/robot-last"
set MarkerRobot.Visible to false
Ton bloc ressemble maintenant à ça :
when Screen1.Initialize
do
set Map1.ZoomLevel to 16
set Map1.CenterFromString to "48.1762740,-2.7520210"
set LabelPos.Text to "Position : en attente du GPS"
set WebRobot.Url to "https://sti2d.latelier22.fr/fiber/api/robot-last"
set MarkerRobot.Visible to false
Dans Procedures :
UpdateMapCenterUpdateMapCenter, mettre les blocs suivantsDans cette procédure, mets :
if get global hasRobot
then
set Map1.CenterFromString to join
((get global myLat + get global robotLat) / 2)
","
((get global myLon + get global robotLon) / 2)
set Map1.ZoomLevel to 16
else
set Map1.CenterFromString to join
get global myLat
","
get global myLon
set Map1.ZoomLevel to 18

Elle fait ceci :
Important :
quand les 2 existent, on met ZoomLevel = 16
pour avoir les 2 marqueurs visibles
LocationSensor1.PositionChangedDans ton bloc actuel :
when LocationSensor1.PositionChanged
ajoute d’abord ces 2 lignes :
set global myLat to get Latitude
set global myLon to get Longitude
Ensuite garde :
set Marker1.Latitude to get Latitude
set Marker1.Longitude to get Longitude
Puis supprime les lignes qui mettaientt directement :
set Map1.CenterFromString to ...
et
set Map1.ZoomLevel to 18
et remplace-la par :
call UpdateMapCenter
Puis garde :
set LabelPos.Text to join get Latitude "," get Longitude
LocationSensor1.PositionChanged doit devenirwhen LocationSensor1.PositionChanged
Latitude Longitude Altitude speed
do
set global myLat to get Latitude
set global myLon to get Longitude
set Marker1.Latitude to get Latitude
set Marker1.Longitude to get Longitude
call UpdateMapCenter
set LabelPos.Text to join
"Moi : "
get Latitude
", "
get Longitude
Ajoute ce bloc :
when ClockRobot.Timer
do
call WebRobot.Get
WebRobot.GotTextAjoute ce bloc :
when WebRobot.GotText
url responseCode responseType responseContent
do
WebRobot.GotText, décoder le JSONDans ce bloc, mets d’abord :
set global decodedRobot to call WebRobot.JsonTextDecodeWithDictionaries
responseContent
Juste après, ajoute :
if get value for key "ok"
in dictionary get global decodedRobot
or if not found false
then
Dans le then, ajoute :
set global robotData to get value for key "robot"
in dictionary get global decodedRobot
or if not found 0
Toujours dans le then, ajoute :
set global robotLat to get value for key "x"
in dictionary get global robotData
or if not found 0
set global robotLon to get value for key "y"
in dictionary get global robotData
or if not found 0
Toujours dans le then, ajoute :
set MarkerRobot.Latitude to get global robotLat
set MarkerRobot.Longitude to get global robotLon
set MarkerRobot.Visible to true
set global hasRobot to true
Toujours dans le then, ajoute :
call UpdateMapCenter
WebRobot.GotTextAu final, ton bloc doit ressembler à ceci :
when WebRobot.GotText
url responseCode responseType responseContent
do
set global decodedRobot to call WebRobot.JsonTextDecodeWithDictionaries
responseContent
if get value for key "ok"
in dictionary get global decodedRobot
or if not found false
then
set global robotData to get value for key "robot"
in dictionary get global decodedRobot
or if not found 0
set global robotLat to get value for key "x"
in dictionary get global robotData
or if not found 0
set global robotLon to get value for key "y"
in dictionary get global robotData
or if not found 0
set MarkerRobot.Latitude to get global robotLat
set MarkerRobot.Longitude to get global robotLon
set MarkerRobot.Visible to true
set global hasRobot to true
call UpdateMapCenter

Tu recentrais la carte seulement sur le téléphone
Tu centres la carte :
C’est ça qui permet de voir les 2 marqueurs
Dans LocationSensor1.PositionChanged, ne mets plus :
set Map1.ZoomLevel to 18
set Map1.CenterFromString to ...
sinon la carte reviendra toujours sur toi, et on ne verra pas le robot.
Dans LocationSensor1.PositionChanged, mets juste :
call UpdateMapCenter
Quand l’appli tourne :
Marker1 affiche ta positionClockRobot appelle l’API toutes les 2 secondesMarkerRobot apparaît quand la position robot arriveDans Screen1.Initialize, l’adresse est :
https://sti2d.latelier22.fr/fiber/api/robot-last
MarkerRobotWebRobotClockRobotmyLatmyLonrobotLatrobotLonhasRobotdecodedRobotrobotDataUpdateMapCenterwhen ClockRobot.Timerwhen WebRobot.GotTextwhen Screen1.Initializewhen LocationSensor1.PositionChangedFais les étapes dans cet ordre exact :
MarkerRobotWebRobotClockRobotClockRobotScreen1.InitializeUpdateMapCenterLocationSensor1.PositionChangedClockRobot.TimerWebRobot.GotTextVoici un tuto pas à pas, très concret, pour ajouter START / STOP dans votre appli App Inventor.
On part de ce que vous avez déjà :
Web1 lit https://proxy-automate.latelier22.fr/api.phpClock1 relit régulièrementLabelEtatPac affiche l’étatglobal etat_pacOn va juste ajouter :
ButtonStartButtonStopWeb2 pour envoyer les commandesDans App Inventor, allez dans Designer.
Ajoutez :
ButtonStart
STARTButtonStop
STOPWeb2Vous gardez :
Web1Clock1LabelEtatPacLabelMotToujours dans le Designer, ou dans les blocs ensuite :
Web1 servira à lire l’étatWeb2 servira à envoyer START / STOPL’URL de commande est :
https://proxy-automate.latelier22.fr/control.php
Screen1.InitializeDans les blocs, ouvrez :
when Screen1.Initialize
Vous avez déjà un bloc qui met l’URL de Web1.
Ajoutez maintenant, juste dessous :
set Web2.Url to "https://proxy-automate.latelier22.fr/control.php"
Ajoutez aussi :
set ButtonStart.Visible to false
set ButtonStop.Visible to false
call Web1.Get
Donc au final, dans Screen1.Initialize, vous devez avoir l’idée suivante :
when Screen1.Initialize
set Web1.Url to "https://proxy-automate.latelier22.fr/api.php"
set Web2.Url to "https://proxy-automate.latelier22.fr/control.php"
set ButtonStart.Visible to false
set ButtonStop.Visible to false
call Web1.Get
Dans votre bloc :
when Clock1.Timer
gardez simplement :
call Web1.Get
Le Clock1 sert juste à relire l’état de la PAC.
Donc :
when Clock1.Timer
call Web1.Get
Web1.GotText, lire etat_pacVous avez déjà ce bloc.
Dedans, vous faites déjà :
global datadebit_eau_l_hetat_pacGardez ça.
La ligne importante est celle-ci :
set global etat_pac to get value for key "etat_pac" in dictionary get global data
Puis vous faites déjà :
set LabelEtatPac.Text to get global etat_pac
Ça, il faut le garder.
Toujours dans Web1.GotText, juste après :
set LabelEtatPac.Text to get global etat_pac
ajoutez un bloc if then else.
La règle est :
global etat_pac = "Marche"alors :
set ButtonStart.Visible to false
set ButtonStop.Visible to true
alors :
set ButtonStart.Visible to true
set ButtonStop.Visible to false
Donc dans App Inventor, ça donne l’idée suivante :
if get global etat_pac = "Marche"
then
set ButtonStart.Visible to false
set ButtonStop.Visible to true
else
set ButtonStart.Visible to true
set ButtonStop.Visible to false
Ajoutez un nouveau bloc :
when ButtonStart.Click
À l’intérieur, mettez :
call Web2.PostText "action=start"
Donc :
when ButtonStart.Click
call Web2.PostText "action=start"
Ce bloc envoie la commande START au proxy.
Ajoutez un nouveau bloc :
when ButtonStop.Click
À l’intérieur, mettez :
call Web2.PostText "action=stop"
Donc :
when ButtonStop.Click
call Web2.PostText "action=stop"
Ce bloc envoie la commande STOP au proxy.
Ajoutez un nouveau bloc :
when Web2.GotText
À l’intérieur, mettez un test :
responseCode = 200alors :
call Web1.Get
alors :
set LabelMot.Text to "Erreur commande"
Donc :
when Web2.GotText
if get responseCode = 200
then
call Web1.Get
else
set LabelMot.Text to "Erreur commande"
Le but est simple :
Web1.Getapi.php renvoie :
etat_pac = "Arret"
Alors l’appli doit afficher :
ButtonStart.Visible = trueButtonStop.Visible = falseapi.php renvoie :
etat_pac = "Marche"
Alors l’appli doit afficher :
ButtonStart.Visible = falseButtonStop.Visible = trueelle envoie :
action=start
à :
https://proxy-automate.latelier22.fr/control.php
elle envoie :
action=stop
à :
https://proxy-automate.latelier22.fr/control.php
Web1.Getelle lit :
{
"ok": true,
"etat_pac": "Marche"
}
ou :
{
"ok": true,
"etat_pac": "Arret"
}
Dans votre appli, vous utilisez seulement :
etat_pacWeb1.Getetat_pac = "Marche"etat_pac = "Arret"action=startaction=stopScreen1.Initializeset Web1.Url to "https://proxy-automate.latelier22.fr/api.php"
set Web2.Url to "https://proxy-automate.latelier22.fr/control.php"
set ButtonStart.Visible to false
set ButtonStop.Visible to false
call Web1.Get
Clock1.Timercall Web1.Get
ButtonStart.Clickcall Web2.PostText "action=start"
ButtonStop.Clickcall Web2.PostText "action=stop"
Web2.GotTextif responseCode = 200
call Web1.Get
else
set LabelMot.Text to "Erreur commande"
Web1.GotTextAprès avoir récupéré etat_pac :
if get global etat_pac = "Marche"
set ButtonStart.Visible to false
set ButtonStop.Visible to true
else
set ButtonStart.Visible to true
set ButtonStop.Visible to false
Web2.Url doit être :https://proxy-automate.latelier22.fr/control.php
ButtonStart.Click doit envoyer exactement :action=start
ButtonStop.Click doit envoyer exactement :action=stop
Web1.GotText doit bien lire :etat_pac
avec cette clé exacte.