Continuando con el tema de control domótico con Raspberry Pi, el enchufe domótico lo he preparado para encender un electrodoméstico con mi móvil mientras voy a casa para que se vaya calentando y cuando yo llego ya esté listo para usar, pero claro, era un poco incómodo tener que estar con el móvil iniciando sesión y navegando a nuestra página de control domótico, por lo que necesitaba algo más rápido y cómodo.
Archivo de la categoría: Programación
Apagar Raspberry Pi con PHP y WordPress
Continuando con el tema del control domótico con una Raspberry Pi y Worpress, he tenido la necesidad de poder apagar la Raspberry Pi también con WordPress ya que si en un momento dado, por ejemplo, usas este enchufe domótico para conectar algún tipo de electrodoméstico, cuando hayas terminado de usarlo puedes apagarlo pero se te quedaría la Raspberry Pi encendida y no es bueno estar desenchufandola mientras que está encendida para no correr el riesgo de que se corrompan los ficheros.
Control domótico con Raspberry Pi
Tras el proyecto de control domótico con Arduino ha pasado un tiempo, y ahora me gustaría hacerlo más seguro y más bonito. En este punto las capacidades de Arduino me fallan un poco y es por lo que me he decidido migrar el proyecto a Raspberry Pi, para lo que voy a utilizar WordPress para todo el interfaz y gestión de usuarios, de esta forma se facilita la gestión de acceso a encender y apagar el relé.
Control domótico con Arduino
Muy buenas! Hoy vamos a ver cómo podemos realizar un pequeño y sencillo proyecto de control domótico con el Arduino, en primer lugar vamos a ver los componentes necesarios para el tutorial:
- Placa Arduino Uno Rev 3.
- Shield Ethernet.
- Placa de Relé de 250V 10A.
- Kit de PLC (Opcional, eso nos permite que no se vean los cables de red en el shield de Ethernet).
- Terminación de conector a red eléctrica.
- Cables varios.
Sharepoint 2010 – Excepción (String was not recognized as a valid DateTime) al agregar una nueva versión en un DocumentSet
Si estas trabajando sobre Sharepoint 2010 y obtienes un bonito error (String was not recognized as a valid DateTime) al intentar, programaticamente, agregar una nueva versión con un código parecido a este:
DocumentSet.VersionCollection.Add(true, "");
Entonces es que has sido víctima de una actualización de DLL (Microsoft.Office.documentmanagement.dll) de Microsoft, concretamente a partir de la CU de Agosto 2012 el multi-idioma ya no funciona y no se pueden crear versiones de los DocumentSet.
El contexto expiró y ya no se puede usar. (Excepción de HRESULT: 0x80090317)
Recientemente me he encontrado en mi día a día que tenia que desarrollar un proyecto de datos muy costoso y largo. En principio Sharepoint 2010 lo trataba bien, iba lento pero funcionaba de manera estable. El problema después de 1 día de procesamiento de datos que apareció en el log el evento que aparece en el título de este post «El contexto expiró y ya no se puede usar. (Excepción de HRESULT: 0x80090317)». ¿Que hacer? ¿no podría realizar correctamente mi proceso? ¿tendria que abandonar para siempre la programación en Sharepont? jeje, claro que no.
Volver a registrar asp.net si se ha instalado después que IIS
Si en tu equipo de desarrollo o producción te ha sucedido que antes de instalar el IIS instalaste el framework de .net (algo muy común en equipos de desarrollo, la verdad) tienes que volver a registrar el framework para que tu IIS pueda volver a hacer uso de ella.
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis.exe -I C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319>aspnet_regiis.exe -I
Los ejemplos que se han a mostrado solo incluyen el framework x86 pero si tu equipo dispone de la versión x64 además de la x86 también tendrás que hacer lo mismo pero buscando la ubicación de la versión x64.
C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727>aspnet_regiis.exe -I C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis.exe -I
Como obtener el nombre del dominio de NetBios de un equipo en .NET
Para poder obtener información de netbios nos vamos a tener que meter en código de bastante bajo nivel por lo que para poder usarlo en .NET vamos a recurrir a las pinvoke
using System.Runtime.InteropServices; using System.ComponentModel; public class NetUtil { [DllImport("netapi32.dll", CharSet = CharSet.Auto)] static extern int NetWkstaGetInfo(string server, int level, out IntPtr info); [DllImport("netapi32.dll")] static extern int NetApiBufferFree(IntPtr pBuf); [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] class WKSTA_INFO_100 { public int wki100_platform_id; [MarshalAs(UnmanagedType.LPWStr)] public string wki100_computername; [MarshalAs(UnmanagedType.LPWStr)] public string wki100_langroup; public int wki100_ver_major; public int wki100_ver_minor; } public static string GetMachineNetBiosDomain() { IntPtr pBuffer = IntPtr.Zero; WKSTA_INFO_100 info; int retval = NetWkstaGetInfo(null, 100, out pBuffer); if (retval != 0) throw new Win32Exception(retval); info = (WKSTA_INFO_100)Marshal.PtrToStructure(pBuffer, typeof(WKSTA_INFO_100)); string domainName = info.wki100_langroup; NetApiBufferFree(pBuffer); return domainName; } }
Tras colocar el código anterior en una clase de nuestro proyecto ya podremos obtener el dominio usando:
NetUtil.GetMachineNetBiosDomain()
Como cambiar o borrar una columna marcada como «sealed» en sharepoint
Si tienes en tu Sharepoint una columna marcada como «sealed» veras que no puedes ni borrarla ni cambiarla (ni por código ni en modo visual).
Para lograr nuestro objetivo recurriremos a PowerShell. Por que en nuestra consola de «Windows PowerShell ISE» vamos a escribir los siguientes comandos:
if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null ) { Add-PSSnapin Microsoft.SharePoint.Powershell } function RemoveSealedFlag([string]$siteUrl, [string]$columnGuid) { $site = Get-SPSite $siteUrl $web = $site.RootWeb $wfield = $web.Fields[[System.Guid]$columnGuid] $wfield.Sealed = $false $wfield.Update() $web.Update() }
Ahora bastara con llamar al método RemoveSealedFlag para desmarcar la propiedad y de esta forma ya poder borrarlo o editarlo.
Obtener el hostname y el dominio en .NET
Obtener el hostname y el dominio usando el lenguaje .NET y más concretamente C# es sencillo, no requiere de funciones complejas ni nada por el estilo.
Obtener el hostname:
El hostname se puede obtener con tan solo una linea, «System.Environment.MachineName» nos devolverá el nombre de la máquina donde se ejecuta.
Obtener el dominio o el grupo de trabajo:
Antes de nada debemos comprobar que nuestro proyecto tiene agregadas las referencias a System.Management, en caso negativo tenemos que agregarlas. Una vez que ya tengamos las referencias bien metidas hacemos lo siguiente:
System.Management.SelectQuery query = new System.Management.SelectQuery("Win32_ComputerSystem"); System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(query); foreach (System.Management.ManagementObject mo in searcher.Get()) { string Dominio = mo["domain"] as string; }
En la variable Dominio ya tendremos guardado el valor que actualmente tenga la máquina donde se ejecuta.