Linux software RAID 1
Kategoriarkiv: Okategoriserade
Healthchecks.io
Healtcheck.io kan användas för att kontrollera olika processer. Jag använder det för att kontrollera att homassistant är igång. Får notis om homeassistant inte skickat en check med förbestämt intervall. Notiser kan skickas via sms, whatsapp, signal etc.
tmux
Används för att skapa en terminalmultiplexer med möjlighet att ha flera sessioner igång samtidigt och som körs i bakgrunden. Du kan sedan koppla upp dig mot en session som körs i bakgrunden via terminalen.
Stara en ny session med sifferidentifikator:
$ tmux
eller med sessionsnamn:
$ tmux new -s session_name
Återanslut
Lista aktiva sessioner
$ tmux ls
Återanslut:
tmux attach-session -t 0
Kommandon:
Ctrl+b d -Koppla lös från session
Ctrl+bcCreate a new window (with shell)Ctrl+bwChoose window from a listCtrl+b0Switch to window 0 (by number )Ctrl+b,Rename the current windowCtrl+b%Split current pane horizontally into two panesCtrl+b"Split current pane vertically into two panesCtrl+boGo to the next paneCtrl+b;Toggle between the current and previous paneCtrl+bxClose the current pane
EspHome
Idag använder jag Home Assistant för hemautomationer. En av de automationer som är mest andvändbar just nu är forserad ventilation via fuktsensorer i våtutrymmen.
Initialt skrev jag ett program till en ESP8266 som via MQTT interagerade med Home Assistant. Problemet var dock att SSID och lösenord till Wifi var hårdkodat i ESP:n. När routern startades om tappade ESP:n kontakten och ville inte automatiskt koppla upp igen, utan jag var tvungen att bryta strömmen till den.
För att underlätta testade jag Tasmota som kunde köra via MQTT. Det är lätt att Flasha firmware via programmet Tazmotizer.
Nyligen snubblade jag över HomeEsp som interagerar direkt med Homeassistant. Det går då också att konfigurea om och ladda upp en ny firmware via wifi. Den skapar dessutom en rescue SSID om det är så att den tappar kontakten med wifi.
För att komma igång krävs att esphome-firmware laddas upp till enheten. Detta kan göras via webverktyget esphome dashboard. Webgränssnittet kan inte laddas i en annan sida ”embedded” utan måste köras direkt i webläsarens primära fönster eftersom den kommer att söka kontakt med serialinterfacet via usb. För att kommandon skall kunna köras behövs direkt kontakt. Skriv in serverns ip:6052
För mitt senaste nyförvärv S2-mini (ett esp 32 kort) finns dock en bugg som gör att webinterfacet klarar att koppla upp. Istället har jag använt adafruits esp tool: Adafruit ESPTool
Ta sig förbi lösenordsskydd Excel macro
Written by Mathieu Guindon
found on
https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project
You can try this direct VBA approach which doesn’t require HEX editing. It will work for any files (*.xls, *.xlsm, *.xlam …).
Tested and works on
Excel 2007
Excel 2010
Excel 2013 – 32 bit version.
Excel 2016 – 32 bit version.
Looking for 64 bit version? See https://stackoverflow.com/a/31005696/4342479
how it works
I will try my best to explain how it works – please excuse my english.
- The VBE will call a system function to create the password dialog box.
- If user enters the right password and click OK, this function returns 1. If user enters the wrong password or click Cancel, this function returns 0.
- After the dialog box is closed, the VBE checks the returned value of the system function
- if this value is 1, the VBE will ”think” that the password is right, hence the locked VBA project will be opened.
- The code below swaps the memory of the original function used to display the password dialog with a user defined function that will always return 1 when being called.
using the code
- Open the file(s) that contain your locked VBA Projects
- Create a new xlsm file and store this code in Module1
code credited to Siwtom (nick name), a Vietnamese developerOption Explicit Private Const PAGE_EXECUTE_READWRITE = &H40 Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As Long, Source As Long, ByVal Length As Long) Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Long, _ ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long Private Declare Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As Long Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _ ByVal lpProcName As String) As Long Private Declare Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As Long, _ ByVal pTemplateName As Long, ByVal hWndParent As Long, _ ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer Dim HookBytes(0 To 5) As Byte Dim OriginBytes(0 To 5) As Byte Dim pFunc As Long Dim Flag As Boolean Private Function GetPtr(ByVal Value As Long) As Long GetPtr = Value End Function Public Sub RecoverBytes() If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6 End Sub Public Function Hook() As Boolean Dim TmpBytes(0 To 5) As Byte Dim p As Long Dim OriginProtect As Long Hook = False pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA") If VirtualProtect(ByVal pFunc, 6, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6 If TmpBytes(0) <> &H68 Then MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6 p = GetPtr(AddressOf MyDialogBoxParam) HookBytes(0) = &H68 MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4 HookBytes(5) = &HC3 MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6 Flag = True Hook = True End If End If End Function Private Function MyDialogBoxParam(ByVal hInstance As Long, _ ByVal pTemplateName As Long, ByVal hWndParent As Long, _ ByVal lpDialogFunc As Long, ByVal dwInitParam As Long) As Integer If pTemplateName = 4070 Then MyDialogBoxParam = 1 Else RecoverBytes MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _ hWndParent, lpDialogFunc, dwInitParam) Hook End If End Function - Paste this code in Module2 and run it
Sub unprotected() If Hook Then MsgBox "VBA Project is unprotected!", vbInformation, "*****" End If End Sub - Come back to your VBA Projects and enjoy.
ESP8266 wifi-adapter flash
För att flasha firmware till ESP8266 måste den först kopplas upp mot ex en USB-Uart. RX-TR, TR-RX, GND-GND, 3,3v till spänningskälla (arduino är för klen), samt RST till 3,3v.
Denna uppkoppling sätter ESP8266 i körläge. För att flasha ny firmware måste GPIO0 kopplas till GND och enheten startas om. Då försätts den i programmeringsläge.
För att flasha en .bin-fil eller firmware som kör AT-kommandon använde jag esptools som jag laddade hem från: https://github.com/espressif/esptool. Jag följde sedan README filen för att installera detta. Gjorde alla .py-filer körbara genom ”sudo chmod +x *.py”. Därefter flashade jag enheten med
”./esptool.py –port /dev/ttyUSB1 write_flash 0x00000 Firmware.bin”
Kolla först vilken port som USB-Uart är kopplad till och byt ut det mot lämplig port.
För att flasha en egen firmware via Arduini-IDE följ denna guid som borde fungera bra:
http://www.whatimade.today/esp8266-easiest-way-to-program-so-far/
Översättningsutrustning #4
För att få till SSL tillsammans med Icecast följ stengen nedan:
https://jksinton.com/articles/rpi-compiling-icecast-support-openssl
Jag lyckades dock inte med att duplicera .git då configure-filen inte fanns. Laddade istället ner den från icecast hemsida och packade upp med tar -xvf…
Översättningsserver #2
Prövar mig fram på en raspberry pi med Rasbian installerat
- Installerar Apache2. Lägger inte till något ytterligare webservermässigt, då detta inte kommer att behövas
- Installarad dnsmasq som dns-tjänst
I konfigurationsfilen /etc/dnsmasq.conf letar jag upp ”address” och lägger till ”address=/#/192.168.42.27 #IP-numret jag använder. Startar sedan om dns-servern med ”sudo service dnsmasq restart”. Nu pekar DNS-servern på 192.168.42.27 vid alla förfrågningar.
Översättningsserver #3
Efter att DNS:en på routern pekar på IceCast-servern önskar jag att byta port från 8000 till 80 för att den skall kunna komma upp som standardsida i webläsaren:
Icecast körs som standard med:
user: icecast2
group: icecast
Denna användare har inte rättighet att öppna port 80. Ice-Cast måste således köras med Root-privilegier.
Detta kan göras genom att ändra
/etc/default/icecast2 och ända user/group till root
Samt:
/etc/icecast2/icecast.xml och avkommentera <changeowner> och sätta user/group till icecast2/icecast.
Projekt översättningsserver #1
Förutsättningar:
Vi har en kyrklokal med flertalet medlemmar som inte talar svenska. Vi har en befintlig översättningsutrustning med ett antal IR-lurar. Problemet är att dessa måste laddas och underhållas, samt att det är ett begränsat antal.
För att komma runt problemet planerar jag att sätta upp en server med lokal ”internetradio” där man kan koppla upp sig mot rätt kanal och således lyssna på sitt språk.
Fördelarna är:
- Alla med en mobiltelefon och hörlurar kan lyssna.
- Man ser själv till att mobilen är laddad och fungerar
- Flera språk kan sändas simultant
- Antalet lyssnare är inte begränsat på samma sätt
Nakdelarna är:
- Krävs att man vet hur man skall hitta strömmen
- Eftersom systemet måste buffra kommer det att finnas en delay i systemet
Lösning
- Linuxserver med Ubuntuserver installerad
- Apache2 webserver där vi lägger ut tillgängliga språk med länkar till
- En egen trådlös router utan internettillgång som alla kan koppla upp sig mot.
- dnsmasq som dns-server som routern är kopplad till. Detta ger en catch-all som alltid pekar på översättningsservern oavsett vad du skriver in i adressfältet
- Icecast som webradioprogra
- Ex CoolMic för att sända (android)