Vaše projekty

Uživatelský avatar
Victor
Příspěvky: 13
Registrován: stř 22. led 2020 20:19:59
Dal poděkování: 2 poděkování
Dostal poděkování: 3 poděkování

Re: Vaše projekty

Příspěvek od Victor » stř 04. bře 2020 22:48:29

RPi4B jsem zamýšlel jako multimediální centrum + IPTV + sdílení disků v síti s provozem 24/7. Proto jsem si rovnou vybral sadu HTPC komplet. Jenže jak se ukázalo, pasivní chladič v kovové krabičce nestačí. Jen s nastartovaným KODI bez jakékoliv zátěže byla teplota 67°C a to máme zimní období. Sice to není kritická teplota, ale z dlouhodobého hlediska by procesoru moc neprospívala. Bylo mi trochu líto vyřezávat otvor do docela pěkné krabičky, ale druhou už se mi kupovat nechtělo. Pořídil jsem osvědčenou Noctuu, u které absolutně neslyším motorek, jen slabě ševelí proudící vzduch. A stálo to zato. Během přehrávání HD programů na IPTV teplota 37°C. Za mě paráda. 8-)

https://photos.app.goo.gl/RxtMsBBYq5vzXLXXA
https://photos.app.goo.gl/ACZNtFxmFSYyrn2G8
Raspberry Pi 4B - LibreELEC 9.2 - Kodi 18.5 Git:leia_pi4_18.5-Leia
Uživatelský avatar
PetrSmetana
Příspěvky: 145
Registrován: pon 22. črc 2019 9:06:45
Bydliště: za humny ČB
Dal poděkování: 19 poděkování
Dostal poděkování: 33 poděkování
Kontaktovat uživatele:

Re: Vaše projekty

Příspěvek od PetrSmetana » pát 06. bře 2020 11:58:59

Mně se aktuálně začíná rýsovat nový malý projektík https://photos.app.goo.gl/hTXC2dKv8khxbh3k8 :)
Modré z nebe na počkání, zázraky do dvou dnů.
BigSandy
Příspěvky: 79
Registrován: úte 13. srp 2019 8:07:32
Dal poděkování: 1 poděkování
Dostal poděkování: 7 poděkování

Re: Vaše projekty

Příspěvek od BigSandy » úte 24. bře 2020 10:19:44

PetrSmetana píše:
stř 07. srp 2019 20:11:40
A jedno malé webové klikátko, které běží na RPi a jde jím ledacos ovládat / z něj ledacos vyčíst
https://drive.google.com/file/d/1nOFTtu ... sCoQ6/view

Ten graf mně zaujal.
Mužeš dat nějake info?
Uživatelský avatar
PetrSmetana
Příspěvky: 145
Registrován: pon 22. črc 2019 9:06:45
Bydliště: za humny ČB
Dal poděkování: 19 poděkování
Dostal poděkování: 33 poděkování
Kontaktovat uživatele:

Re: Vaše projekty

Příspěvek od PetrSmetana » čtv 26. bře 2020 12:19:47

BigSandy píše:
úte 24. bře 2020 10:19:44
PetrSmetana píše:
stř 07. srp 2019 20:11:40
A jedno malé webové klikátko, které běží na RPi a jde jím ledacos ovládat / z něj ledacos vyčíst
https://drive.google.com/file/d/1nOFTtu ... sCoQ6/view

Ten graf mně zaujal.
Mužeš dat nějake info?
Vlatní tvorba ... ale co se týče kódu, tak to není nic čím bych se chlubil :) Tlačím to ven přes standardní gd knihovny.

Kód: Vybrat vše

<?php
//výstupem souboru bude obrázek
header('Content-Type: image/png');
//vypnutí error reportingu
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

//obrázek s osou
$pict = imagecreatefromjpeg("teplota.jpg");

//určení zroje dat - buď historická data, dle datumu, nebo soubor graf
if($_GET["date"]!=""){
$handle = fopen("/mnt/weather/".$_GET["date"], "r");
} else {
$handle = fopen("graf", "r");
}

//vynechání vykreslení první řádky viz níže
$i=false;
while (($line = fgets($handle)) !== false) {

// na každé řádce souboru jsou hodnoty oddělené mezerou - vysypeme je do pole
$data=explode(" ",$line);

//načtu si jednotlivé hodnoty do proměnných a zaokrouhlím je pro vykreslování
$x=round($data[0]);
$t_out=round($data[1]);
$h=round($data[2]);
$t_in=round($data[3]);
$tl=round($data[4]);
$lux=$data[8];

//první řádku nekreslím něšlo by - kreslit čáru když chybí počíteční body
if($i!=false){

//vyklesluji některé hodnoty potřebují posun y osy (-950 nebo dělím 200) - jinak to řídím výškou obrázku (101) - $x je čas ze souboru v minutách od počátku dne
$black = imagecolorallocate($pict, 0, 0, 0);
imageline($pict ,$x_old,101-($tl_old-950),$x,101-($tl-950) , $black);
$olive = imagecolorallocate($pict, 85, 97, 19);
imageline($pict ,$x_old,101-$t_in_old,$x,101-$t_in , $olive);
$red = imagecolorallocate($pict, 255, 0, 0);
imageline($pict ,$x_old,101-$t_out_old,$x,101-$t_out , $red);
$blue = imagecolorallocate($pict, 0, 0, 255);
imageline($pict ,$x_old,101-$h_old,$x,101-$h , $blue);
$violet = imagecolorallocate($pict,255,0,255);
imageline($pict ,$x_old,100-round($lux_old/200),$x,100-round($lux/200) , $violet);
}
//nastavím na že už je možno v dalším cyklu vykreslovat
$i=true;

//uložím si původní hodnoty pro bod A vykreslované úsečky
$x_old=$x;
$t_out_old=$t_out;
$h_old=$h;
$t_in_old=$t_in;
$tl_old=$tl;
$lux_old=$lux;

}

//zavřu čtení ze souboru
fclose($handle);

//vložím do grafu ještě popisky naposledy naměřených hodnot s příslušnými barvami
$green = imagecolorallocate($pict, 0, 255, 0);
imageline($pict, $x,0,$x,201,$green);
$green = imagecolorallocate($pict, 37, 127, 15);
imagestring($pict,5, 1230, 5, "datum: ".date("Y-m-d H:i"), $green);
$red = imagecolorallocate($pict, 255, 0, 0);
imagestring($pict,5, 1230, 20, "teplota OUT: ".$data[1]."°C", $red);
$olive = imagecolorallocate($pict, 85, 97, 19);
imagestring($pict,5, 1230, 35, "teplota IN: ".$data[3]."°C", $olive);
$blue = imagecolorallocate($pict, 0, 0, 255);
imagestring($pict,5, 1230, 50, "humidita: ".$data[2]."%", $blue);
$black = imagecolorallocate($pict, 0, 0, 0);
imagestring($pict,5, 1230, 65, "tlak: ".$data[4]."hPa", $black);
imagestring($pict,5, 1230, 80, "osvìtlení: ".round($lux)." lx", $violet);

//pošlu obrázek na výstup
imagepng($pict);
//vyčistím paměť
imagedestroy($pict);
?>
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
PetrSmetana
Příspěvky: 145
Registrován: pon 22. črc 2019 9:06:45
Bydliště: za humny ČB
Dal poděkování: 19 poděkování
Dostal poděkování: 33 poděkování
Kontaktovat uživatele:

Re: Vaše projekty

Příspěvek od PetrSmetana » pon 27. dub 2020 23:27:41

Máme doma dva předškoláky a v době karanény nám začali na můj vkus přespříliš sedět před televizí ... no někdo ty děti vychovávat musí ... :) Domluvili jsme se tedy na tom, že mají denně maximálně dvě hodiny. Pro tento účel jsem se rozhodl rozběhnout automatizaci na RPi za televizí, na které nám běží kodi.

Anotace:
Děti dostanou na den dva žetony (ze staré rulety). Žetony můžou použít, nebo si je šetřit. To záleží na nich. Každý žeton po vhození do kasičky spustí televizi na 60 minut. Na TV u nás běží skoro výhradně déčko, pokud chtějí děti pustit něco jiného, tak nás o to zatím požádají. Děti nemají k dispozici ovladač. Po 60 minutách, případně po násobcích 60 minut (záleží na počtu vhozených žetonů) se televize vypne.

Časová náročnost projektu: 30 minut

materiál:
kasička
kobercová lepenka
čidlo - https://www.aliexpress.com/item/3232196 ... hweb201603_
kabel (3 žíly s dutinkami na koncích)

nástroje:
frézka
krimplovací kleště na dutinky / páječka

Zapojení je jednoduché ... čidlo má piny VCC, GND a OUT, které jsem propojil na RPi na 5V,GND a port 14

V kodi jsem si nejprve doinstaloval doplněk Raspberry Pi Tools

Následně jsem si vytvořil soubor /storage/kasicka.py

Kód: Vybrat vše

import sys
import os
sys.path.append('/storage/.kodi/addons/virtual.rpi-tools/lib')


from gpiozero import Button
from time import sleep

button = Button(14)
inkrement=36000 #(cas v sekundach * 10 za jedno vhozeni zetonu)
i=0
count=0
while True:
#vhozeni mince do kasicky
    if button.is_pressed:
	i=i+inkrement
	if count==0:
	    os.system("kodi-send --action='CECActivateSource'") #zapnuti TV
	    sleep(3)
            os.system("kodi-send --action='CECActivateSource'")
	    sleep(3)
            os.system("kodi-send --action='CECActivateSource'")
        alert = "kodi-send -a \"Notification(Bau Bau!,TV pobezi {} minut, 10000, https://vsehomir.cz/olin.png)\"".format(int(i/600))
        os.system(alert)
	sleep(1.5) #aby se nam nepricetl vice nez jeden inkrement pri vhozeni
	count=1

#odpocinek cyklu
    sleep(0.1)

#odecitani casu
    if count==1:
	i=i-1

#rutina vypnuti
    if i==0 and count==1:
	count=0
	os.system("kodi-send --action='CECActivateSource'") #prepneme na HDMI kodi (napr. pri sledovani chromecastu / hrani na herni konzoli)
	sleep(3)
        os.system("kodi-send --action='CECActivateSource'")
        sleep(3) 
        os.system("kodi-send --action='CECStandby'") #vypneme
        sleep(3)                                           
        os.system("kodi-send --action='CECStandby'")
        sleep(3)                                           
        os.system("kodi-send --action='CECStandby'")
        sleep(3)
	os.system("python /storage/tvoff.py") #u pouzivani specifickych fci televize samsung (dlna/youtube) neslo jinak nez napojit se na port tv a vypnout ji natvrdo

#oznameni pred vypnutim
    if i==100:
        os.system("kodi-send -a \"Notification(Bau Bau!,Tak a je konec, 10000, https://vsehomir.cz/olin.png)\"")

#10 minutove oznameni
    if i%6000==0 and count==1: 
        alert = "kodi-send -a \"Notification(Bau Bau!,Do vypnuti zbyva {} minut, 10000, https://vsehomir.cz/olin.png)\"".format(int(i/600))
        os.system(alert)    
Vytvoření služby:

do souboru /storage/.config/system.d/kasicka.service

Kód: Vybrat vše

[Unit]
Description=kasicka

[Service]
Environment="LANG=cs_CZ.UTF-8"
WorkingDirectory=/storage/
ExecStart=/bin/python /storage/kasicka.py
RestartSec=3s
KillMode=process
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

Povolení služby po spuštění:
systemctl enable kasicka.service
systemctl start kasicka.service

Skript pro vypnutí TV samsung mimo HDMI - credits to Asif Iqbal! :) tento skript chce spustit nejdříve manuálně přes python tvoff.py ... a povolit tento ovladač na TV. Následně už bude fungovat. Dají se tím zřejmě volat všechny fce ovladače. Využívám zatím beze změny pouze tímto způsobem.

Kód: Vybrat vše

#!  /usr/bin/python
#   Title: samsungremote.py
#   Author: Asif Iqbal
#   Date: 05APR2012
#   Info: To send remote control commands to the Samsung tv over LAN
#   TODO:

import socket
import base64
import time, datetime

#
# Variables
#
#IP Address of TV
tvip = "192.168.1.200"
#IP Address of TV
myip = "192.168.1.113"
#Used for the access control/validation, but not after that AFAIK
mymac = "dc-a6-32-15-f9-e1"
#Might need changing to match your TV type
tvappstring = "iphone.UE46ES8000.iapp.samsung"
#What gets reported when it asks for permission
remotename = "Domoticz Samsung Remote"

#What the iPhone app reports (don't change this)
appstring = "iphone..iapp.samsung"

# Function to send keys
def sendKey(skey, dataSock, appstring):
 messagepart3 = chr(0x00) + chr(0x00) + chr(0x00) + chr(len(
base64.b64encode(skey))) + chr(0x00) + base64.b64encode(skey);
 part3 = chr(0x00) + chr(len(appstring)) + chr(0x00) \
+ appstring + chr(len(messagepart3)) + chr(0x00) + messagepart3
 dataSock.send(part3);

# Open Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((tvip, 55000))

# First configure the connection
ipencoded = base64.b64encode(myip)
macencoded = base64.b64encode(mymac)
messagepart1 = chr(0x64) + chr(0x00) + chr(len(ipencoded)) \
+ chr(0x00) + ipencoded + chr(len(macencoded)) + chr(0x00) \
+ macencoded + chr(len(base64.b64encode(remotename))) + chr(0x00) \
+ base64.b64encode(remotename)

part1 = chr(0x00) + chr(len(appstring)) + chr(0x00) + appstring \
+ chr(len(messagepart1)) + chr(0x00) + messagepart1
sock.send(part1)

messagepart2 = chr(0xc8) + chr(0x00)
part2 = chr(0x00) + chr(len(appstring)) + chr(0x00) + appstring \
+ chr(len(messagepart2)) + chr(0x00) + messagepart2
sock.send(part2)

# Now send the keys as you like, e.g.,
sendKey("KEY_POWEROFF",sock,tvappstring)

# Close the socket when done
sock.close()

Pár fotek "z natáčení": https://photos.app.goo.gl/mNLfqaHxyxi9nHfh7 :)

A krátké demo: [youtube]https://www.youtube.com/watch?v=jHuiLkTwmbg[/youtube]

Možná rozšíření: Až se děti naučí používat ovladač bude v programu check, zda televize nebyla zapnuta bez vhození žetonu - vypne se
Modré z nebe na počkání, zázraky do dvou dnů.
Uživatelský avatar
PetrSmetana
Příspěvky: 145
Registrován: pon 22. črc 2019 9:06:45
Bydliště: za humny ČB
Dal poděkování: 19 poděkování
Dostal poděkování: 33 poděkování
Kontaktovat uživatele:

Re: Vaše projekty

Příspěvek od PetrSmetana » čtv 30. dub 2020 14:18:31

Mladej už to heknul ... a bylo tedy nutné přidat "oddalovač" pro senzor přiblížení - https://3dwarehouse.sketchup.com/model/ ... -money-box

+ zkrátit čas cyklu na 0.01s a úměrně tím navýšit čítače :)
Modré z nebe na počkání, zázraky do dvou dnů.
CyberDeath
Příspěvky: 42
Registrován: čtv 30. led 2020 21:36:12
Dal poděkování: 2 poděkování
Dostal poděkování: 2 poděkování

Re: Vaše projekty

Příspěvek od CyberDeath » pát 08. kvě 2020 7:27:33

Multimedia , tv tuner , nas.
Info o stavbe https://forum.zonepi.cz/viewtopic.php?f=32&t=131

Obrázek

Obrázek

Obrázek

A uz mam doma nachystane dve rpi zero , elink display a senzory (pro domaci meteostanici)
Uživatelský avatar
PetrSmetana
Příspěvky: 145
Registrován: pon 22. črc 2019 9:06:45
Bydliště: za humny ČB
Dal poděkování: 19 poděkování
Dostal poděkování: 33 poděkování
Kontaktovat uživatele:

Re: Vaše projekty

Příspěvek od PetrSmetana » pát 08. kvě 2020 21:29:35

Pořídil jsem si do domácnosti pár wifi zásuvek MEROSS, které jsem zakomponoval do naší malinové chytré domácnosti.

Pro implementaci jsem použil knihovnu https://github.com/albertogeniola/MerossIot

Přes systemd mám rozjetou službu s python skriptem níže. Ten si vytvoří named pipe meross.fifo, nalouduje si všechny potřebné knihovny a pak čeká co mu do fifo spadne. Do fifo posílám jednoduché příkazy ve formátu:

echo -n black on > /home/pi/meross.fifo

Skript si najde zařízení dle jména (black) a zařídí se podle akce (on/off).

Kód: Vybrat vše

import os
import time
import errno
from meross_iot.manager import MerossManager

FIFO = 'meross.fifo'

EMAIL ="mail registrace do meross"
PASSWORD ="heslo z registrace do meross"
print("creating meross manager")
manager = MerossManager(meross_email=EMAIL, meross_password=PASSWORD)
print("initialising meross manager")
manager.start()


try:
    os.mkfifo(FIFO)
except OSError as oe:.
    if oe.errno != errno.EEXIST:
        raise

print("Opening FIFO...")
with open(FIFO) as fifo:
    print("FIFO opened")
    while True:
        data = fifo.read()
        time.sleep(1)
        if len(data)!=0:
            parse = data.split()
            if len(parse)!=2:
                manager.stop()
                break
            command = parse[1]
            device = parse[0]
            p = manager.get_device_by_name(device+" lamp")
            if command == "on":
                p.turn_on_channel(0)
            if command == "off":
                p.turn_off_channel(0)
            print('Read: "{0}"'.format(data))

Mám k tomu ještě jednoduchý hlídač kvůli občasným pádům / anomáliím, který spouštím v cronu.

Kód: Vybrat vše

#!/bin/bash

TEST=`journalctl -u meross.service -n 1 --no-pager | grep WARNING | wc -l`

if [ $TEST -eq 1 ]; then
    systemctl restart meross.service
fi
Modré z nebe na počkání, zázraky do dvou dnů.
CyberDeath
Příspěvky: 42
Registrován: čtv 30. led 2020 21:36:12
Dal poděkování: 2 poděkování
Dostal poděkování: 2 poděkování

Re: Vaše projekty

Příspěvek od CyberDeath » úte 02. čer 2020 10:56:21

Banana pi P2 zero s integrovanou 8gb emmc a malou antenou (zelena desticka v pozadi).
Bude sloužit jako PiHole a protože nevim jestli si ji pripoji pres kabel bo bezdratove tak tam je oboje.
Konfigurace pres Cockpit.
Jo a pro bezpecny beh v plastove krabicce ted jede max na 800mhz ale asi snizim na 600 (puvodni 1.2ghz)

Obrázek
Odpovědět