Ga naar inhoud


Aanbevolen berichten

Geplaatst:

Even geprobeerd iets uit te werken

#!/bin/sh

#variabelen in gebruik
tempfile=p1_tmp.txt
logfile=p1.txt

#start uitlezen en stuur naar de achtergrond; log naar tijdelijk bestand
(cu -l /dev/P1/meter -s 9600 --parity=none >> $tempfile)&
#variable aanmaken om process ID in te stoppen
vPiD=$$

#maak een var 'counter' en zet deze op 0
ctr=0

#lees de temp-log uit
while read line 
do
	#Indien de teller < 16 zullen we de lijn toevoegen aan de grote logfile
	if [ $ctr < 16 ]
	then
		#verhoog ctr met 1
		ctr=+1
		#schrijf lijn naar grote log
		echo $line >> $logfile
		
		#Na het lezen van de laatste lijn, willen we de tijd nog wegschrijven
		if [ $ctr = 15]
			then
			##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> p1.txt
		fi
		
	elif
		#in geval we meer dan 15 lijnen uitgelezen hebben, willen we cu stoppen
		#eerst het achtergrond proces terug naar de voorgrond brengen
		fg $vPiD
		#dan afsluiten door de input te sturen met xdotool
		xdotool ~.
	fi
	
done < $tempfile


#sluit script af
exit 0

Met behulp van google achter die xdotool gekomen; deze kan het uitlezen stoppen door de keysequence door te sturen.

 

Indien je wil testen, even de bestandsnamen van tempfile en logfile aanpassen zodat je geen echte data gaat overschrijven.

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...


  • Reacties 88
  • Aangemaakt
  • Laatste reactie

Beste reacties in dit onderwerp

Beste reacties in dit onderwerp

Geplaatst:

in bovenstaande zou

##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> p1.txt

vervangen moeten worden door

##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> $logfile

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Geplaatst:

Ik ben de hele dag (ondanks het mooie weer) aan het stoeien

geweest met de voorzetten en strandde iedere keer op andere

problemen tot honderden overruns. Dus ik ben nog niet aan

alles toegekomen omdat ik heel duidelijk wil analyseren en

isoleren wat iedere keer het probleem is. Reden tot matige

reacties, heb geduld met mij :).

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Geplaatst: (aangepast)

 

in bovenstaande zou

##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> p1.txt

vervangen moeten worden door

##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> $logfile

Ik heb jouw wijziging doorgevoerd en nog ergens een spatie toegevoegd sowieso al

om de opdrachten die kelur te geven die ze moeten krijgen in Kate.

 

Maar het strandt bij regel 37 en wel;

pi@raspberrypi ~$ ./bas.sh
./bas.sh: 37: ./bas.sh: Syntax error: "fi"unexpected (expecting "then")
pi@raspberrypi ~$ cu: End of file on terminal
cu: child: Got signal 9

Dan blijft het hangen en doe ik maar een ctr C.

 

Het uiteindelijke script (jouw variabelen doen geen pijn, zit nog in een pre-fase);

#!/bin/sh

#variabelen in gebruik
tempfile=p1_tmp.txt
logfile=p1.txt

#start uitlezen en stuur naar de achtergrond; log naar tijdelijk bestand
(cu -l /dev/P1meter -s 9600 --parity=none >> $tempfile)&
#variable aanmaken om process ID in te stoppen
vPiD=$$

#maak een var 'counter' en zet deze op 0
ctr=0

#lees de temp-log uit
while read line 
do
	#Indien de teller < 16 zullen we de lijn toevoegen aan de grote logfile
	if [ $ctr < 16 ]
	then
		#verhoog ctr met 1
		ctr=+1
		#schrijf lijn naar grote log
		echo $line >> $logfile
		#Na het lezen van de laatste lijn, willen we de tijd nog wegschrijven
		if [ $ctr = 15 ]
		then
			##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> $logfile
		fi
	elif
		#in geval we meer dan 15 lijnen uitgelezen hebben, willen we cu stoppen
		#eerst het achtergrond proces terug naar de voorgrond brengen
		fg $vPiD
		#dan afsluiten door de input te sturen met xdotool
		xdotool ~.
	fi
	
done < $tempfile


#sluit script af
exit 0
aangepast door Con

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Geplaatst: (aangepast)

 

 

 

Maar het strandt bij regel 37 en wel;

pi@raspberrypi ~$ ./bas.sh
./bas.sh: 37: ./bas.sh: Syntax error: "fi"unexpected (expecting "then")
pi@raspberrypi ~$ cu: End of file on terminal
cu: child: Got signal 9

 

Het strandt omdat na de elif nog een then had moeten staan :crazy:

#!/bin/sh

#variabelen in gebruik
tempfile=p1_tmp.txt
logfile=p1.txt

#start uitlezen en stuur naar de achtergrond; log naar tijdelijk bestand
(cu -l /dev/P1meter -s 9600 --parity=none >> $tempfile)&
#variable aanmaken om process ID in te stoppen
vPiD=$$

#maak een var 'counter' en zet deze op 0
ctr=0

#lees de temp-log uit
while read line 
do
	#Indien de teller < 16 zullen we de lijn toevoegen aan de grote logfile
	if [ $ctr < 16 ]
	then
		#verhoog ctr met 1
		ctr=+1
		#schrijf lijn naar grote log
		echo $line >> $logfile
		#Na het lezen van de laatste lijn, willen we de tijd nog wegschrijven
		if [ $ctr = 15 ]
		then
			##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> $logfile
		fi
	elif
		then
		#in geval we meer dan 15 lijnen uitgelezen hebben, willen we cu stoppen
		#eerst het achtergrond proces terug naar de voorgrond brengen
		fg $vPiD
		#dan afsluiten door de input te sturen met xdotool
		xdotool key ~.
	fi
	
done < $tempfile


#sluit script af
exit 0

Boodschap van cu zal ik even moeten nakijken met google...

 

**edit**

lijn van xdotool is ook nog aangepast. Blijkbaar moest er 'key' bij vermeld staan, had ik over gekeken

aangepast door De_Perre

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

  • Moderator
Geplaatst:

hoort xdotool niet bij xwindows? Con gebruikt een raspberry, lijkt me sterk dat die xdotool er is bij hem.

 

Even gekeken, kan gewoon geinstalleerd worden met apt-get install xdotool, en dan worden er drie libs meegeinstalleerd, en x heb je gelukig niet nodig. Je moet hem nog wel installeren Con.

VU+ Duo4kSe  met VTi    VU+ duo2 met VTi 

Triax 78, astra 1,2,3, HB

Geplaatst:

Verontschuldig je niet. Ik kende nog uit een ver verleden

(35 jaar terug) if then... else endif... weer een andere

omgeving waar inmiddels zoveel varianten op zijn gemaakt

dat ik zelfs dat spoor helemaal kwijt ben. Zoook met python

If en dan zonder endif of fi, soms wordt ik er een beetje

serveus (nenuwachtig) van :). Al die talen...

Maar goed ik ga het zo proberen want... ik vind het echt spannend!!

Spannend? Ja, nu met een heel andere invalshoek de meter

uitlezen. Iedereen in de "metertheorie" is blijven hangen

in de vele voorbeelden. Ik wil nu een beetje (dwars)

helemaal rechtsaf...

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Geplaatst:

hoort xdotool niet bij xwindows? Con gebruikt een raspberry, lijkt me sterk dat die xdotool er is bij hem.

 

Even gekeken, kan gewoon geinstalleerd worden met apt-get install xdotool, en dan worden er drie libs meegeinstalleerd, en x heb je gelukig niet nodig. Je moet hem nog wel installeren Con.

Oops, zie het nu net. ff onderzoeken.

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Geplaatst: (aangepast)

Ja, De-perre, die then vond het script lekker.

 

Maar wat wiz aangaf, het script begon te

zeuren over xdotool, ff installeren.

 

Wordt vervolgd.

 

Hier het vervolg;

./bas.sh
./bas.sh: 11: fg: No such job: 12831
cu: End of file on terminal
Error: Can't open display: (null)
Failed creating new xdo instance
pi@raspberrypi ~ $ cu: child: Got signal 9

Met het aangepaste script;

while read line 
do
	#Indien de teller < 16 zullen we de lijn toevoegen aan de grote logfile
	if [ $ctr < 16 ]
	then
		#verhoog ctr met 1
		ctr=+1
		#schrijf lijn naar grote log
		echo $line >> $logfile
		#Na het lezen van de laatste lijn, willen we de tijd nog wegschrijven
		if [ $ctr = 15 ]
		then
			##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> $logfile
		fi
	elif
		then
		#in geval we meer dan 15 lijnen uitgelezen hebben, willen we cu stoppen
		#eerst het achtergrond proces terug naar de voorgrond brengen
		fg $vPiD
		#dan afsluiten door de input te sturen met xdotool
		xdotool ~.
	fi
	
done < $tempfile
aangepast door Con

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Geplaatst: (aangepast)

xdotools was de enige methode die ik vond die een emulatie kan maken van het indrukken van toetsen. (dank je google :) )

Ik was eerst aan het denken om met 'eval echo .......' te werken, maar dat ging volgens mij niet lukken omdat de '~' in de shell een andere functie/waarde heeft.

 

Tja, heb niet zelf een pi en slimme meter; probeer me alleen maar wat nuttig bezig te houden met wat scripting zodat vrouwlief ook wat tv kan kijken.

 

 

Ik merk trouwens net dat je de aangepaste lijn van xdotools niet mee had; het moet 'xdotools key ~.' zijn => er moet dus 'key' bij vermeld worden. Vandaar de meldingen "Error: Can't open display: (null)" en "Failed creating new xdo instance "

 

Dan de andere fout; ben ik nog niet volledig uit.

./bas.sh
./bas.sh: 11: fg: No such job: 12831

Even verder gezocht naar de man pages en doorgenomen; en eigenlijk had ik met bv '%1' moeten werken... Maar dan had ik eerst met het 'jobs' commando de correcte id moeten achterhalen.

Dus bv 'jobs | grep -i cu' om de jobid (niet de procesID) van cu te achterhalen. Maar dan was het nog niet afgelopen, want dan heb je een volledige lijn, en de jobid die tussen [] staat. Lijkt niet te lukken.

 

Of enkel 'fg' gebruiken; zonder de '$vPiD' maar dit lijkt me ook wel enig risico in te houden omdat dit de meest recente job terug naar voor brengt en ik weet niet wat er mogelijk allemaal in de achtergrond loopt... Mocht er toevallig tijdens uitvoeren van het script nog iets anders naar de achtergrond gestuurd zijn, zou het wel kunnen dat de foutieve commando naar de voorgrond komt.

Mocht je tijd/zin hebben kan je steeds even testen... anders plan B hieronder.

 

Het zal dus iets minder proper worden.

In plaats van de job naar het voorplan te brengen; kan je in de elif then volgende zetten:

elif
		then
		#sluit achtergrond proces op basis van proces ID
		kill -9 $vPiD


	fi

Een beetje drastisch, maar ik had foutief begrepen dat ik fg in combinatie met een processID kon gebruiken...

aangepast door De_Perre

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Geplaatst:

Het gaat vrij snel fout met het volgende deelscript;

#!/bin/sh

#variabelen in gebruik
tempfile=p1_tmp.txt
logfile=p1.txt

#start uitlezen en stuur naar de achtergrond; log naar tijdelijk bestand
(cu -l /dev/P1meter -s 9600 --parity=none >> $tempfile)&
#variable aanmaken om process ID in te stoppen
jobs -l
vPiD=$$
fg $vPiD

xdotool ~.
exit 0

Ik ben dit aan het uitspitten, waar xdotool voor staat is mij inmiddels duidelijk en dat werkt ook juist.

 

Ik heb er ff jobs -l tussen gezet en dan zie je (volgens mij) iets wonderlijks waarom het fout gaat.

De melding is;

pi@raspberrypi ~ $ ./bas.sh

[1] + 31849 Running
./bas.sh: 12: fg: No such job: 31848
Error: Can't open display: (null)
Failed creating new xdo instance
cu: End of file on terminal
pi@raspberrypi ~ $ cu: child: Got signal 9

en dan breek ik na ongeveer 1 minuut af met ctr C

Dus met job -l wordt jobnr 31849 genoemd terwijl fg naar job  31848 refereerd?

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Geplaatst:

Alleen fg werkt niet, foutmelding "fg: job (null) not created under job control"

 

Ik vroeg me trouwens af wanneer de inhoud van de $tempfile in de $logfile wordt gezet.

Volgens mij wordt nu de meteruitlezing niet naar p1.txt geschreven.

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Geplaatst: (aangepast)

Indien je een job naar de achtergrond stuurt, zal je de process ID direct moeten opvragen.

In jouw aangepaste script stuur je de cu-job naar achtergrond; dan start je 'jobs -l' op => vPiD krijgt de procesID van 'jobs -l' en niet van 'cu ........'.

 

 

In jouw laatste versie zal er ook geen data meer naar je finale log gestuurd worden. Ik vermoed dat je iets te kwistig met de 'Delete' bent omgesprongen :D

#!/bin/sh

#variabelen in gebruik
tempfile=p1_tmp.txt
logfile=p1.txt

#start uitlezen en stuur naar de achtergrond; log naar tijdelijk bestand
(cu -l /dev/P1meter -s 9600 --parity=none >> $tempfile)&
#variable aanmaken om process ID in te stoppen
#wordt even niet gebruikt dus mee in commentaar
#vPiD=$$

#maak een var 'counter' en zet deze op 0
ctr=0

#lees de temp-log uit
while read line 
do
	#Indien de teller < 16 zullen we de lijn toevoegen aan de grote logfile
	if [ $ctr < 16 ]
	then
		#verhoog ctr met 1
		ctr=+1
		#schrijf lijn naar grote log
		echo $line >> $logfile
		#Na het lezen van de laatste lijn, willen we de tijd nog wegschrijven
		if [ $ctr = 15 ]
		then
			##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> $logfile
		fi
	elif
		then
		#in geval we meer dan 15 lijnen uitgelezen hebben, willen we cu stoppen
		#eerst het achtergrond proces terug naar de voorgrond brengen
		fg 
		#dan afsluiten door de input te sturen met xdotool
		xdotool key ~.
	fi
	
done < $tempfile


#sluit script af
exit 0

Met schaven en feedback raken we er wel uit.

 

*edit**

Bovenstaande is nog niet finaal; we voegen immers steeds data toe aan een bestaande log; eigenlijk zou er eerst nog een check moeten zijn dat indien de tmp reeds bestaat deze eerst verwijderd wordt.

Ander ga je steeds dezelfde data toevoegen aan je finale log!

#!/bin/sh

#variabelen in gebruik
tempfile=p1_tmp.txt
logfile=p1.txt

#check of er reeds een temp-log bestaat; indien er al één was met size > 0 delete hem dan!
if [ -s $tempfile ]
	then 
	rm -f $tempfile
fi

#start uitlezen en stuur naar de achtergrond; log naar tijdelijk bestand
(cu -l /dev/P1meter -s 9600 --parity=none >> $tempfile)&
#variable aanmaken om process ID in te stoppen
#wordt even niet gebruikt dus mee in commentaar
#vPiD=$$

#maak een var 'counter' en zet deze op 0
ctr=0

#lees de temp-log uit
while read line 
do
	#Indien de teller < 16 zullen we de lijn toevoegen aan de grote logfile
	if [ $ctr < 16 ]
	then
		#verhoog ctr met 1
		ctr=+1
		#schrijf lijn naar grote log
		echo $line >> $logfile
		#Na het lezen van de laatste lijn, willen we de tijd nog wegschrijven
		if [ $ctr = 15 ]
		then
			##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> $logfile
		fi
	elif
		then
		#in geval we meer dan 15 lijnen uitgelezen hebben, willen we cu stoppen
		#eerst het achtergrond proces terug naar de voorgrond brengen
		fg 
		#dan afsluiten door de input te sturen met xdotool
		xdotool key ~.
	fi
	
done < $tempfile


#sluit script af
exit 0
aangepast door De_Perre

[Vu+ Solo4K] - [VTi 13.x]

[TVV Basic+] - [CD TopHD]
Ik vind het nieuwe overzicht met ongelezen topics in een tijdslijn maar niks...

Geplaatst: (aangepast)

Bij het eerste voorbeeld heb ik een "then" misser

maar kan um ff niet vinden.

./bassie3.sh: 33: ....  "then" unexpected.

En dat is de "then na de "elif".

 

Het tweede voorbeeld kan ik straks pas doen.

aangepast door Con

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Geplaatst:

Ook bij de tweede voorzet gaat het niet goed;

			##voeg blanco regel (\n) tijdstip aan log
			echo "\n Tijdstip: " $(date +%T) >> $logfile
		fi
38	elif
39	then
40		#in geval we meer dan 15 lijnen uitgelezen hebben, willen we cu stoppen
		#eerst het achtergrond proces terug naar de voorgrond brengen
		fg
		#dan afsluiten door de input te sturen met xdotool
		xdotool key ~.
	fi

pi@raspberrypi ~ $ ./bassie4.sh
./bassie4.sh: 39: ./bassie4.sh: Syntax error: "then" unexpected
pi@raspberrypi ~ $ cu: End of file on terminal
cu: child: Got signal 9
^C
pi@raspberrypi ~ $

Groet, Con. Gloeiende, gloeiende, een beetje humor moet kunnen, anders ga je maar ergens anders heen..
Sinds november 2023 glasvezel via Solcon (voor het laatst).

Internet/PC: modem/router Fritzbox en TP-Link accesspoint, switch (8), switch (4)

PC: Intel Nuc i7 met W11. Laptop Thinkpad met W11.

Asus Gigabyte Home Assistant, 20 Shelly's en 2 ESP-tjes en Zigbee.

Maak een account aan of log in om te reageren

Je moet een lid zijn om een reactie te kunnen achterlaten

Account aanmaken

Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!

Registreer een nieuwe account

Inloggen

Heb je reeds een account? Log hier in.

Nu inloggen
×
×
  • Nieuwe aanmaken...