Diferència entre revisions de la pàgina «DAM 2023-2024»
m (→Qt for Android) |
m (→Documentació) |
||
(Hi ha 184 revisions intermèdies del mateix usuari que no es mostren) | |||
Línia 15: | Línia 15: | ||
= Algunes classes = | = Algunes classes = | ||
+ | '''Examen del M07UF1: 13 de maig de 2024'''. El 21 de maig a les dues darreres hores també és reservat. | ||
+ | == 20240513 (1h + 2h) Examen M07UF1 == | ||
+ | [https://recull.binefa.cat/files/20240513ex/ Recull del dia d'avui] | ||
+ | |||
+ | * 1a hora: GP3 | ||
+ | |||
+ | * 2a i 3a hora: '''Examen final de 2/3 parts''' del M07UF1 | ||
+ | |||
+ | == 20240510 (2h) == | ||
+ | Seguim amb el GP3. | ||
+ | == 20240506 (1h + 2h) == | ||
+ | [https://recull.binefa.cat/files/20240506/ Recull del dia d'avui] <-- '''Conversió de 2 bytes (''unsigned char'') a ''short int''''' | ||
+ | |||
+ | * 1a hora: GP3 | ||
+ | |||
+ | * 2a i 3a hora: M07UF1 (Heu d'acabar les pràctiques pendents) | ||
+ | == 20240503 (2h) == | ||
+ | Seguim amb el GP3. | ||
+ | == 20240430 (1h) == | ||
+ | Seguim amb el GP3. | ||
+ | |||
+ | == 20240429 (1h + 2h) == | ||
+ | [https://recull.binefa.cat/files/20240415/ Recull del dia d'avui] | ||
+ | |||
+ | * 1a hora: GP3 | ||
+ | |||
+ | * 2a i 3a hora: M07UF1 | ||
+ | |||
+ | S'ha afegit '''M05'''. Seguim resolent els exercicis del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]. ('''Fins ara s'ha demanat fer M00, M01, M02, M03, M04 i M05'''). | ||
+ | == 20240426 (2h) == | ||
+ | Seguim amb el GP3. | ||
+ | == 20240423 (1h) == | ||
+ | Seguim amb el GP3. | ||
+ | |||
+ | == 20240422 (1h + 2h) == | ||
+ | [https://recull.binefa.cat/files/20240415/ Recull del dia d'avui] | ||
+ | |||
+ | * 1a hora: GP3 | ||
+ | |||
+ | * 2a i 3a hora: M07UF1 | ||
+ | |||
+ | S'ha afegit '''M03'''. Seguim resolent l'exercici de l'enunciat M04 del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]. ('''Fins ara s'ha demanat fer M00, M01, M02, M03 i M04'''. No s'ha demanat fer M05). | ||
+ | |||
+ | == 20240419 (2h) == | ||
+ | Seguim amb el GP3. | ||
+ | == 20240416 (1h) == | ||
+ | Seguim amb el GP3. | ||
+ | == 20240415 (1h + 2h) == | ||
+ | [https://recull.binefa.cat/files/20240415/ Recull del dia d'avui] | ||
+ | |||
+ | * 1a hora: GP3 | ||
+ | |||
+ | * 2a i 3a hora: M07UF1 | ||
+ | |||
+ | Seguim resolent l'exercici de l'enunciat M04 del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]. ('''Fins ara s'ha demanat fer M00, M01, M02 i M04'''. No s'ha demanat fer ni M03 ni M05). | ||
+ | |||
+ | == 20240412 (2h) == | ||
+ | Seguim amb el GP3. | ||
+ | |||
+ | == 20240409 (1h) == | ||
+ | Seguim amb el GP3. | ||
+ | |||
+ | == 20240408 (1h + 2h) == | ||
+ | [https://recull.binefa.cat/files/20240408/ Recull del dia d'avui] | ||
+ | |||
+ | Pujats els enunciats M04 i M05 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]]. '''Fins ara s'ha demanat fer M00, M01, M02 i M04'''. No s'ha demanat fer ni M03 ni M05. | ||
+ | |||
+ | == 20240405 (2h) == | ||
+ | [https://recull.binefa.cat/files/20240405/ Recull del dia d'avui] <-- Proposta de '''m01_3_00''' | ||
+ | |||
+ | Seguim amb el M07UF1 tot fent els exercicis pendents del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240402 (1h) == | ||
+ | Seguim amb el GP3. | ||
+ | |||
+ | == 20240318 (1h + 2h) == | ||
+ | 1h de GP3 i 2h de M07UF1 | ||
+ | |||
+ | Acabem les pràctiques M00 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" | ||
+ | |||
+ | == 20240315 (2h) == | ||
+ | GP3 | ||
+ | == 20240311 (1h + 2h) == | ||
+ | 1h de GP3 i 2h de M07UF1 | ||
+ | |||
+ | Acabem les pràctiques M00 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | [https://ca.wikipedia.org/wiki/SCADA Sistemes SCADA] | ||
+ | |||
+ | [[Modbus RTU]] | ||
+ | |||
+ | == 20240308 (1h) == | ||
+ | Fem les pràctiques M00 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240304 (1h + 2h) '''GP3''' == | ||
+ | '''Comença GP3''' | ||
+ | |||
+ | '''Comença el tercer trimestre del M07UF1''' | ||
+ | |||
+ | Afegides les pràctiques M00 al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | <!-- '''Prova de la part IoT: 20240219''' | ||
+ | |||
+ | '''Prova de la part Qt i QML (amb IoT): 20240226''' --> | ||
+ | |||
+ | == 20240301 (2h) == | ||
+ | Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240226 (3h) '''A11''' i prova trimestral '''M07UF1''' == | ||
+ | [https://recull.binefa.cat/files/20240226_QtQml_ex/ Enunciat de la metacognició de síntesi del M07UF1 i part puntuable del projecte global] | ||
+ | |||
+ | == 20240223 (2h) == | ||
+ | Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240220 (1h) == | ||
+ | Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240219 (3h) '''A11''' (Prova final part IoT -'''GP1'''-)== | ||
+ | [https://recull.binefa.cat/files/20240219_IoT_ex/20240219_A11.pdf Enunciat de la metacognició de síntesi en pdf] | ||
+ | |||
+ | [https://recull.binefa.cat/files/20240219_IoT_ex/20240219_A11.pdf Enunciat de la metacognició de síntesi en format editable] | ||
+ | |||
+ | == 20240216 (2h) == | ||
+ | Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240213 (1h) == | ||
+ | Afegits '''A13.01''' (''QML a Android'') i '''A13.02''' (''QML a WebAssembly'') al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240209 (2h) == | ||
+ | * HTTP assíncron esperant resposta MQTT: | ||
+ | |||
+ | [[Image:HttpMqttAssincron.png|center|HTTP a MQTT assíncron]] | ||
+ | |||
+ | Funció '''tramet = OFF''': | ||
+ | flow.set("tramet","OFF"); | ||
+ | return msg; | ||
+ | Funció '''tramet = ON , missatge''': | ||
+ | flow.set("missatge",msg.payload); | ||
+ | flow.set("tramet","ON"); | ||
+ | return msg; | ||
+ | Funció '''LDR req''': | ||
+ | if(msg.req.query['topic'] == "LDR"){ | ||
+ | msg.payload = "El valor de 0 a 4095 de l'LDR demanada"; | ||
+ | }else{ | ||
+ | msg.payload = "No entenc el tema"; | ||
+ | } | ||
+ | return msg; | ||
+ | Funció '''wait MQTT message with timeout''': | ||
+ | var timeoutWait = 2; // 2 second timeout wait | ||
+ | var now = new Date(); | ||
+ | var timeoutTime = new Date().setSeconds(now.getSeconds() + timeoutWait); | ||
+ | var timeOuted = true; | ||
+ | var tramet; | ||
+ | |||
+ | while (now < timeoutTime) { | ||
+ | now = new Date(); // update the current time | ||
+ | tramet = flow.get("tramet"); | ||
+ | if(tramet == "ON"){ | ||
+ | flow.set("tramet","OFF"); | ||
+ | timeOuted = false; | ||
+ | msg.payload = flow.get("missatge"); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | if(timeOuted){ | ||
+ | msg.payload = "MQTT answer has been timed out!" | ||
+ | } | ||
+ | return msg; | ||
+ | * Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240206 (1h) == | ||
+ | Seguim fent les pràctiques del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240205 (3h) == | ||
+ | Afegits '''A10.3''', '''A17.07''' i '''A17.08''' al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | === Desenvolupament d'una API en NodeRed. Pasarel·la '''HTTP a MQTT''' === | ||
+ | [[Image:Nodered20220402e00.png|center|Flux HTTP a MQTT]] | ||
+ | |||
+ | [https://www.binefa.cat/training/upcSchool/2022/20220402/httpMqtt.nodered.json Flux httpMqtt.nodered.json] | ||
+ | |||
+ | [http://vps656540.ovh.net:2222/mqtt?topic=/7C9EBDEA5BA0/ledW&&payload=0 Apagant] led blanc: | ||
+ | [[Image:Nodered20220402e01.png|center|Apagant led blancto. HTTP a MQTT]] | ||
+ | |||
+ | [http://vps656540.ovh.net:2222/mqtt?topic=/7C9EBDEA5BA0/ledW&&payload=1 Encenent] led blanc: | ||
+ | [[Image:Nodered20220402e02.png|center|Encenent led blanc. HTTP a MQTT]] | ||
+ | |||
+ | * Funció '''bridge''': | ||
+ | msg.topic = msg.req.query['topic']; | ||
+ | msg.payload = msg.req.query['payload']; | ||
+ | return msg; | ||
+ | |||
+ | * Funció '''response''': | ||
+ | msg.payload = "Tema: "+msg.req.query['topic']+", missatge: "+msg.req.query['payload']; | ||
+ | return msg; | ||
+ | === Captura de la resposta web === | ||
+ | '''curl "http://iot.electronics.cat:2222/mqtt2?topic=/7C9EBDEA5BA0/ledW&&payload=0"''' | ||
+ | Tema: /7C9EBDEA5BA0/ledW, missatge: 0 | ||
+ | Es pot redireccionar la resposta a un arxiu: | ||
+ | '''curl "http://iot.electronics.cat:2222/mqtt2?topic=/7C9EBDEA5BA0/ledW&&payload=0" > resposta.txt''' | ||
+ | [https://curl.se/windows/ '''curl''' per Windows] | ||
+ | === '''paho-mqtt''' i Python === | ||
+ | # pip install paho-mqtt | ||
+ | |||
+ | A una cel·la del jupyter-lab (si no el teniu, el podeu instal·lar seguint [https://jupyter.org/install aquestes instruccions]): | ||
+ | |||
+ | import random | ||
+ | |||
+ | import paho.mqtt.subscribe as subscribe | ||
+ | import paho.mqtt.client as mqtt | ||
+ | import paho.mqtt.properties as properties | ||
+ | |||
+ | mqttc = mqtt.Client('idClient-'+str(random.randrange(100000,999999))) | ||
+ | # mqttc.username_pw_set("usuari","contrasenya"); | ||
+ | mqttc.connect("broker.emqx.io", 1883) | ||
+ | |||
+ | def on_message(clientId, userdata, message): | ||
+ | msg = str(message.payload.decode("utf-8")) | ||
+ | print('topic = ', message.topic) | ||
+ | print('payload = ', msg) | ||
+ | |||
+ | mqttc.on_message = on_message | ||
+ | mqttc.subscribe('topicName') | ||
+ | |||
+ | A una altra cel·la del jupyter-lab: | ||
+ | mqttc.loop_start() | ||
+ | |||
+ | [https://techoverflow.net/2021/12/27/how-to-set-username-password-in-paho-mqtt/ Usuari i contrasenya a MQTT emprant Paho] | ||
+ | |||
+ | * Publicació MQTT des de Paho: | ||
+ | mqttc.publish('topicName','Escola del clot') | ||
+ | |||
+ | == 20240202 (2h) == | ||
+ | [https://recull.binefa.cat/files/20240202/union02.c union02.c] al recull de codis. | ||
+ | |||
+ | Seguim fent les pràctiques pendents al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240130 (1h) == | ||
+ | Seguim fent les pràctiques pendents al [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | * Per a qui us faci falta un emulador d'Android: | ||
+ | |||
+ | [[Màquina virtual Android per a fer-la servir per a executar codis QML des de QtCreator]] | ||
+ | |||
+ | == 20240129 (3h) == | ||
+ | [http://www.xtec.cat/formaciotic/ateneu_historic/materials/td97/d97m7/d97m7te.htm Repàs de les unions] i comparació amb les estructures. [https://recull.binefa.cat/files/doc/iot02/loraWan/lora/codis/unions_01.c Exemple de codi emprant unions] | ||
+ | |||
+ | [https://eu1.cloud.thethings.network/ TTN] (The Things Network, Community Edition) | ||
+ | |||
+ | Baixeu-vos els dos pdf del [https://recull.binefa.cat/files/doc/iot02/loraWan/ recull introductori per a treballar amb LoRa] ( usuari: ''dam'' / contrasenya: ''dam2324'') | ||
+ | |||
+ | [[LoRa 2023-2024]] | ||
+ | |||
+ | Exemple de tramesa de variables de tipus ''float'' mitjançant TTN (The Things Network) | ||
+ | |||
+ | * '''A17.01 - Presa de contacte amb LoRa mitjançant The Things Network''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | * '''A17.02 - Tramesa de dades emprant LoRa, The Things Network i NodeRed''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240126 (2h) == | ||
+ | Seguim desenvolupant les pràctiques pendents. | ||
+ | |||
+ | * Exercici'''A14.7 - UserLand''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | == 20240123 (1h) == | ||
+ | L'exercici '''A14.4''' deixa d'estar en suspens i torna a estar en actiu. Tots els alumnes que venen a classe han rebut un correu amb les credencials d'accés a [https://mastodon.binefa.cat/ la instància provisional de Mastodon creada expressament] per a poder desenvolupar la pràctica. | ||
+ | |||
+ | Seguim desenvolupant les pràctiques pendents. | ||
+ | |||
+ | == 20240122 (3h) == | ||
+ | * L'exercici '''A14.5''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] és la documentació de la instal·lació del Grafana al vostre sistema operatiu. | ||
+ | |||
+ | [https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/ Instal·lació de Grafana a Debian o Ubuntu] | ||
+ | |||
+ | [https://grafana.com/docs/grafana/latest/setup-grafana/installation/windows/ Instal·lació de Grafana a Windows] | ||
+ | |||
+ | * [[Ús de Grafana llegint dades de MariaDB]] | ||
+ | |||
+ | * Si no l'heu finalitzat, acabeu l'exercici '''A14.8''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | * Feu els exercicis '''A17.05''' i '''A17.06''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] que us fan visualitzar a Grafana les dades emmagatzemades a MariaDB. | ||
+ | |||
+ | == 20240119 (2h) == | ||
+ | [[Ús de MariaDB per emmagatzemar dades de la Internet de les Coses]] | ||
+ | |||
+ | [[Ús de la base de dades MariaDB des de NodeRED]] | ||
+ | |||
+ | * Feu l'exercici '''A14.8''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | * Una altra [https://mastodon.bot/ instància de Mastodon per a fer bots]. L'exercici '''A14.4''' queda en suspens fins a que no es rebin les credencials de Mastodon (de qualsevol de les dues instàncies de Mastodon que s'han proposat per a fer bots). | ||
+ | |||
+ | == 20240116 (1h) == | ||
+ | Continuem desenvolupant la pràctica A13.00 | ||
+ | == 20240115 (3h) == | ||
+ | === '''Mastodon''' === | ||
+ | * Mastodon, una alternativa lliure a Twitter | ||
+ | |||
+ | No totes les instàncies de [https://ca.wikipedia.org/wiki/Mastodon_(xarxa_social) Mastodon] faciliten la instal·lació de ''bots''. Per a fer els primers passos us recomano aquesta [https://botsin.space/ instància pensada per a hostatjar ''bots'' de Mastodon] ('''tal i com es va demanar el dia anterior, heu d'haver demanat les credencials a la instància de Mastodon [https://botsin.space/ botsin.space] amb molta antelació. Si ho sol·liciteu avui mateix no podreu seguir la classe'''). | ||
+ | |||
+ | |||
+ | <!-- [https://botsin.space/@siarq_sensors Exemple de bot de Mastodon] per a fer lectures de sensors cada hora. | ||
+ | |||
+ | [https://gist.github.com/aparrish/661fca5ce7b4882a8c6823db12d42d26 Getting credentials for the Mastodon API with Mastodon.py, step by step] | ||
+ | |||
+ | [[Getting credentials for the Mastodon API with Mastodon.py, step by step]] --> | ||
+ | [[Obtenció de les credencials per a l'API de Mastodon amb Mastodon.py, pas per pas]] | ||
+ | |||
+ | * Feu els exercicis '''A10.2''' i '''A14.4''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | == 20240112 (1h) == | ||
+ | Continuem desenvolupant la pràctica A13.00 del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | == 20240109 (1h) == | ||
+ | Continuem desenvolupant la pràctica '''A13.00''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | === '''Deures pel 15 de gener''' === | ||
+ | |||
+ | Feu-vos membres d'aquesta instància de Mastodon: [https://botsin.space/ botsin.space] | ||
+ | |||
+ | '''Feu-ho amb prou antelació''', és possible que trigui més de tres hores a donar-vos accés. | ||
+ | |||
+ | == 20240108 (3h) == | ||
+ | [https://recull.binefa.cat/files/20240108/ Recull de codis comentats avui] | ||
+ | |||
+ | === Autenticació d'accés a NodeRED === | ||
+ | [https://nodered.org/docs/getting-started/local Darrera versió de NodeRed] | ||
+ | |||
+ | [https://nodered.org/docs/user-guide/runtime/securing-node-red Securing NodeRED] | ||
+ | |||
+ | Generació de la contrasenya d'accés en mode hash des de la carpeta d'execució del NodeRED: | ||
+ | node node_modules/node-red/red.js admin hash-pw | ||
+ | |||
+ | En aquest exemple fem servir aquesta contrasenya en mode hash: | ||
+ | '''$2a$08$PbYFpiQSnoVaOfD1daCelU2Kvcg19KElO1DbVtE8GAJXacD6ABq''' | ||
+ | |||
+ | Edició de '''settings.js''': | ||
+ | toni@vps-10d8edcd:~/bin/nodered$ nano ./node_modules/node-red/settings.js | ||
+ | |||
+ | // Securing Node-RED | ||
+ | // ----------------- | ||
+ | // To password protect the Node-RED editor and admin API, the following | ||
+ | // property can be used. See http://nodered.org/docs/security.html for details. | ||
+ | adminAuth: { | ||
+ | type: "credentials", | ||
+ | users: [{ | ||
+ | username: "'''toni'''", | ||
+ | password: "'''$2a$08$PbYFpiQSnoVaOfD1daCelU2Kvcg19KElO1DbVtE8GAJXacD6ABq'''", | ||
+ | permissions: "*" | ||
+ | }] | ||
+ | }, | ||
+ | |||
+ | Un cop fets el canvis '''cal reiniciar el NodeRED'''. | ||
+ | |||
+ | * Feu l'exercici '''A14.1''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | === '''Telegram''' === | ||
+ | [https://wiki.binefa.cat/index.php?title=Bot_de_Telegram Bot de Telegram] | ||
+ | |||
+ | * Creació de bots amb BotFather | ||
+ | |||
+ | * Instal·lació de nodes de Telegram a NodeRED (afegiu els nodes '''node-red-contrib-telegrambot''') | ||
+ | |||
+ | * Interacció amb un usuari de Telegram | ||
+ | |||
+ | * Interacció amb un grup de Telegram | ||
+ | |||
+ | [https://recull.binefa.cat/files/doc/bots Material per a fer el bot i flux de prova per al bot de Telegram] | ||
+ | |||
+ | * Feu els exercicis '''A14.2''' i '''A14.3''' del [[Recull de pràctiques de 2n de DAM. Curs 2023-2024 | recull de pràctiques]] | ||
+ | |||
+ | === '''Deures pel 15 de gener''' === | ||
+ | |||
+ | Feu-vos membres d'aquesta instància de Mastodon: [https://botsin.space/ botsin.space] | ||
+ | |||
+ | '''Feu-ho amb prou antelació''', és possible que trigui més de tres hores a donar-vos accés. | ||
+ | |||
+ | == 20231219 (1h) == | ||
+ | Continuem desenvolupant la pràctica A13.00 | ||
+ | == 20231218 (3h) == | ||
+ | [https://recull.binefa.cat/files/20231211/ Recull del dia d'avui] | ||
+ | |||
+ | Activitat '''A13.00''' [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A13.00 ginyMqtt en QML i qmake | ginyMqtt en QML i qmake]] | ||
+ | |||
+ | Al recull del dia d'avui hi ha una introducció a la pràctica A13.00 | ||
+ | |||
+ | == 20231215 (1h + 1h) == | ||
+ | [https://recull.binefa.cat/files/20231215/ Recull del dia d'avui] | ||
+ | |||
+ | * [https://www.binefa.cat/training/qml/clot/pl01.zip Exemple de pàgina lliscant]. Ús de ''SwipeView''. Funciona per ''qmake'' (no per ''cmake'') | ||
+ | |||
+ | |||
+ | '''Comunicació bidireccional del ''frontal'' en QML amb el ''rerefons'' en C++''' | ||
+ | |||
+ | '''Frontal''': En anglès ''front-end''. '''Rerefons''': En anglès ''back-end'' | ||
+ | |||
+ | * [https://www.binefa.cat/training/qml/clot/pl02.zip Exemple d'un rerefons en C]. Ús de ''SwipeView'' i una classe de rerefons feta en C++. Funciona per ''qmake'' (no per ''cmake'') | ||
+ | |||
+ | |||
+ | Procés de creació de codi per a comunicar un frontal QML amb un rerefons C++: [[Vídeos QML]] | ||
+ | |||
+ | * Activitat '''A08.04''' del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
+ | == 20231211 (3h) == | ||
+ | [https://recull.binefa.cat/files/20231211/ Recull del dia d'avui] | ||
+ | |||
+ | [[Introducció al QML. Curs 2023-2024]] | ||
+ | |||
+ | Activitats '''A08.01''', '''A08.02''' i '''A08.03''' del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
+ | === PureQML === | ||
+ | [https://pureqml.com/ Pàgina oficial de PureQML] | ||
+ | |||
+ | ==== Posada en marxa del PureQML ==== | ||
+ | * Instal·lació de l'eina '''python-future''': | ||
+ | pip3 install future | ||
+ | A Windows: | ||
+ | pip install future | ||
+ | |||
+ | * Primera aplicació | ||
+ | mkdir prjFolder | ||
+ | cd prjFolder | ||
+ | git clone https://github.com/pureqml/qmlcore.git | ||
+ | ./qmlcore/build --boilerplate | ||
+ | ./qmlcore/build | ||
+ | A Windows, les dues darreres passes: | ||
+ | python qmlcore/build --boilerplate | ||
+ | python qmlcore/build | ||
+ | |||
+ | Obriu amb un navegador l'arxiu ''prjFolder/build.web/index.html'' | ||
+ | |||
+ | * Modificació de ''prjFolder/src/app.qml'': | ||
+ | Text { | ||
+ | anchors.fill: context; | ||
+ | |||
+ | '''text: 'Primer exemple de pureQML';''' | ||
+ | '''color: 'red';''' | ||
+ | font.pixelSize: 32; | ||
+ | verticalAlignment: Text.AlignVCenter; | ||
+ | horizontalAlignment: Text.AlignHCenter; | ||
+ | } | ||
+ | Reconstruïu-ho: | ||
+ | ./qmlcore/build | ||
+ | |||
+ | A Windows: | ||
+ | python qmlcore/build | ||
+ | |||
+ | |||
+ | Torneu a obrir amb un navegador l'arxiu ''prjFolder/build.web/index.html'' per a observar els canvis | ||
+ | |||
+ | Activitats '''A08.00''' del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
+ | == 20231205 (1h) == | ||
+ | [https://recull.binefa.cat/files/20231205/ Recull del dia d'avui] | ||
+ | |||
+ | [[Introducció al QML. Curs 2023-2024]] | ||
+ | |||
+ | == 20231204 (3h) == | ||
+ | [https://recull.binefa.cat/files/20231204/ Recull del dia d'avui] | ||
+ | |||
+ | Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
+ | Comencem la pràctica '''A12.02''' | ||
+ | |||
+ | Al dia d'avui hi ha penjat: | ||
+ | |||
+ | * Exemple d'etiqueta dibuixada a partir d'un QPixMap: '''00_botonsToggle05.zip''' | ||
+ | |||
+ | * Exemple de '''QTimer''': '''00_botonsToggle06.zip''' | ||
+ | |||
+ | * Exemple dels senyals '''pressed()''' i '''released()''': '''04_indicadorBotons00.zip''' | ||
+ | |||
+ | * Exemple d'ús de '''QJsonObject''': '''01_json_00.zip''' | ||
+ | |||
+ | * Biblioteca '''JSON''' per l'IDE d'Arduino: '''Arduino_JSON.zip''' (exemple d'ús: '''IoT-02_mqtt_10_dam.zip''') | ||
+ | |||
+ | * Exemple de conversió de JSON a text i de text a JSON amb NodeRED (els temes MQTT han de ser de tipus text): '''json00.nodered.txt''' | ||
+ | |||
+ | == 20231201 (2h) == | ||
+ | Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
+ | [[Instal·lació de les eines mínimes (SDK, NDK i eines de terminal) per a fer aplicacions en Qt per a Android]] | ||
+ | |||
+ | == 20231128 (1h) == | ||
+ | Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
+ | == 20231127 (3h) == | ||
+ | Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
+ | == 20231124 (1h + 1h) == | ||
+ | * [https://zetcode.com/gui/qt5/strings/ Exemples emprant QString] | ||
+ | |||
+ | * [https://zetcode.com/gui/qt5/containers/ Exemples emprant QStringList] | ||
+ | |||
+ | * Diferències entre el mètode ''setEnabled(bool)'' i ''setVisible(bool)'' | ||
+ | |||
+ | * [https://zetcode.com/gui/qt5/eventsandsignals/ Qt's keyPressEvent] ( ''#include <QKeyEvent>'' ) | ||
+ | |||
+ | * [https://doc.qt.io/qt-6/resources.html The Qt Resource System (.qrc)] | ||
+ | |||
+ | * [https://doc.qt.io/qt-6/qdialog.html QDialog]. Senyals ''accepted()'' i ''rejected()''. Mètodes de resposta ''accept()'' i ''reject()''. Respostes a ''dlg.exec()'': ''QDialog::Accepted'' i ''QDialog::Rejected''. | ||
+ | |||
+ | * [https://doc.qt.io/qt-6/qmainwindow.html QMainWindow]. [https://zetcode.com/gui/qt5/menusandtoolbars/ Menús i barres d'eines]. [https://doc.qt.io/qt-6/qaction.html QAction] | ||
+ | |||
+ | * Seguim fent l'activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06.04 - Interfícies gràfiques | A06.04 - Interfícies gràfiques]] | ||
+ | |||
+ | * Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
+ | * Documentació sobre Qt/C++: | ||
+ | - [https://recull.binefa.cat/files/doc/Foundations%20of%20Qt%20Development.pdf Llibre de Qt] | ||
+ | |||
+ | - [https://zetcode.com/gui/qt5/ Tutorial breu sobre Qt] | ||
+ | |||
+ | == 20231121 (1h) == | ||
+ | * Explicació de l'activitat [[Recull de pràctiques de 2n de DAM._Curs_2023-2024#A06.04 - Interfícies gràfiques | A06.04 - Interfícies gràfiques]] | ||
+ | |||
+ | * Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
== 20231120 (3h) == | == 20231120 (3h) == | ||
Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
+ | |||
== 20231117 (1h + 1h) == | == 20231117 (1h + 1h) == | ||
Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | Seguim fent les activitats pendents del [[Recull de pràctiques de 2n de DAM._Curs_2023-2024 | recull de pràctiques de 2n de DAM._Curs_2023-2024]] | ||
Línia 261: | Línia 778: | ||
= Documentació = | = Documentació = | ||
− | [https://drive.google.com/drive/folders/1P4FlwnGsX4qXIXBJJL9vS8KK1R-OUeZM Drive curs 2023-2024] | + | [https://drive.google.com/drive/folders/1P4FlwnGsX4qXIXBJJL9vS8KK1R-OUeZM Drive curs 2023-2024] ([https://web2.alexiaedu.com/ACWeb/paginas/Home/HomeMetro.aspx Alèxia], [https://sac.net.fje.edu/v1.0/#/home/ SAC]). [https://drive.google.com/drive/folders/1dcGDwZBWcG3utW6OxXBkQey7oHa_3ZNx Eina d'avaluació GP1] |
+ | |||
+ | [https://drive.google.com/drive/folders/0AG8LE_yosU7JUk9PVA novaFP ASIX/DAW/DAM] | ||
+ | |||
+ | [https://drive.google.com/drive/folders/1plnk2yt-SlPEwJDE7ILUkrGRsm2hf1fw Totes les llistes] | ||
[[Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM]] | [[Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM]] | ||
Línia 269: | Línia 790: | ||
[https://drive.google.com/drive/folders/1vorYyIsiOUU6Ia3ViqDCpfG-gFUqnroc Projecte global GP1. IoT] | [https://drive.google.com/drive/folders/1vorYyIsiOUU6Ia3ViqDCpfG-gFUqnroc Projecte global GP1. IoT] | ||
− | [ | + | [http://192.168.10.17:9191/app?service=page/UserWebPrint Impressió] |
− | [https://docs.google.com/ | + | <!-- [https://docs.google.com/spreadsheets/d/1jxpQM8EaMrWeWnBrbSBBbYi8lwblSla3/edit#gid=1066652034 Seguiment de tutories] |
+ | [https://docs.google.com/forms/d/1VwVSCWRftkxRUdqQKi_Uqi8LboIrHDh53ZFdei303gA/edit Enquesta del 17 de novembre de 2022] --> | ||
== Qt/QML == | == Qt/QML == | ||
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu: | Paquets que manquen per a fer funcionar les Qt a l'Ubuntu: | ||
Línia 294: | Línia 816: | ||
[https://doc.qt.io/qt-6.5/android-getting-started.html Getting Started with Qt6.5 for Android] | [https://doc.qt.io/qt-6.5/android-getting-started.html Getting Started with Qt6.5 for Android] | ||
+ | |||
+ | [[Instal·lació de les eines mínimes (SDK, NDK i eines de terminal) per a fer aplicacions en Qt per a Android]] | ||
=== Qt for WebAssembly === | === Qt for WebAssembly === |
Revisió de 15:09, 20 juny 2024
Quan tingueu les credencials d'accés a la NET heu de compartir una carpeta amb aquest nom: 2324-DAM-1rCognom2nCognomNom (Per exemple, si el vostre nom és Xavier López Pujol --> 2324-DAM-LopezPujolXavier). Heu de compartir-la amb el professor transversal dels projectes globals i amb mi. A aquest enllaç podreu veure si ja hi sou a la llista:
Carpetes compartides de 2n de DAM. Curs 2023-2024
Contingut
- 1 Enllaços ràpids
- 2 Algunes classes
- 2.1 20240513 (1h + 2h) Examen M07UF1
- 2.2 20240510 (2h)
- 2.3 20240506 (1h + 2h)
- 2.4 20240503 (2h)
- 2.5 20240430 (1h)
- 2.6 20240429 (1h + 2h)
- 2.7 20240426 (2h)
- 2.8 20240423 (1h)
- 2.9 20240422 (1h + 2h)
- 2.10 20240419 (2h)
- 2.11 20240416 (1h)
- 2.12 20240415 (1h + 2h)
- 2.13 20240412 (2h)
- 2.14 20240409 (1h)
- 2.15 20240408 (1h + 2h)
- 2.16 20240405 (2h)
- 2.17 20240402 (1h)
- 2.18 20240318 (1h + 2h)
- 2.19 20240315 (2h)
- 2.20 20240311 (1h + 2h)
- 2.21 20240308 (1h)
- 2.22 20240304 (1h + 2h) GP3
- 2.23 20240301 (2h)
- 2.24 20240226 (3h) A11 i prova trimestral M07UF1
- 2.25 20240223 (2h)
- 2.26 20240220 (1h)
- 2.27 20240219 (3h) A11 (Prova final part IoT -GP1-)
- 2.28 20240216 (2h)
- 2.29 20240213 (1h)
- 2.30 20240209 (2h)
- 2.31 20240206 (1h)
- 2.32 20240205 (3h)
- 2.33 20240202 (2h)
- 2.34 20240130 (1h)
- 2.35 20240129 (3h)
- 2.36 20240126 (2h)
- 2.37 20240123 (1h)
- 2.38 20240122 (3h)
- 2.39 20240119 (2h)
- 2.40 20240116 (1h)
- 2.41 20240115 (3h)
- 2.42 20240112 (1h)
- 2.43 20240109 (1h)
- 2.44 20240108 (3h)
- 2.45 20231219 (1h)
- 2.46 20231218 (3h)
- 2.47 20231215 (1h + 1h)
- 2.48 20231211 (3h)
- 2.49 20231205 (1h)
- 2.50 20231204 (3h)
- 2.51 20231201 (2h)
- 2.52 20231128 (1h)
- 2.53 20231127 (3h)
- 2.54 20231124 (1h + 1h)
- 2.55 20231121 (1h)
- 2.56 20231120 (3h)
- 2.57 20231117 (1h + 1h)
- 2.58 20231114 (1h)
- 2.59 20231013 (3h)
- 2.60 20231110 (1h + 1h)
- 2.61 20231107 (1h)
- 2.62 20231106 (3h)
- 2.63 20231103 (1h + 1h)
- 2.64 20231031 (1h)
- 2.65 20231030 (3h)
- 2.66 20231027 (1h + 1h)
- 2.67 20231024 (1h)
- 2.68 20231020 (2h)
- 2.69 20231020 (2h)
- 2.70 20231017 (1h)
- 2.71 20231016 (3h)
- 2.72 20231010 (1h)
- 2.73 20231009 (3h)
- 2.74 20231006 (1h + 1h)
- 2.75 20231003 (1h)
- 2.76 20231002 (3h)
- 2.77 20230929 (1h + 1h)
- 2.78 20230926 (1h)
- 2.79 20230922 (1h + 1h)
- 2.80 20230919 (1h)
- 2.81 20230918 (3h)
- 3 Repositori de codis fet a classe durant el curs
- 4 Documentació
Enllaços ràpids
Recull de pràctiques de 2n de DAM. Curs 2023-2024
Recull de codis fets a classe. Curs 2023-2024
Algunes classes
Examen del M07UF1: 13 de maig de 2024. El 21 de maig a les dues darreres hores també és reservat.
20240513 (1h + 2h) Examen M07UF1
- 1a hora: GP3
- 2a i 3a hora: Examen final de 2/3 parts del M07UF1
20240510 (2h)
Seguim amb el GP3.
20240506 (1h + 2h)
Recull del dia d'avui <-- Conversió de 2 bytes (unsigned char) a short int
- 1a hora: GP3
- 2a i 3a hora: M07UF1 (Heu d'acabar les pràctiques pendents)
20240503 (2h)
Seguim amb el GP3.
20240430 (1h)
Seguim amb el GP3.
20240429 (1h + 2h)
- 1a hora: GP3
- 2a i 3a hora: M07UF1
S'ha afegit M05. Seguim resolent els exercicis del recull de pràctiques. (Fins ara s'ha demanat fer M00, M01, M02, M03, M04 i M05).
20240426 (2h)
Seguim amb el GP3.
20240423 (1h)
Seguim amb el GP3.
20240422 (1h + 2h)
- 1a hora: GP3
- 2a i 3a hora: M07UF1
S'ha afegit M03. Seguim resolent l'exercici de l'enunciat M04 del recull de pràctiques. (Fins ara s'ha demanat fer M00, M01, M02, M03 i M04. No s'ha demanat fer M05).
20240419 (2h)
Seguim amb el GP3.
20240416 (1h)
Seguim amb el GP3.
20240415 (1h + 2h)
- 1a hora: GP3
- 2a i 3a hora: M07UF1
Seguim resolent l'exercici de l'enunciat M04 del recull de pràctiques. (Fins ara s'ha demanat fer M00, M01, M02 i M04. No s'ha demanat fer ni M03 ni M05).
20240412 (2h)
Seguim amb el GP3.
20240409 (1h)
Seguim amb el GP3.
20240408 (1h + 2h)
Pujats els enunciats M04 i M05 al recull de pràctiques. Fins ara s'ha demanat fer M00, M01, M02 i M04. No s'ha demanat fer ni M03 ni M05.
20240405 (2h)
Recull del dia d'avui <-- Proposta de m01_3_00
Seguim amb el M07UF1 tot fent els exercicis pendents del recull de pràctiques
20240402 (1h)
Seguim amb el GP3.
20240318 (1h + 2h)
1h de GP3 i 2h de M07UF1
Acabem les pràctiques M00 al recull de pràctiques
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
20240315 (2h)
GP3
20240311 (1h + 2h)
1h de GP3 i 2h de M07UF1
Acabem les pràctiques M00 al recull de pràctiques
20240308 (1h)
Fem les pràctiques M00 al recull de pràctiques
20240304 (1h + 2h) GP3
Comença GP3
Comença el tercer trimestre del M07UF1
Afegides les pràctiques M00 al recull de pràctiques
20240301 (2h)
Seguim fent les pràctiques del recull de pràctiques
20240226 (3h) A11 i prova trimestral M07UF1
Enunciat de la metacognició de síntesi del M07UF1 i part puntuable del projecte global
20240223 (2h)
Seguim fent les pràctiques del recull de pràctiques
20240220 (1h)
Seguim fent les pràctiques del recull de pràctiques
20240219 (3h) A11 (Prova final part IoT -GP1-)
Enunciat de la metacognició de síntesi en pdf
Enunciat de la metacognició de síntesi en format editable
20240216 (2h)
Seguim fent les pràctiques del recull de pràctiques
20240213 (1h)
Afegits A13.01 (QML a Android) i A13.02 (QML a WebAssembly) al recull de pràctiques
Seguim fent les pràctiques del recull de pràctiques
20240209 (2h)
- HTTP assíncron esperant resposta MQTT:
Funció tramet = OFF:
flow.set("tramet","OFF"); return msg;
Funció tramet = ON , missatge:
flow.set("missatge",msg.payload); flow.set("tramet","ON"); return msg;
Funció LDR req:
if(msg.req.query['topic'] == "LDR"){ msg.payload = "El valor de 0 a 4095 de l'LDR demanada"; }else{ msg.payload = "No entenc el tema"; } return msg;
Funció wait MQTT message with timeout:
var timeoutWait = 2; // 2 second timeout wait var now = new Date(); var timeoutTime = new Date().setSeconds(now.getSeconds() + timeoutWait); var timeOuted = true; var tramet; while (now < timeoutTime) { now = new Date(); // update the current time tramet = flow.get("tramet"); if(tramet == "ON"){ flow.set("tramet","OFF"); timeOuted = false; msg.payload = flow.get("missatge"); break; } } if(timeOuted){ msg.payload = "MQTT answer has been timed out!" } return msg;
- Seguim fent les pràctiques del recull de pràctiques
20240206 (1h)
Seguim fent les pràctiques del recull de pràctiques
20240205 (3h)
Afegits A10.3, A17.07 i A17.08 al recull de pràctiques
Desenvolupament d'una API en NodeRed. Pasarel·la HTTP a MQTT
Apagant led blanc:
Encenent led blanc:
- Funció bridge:
msg.topic = msg.req.query['topic']; msg.payload = msg.req.query['payload']; return msg;
- Funció response:
msg.payload = "Tema: "+msg.req.query['topic']+", missatge: "+msg.req.query['payload']; return msg;
Captura de la resposta web
curl "http://iot.electronics.cat:2222/mqtt2?topic=/7C9EBDEA5BA0/ledW&&payload=0" Tema: /7C9EBDEA5BA0/ledW, missatge: 0
Es pot redireccionar la resposta a un arxiu:
curl "http://iot.electronics.cat:2222/mqtt2?topic=/7C9EBDEA5BA0/ledW&&payload=0" > resposta.txt
paho-mqtt i Python
# pip install paho-mqtt
A una cel·la del jupyter-lab (si no el teniu, el podeu instal·lar seguint aquestes instruccions):
import random import paho.mqtt.subscribe as subscribe import paho.mqtt.client as mqtt import paho.mqtt.properties as properties mqttc = mqtt.Client('idClient-'+str(random.randrange(100000,999999))) # mqttc.username_pw_set("usuari","contrasenya"); mqttc.connect("broker.emqx.io", 1883) def on_message(clientId, userdata, message): msg = str(message.payload.decode("utf-8")) print('topic = ', message.topic) print('payload = ', msg) mqttc.on_message = on_message mqttc.subscribe('topicName')
A una altra cel·la del jupyter-lab:
mqttc.loop_start()
Usuari i contrasenya a MQTT emprant Paho
- Publicació MQTT des de Paho:
mqttc.publish('topicName','Escola del clot')
20240202 (2h)
union02.c al recull de codis.
Seguim fent les pràctiques pendents al recull de pràctiques
20240130 (1h)
Seguim fent les pràctiques pendents al recull de pràctiques
- Per a qui us faci falta un emulador d'Android:
Màquina virtual Android per a fer-la servir per a executar codis QML des de QtCreator
20240129 (3h)
Repàs de les unions i comparació amb les estructures. Exemple de codi emprant unions
TTN (The Things Network, Community Edition)
Baixeu-vos els dos pdf del recull introductori per a treballar amb LoRa ( usuari: dam / contrasenya: dam2324)
Exemple de tramesa de variables de tipus float mitjançant TTN (The Things Network)
- A17.01 - Presa de contacte amb LoRa mitjançant The Things Network del recull de pràctiques
- A17.02 - Tramesa de dades emprant LoRa, The Things Network i NodeRed del recull de pràctiques
20240126 (2h)
Seguim desenvolupant les pràctiques pendents.
- ExerciciA14.7 - UserLand del recull de pràctiques
20240123 (1h)
L'exercici A14.4 deixa d'estar en suspens i torna a estar en actiu. Tots els alumnes que venen a classe han rebut un correu amb les credencials d'accés a la instància provisional de Mastodon creada expressament per a poder desenvolupar la pràctica.
Seguim desenvolupant les pràctiques pendents.
20240122 (3h)
- L'exercici A14.5 del recull de pràctiques és la documentació de la instal·lació del Grafana al vostre sistema operatiu.
Instal·lació de Grafana a Debian o Ubuntu
Instal·lació de Grafana a Windows
- Si no l'heu finalitzat, acabeu l'exercici A14.8 del recull de pràctiques
- Feu els exercicis A17.05 i A17.06 del recull de pràctiques que us fan visualitzar a Grafana les dades emmagatzemades a MariaDB.
20240119 (2h)
Ús de MariaDB per emmagatzemar dades de la Internet de les Coses
Ús de la base de dades MariaDB des de NodeRED
- Feu l'exercici A14.8 del recull de pràctiques
- Una altra instància de Mastodon per a fer bots. L'exercici A14.4 queda en suspens fins a que no es rebin les credencials de Mastodon (de qualsevol de les dues instàncies de Mastodon que s'han proposat per a fer bots).
20240116 (1h)
Continuem desenvolupant la pràctica A13.00
20240115 (3h)
Mastodon
- Mastodon, una alternativa lliure a Twitter
No totes les instàncies de Mastodon faciliten la instal·lació de bots. Per a fer els primers passos us recomano aquesta instància pensada per a hostatjar bots de Mastodon (tal i com es va demanar el dia anterior, heu d'haver demanat les credencials a la instància de Mastodon botsin.space amb molta antelació. Si ho sol·liciteu avui mateix no podreu seguir la classe).
Obtenció de les credencials per a l'API de Mastodon amb Mastodon.py, pas per pas
- Feu els exercicis A10.2 i A14.4 del recull de pràctiques
20240112 (1h)
Continuem desenvolupant la pràctica A13.00 del recull de pràctiques
20240109 (1h)
Continuem desenvolupant la pràctica A13.00 del recull de pràctiques
Deures pel 15 de gener
Feu-vos membres d'aquesta instància de Mastodon: botsin.space
Feu-ho amb prou antelació, és possible que trigui més de tres hores a donar-vos accés.
20240108 (3h)
Recull de codis comentats avui
Autenticació d'accés a NodeRED
Generació de la contrasenya d'accés en mode hash des de la carpeta d'execució del NodeRED:
node node_modules/node-red/red.js admin hash-pw
En aquest exemple fem servir aquesta contrasenya en mode hash:
$2a$08$PbYFpiQSnoVaOfD1daCelU2Kvcg19KElO1DbVtE8GAJXacD6ABq
Edició de settings.js:
toni@vps-10d8edcd:~/bin/nodered$ nano ./node_modules/node-red/settings.js
// Securing Node-RED // ----------------- // To password protect the Node-RED editor and admin API, the following // property can be used. See http://nodered.org/docs/security.html for details. adminAuth: { type: "credentials", users: [{ username: "toni", password: "$2a$08$PbYFpiQSnoVaOfD1daCelU2Kvcg19KElO1DbVtE8GAJXacD6ABq", permissions: "*" }] },
Un cop fets el canvis cal reiniciar el NodeRED.
- Feu l'exercici A14.1 del recull de pràctiques
Telegram
- Creació de bots amb BotFather
- Instal·lació de nodes de Telegram a NodeRED (afegiu els nodes node-red-contrib-telegrambot)
- Interacció amb un usuari de Telegram
- Interacció amb un grup de Telegram
Material per a fer el bot i flux de prova per al bot de Telegram
- Feu els exercicis A14.2 i A14.3 del recull de pràctiques
Deures pel 15 de gener
Feu-vos membres d'aquesta instància de Mastodon: botsin.space
Feu-ho amb prou antelació, és possible que trigui més de tres hores a donar-vos accés.
20231219 (1h)
Continuem desenvolupant la pràctica A13.00
20231218 (3h)
Activitat A13.00 ginyMqtt en QML i qmake
Al recull del dia d'avui hi ha una introducció a la pràctica A13.00
20231215 (1h + 1h)
- Exemple de pàgina lliscant. Ús de SwipeView. Funciona per qmake (no per cmake)
Comunicació bidireccional del frontal en QML amb el rerefons en C++
Frontal: En anglès front-end. Rerefons: En anglès back-end
- Exemple d'un rerefons en C. Ús de SwipeView i una classe de rerefons feta en C++. Funciona per qmake (no per cmake)
Procés de creació de codi per a comunicar un frontal QML amb un rerefons C++: Vídeos QML
- Activitat A08.04 del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231211 (3h)
Introducció al QML. Curs 2023-2024
Activitats A08.01, A08.02 i A08.03 del recull de pràctiques de 2n de DAM._Curs_2023-2024
PureQML
Posada en marxa del PureQML
- Instal·lació de l'eina python-future:
pip3 install future
A Windows:
pip install future
- Primera aplicació
mkdir prjFolder cd prjFolder git clone https://github.com/pureqml/qmlcore.git ./qmlcore/build --boilerplate ./qmlcore/build
A Windows, les dues darreres passes:
python qmlcore/build --boilerplate python qmlcore/build
Obriu amb un navegador l'arxiu prjFolder/build.web/index.html
- Modificació de prjFolder/src/app.qml:
Text { anchors.fill: context; text: 'Primer exemple de pureQML'; color: 'red'; font.pixelSize: 32; verticalAlignment: Text.AlignVCenter; horizontalAlignment: Text.AlignHCenter; }
Reconstruïu-ho:
./qmlcore/build
A Windows:
python qmlcore/build
Torneu a obrir amb un navegador l'arxiu prjFolder/build.web/index.html per a observar els canvis
Activitats A08.00 del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231205 (1h)
Introducció al QML. Curs 2023-2024
20231204 (3h)
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
Comencem la pràctica A12.02
Al dia d'avui hi ha penjat:
- Exemple d'etiqueta dibuixada a partir d'un QPixMap: 00_botonsToggle05.zip
- Exemple de QTimer: 00_botonsToggle06.zip
- Exemple dels senyals pressed() i released(): 04_indicadorBotons00.zip
- Exemple d'ús de QJsonObject: 01_json_00.zip
- Biblioteca JSON per l'IDE d'Arduino: Arduino_JSON.zip (exemple d'ús: IoT-02_mqtt_10_dam.zip)
- Exemple de conversió de JSON a text i de text a JSON amb NodeRED (els temes MQTT han de ser de tipus text): json00.nodered.txt
20231201 (2h)
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231128 (1h)
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231127 (3h)
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231124 (1h + 1h)
- Diferències entre el mètode setEnabled(bool) i setVisible(bool)
- Qt's keyPressEvent ( #include <QKeyEvent> )
- QDialog. Senyals accepted() i rejected(). Mètodes de resposta accept() i reject(). Respostes a dlg.exec(): QDialog::Accepted i QDialog::Rejected.
- Seguim fent l'activitat A06.04 - Interfícies gràfiques
- Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
- Documentació sobre Qt/C++:
20231121 (1h)
- Explicació de l'activitat A06.04 - Interfícies gràfiques
- Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231120 (3h)
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231117 (1h + 1h)
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231114 (1h)
Exemple d'arxiu de projecte emprant CMake
- CMake
CMake: The Standard Build System
Getting started with CMake in Qt6
Vídeo CMake and Qt (Part 1) - CMake Introduction
Qt and CMake: The Past, the Present and the Future
Vídeo Migrating from QMake to CMake | #QtWS22
- Seguim fent l'activitat A12.01.1 - ginyMqtt amb QMake
- Activitat A12.01.2 - ginyMqtt amb CMake
20231013 (3h)
- Document actualitzat de la Instal·lació de QtMQtt a les Qt
- Activitat A06.05 i A07.08 (prova de QtMQtt a la placa IoT-02) publicada a A06 - POO en C++ i Qt i A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació. A06.05 i A07.08 són la mateixa pràctica (pengeu dos documents pdf idèntics amb els noms corresponents a les dues pràctiques a les carpetes A06 i A07 del Drive).
- A partir de simplecient amb usuari i contrasenya s'ha generat la classe mqttBasic.
- Activitat A12.01 - ginyMqtt
20231110 (1h + 1h)
Seguim fent els exercicis pendents del Recull de pràctiques de 2n de DAM._Curs_2023-2024
20231107 (1h)
Feu-li una ullada a simplecient amb usuari i contrasenya. Provem llur funcionament interactuant bidireccionalment amb la placa IoT-02
Seguim fent els exercicis pendents de l'activitat A06 - POO en C++ i Qt
20231106 (3h)
MicroWorkers Tasques en MicroPython
FreeRTOS Tasques en C a sistemes encastats. (Pàgina oficial de FreeRTOS)
Seguim fent els exercicis pendents del Recull de pràctiques de 2n de DAM._Curs_2023-2024
20231103 (1h + 1h)
Seguim fent els exercicis pendents del Recull de pràctiques de 2n de DAM._Curs_2023-2024
20231031 (1h)
Instal·lació de QtMQtt a les Qt
Seguim fent els exercicis pendents de l'activitat A06 - POO en C++ i Qt
20231030 (3h)
Seguim fent els exercicis pendents de l'activitat A07 - Introducció a la placa IoT-02, Wokwi i protocols de comunicació
MicroWorkers Tasques en MicroPython
FreeRTOS Tasques en C a sistemes encastats. (Pàgina oficial de FreeRTOS)
20231027 (1h + 1h)
1a hora: Seguim fent exercicis IoT
2a hora: Seguim fent exercicis Qt
20231024 (1h)
20231020 (2h)
Referència ràpida sobre MicroPython a l'ESP32
Pràctica A07.08 - Introducció al micropython
Exercicis de MicroPython (agafant com a referència codis en C al GitHub).
20231020 (2h)
Explicació de com encastar ginys i connectar-los mitjançant senyals (signals) i osques (slots) en C++/Qt.
Pràctica A06.01 - Ginys encastats
20231017 (1h)
Explicació de com encastar ginys i connectar-los mitjançant senyals (signals) i osques (slots) en C++/Qt.
Pràctica A06.01 - Ginys encastats
20231016 (3h)
Nodes de text, botó i variables de flux. Canvi de color d'un punt (representació d'un led)
El node botó tramet un payload personalitzat quan es prem.
En el Value format del node de text:
<font color={{msg.color}} ><i class="fa fa-circle" style="font-size:24px;"></i></font>
Funció FF3399:
msg.color = "#FF3399" return msg;
Funció {R,G,B} -> {0,0,0}:
flow.set("R","00"); flow.set("G","00"); flow.set("B","00"); flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B")); msg.color = flow.get("RGB"); return msg;
Funció R -> FF:
flow.set("R","FF"); flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B")); msg.color = flow.get("RGB"); return msg;
Funció R -> 00:
flow.set("R","00"); flow.set("RGB","#"+flow.get("R")+flow.get("G")+flow.get("B")); msg.color = flow.get("RGB"); return msg;
Flux ledMulticolor.nodered.json
Pràctica A07.02 - Punt multicolor al NodeRED i variables de flux
Pràctica A07.03 - Visualització amb un giny rellotge del nivell de llum
Pràctica A07.04 - Ús d'MQTT (no MQTTS) (broker: formacio.things.cat, usuari: ecat, contrasenya: clotClot) Codi per a la placa IoT-02 emprant MQTT
Pràctica A07.05 - Instal·lació del servei mosquitto
Pràctica A07.06 - Ús del servei mosquitto
20231010 (1h)
20231009 (3h)
Pràctica A07.01 - Introducció al control de la placa Iot-02 mitjançant NodeRed
Configuració de l'MQTT-Dash (mqtt-dash-iot-smart-home.apk)
20231006 (1h + 1h)
20231003 (1h)
- Giny botó --> qDebug()
- Giny lliscant + visualitzador LCD
- Cursors
- Matrioxca
- Interfície gràfica que incrementa i decrementa
20231002 (3h)
20230929 (1h + 1h)
20230926 (1h)
20230922 (1h + 1h)
20230919 (1h)
- Reviseu si teniu la vostra carpeta compartida enllaçada a: Carpetes compartides de 2n de DAM. Curs_2023-2024
- Porteu un cable o alimentador amb connector microUSB de tipus B. Haureu de dur-lo sempre que es facin pràctiques amb la placa IoT-02.
- Dubtes del dia anterior
- Repartiment de la placa IoT-02. El número de placa queda registrat a les carpetes compartides
20230918 (3h)
Recull del dia 20230918 usuari: dam | contrasenya: dam2324
Distribució de M07UF1 i M13 al curs 2023-2024
Distribució de M07UF1 i M13 al curs 2023-2024 de 2n de DAM
Qt
El Qt Creator serà l'IDE que farem servir per a desenvolupar el disseny d'aplicacions gràfiques d'usuari:
Aneu a la pàgina Qt for Open Source Development i cerqueu Download the Qt Online Installer. Baixeu-vos-ho i instal·leu-ho (us demana registrar-vos per a poder-ho instal·lar).
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:
sudo apt install libx11-xcb-dev libglu1-mesa-dev libxcb-xinerama0
IoT
- NodeRED
Instal·lació de Node.js Guia d'instal·lació de node i npm
Supported Node versions on NodeRed
Verificació:
node --version npm --version
Instal·lació i funcionament del NodeRed autònom
ecat@iot-ecat:~$ mkdir bin ecat@iot-ecat:~$ cd bin ecat@iot-ecat:~/bin$ sudo apt install unzip ecat@iot-ecat:~/bin$ mkdir nodered-ui ecat@iot-ecat:~/bin$ cd nodered-ui ecat@iot-ecat:~/bin/nodered-ui$ wget https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip ecat@iot-ecat:~/bin/nodered-ui$ unzip node_red_ui.zip ecat@iot-ecat:~/bin/nodered-ui$ node node_modules/node-red/red.js --userDir node_modules/node-red/data --settings node_modules/node-red/settings.js -v --port 2222 --title elmeuTitol --safe flows_meuTitol.json
Si hi ha problemes de confiança amb el certificat al descarrega l'arxiu .zip, hi podeu afegir l'opció --no-check-certificate:
wget --no-check-certificate https://www.binefa.cat/IoT/nodeRed/node_red_ui.zip
Repositori de codis fet a classe durant el curs
Codis fets a les classes de 2n de DAM usuari: dam | contrasenya: dam2324
Documentació
Drive curs 2023-2024 (Alèxia, SAC). Eina d'avaluació GP1
Distribució de M07UF1 i M13 al curs 2022-2023 de 2n de DAM
Recull de pràctiques de 2n de DAM. Curs 2022-2023
Qt/QML
Paquets que manquen per a fer funcionar les Qt a l'Ubuntu:
sudo apt install libx11-xcb-dev libglu1-mesa-dev libxcb-xinerama0
Activació de l'editor QML al QtCreator 6
Qt5 de Jan Bodnar
Qt5 Cadaques! A Book about Qt5
Qt Quick tutorial de Jan Bodnar
PyQt5 de Jan Bodnar
Instal·lació de QtMQtt a les Qt
Qt for Android
Getting Started with Qt for Android
Getting Started with Qt6.5 for Android
Qt for WebAssembly
json
How To Manipulate JSON With C++ and Qt
QProcess
Qt5 tutorial FFmpeg converter using QProcess - 2020
CMake
Cal fer la instal·lació d'aquests paquets a Debian 11:
sudo apt-get install libqt5svg5-dev qtscript5-dev sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev sudo apt purge ibus
IoT
TCP/UDP Capa de transport d'Ethernet
Afegint la targeta ESP8266 a l'IDE d'Arduino (NodeMCU1.0)
Micropython and the Internet of Things
SCADA fent servir Python QML i Arduino
Placa IoT-02
Per a la programació amb l'IDE d'Arduino: https://dl.espressif.com/dl/package_esp32_index.json
LoRaWAN
Consola de The Things Stack (Community Edition) de The Things Network
Presentació LoRaWAN (esborrany v0.4)
Recull introductori per a treballar amb LoRa ( usuari: dam / contrasenya: dam2122)
Recull de pràctiques de 2n de DAM. Curs 2021-2022
Transmissió d'un número real de tipus IEEE-754 (4 bytes) i llur recuperació a NodeRED