Diferència entre revisions de la pàgina «DAM 2023-2024»
m (→Documentació) |
|||
(Hi ha 175 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. |
− | [https://recull.binefa.cat/files/doc/ | + | == 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/strings/ Exemples emprant QString] | ||
* [https://zetcode.com/gui/qt5/containers/ Exemples emprant QStringList] | * [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 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]] | * 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) == | == 20231121 (1h) == | ||
Línia 280: | 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 287: | Línia 789: | ||
[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/spreadsheets/d/1jxpQM8EaMrWeWnBrbSBBbYi8lwblSla3/edit#gid=1066652034 Seguiment de tutories] | <!-- [https://docs.google.com/spreadsheets/d/1jxpQM8EaMrWeWnBrbSBBbYi8lwblSla3/edit#gid=1066652034 Seguiment de tutories] | ||
Línia 312: | 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[modifica]
Recull de pràctiques de 2n de DAM. Curs 2023-2024
Recull de codis fets a classe. Curs 2023-2024
Algunes classes[modifica]
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[modifica]
- 1a hora: GP3
- 2a i 3a hora: Examen final de 2/3 parts del M07UF1
20240510 (2h)[modifica]
Seguim amb el GP3.
20240506 (1h + 2h)[modifica]
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)[modifica]
Seguim amb el GP3.
20240430 (1h)[modifica]
Seguim amb el GP3.
20240429 (1h + 2h)[modifica]
- 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)[modifica]
Seguim amb el GP3.
20240423 (1h)[modifica]
Seguim amb el GP3.
20240422 (1h + 2h)[modifica]
- 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)[modifica]
Seguim amb el GP3.
20240416 (1h)[modifica]
Seguim amb el GP3.
20240415 (1h + 2h)[modifica]
- 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)[modifica]
Seguim amb el GP3.
20240409 (1h)[modifica]
Seguim amb el GP3.
20240408 (1h + 2h)[modifica]
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)[modifica]
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)[modifica]
Seguim amb el GP3.
20240318 (1h + 2h)[modifica]
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)[modifica]
GP3
20240311 (1h + 2h)[modifica]
1h de GP3 i 2h de M07UF1
Acabem les pràctiques M00 al recull de pràctiques
20240308 (1h)[modifica]
Fem les pràctiques M00 al recull de pràctiques
20240304 (1h + 2h) GP3[modifica]
Comença GP3
Comença el tercer trimestre del M07UF1
Afegides les pràctiques M00 al recull de pràctiques
20240301 (2h)[modifica]
Seguim fent les pràctiques del recull de pràctiques
20240226 (3h) A11 i prova trimestral M07UF1[modifica]
Enunciat de la metacognició de síntesi del M07UF1 i part puntuable del projecte global
20240223 (2h)[modifica]
Seguim fent les pràctiques del recull de pràctiques
20240220 (1h)[modifica]
Seguim fent les pràctiques del recull de pràctiques
20240219 (3h) A11 (Prova final part IoT -GP1-)[modifica]
Enunciat de la metacognició de síntesi en pdf
Enunciat de la metacognició de síntesi en format editable
20240216 (2h)[modifica]
Seguim fent les pràctiques del recull de pràctiques
20240213 (1h)[modifica]
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)[modifica]
- 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)[modifica]
Seguim fent les pràctiques del recull de pràctiques
20240205 (3h)[modifica]
Afegits A10.3, A17.07 i A17.08 al recull de pràctiques
Desenvolupament d'una API en NodeRed. Pasarel·la HTTP a MQTT[modifica]
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[modifica]
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[modifica]
# 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)[modifica]
union02.c al recull de codis.
Seguim fent les pràctiques pendents al recull de pràctiques
20240130 (1h)[modifica]
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)[modifica]
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)[modifica]
Seguim desenvolupant les pràctiques pendents.
- ExerciciA14.7 - UserLand del recull de pràctiques
20240123 (1h)[modifica]
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)[modifica]
- 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)[modifica]
Ú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)[modifica]
Continuem desenvolupant la pràctica A13.00
20240115 (3h)[modifica]
Mastodon[modifica]
- 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)[modifica]
Continuem desenvolupant la pràctica A13.00 del recull de pràctiques
20240109 (1h)[modifica]
Continuem desenvolupant la pràctica A13.00 del recull de pràctiques
Deures pel 15 de gener[modifica]
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)[modifica]
Recull de codis comentats avui
Autenticació d'accés a NodeRED[modifica]
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[modifica]
- 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[modifica]
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)[modifica]
Continuem desenvolupant la pràctica A13.00
20231218 (3h)[modifica]
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)[modifica]
- 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)[modifica]
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[modifica]
Posada en marxa del PureQML[modifica]
- 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)[modifica]
Introducció al QML. Curs 2023-2024
20231204 (3h)[modifica]
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)[modifica]
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231128 (1h)[modifica]
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231127 (3h)[modifica]
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231124 (1h + 1h)[modifica]
- 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)[modifica]
- 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)[modifica]
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231117 (1h + 1h)[modifica]
Seguim fent les activitats pendents del recull de pràctiques de 2n de DAM._Curs_2023-2024
20231114 (1h)[modifica]
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)[modifica]
- 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)[modifica]
Seguim fent els exercicis pendents del Recull de pràctiques de 2n de DAM._Curs_2023-2024
20231107 (1h)[modifica]
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)[modifica]
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)[modifica]
Seguim fent els exercicis pendents del Recull de pràctiques de 2n de DAM._Curs_2023-2024
20231031 (1h)[modifica]
Instal·lació de QtMQtt a les Qt
Seguim fent els exercicis pendents de l'activitat A06 - POO en C++ i Qt
20231030 (3h)[modifica]
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)[modifica]
1a hora: Seguim fent exercicis IoT
2a hora: Seguim fent exercicis Qt
20231024 (1h)[modifica]
20231020 (2h)[modifica]
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)[modifica]
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)[modifica]
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)[modifica]
Nodes de text, botó i variables de flux. Canvi de color d'un punt (representació d'un led)[modifica]
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)[modifica]
20231009 (3h)[modifica]
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)[modifica]
20231003 (1h)[modifica]
- Giny botó --> qDebug()
- Giny lliscant + visualitzador LCD
- Cursors
- Matrioxca
- Interfície gràfica que incrementa i decrementa
20231002 (3h)[modifica]
20230929 (1h + 1h)[modifica]
20230926 (1h)[modifica]
20230922 (1h + 1h)[modifica]
20230919 (1h)[modifica]
- 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)[modifica]
Recull del dia 20230918 usuari: dam | contrasenya: dam2324
Distribució de M07UF1 i M13 al curs 2023-2024[modifica]
Distribució de M07UF1 i M13 al curs 2023-2024 de 2n de DAM
Qt[modifica]
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[modifica]
- 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[modifica]
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[modifica]
Codis fets a les classes de 2n de DAM usuari: dam | contrasenya: dam2324
Documentació[modifica]
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[modifica]
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[modifica]
Getting Started with Qt for Android
Getting Started with Qt6.5 for Android
Qt for WebAssembly[modifica]
json[modifica]
How To Manipulate JSON With C++ and Qt
QProcess[modifica]
Qt5 tutorial FFmpeg converter using QProcess - 2020
CMake[modifica]
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[modifica]
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[modifica]
Per a la programació amb l'IDE d'Arduino: https://dl.espressif.com/dl/package_esp32_index.json
LoRaWAN[modifica]
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