Mikael63 Postad Oktober 23, 2022 Dela Postad Oktober 23, 2022 (redigerade) Lite "taggad" av framgången i denna tråd tänkte jag kolla på nästan samma sak men då för/med min "rätta" dator, med Linux Mint. Här vill jag nu använda samma usb-relä som i den andra tråden. Det är här det reläet är ansluten normalt men styrs på annat sätt. Nu vill jag inte använda en extern tempgivare utan de sensorer som så att säga redan finns i datorn. Här tyckte jag det blev knepigare att söka då det finns trådar som beskriver hur man övervakar temperaturen och övervakar (intern)fläktvarvtal osv. Inte där man vill styra en extern fläkt. Då hamnar träffarna "tillbaks" till Raspberry Pi, som i den andra tråden. Python verkar vara väldigt kinkigt vad gäller 'indent' - det är inte bara för att få en snyggt uppställd kod, tydligen, utan ett måste för att koden ska kunna köras? BASH verkar då lite "enklare". Men sökträffarna är lika dåliga, som jag ser det. Jag har hittat ett skript som ska stänga av datorn vid för hög temperatur. Där har jag lyckats lägga in start av fläkten som åtgärd och det fungerar. Skriptet är ju tänkt att stänga av datorn och därmed också stänga skriptet. Jag vill att det ska snurra på hela tiden och jag vill kunna lägga in en till IF. Om jag lägger in en till IF bråkas det om att det är ett felaktigt slut på filen? Koden, som gör jobbet men bara en gång ser ut så här nu: #!/bin/bash while true; do val=$(sensors | awk '/temp1/ {print $2}') max="+36.0" if [[ "$val" > "$max" ]]; then ./usb1.sh fi sleep 2 clear sensors done exit 0 och det är på rad 6 jag startar reläet. Jag vill peta in if [[ "$val" < "$max" ]]; then ./usb0.sh jo jag är medveten om hysteresen men tänkte då ha en min="+35.0" Hur gör man? Redigerad Oktober 23, 2022 av Mikael63 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad November 2, 2022 Författare Dela Postad November 2, 2022 On 2022-10-23 at 14:48, Mikael63 sade: Hur gör man? Ja man ger tusan i att anropa ett annat skript och i stället påverkar reläet direkt... #!/bin/bash while true; do val=$(sensors | awk '/temp1/ {print $2}') max="39.0" if [[ "$val" > "$max" ]]; then usbrelay HW348_1=1 else usbrelay HW348_1=0 fi sleep 30 done exit 0 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Januari 27 Författare Dela Postad Januari 27 (redigerade) Hmm.. Vet inte om "det" skiljer sig åt nu med LMDE 6 mot tidigare "vanliga" Linux Mint, eller ej men oavsett: Idag ser koden annorlunda ut. (ja särskilt just nu när jag testar lite extra, värdena 34 & 31 är nu endast för att liksom bekräfta min fundering. #!/bin/bash while true; do val=$(sensors | awk '/temp1/ {print $2}') max="34.0" min="31.0" if [[ "$val" > "$max" ]]; then printf "$val" usbrelay HW348_1=1 elif [[ "$val" < "$min" ]]; then printf "$val" usbrelay HW348_1=0 fi sleep 5 done exit 0 På rad 3 återfinns temp1 och det stämmer med en av sensorerna enligt detta: Utdatat, nu när jag lagt till printf, ser ut så här: Det finns alltså två stycken som heter temp1 och det är i mitt fall den första/översta som skriptet använder sig av. (Har jag testat mig fram till) Jag skulle vilja använda den andra temp1 eller ex. Package id 0. Hur ska koden se ut då? Att bara använda texten Package id 0 fungerar inte. Det verkar som mellanslagen i namnet inte gillas. Tillägg: Kanske att man kan ange typ det högsta värdet av temp1 eller summan av dem? Redigerad Januari 27 av Mikael63 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Cecilia Postad Januari 27 Dela Postad Januari 27 Jag kan inte bash men har du prövat med " runt namnet? Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Januari 27 Författare Dela Postad Januari 27 Ja, både " och ' 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Januari 27 Författare Dela Postad Januari 27 On 2022-10-23 at 14:48, Mikael63 sade: Jag har hittat ett skript Jag borde givetvis ha haft en källhänvisning, framför allt som cred men då även att jag ev. skulle kunna hitta mer nytta där, för min egen skull. Inte säker men mycket talar för att det var här jag hittade det: https://askubuntu.com/questions/206214/bash-script-to-sleep-at-given-cpu-temperature-update-for-16-04 Dock fanns där inget som förklarade hur man skulle kunna byta ut temp1 till något annat. 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Januari 27 Författare Dela Postad Januari 27 Om man hade idas lära sig något hade jag kanske förstått hur det hänger ihop men nu är det som det är 🤪. Den här raden i koden ovan fungerar men det är då temp1 som övervakas och det verkar vara tempen på det trådlösa nätverkskortet: val=$(sensors | awk '/temp1/ {print $2}') om jag byter ut till val=$(sensors | awk '/Core 1/ {print $2}') fungerar det inte men om jag ändrar till val=$(sensors | awk '/Core 1/ {print $3}') fungerar det med temp på kärna 1 $0, $1 fungerar inte heller och jag har inte testat med $4 och uppåt. Om jag använder val=$(sensors | awk '/Package id 0/ {print $4}') fungerar det också. Där kan jag inte ha $0, $1, $2, $3 och har inte testat med $5 och uppåt. Vad dessa argument till print betyder/innebär vet jag alltså inte. Jag ser endast olika resultat från printf och det slutliga resultatet när reläet växlar. Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Lösning Cecilia Postad Januari 28 Lösning Dela Postad Januari 28 På sidan https://unix.stackexchange.com/questions/99535/print-command-instead-of-echo-in-linux står det att awk är ett eget programspråk så det som kommer efteråt på raden har egentligen inget med Bash att göra. Det är därför som "print" står inom klamrar. Utskrift med "print" i awk beskrivs på sidan https://www.gnu.org/software/gawk/manual/html_node/Print-Examples.html och $1 och uppåt står tydligen för fälten i en inläst "record". Så allt verkar bero på vad "sensors" ger för utvärde, hur det ser ut. Har du någon information om det? 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Mikael63 Postad Januari 28 Författare Dela Postad Januari 28 Tack! Om jag kör mitt skript med nuvarande $4 får jag värden som +36.0°C+37.0°C+37.0°C+36.0°C+36.0°C+36.0°C+38.0°C^C alltså på en rad med $3 får jag 0:HW348_1=0 0:HW348_1=0 Där verkar det vara 0: som jag får och det verkar vara från namnet, se nedan. HW348_1=0 är status på mitt relä med $2 får jag idHW348_1=1 idHW348_1=1 Där verkar det som id från namnet på sensorn skrivs ut. Det tolkas som mer än den maxtemp jag satt då reläet växlar. med $1 får jag PackageHW348_1=1 PackageHW348_1=1 helt utan $, alltså inte ens $0 får jag Package id 0: +32.0°C (high = +105.0°C, crit = +105.0°C)HW348_1=1 Nu verkar det ju helt logiskt ju! Om man inte anger något argument får man hela textsträngen (och den kan man ju vilja ha om man ex. ska skicka infon vidare men det kan bli svårt att göra beräknande villkor) Väljer man en siffra är det de olika textsträngarna som visas och om jag väljer att ange $5 får jag mycket riktigt (highHW348_1=1 (highHW348_1=1 Detta stämmer ju även om jag backar till när jag kollade på sensor temp1. Där användes $2 eftersom den första textsträngen är just temp1 och den andra är mitt eftersökta värde. Lite imponerande i sammanhanget är att textsträngen +36.0°C är beräkningsbart som värdet 36.0 1 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Recommended Posts
Delta i dialogen
Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.